Adds backend validation on Dataset finalization. (Issue #131)
This commit is contained in:
parent
df50a4ee60
commit
281080e8e2
|
@ -41,11 +41,19 @@ import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
import javax.activation.MimetypesFileTypeMap;
|
import javax.activation.MimetypesFileTypeMap;
|
||||||
import javax.xml.bind.JAXBContext;
|
import javax.xml.bind.JAXBContext;
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
import javax.xml.bind.Unmarshaller;
|
import javax.xml.bind.Unmarshaller;
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.xpath.XPath;
|
||||||
|
import javax.xml.xpath.XPathConstants;
|
||||||
|
import javax.xml.xpath.XPathFactory;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
@ -322,6 +330,8 @@ public class DatasetManager {
|
||||||
eu.eudat.data.entities.Dataset dataset = datasetWizardModel.toDataModel();
|
eu.eudat.data.entities.Dataset dataset = datasetWizardModel.toDataModel();
|
||||||
dataset.setDmp(dmp);
|
dataset.setDmp(dmp);
|
||||||
propertiesModelToString(datasetWizardModel, dataset);
|
propertiesModelToString(datasetWizardModel, dataset);
|
||||||
|
if (datasetWizardModel.getStatus() == (int) Dataset.Status.FINALISED.getValue())
|
||||||
|
checkDatasetValidation(dataset);
|
||||||
UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build();
|
UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build();
|
||||||
dataset.setCreator(userInfo);
|
dataset.setCreator(userInfo);
|
||||||
updateTags(apiContext.getOperationsContext().getDatasetRepository(), datasetWizardModel);
|
updateTags(apiContext.getOperationsContext().getDatasetRepository(), datasetWizardModel);
|
||||||
|
@ -332,6 +342,30 @@ public class DatasetManager {
|
||||||
return apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(dataset);
|
return apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(dataset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkDatasetValidation(Dataset dataset) throws Exception {
|
||||||
|
List<String> datasetProfileValidators = new LinkedList<>();
|
||||||
|
DatasetProfile profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(dataset.getProfile().getId());
|
||||||
|
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
|
||||||
|
DocumentBuilder builder = builderFactory.newDocumentBuilder();
|
||||||
|
Document xmlDocument = builder.parse(new ByteArrayInputStream(profile.getDefinition().getBytes()));
|
||||||
|
|
||||||
|
XPath xPath = XPathFactory.newInstance().newXPath();
|
||||||
|
String expression = "//validation/@type[.=1]/ancestor::field/@id";
|
||||||
|
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
|
||||||
|
|
||||||
|
for (int i = 0; i < nodeList.getLength(); i++) {
|
||||||
|
Node node = nodeList.item(i);
|
||||||
|
datasetProfileValidators.add(node.getNodeValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject obj = new JSONObject(dataset.getProperties());
|
||||||
|
for (String validator : datasetProfileValidators) {
|
||||||
|
if (obj.getString(validator) == null || obj.getString(validator).trim().isEmpty()) {
|
||||||
|
throw new Exception("Field value of " + validator + " must be filled.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void propertiesModelToString(DatasetWizardModel datasetWizardModel, eu.eudat.data.entities.Dataset dataset) {
|
private void propertiesModelToString(DatasetWizardModel datasetWizardModel, eu.eudat.data.entities.Dataset dataset) {
|
||||||
Map<String, Object> values = new HashMap();
|
Map<String, Object> values = new HashMap();
|
||||||
PagedDatasetProfile properties = datasetWizardModel.getDatasetProfileDefinition();
|
PagedDatasetProfile properties = datasetWizardModel.getDatasetProfileDefinition();
|
||||||
|
|
Loading…
Reference in New Issue