101 lines
5.3 KiB
Java
101 lines
5.3 KiB
Java
package eu.eudat.models.rda.mapper;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import eu.eudat.logic.managers.DatasetManager;
|
|
import eu.eudat.logic.utilities.json.JsonSearcher;
|
|
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
|
import eu.eudat.models.rda.Dataset;
|
|
import org.json.JSONObject;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import javax.transaction.Transactional;
|
|
import java.util.ArrayList;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Component
|
|
public class DatasetRDAMapper {
|
|
private static final Logger logger = LoggerFactory.getLogger(DatasetRDAMapper.class);
|
|
|
|
private DatasetManager datasetManager;
|
|
|
|
@Autowired
|
|
public DatasetRDAMapper(DatasetManager datasetManager) {
|
|
this.datasetManager = datasetManager;
|
|
}
|
|
|
|
@Transactional
|
|
public Dataset toRDA(eu.eudat.data.entities.Dataset dataset) {
|
|
Dataset rda = new Dataset();
|
|
rda.setDatasetId(DatasetIdRDAMapper.toRDA(dataset.getId()));
|
|
rda.setTitle(dataset.getLabel());
|
|
rda.setDescription(dataset.getDescription());
|
|
try {
|
|
|
|
DatasetWizardModel datasetWizardModel = new DatasetWizardModel().fromDataModel(dataset);
|
|
datasetWizardModel.setDatasetProfileDefinition(datasetManager.getPagedProfile(datasetWizardModel, dataset));
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
JsonNode properties = mapper.readTree(dataset.getProperties());
|
|
String datasetDescriptionJson = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition());
|
|
JsonNode datasetDescriptionObj = mapper.readTree(datasetDescriptionJson);
|
|
List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type");
|
|
if (!typeNodes.isEmpty()) {
|
|
rda.setType(properties.get(typeNodes.get(0).get("id").asText()).asText());
|
|
}
|
|
List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language");
|
|
if (!languageNodes.isEmpty()) {
|
|
rda.setLanguage(Dataset.Language.fromValue(properties.get(languageNodes.get(0).get("id").asText()).asText()));
|
|
}
|
|
List<JsonNode> metadataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.metadata");
|
|
if (!metadataNodes.isEmpty()) {
|
|
rda.setMetadata(metadataNodes.stream().map(node -> MetadataRDAMapper.toRDA(node, properties)).collect(Collectors.toList()));
|
|
}
|
|
List<JsonNode> qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.data_quality_assurance");
|
|
if (!qaNodes.isEmpty()) {
|
|
rda.setDataQualityAssurance(qaNodes.stream().map(qaNode -> properties.get(qaNode.get("id").asText()).asText()).collect(Collectors.toList()));
|
|
}
|
|
List<JsonNode> preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.preservation_statement");
|
|
if (!preservationNodes.isEmpty()) {
|
|
rda.setDataQualityAssurance(preservationNodes.stream().map(preservationNode -> properties.get(preservationNode.get("id").asText()).asText()).collect(Collectors.toList()));
|
|
}
|
|
List<JsonNode> distributionNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.distribution");
|
|
if (!distributionNodes.isEmpty()) {
|
|
rda.setDistribution(distributionNodes.stream().map(distributionNode -> DistributionRDAMapper.toRDA(distributionNode, properties)).collect(Collectors.toList()));
|
|
}
|
|
List<JsonNode> keywordNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.keyword");
|
|
if (!keywordNodes.isEmpty()) {
|
|
rda.setKeyword(keywordNodes.stream().map(keywordNode -> properties.get(keywordNode.get("id").asText()).asText()).collect(Collectors.toList()));
|
|
}
|
|
List<JsonNode> personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.personal_data");
|
|
if (!personalDataNodes.isEmpty()) {
|
|
rda.setPersonalData(personalDataNodes.stream().map(personalDataNode -> Dataset.PersonalData.fromValue(properties.get(personalDataNode.get("id").asText()).asText())).findFirst().get());
|
|
}
|
|
List<JsonNode> securityAndPrivacyNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.security_and_privacy");
|
|
if (!securityAndPrivacyNodes.isEmpty()) {
|
|
rda.setSecurityAndPrivacy(securityAndPrivacyNodes.stream().map(securityAndPrivacyNode -> SecurityAndPrivacyRDAMapper.toRDA(securityAndPrivacyNode, properties)).collect(Collectors.toList()));
|
|
}
|
|
List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data");
|
|
if (!sensitiveDataNodes.isEmpty()) {
|
|
rda.setSensitiveData(securityAndPrivacyNodes.stream().map(sensitiveDataNode -> Dataset.SensitiveData.fromValue(properties.get(sensitiveDataNode.get("id").asText()).asText())).findFirst().get());
|
|
}
|
|
List<JsonNode> technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.technical_resource");
|
|
if (!technicalResourceNodes.isEmpty()) {
|
|
rda.setTechnicalResource(technicalResourceNodes.stream().map(technicalResourceNode -> TechnicalResourceRDAMapper.toRDA(technicalResourceNode, properties)).collect(Collectors.toList()));
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
|
|
|
|
return rda;
|
|
}
|
|
}
|