update commons
This commit is contained in:
parent
5242120aea
commit
729d3f9d56
|
@ -15,55 +15,50 @@ import java.util.stream.Collectors;
|
|||
public class CostRDAMapper{
|
||||
private static final Logger logger = LoggerFactory.getLogger(DatasetRDAMapper.class);
|
||||
|
||||
public List<Cost> toRDA(List<FieldModel> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields ) {
|
||||
public List<Cost> toRDA(Map<String, List<FieldModel>> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields ) {
|
||||
if (nodes == null) return null;
|
||||
if (valueFields == null) throw new IllegalArgumentException("valueFields is missing");
|
||||
|
||||
Map<String, Cost> rdaMap = new HashMap<>();
|
||||
for(FieldModel node: nodes){
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dmp.cost")).findFirst().orElse("");
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x-> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if(rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()){
|
||||
continue;
|
||||
}
|
||||
String key = node.getNumbering();
|
||||
for(Map.Entry<String, List<FieldModel>> entry: nodes.entrySet()){
|
||||
for(FieldModel node: entry.getValue()) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dmp.cost")).findFirst().orElse("");
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x -> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if (rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()) {
|
||||
continue;
|
||||
}
|
||||
String key = entry.getKey();
|
||||
|
||||
if(!key.contains("mult")){
|
||||
key = "0";
|
||||
}
|
||||
else{
|
||||
key = "" + key.charAt(4);
|
||||
}
|
||||
Cost rda;
|
||||
if(rdaMap.containsKey(key)){
|
||||
rda = rdaMap.get(key);
|
||||
}
|
||||
else{
|
||||
rda = new Cost();
|
||||
rdaMap.put(key, rda);
|
||||
}
|
||||
if(rdaProperty.contains("value")){
|
||||
try {
|
||||
rda.setValue(Double.valueOf(rdaValue.getTextValue()));
|
||||
if (!key.contains("mult")) {
|
||||
key = "0";
|
||||
} else {
|
||||
key = "" + key.charAt(4);
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
logger.warn("Dmp cost value " + rdaValue + " is not valid. Cost value will not be set.");
|
||||
Cost rda;
|
||||
if (rdaMap.containsKey(key)) {
|
||||
rda = rdaMap.get(key);
|
||||
} else {
|
||||
rda = new Cost();
|
||||
rdaMap.put(key, rda);
|
||||
}
|
||||
}
|
||||
else if(rdaProperty.contains("currency_code")){
|
||||
try {
|
||||
if (rdaProperty.contains("value")) {
|
||||
try {
|
||||
rda.setValue(Double.valueOf(rdaValue.getTextValue()));
|
||||
} catch (NumberFormatException e) {
|
||||
logger.warn("Dmp cost value " + rdaValue + " is not valid. Cost value will not be set.");
|
||||
}
|
||||
} else if (rdaProperty.contains("currency_code")) {
|
||||
try {
|
||||
// HashMap<String, String> result =
|
||||
// new ObjectMapper().readValue(rdaValue, HashMap.class);
|
||||
// rda.setCurrencyCode(Cost.CurrencyCode.fromValue(result.get("value")));
|
||||
rda.setCurrencyCode(Cost.CurrencyCode.fromValue(rdaValue.getTextValue())); //TODO
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.warn("Dmp cost currency code is not valid and will not be set.");
|
||||
}
|
||||
}
|
||||
else if(rdaProperty.contains("title")){
|
||||
rda.setTitle(rdaValue.getTextValue());
|
||||
|
||||
rda.setCurrencyCode(Cost.CurrencyCode.fromValue(rdaValue.getTextValue())); //TODO
|
||||
} catch (Exception e) {
|
||||
logger.warn("Dmp cost currency code is not valid and will not be set.");
|
||||
}
|
||||
} else if (rdaProperty.contains("title")) {
|
||||
rda.setTitle(rdaValue.getTextValue());
|
||||
|
||||
// Iterator<JsonNode> iter = mapper.readTree(rdaValue).elements(); //TODO
|
||||
// StringBuilder title = new StringBuilder();
|
||||
// while(iter.hasNext()){
|
||||
|
@ -84,9 +79,9 @@ public class CostRDAMapper{
|
|||
// rda.setTitle(t + ", " + rdaValue);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
else if(rdaProperty.contains("description")){
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
} else if (rdaProperty.contains("description")) {
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
List<Cost> rdaList = rdaMap.values().stream()
|
||||
|
|
|
@ -14,34 +14,35 @@ public class DatasetIdRDAMapper{
|
|||
private static final Logger logger = LoggerFactory.getLogger(DatasetIdRDAMapper.class);
|
||||
|
||||
|
||||
public DatasetId toRDA(List<FieldModel> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields) {
|
||||
public DatasetId toRDA(Map<String, List<FieldModel>> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields) {
|
||||
if (nodes == null) return null;
|
||||
if (valueFields == null) throw new IllegalArgumentException("valueFields is missing");
|
||||
|
||||
DatasetId data = new DatasetId();
|
||||
for (FieldModel node: nodes) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.dataset_id")).findFirst().orElse("");
|
||||
if (node.getData() == null) {
|
||||
continue;
|
||||
for (Map.Entry<String, List<FieldModel>> entry: nodes.entrySet()) {
|
||||
for (FieldModel node: entry.getValue()) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.dataset_id")).findFirst().orElse("");
|
||||
if (node.getData() == null) {
|
||||
continue;
|
||||
}
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x -> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if (rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()) {
|
||||
continue;
|
||||
}
|
||||
finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
||||
// try { //TODO
|
||||
// Map<String, Object> values = mapper.readValue(rdaValue, HashMap.class); //TODO
|
||||
// if (!values.isEmpty()) {
|
||||
// values.entrySet().forEach(entry -> finalRDAMap(data, entry.getKey(), (String) entry.getValue()));
|
||||
// } else {
|
||||
// finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
||||
// }
|
||||
// } catch (IOException e) {
|
||||
// logger.warn(e.getMessage() + ".Passing value as is");
|
||||
// finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
||||
//
|
||||
// }
|
||||
}
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x-> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if(rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()){
|
||||
continue;
|
||||
}
|
||||
finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
||||
// try { //TODO
|
||||
// Map<String, Object> values = mapper.readValue(rdaValue, HashMap.class); //TODO
|
||||
// if (!values.isEmpty()) {
|
||||
// values.entrySet().forEach(entry -> finalRDAMap(data, entry.getKey(), (String) entry.getValue()));
|
||||
// } else {
|
||||
// finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
||||
// }
|
||||
// } catch (IOException e) {
|
||||
// logger.warn(e.getMessage() + ".Passing value as is");
|
||||
// finalRDAMap(data, rdaProperty, rdaValue.getTextValue());
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
if (data.getIdentifier() != null && data.getType() != null) {
|
||||
|
|
|
@ -92,39 +92,42 @@ public class DatasetRDAMapper {
|
|||
//Map<String, Object> templateIdsToValues = this.createFieldIdValueMap(descriptionEntity.getDescriptionTemplate());
|
||||
//rda.setAdditionalProperty("template", descriptionEntity.getDescriptionTemplate()); //TODO
|
||||
try {
|
||||
List<FieldModel> idNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.dataset_id");
|
||||
Map<String, List<FieldModel>> idNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.dataset_id");
|
||||
if (!idNodes.isEmpty()) {
|
||||
rda.setDatasetId(datasetIdRDAMapper.toRDA(idNodes, this.getAllValueFields(descriptionEntity.getProperties())));
|
||||
}
|
||||
if (rda.getDatasetId() == null) {
|
||||
rda.setDatasetId(new DatasetId(descriptionEntity.getId().toString(), DatasetId.Type.OTHER));
|
||||
}
|
||||
|
||||
List<FieldModel> typeNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.type");
|
||||
for (FieldModel typeNode : typeNodes){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(typeNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setType(fieldValues.stream().filter(x-> x.getTextValue() != null && x.getTextValue().isBlank()).map(org.opencdmp.commonmodels.models.description.FieldModel::getTextValue).findFirst().orElse(null));
|
||||
if (rda.getType() != null && !rda.getType().isBlank()) break;;
|
||||
|
||||
Map<String, List<FieldModel>> typeNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.type");
|
||||
for (Map.Entry<String, List<FieldModel>> entry : typeNodes.entrySet()){
|
||||
for (FieldModel typeNode : entry.getValue()) {
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(typeNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setType(fieldValues.stream().filter(x -> x.getTextValue() != null && x.getTextValue().isBlank()).map(org.opencdmp.commonmodels.models.description.FieldModel::getTextValue).findFirst().orElse(null));
|
||||
if (rda.getType() != null && !rda.getType().isBlank()) break;
|
||||
}
|
||||
}
|
||||
if (rda.getType() == null || rda.getType().isBlank()) rda.setType("DMP Dataset");
|
||||
|
||||
|
||||
|
||||
List<FieldModel> languageNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.language");
|
||||
for (FieldModel languageNode : languageNodes){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(languageNode, descriptionEntity.getProperties());
|
||||
try {
|
||||
if (!fieldValues.isEmpty()) rda.setLanguage(fieldValues.stream().filter(x -> x.getTextValue() != null && x.getTextValue().isBlank()).map(x -> Language.fromValue(x.getTextValue())).findFirst().orElse(null));
|
||||
|
||||
|
||||
|
||||
Map<String, List<FieldModel>> languageNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.language");
|
||||
for (Map.Entry<String, List<FieldModel>> entry : languageNodes.entrySet()){
|
||||
for (FieldModel languageNode : entry.getValue()) {
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(languageNode, descriptionEntity.getProperties());
|
||||
try {
|
||||
if (!fieldValues.isEmpty()) rda.setLanguage(fieldValues.stream().filter(x -> x.getTextValue() != null && x.getTextValue().isBlank()).map(x -> Language.fromValue(x.getTextValue())).findFirst().orElse(null));
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn("Language from semantic rda.dataset.language was not found.");
|
||||
}
|
||||
if (rda.getLanguage() != null) break;
|
||||
}
|
||||
catch (IllegalArgumentException e){
|
||||
logger.warn("Language from semantic rda.dataset.language was not found.");
|
||||
}
|
||||
if (rda.getLanguage() != null) break;;
|
||||
}
|
||||
if (rda.getLanguage() == null) rda.setLanguage(languageRDAMapper.toRDA(descriptionEntity.getDescriptionTemplate().getLanguage()));
|
||||
|
||||
|
||||
List<FieldModel> metadataNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.metadata");
|
||||
|
||||
|
||||
Map<String, List<FieldModel>> metadataNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.metadata");
|
||||
if (!metadataNodes.isEmpty()) {
|
||||
Map<String, Object> valueFieldsMap = new HashMap<>();
|
||||
valueFieldsMap.put("valueFields", this.getAllValueFields(descriptionEntity.getProperties()));
|
||||
|
@ -173,15 +176,17 @@ public class DatasetRDAMapper {
|
|||
// }
|
||||
|
||||
|
||||
List<FieldModel> preservationNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.preservation_statement");
|
||||
for (FieldModel preservationNode : preservationNodes){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(preservationNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setPreservationStatement(fieldValues.stream().filter(x-> x.getTextValue() != null && x.getTextValue().isBlank()).map(org.opencdmp.commonmodels.models.description.FieldModel::getTextValue).findFirst().orElse(null));
|
||||
if (rda.getPreservationStatement() != null && !rda.getPreservationStatement().isBlank()) break;;
|
||||
Map<String, List<FieldModel>> preservationNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.preservation_statement");
|
||||
for (Map.Entry<String, List<FieldModel>> entry : preservationNodes.entrySet()){
|
||||
for (FieldModel preservationNode : entry.getValue()){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(preservationNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setPreservationStatement(fieldValues.stream().filter(x-> x.getTextValue() != null && x.getTextValue().isBlank()).map(org.opencdmp.commonmodels.models.description.FieldModel::getTextValue).findFirst().orElse(null));
|
||||
if (rda.getPreservationStatement() != null && !rda.getPreservationStatement().isBlank()) break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
List<FieldModel> distributionNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.distribution");
|
||||
|
||||
Map<String, List<FieldModel>> distributionNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.distribution");
|
||||
if (!distributionNodes.isEmpty()) {
|
||||
rda.setDistribution(distributionRDAMapper.toRDA(distributionNodes, this.getAllValueFields(descriptionEntity.getProperties())));
|
||||
}else{
|
||||
|
@ -189,17 +194,19 @@ public class DatasetRDAMapper {
|
|||
}
|
||||
|
||||
|
||||
List<FieldModel> keywordNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.keyword");
|
||||
for (FieldModel keywordNode : keywordNodes){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(keywordNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) {
|
||||
rda.setKeyword(fieldValues.stream().filter(x -> (x.getTextValue() != null && x.getTextValue().isBlank()) || (x.getTextListValue() != null && !x.getTextListValue().isEmpty())).map(x -> {
|
||||
if (x.getTextListValue() != null && !x.getTextListValue().isEmpty()) {
|
||||
return x.getTextListValue().stream().map(node -> keywordRDAMapper.toRDA(node)).collect(Collectors.toList());
|
||||
} else {
|
||||
return List.of(keywordRDAMapper.toRDA(x.getTextValue()));
|
||||
}
|
||||
}).filter(Objects::nonNull).flatMap(Collection::stream).collect(Collectors.toList()));
|
||||
Map<String, List<FieldModel>> keywordNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.keyword");
|
||||
for (Map.Entry<String, List<FieldModel>> entry : keywordNodes.entrySet()) {
|
||||
for (FieldModel keywordNode : entry.getValue()) {
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(keywordNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) {
|
||||
rda.setKeyword(fieldValues.stream().filter(x -> (x.getTextValue() != null && x.getTextValue().isBlank()) || (x.getTextListValue() != null && !x.getTextListValue().isEmpty())).map(x -> {
|
||||
if (x.getTextListValue() != null && !x.getTextListValue().isEmpty()) {
|
||||
return x.getTextListValue().stream().map(node -> keywordRDAMapper.toRDA(node)).collect(Collectors.toList());
|
||||
} else {
|
||||
return List.of(keywordRDAMapper.toRDA(x.getTextValue()));
|
||||
}
|
||||
}).filter(Objects::nonNull).flatMap(Collection::stream).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rda.getKeyword() != null){
|
||||
|
@ -214,40 +221,46 @@ public class DatasetRDAMapper {
|
|||
// List<String> tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(descriptionEntity.getId().toString()).getTags().stream().map(Tag::getName).collect(Collectors.toList());
|
||||
// rda.setKeyword(tags);
|
||||
// }
|
||||
List<FieldModel> personalDataNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.sensitive_data");
|
||||
for (FieldModel personalDataNode : personalDataNodes){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(personalDataNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setPersonalData(fieldValues.stream().filter(x-> x.getTextValue() != null && x.getTextValue().isBlank()).map(x-> Dataset.PersonalData.fromValue(x.getTextValue())).findFirst().orElse(null));
|
||||
if (rda.getPersonalData() != null) break;
|
||||
Map<String, List<FieldModel>> personalDataNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.sensitive_data");
|
||||
for (Map.Entry<String, List<FieldModel>> entry : personalDataNodes.entrySet()) {
|
||||
for (FieldModel personalDataNode : entry.getValue()) {
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(personalDataNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setPersonalData(fieldValues.stream().filter(x -> x.getTextValue() != null && x.getTextValue().isBlank()).map(x -> Dataset.PersonalData.fromValue(x.getTextValue())).findFirst().orElse(null));
|
||||
if (rda.getPersonalData() != null) break;
|
||||
}
|
||||
}
|
||||
if (rda.getPersonalData() != null) rda.setPersonalData(Dataset.PersonalData.UNKNOWN);
|
||||
|
||||
List<FieldModel> securityAndPrivacyNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.security_and_privacy");
|
||||
|
||||
Map<String, List<FieldModel>> securityAndPrivacyNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.security_and_privacy");
|
||||
if (!securityAndPrivacyNodes.isEmpty()) {
|
||||
rda.setSecurityAndPrivacy(securityAndPrivacyRDAMapper.toRDA(securityAndPrivacyNodes, this.getAllValueFields(descriptionEntity.getProperties())));
|
||||
}else{
|
||||
rda.setSecurityAndPrivacy(new ArrayList<>());
|
||||
}
|
||||
List<FieldModel> sensitiveDataNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.sensitive_data");
|
||||
for (FieldModel sensitiveDataNode : sensitiveDataNodes){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(sensitiveDataNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setSensitiveData(fieldValues.stream().filter(x-> x.getTextValue() != null && x.getTextValue().isBlank()).map(x-> Dataset.SensitiveData.fromValue(x.getTextValue())).findFirst().orElse(null));
|
||||
if (rda.getSensitiveData() != null) break;
|
||||
Map<String, List<FieldModel>> sensitiveDataNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.sensitive_data");
|
||||
for (Map.Entry<String, List<FieldModel>> entry : sensitiveDataNodes.entrySet()) {
|
||||
for (FieldModel sensitiveDataNode : entry.getValue()) {
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(sensitiveDataNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setSensitiveData(fieldValues.stream().filter(x -> x.getTextValue() != null && x.getTextValue().isBlank()).map(x -> Dataset.SensitiveData.fromValue(x.getTextValue())).findFirst().orElse(null));
|
||||
if (rda.getSensitiveData() != null) break;
|
||||
}
|
||||
}
|
||||
if (rda.getSensitiveData() != null) rda.setSensitiveData(Dataset.SensitiveData.UNKNOWN);
|
||||
|
||||
List<FieldModel> technicalResourceNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.technical_resource");
|
||||
|
||||
Map<String, List<FieldModel>> technicalResourceNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.technical_resource");
|
||||
if (!technicalResourceNodes.isEmpty()) {
|
||||
rda.setTechnicalResource(technicalResourceRDAMapper.toRDA(technicalResourceNodes, this.getAllValueFields(descriptionEntity.getProperties())));
|
||||
}else{
|
||||
rda.setTechnicalResource(new ArrayList<>());
|
||||
}
|
||||
|
||||
List<FieldModel> issuedNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.issued");
|
||||
for (FieldModel issuedNode : issuedNodes){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(issuedNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setIssued(fieldValues.stream().filter(x-> x.getTextValue() != null && x.getTextValue().isBlank()).map(org.opencdmp.commonmodels.models.description.FieldModel::getTextValue).findFirst().orElse(null));
|
||||
if (rda.getIssued() != null && !rda.getIssued().isBlank()) break;;
|
||||
Map<String, List<FieldModel>> issuedNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dataset.issued");
|
||||
for (Map.Entry<String, List<FieldModel>> entry : issuedNodes.entrySet()) {
|
||||
for (FieldModel issuedNode : entry.getValue()) {
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(issuedNode, descriptionEntity.getProperties());
|
||||
if (!fieldValues.isEmpty()) rda.setIssued(fieldValues.stream().filter(x -> x.getTextValue() != null && x.getTextValue().isBlank()).map(org.opencdmp.commonmodels.models.description.FieldModel::getTextValue).findFirst().orElse(null));
|
||||
if (rda.getIssued() != null && !rda.getIssued().isBlank()) break;
|
||||
}
|
||||
}
|
||||
|
||||
//TODO
|
||||
|
@ -267,50 +280,49 @@ public class DatasetRDAMapper {
|
|||
// }).filter(Objects::nonNull).flatMap(Collection::stream).toList());
|
||||
// dmp.setContributor(dmp.getContributor().stream().filter(contributor -> contributor.getContributorId() != null && contributor.getName() != null).collect(Collectors.toList()));
|
||||
// }
|
||||
List<FieldModel> costNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dmp.cost");
|
||||
Map<String, List<FieldModel>> costNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dmp.cost");
|
||||
if (!costNodes.isEmpty()) {
|
||||
dmp.getCost().addAll(costRDAMapper.toRDA(costNodes, this.getAllValueFields(descriptionEntity.getProperties())));
|
||||
}
|
||||
List<FieldModel> ethicsNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dmp.ethical_issues");
|
||||
Map<String, List<FieldModel>> ethicsNodes = this.templateFieldSearcherService.searchFieldsBySemantics(descriptionEntity.getDescriptionTemplate(), "rda.dmp.ethical_issues");
|
||||
if (!ethicsNodes.isEmpty()) {
|
||||
for(FieldModel node: ethicsNodes){
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(node, descriptionEntity.getProperties());
|
||||
org.opencdmp.commonmodels.models.description.FieldModel fieldValue = fieldValues.getFirst();
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dmp.ethical_issues")).findFirst().orElse("");
|
||||
if (fieldValue == null) {
|
||||
continue;
|
||||
}
|
||||
String rdaValue = fieldValue.getTextValue();
|
||||
if(rdaValue == null || rdaValue.isEmpty()){
|
||||
continue;
|
||||
}
|
||||
if(rdaProperty.contains("exist")){
|
||||
try {
|
||||
Dmp.EthicalIssuesExist exists = dmp.getEthicalIssuesExist();
|
||||
if(exists == null
|
||||
|| ((exists == Dmp.EthicalIssuesExist.NO || exists == Dmp.EthicalIssuesExist.UNKNOWN) && rdaValue.equals("yes"))
|
||||
|| (exists == Dmp.EthicalIssuesExist.YES && !(rdaValue.equals("no") || rdaValue.equals("unknown")))
|
||||
|| (exists == Dmp.EthicalIssuesExist.UNKNOWN && rdaValue.equals("no"))){
|
||||
dmp.setEthicalIssuesExist(Dmp.EthicalIssuesExist.fromValue(rdaValue));
|
||||
for(Map.Entry<String, List<FieldModel>> entry: ethicsNodes.entrySet()) {
|
||||
for (FieldModel node : entry.getValue()) {
|
||||
List<org.opencdmp.commonmodels.models.description.FieldModel> fieldValues = this.findValueField(node, descriptionEntity.getProperties());
|
||||
org.opencdmp.commonmodels.models.description.FieldModel fieldValue = fieldValues.getFirst();
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dmp.ethical_issues")).findFirst().orElse("");
|
||||
if (fieldValue == null) {
|
||||
continue;
|
||||
}
|
||||
String rdaValue = fieldValue.getTextValue();
|
||||
if (rdaValue == null || rdaValue.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if (rdaProperty.contains("exist")) {
|
||||
try {
|
||||
Dmp.EthicalIssuesExist exists = dmp.getEthicalIssuesExist();
|
||||
if (exists == null
|
||||
|| ((exists == Dmp.EthicalIssuesExist.NO || exists == Dmp.EthicalIssuesExist.UNKNOWN) && rdaValue.equals("yes"))
|
||||
|| (exists == Dmp.EthicalIssuesExist.YES && !(rdaValue.equals("no") || rdaValue.equals("unknown")))
|
||||
|| (exists == Dmp.EthicalIssuesExist.UNKNOWN && rdaValue.equals("no"))) {
|
||||
dmp.setEthicalIssuesExist(Dmp.EthicalIssuesExist.fromValue(rdaValue));
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn(e.getLocalizedMessage() + ". Setting ethical_issues_exist to unknown");
|
||||
dmp.setEthicalIssuesExist(Dmp.EthicalIssuesExist.UNKNOWN);
|
||||
}
|
||||
} else if (rdaProperty.contains("description")) {
|
||||
if (dmp.getEthicalIssuesDescription() == null) {
|
||||
dmp.setEthicalIssuesDescription(rdaValue);
|
||||
} else {
|
||||
dmp.setEthicalIssuesDescription(dmp.getEthicalIssuesDescription() + ", " + rdaValue);
|
||||
}
|
||||
} else if (rdaProperty.contains("report")) {
|
||||
try {
|
||||
dmp.setEthicalIssuesReport(URI.create(rdaValue));
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn(e.getLocalizedMessage() + ". Skipping url parsing");
|
||||
}
|
||||
}catch(IllegalArgumentException e){
|
||||
logger.warn(e.getLocalizedMessage() + ". Setting ethical_issues_exist to unknown");
|
||||
dmp.setEthicalIssuesExist(Dmp.EthicalIssuesExist.UNKNOWN);
|
||||
}
|
||||
}
|
||||
else if(rdaProperty.contains("description")){
|
||||
if(dmp.getEthicalIssuesDescription() == null){
|
||||
dmp.setEthicalIssuesDescription(rdaValue);
|
||||
}
|
||||
else{
|
||||
dmp.setEthicalIssuesDescription(dmp.getEthicalIssuesDescription() + ", " + rdaValue);
|
||||
}
|
||||
}
|
||||
else if(rdaProperty.contains("report")){
|
||||
try {
|
||||
dmp.setEthicalIssuesReport(URI.create(rdaValue));
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn(e.getLocalizedMessage() + ". Skipping url parsing");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,84 +22,82 @@ public class DistributionRDAMapper {
|
|||
this.hostRDAMapper = hostRDAMapper;
|
||||
}
|
||||
|
||||
public List<Distribution> toRDA(List<FieldModel> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields) {
|
||||
public List<Distribution> toRDA(Map<String, List<FieldModel>> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields) {
|
||||
if (nodes == null) return null;
|
||||
if (valueFields == null) throw new IllegalArgumentException("valueFields is missing");
|
||||
Map<String, Distribution> rdaMap = new HashMap<>();
|
||||
|
||||
for (FieldModel node: nodes) {
|
||||
String rdaProperty = getRdaDistributionProperty(node);
|
||||
if(rdaProperty.isEmpty() || node.getData() == null){
|
||||
continue;
|
||||
}
|
||||
for (Map.Entry<String, List<FieldModel>> entry: nodes.entrySet()) {
|
||||
for (FieldModel node: entry.getValue()) {
|
||||
String rdaProperty = getRdaDistributionProperty(node);
|
||||
if (rdaProperty.isEmpty() || node.getData() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x-> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if(rdaValue == null || (rdaValue.getTextValue() == null && rdaValue.getReferences() == null)){
|
||||
continue;
|
||||
}
|
||||
String key = node.getNumbering();
|
||||
if(!key.contains("mult")){
|
||||
key = "0";
|
||||
}
|
||||
else{
|
||||
key = "" + key.charAt(4);
|
||||
}
|
||||
Distribution rda;
|
||||
if(rdaMap.containsKey(key)){
|
||||
rda = rdaMap.get(key);
|
||||
}
|
||||
else {
|
||||
rda = new Distribution();
|
||||
rdaMap.put(key, rda);
|
||||
}
|
||||
for (ExportPropertyName exportPropertyName : ExportPropertyName.values()) {
|
||||
if (rdaProperty.contains(exportPropertyName.getName())) {
|
||||
switch (exportPropertyName) {
|
||||
case ACCESS_URL:
|
||||
rda.setAccessUrl(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.ACCESS_URL.getName(), node.getId());
|
||||
break;
|
||||
case AVAILABLE_UNTIL:
|
||||
rda.setAvailableUntil(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.AVAILABLE_UNTIL.getName(), node.getId());
|
||||
break;
|
||||
case DOWNLOAD_URL:
|
||||
rda.setDownloadUrl(URI.create(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.DOWNLOAD_URL.getName(), node.getId());
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
if(!rdaProperty.contains("host")) {
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.DESCRIPTION.getName(), node.getId());
|
||||
}
|
||||
break;
|
||||
case DATA_ACCESS:
|
||||
try {
|
||||
rda.setDataAccess(Distribution.DataAccess.fromValue(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.DATA_ACCESS.getName(), node.getId());
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
logger.warn("Distribution data access " + rdaValue + " from semantic distribution.data_access is not valid. Data access will not be set set.");
|
||||
}
|
||||
break;
|
||||
case BYTE_SIZE:
|
||||
rda.setByteSize(Integer.parseInt(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.BYTE_SIZE.getName(), node.getId());
|
||||
break;
|
||||
case LICENSE:
|
||||
List<FieldModel> licenseNodes = nodes.stream().filter(lnode -> {
|
||||
for(String schematic: lnode.getSchematics()){
|
||||
if(schematic.startsWith("rda.dataset.distribution.license")){
|
||||
return true;
|
||||
}
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x -> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if (rdaValue == null || (rdaValue.getTextValue() == null && rdaValue.getReferences() == null)) {
|
||||
continue;
|
||||
}
|
||||
String key = entry.getKey();
|
||||
if (!key.contains("mult")) {
|
||||
key = "0";
|
||||
} else {
|
||||
key = "" + key.charAt(4);
|
||||
}
|
||||
Distribution rda;
|
||||
if (rdaMap.containsKey(key)) {
|
||||
rda = rdaMap.get(key);
|
||||
} else {
|
||||
rda = new Distribution();
|
||||
rdaMap.put(key, rda);
|
||||
}
|
||||
for (ExportPropertyName exportPropertyName : ExportPropertyName.values()) {
|
||||
if (rdaProperty.contains(exportPropertyName.getName())) {
|
||||
switch (exportPropertyName) {
|
||||
case ACCESS_URL:
|
||||
rda.setAccessUrl(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.ACCESS_URL.getName(), node.getId());
|
||||
break;
|
||||
case AVAILABLE_UNTIL:
|
||||
rda.setAvailableUntil(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.AVAILABLE_UNTIL.getName(), node.getId());
|
||||
break;
|
||||
case DOWNLOAD_URL:
|
||||
rda.setDownloadUrl(URI.create(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.DOWNLOAD_URL.getName(), node.getId());
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
if (!rdaProperty.contains("host")) {
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.DESCRIPTION.getName(), node.getId());
|
||||
}
|
||||
break;
|
||||
case DATA_ACCESS:
|
||||
try {
|
||||
rda.setDataAccess(Distribution.DataAccess.fromValue(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.DATA_ACCESS.getName(), node.getId());
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn("Distribution data access " + rdaValue + " from semantic distribution.data_access is not valid. Data access will not be set set.");
|
||||
}
|
||||
break;
|
||||
case BYTE_SIZE:
|
||||
rda.setByteSize(Integer.parseInt(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.BYTE_SIZE.getName(), node.getId());
|
||||
break;
|
||||
case LICENSE:
|
||||
List<FieldModel> licenseNodes = nodes.values().stream().flatMap(Collection::stream).filter(lnode -> {
|
||||
for (String schematic : lnode.getSchematics()) {
|
||||
if (schematic.startsWith("rda.dataset.distribution.license")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}).collect(Collectors.toList());
|
||||
License license = licenseRDAMapper.toRDA(licenseNodes, valueFields);
|
||||
rda.setLicense(license != null? Collections.singletonList(license): new ArrayList<>());
|
||||
break;
|
||||
case FORMAT:
|
||||
//TODO
|
||||
}).collect(Collectors.toList());
|
||||
License license = licenseRDAMapper.toRDA(licenseNodes, valueFields);
|
||||
rda.setLicense(license != null ? Collections.singletonList(license) : new ArrayList<>());
|
||||
break;
|
||||
case FORMAT:
|
||||
//TODO
|
||||
// try {
|
||||
// JsonNode valueNode = mapper.readTree(node.getData().getValue());
|
||||
// if(valueNode.isArray()){
|
||||
|
@ -131,16 +129,17 @@ public class DistributionRDAMapper {
|
|||
// catch(JsonProcessingException e){
|
||||
// logger.warn(e.getMessage());
|
||||
// }
|
||||
break;
|
||||
case TITLE:
|
||||
if(!rdaProperty.contains("host")) {
|
||||
rda.setTitle(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.TITLE.getName(), node.getId());
|
||||
}
|
||||
break;
|
||||
case HOST:
|
||||
rda.setHost(hostRDAMapper.toRDA(nodes, valueFields, node.getNumbering()));
|
||||
break;
|
||||
break;
|
||||
case TITLE:
|
||||
if (!rdaProperty.contains("host")) {
|
||||
rda.setTitle(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.TITLE.getName(), node.getId());
|
||||
}
|
||||
break;
|
||||
case HOST:
|
||||
rda.setHost(hostRDAMapper.toRDA(nodes, valueFields, entry.getKey()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,49 +14,49 @@ import java.util.*;
|
|||
public class HostRDAMapper {
|
||||
private static final Logger logger = LoggerFactory.getLogger(HostRDAMapper.class);
|
||||
|
||||
public Host toRDA(List<FieldModel> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields, String numbering){
|
||||
public Host toRDA(Map<String, List<FieldModel>> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields, String numbering){
|
||||
if (nodes == null) return null;
|
||||
if (valueFields == null) throw new IllegalArgumentException("valueFields is missing");
|
||||
Host rda = new Host();
|
||||
|
||||
for (FieldModel node: nodes) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.distribution.host")).findFirst().orElse("");
|
||||
if (rdaProperty.contains("host")) {
|
||||
int firstDiff = MyStringUtils.getFirstDifference(numbering, node.getNumbering());
|
||||
if (firstDiff == -1 || firstDiff >= 2) {
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x-> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if(rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()){
|
||||
continue;
|
||||
}
|
||||
for (ExportPropertyName propertyName: ExportPropertyName.values()) {
|
||||
if (rdaProperty.contains(propertyName.getName())) {
|
||||
switch (propertyName) {
|
||||
case AVAILABILITY:
|
||||
rda.setAvailability(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.AVAILABILITY.getName(), node.getId());
|
||||
break;
|
||||
case BACKUP_FREQUENCY:
|
||||
rda.setBackupFrequency(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.BACKUP_FREQUENCY.getName(), node.getId());
|
||||
break;
|
||||
case BACKUP_TYPE:
|
||||
rda.setBackupType(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.BACKUP_TYPE.getName(), node.getId());
|
||||
break;
|
||||
case CERTIFIED_WITH:
|
||||
try {
|
||||
rda.setCertifiedWith(Host.CertifiedWith.fromValue(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.CERTIFIED_WITH.getName(), node.getId());
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
logger.warn("Distribution host certified with " + rdaValue + "from semantic distribution.host.certified_with is not valid. Certified_with will not be set set.");
|
||||
}
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.DESCRIPTION.getName(), node.getId());
|
||||
break;
|
||||
case GEO_LOCATION:
|
||||
|
||||
for (Map.Entry<String, List<FieldModel>> entry: nodes.entrySet()) {
|
||||
for (FieldModel node: entry.getValue()) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.distribution.host")).findFirst().orElse("");
|
||||
if (rdaProperty.contains("host")) {
|
||||
int firstDiff = MyStringUtils.getFirstDifference(numbering, entry.getKey());
|
||||
if (firstDiff == -1 || firstDiff >= 2) {
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x -> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if (rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()) {
|
||||
continue;
|
||||
}
|
||||
for (ExportPropertyName propertyName : ExportPropertyName.values()) {
|
||||
if (rdaProperty.contains(propertyName.getName())) {
|
||||
switch (propertyName) {
|
||||
case AVAILABILITY:
|
||||
rda.setAvailability(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.AVAILABILITY.getName(), node.getId());
|
||||
break;
|
||||
case BACKUP_FREQUENCY:
|
||||
rda.setBackupFrequency(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.BACKUP_FREQUENCY.getName(), node.getId());
|
||||
break;
|
||||
case BACKUP_TYPE:
|
||||
rda.setBackupType(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.BACKUP_TYPE.getName(), node.getId());
|
||||
break;
|
||||
case CERTIFIED_WITH:
|
||||
try {
|
||||
rda.setCertifiedWith(Host.CertifiedWith.fromValue(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.CERTIFIED_WITH.getName(), node.getId());
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn("Distribution host certified with " + rdaValue + "from semantic distribution.host.certified_with is not valid. Certified_with will not be set set.");
|
||||
}
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.DESCRIPTION.getName(), node.getId());
|
||||
break;
|
||||
case GEO_LOCATION:
|
||||
// if (rdaValue.getTextValue().startsWith("{")) {
|
||||
// try {
|
||||
// rdaValue = mapper.readValue(rdaValue.getTextValue(), Map.class).get("id").toString();
|
||||
|
@ -71,11 +71,11 @@ public class HostRDAMapper {
|
|||
// catch (IllegalArgumentException e) {
|
||||
// logger.warn("Distribution host geo location " + rdaValue.getTextValue() + "from semantic distribution.host.geo_location is not valid. Geo location will not be set set.");
|
||||
// }
|
||||
//TODO
|
||||
rda.setGeoLocation(Host.GeoLocation.fromValue(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.GEO_LOCATION.getName(), node.getId());
|
||||
break;
|
||||
case PID_SYSTEM:
|
||||
//TODO
|
||||
rda.setGeoLocation(Host.GeoLocation.fromValue(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.GEO_LOCATION.getName(), node.getId());
|
||||
break;
|
||||
case PID_SYSTEM:
|
||||
// try{
|
||||
// JsonNode valueNode = mapper.readTree(rdaValue.getTextValue());
|
||||
// Iterator<JsonNode> iter = valueNode.elements();
|
||||
|
@ -100,33 +100,33 @@ public class HostRDAMapper {
|
|||
// } catch (JsonProcessingException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
//TODO
|
||||
break;
|
||||
case STORAGE_TYPE:
|
||||
rda.setStorageType(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.STORAGE_TYPE.getName(), node.getId());
|
||||
break;
|
||||
case SUPPORT_VERSIONING:
|
||||
try {
|
||||
rda.setSupportVersioning(Host.SupportVersioning.fromValue(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.SUPPORT_VERSIONING.getName(), node.getId());
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
logger.warn("Distribution host support versioning " + rdaValue + "from semantic distribution.host.support_versioning is not valid. Support versioning will not be set set.");
|
||||
}
|
||||
break;
|
||||
case TITLE:
|
||||
rda.setTitle(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.TITLE.getName(), node.getId());
|
||||
break;
|
||||
case URL:
|
||||
try {
|
||||
rda.setUrl(URI.create(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.URL.getName(), node.getId());
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn(e.getLocalizedMessage() + ". Skipping url parsing");
|
||||
}
|
||||
break;
|
||||
//TODO
|
||||
break;
|
||||
case STORAGE_TYPE:
|
||||
rda.setStorageType(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.STORAGE_TYPE.getName(), node.getId());
|
||||
break;
|
||||
case SUPPORT_VERSIONING:
|
||||
try {
|
||||
rda.setSupportVersioning(Host.SupportVersioning.fromValue(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.SUPPORT_VERSIONING.getName(), node.getId());
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn("Distribution host support versioning " + rdaValue + "from semantic distribution.host.support_versioning is not valid. Support versioning will not be set set.");
|
||||
}
|
||||
break;
|
||||
case TITLE:
|
||||
rda.setTitle(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.TITLE.getName(), node.getId());
|
||||
break;
|
||||
case URL:
|
||||
try {
|
||||
rda.setUrl(URI.create(rdaValue.getTextValue()));
|
||||
rda.setAdditionalProperty(ImportPropertyName.URL.getName(), node.getId());
|
||||
} catch (IllegalArgumentException e) {
|
||||
logger.warn(e.getLocalizedMessage() + ". Skipping url parsing");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,68 +22,69 @@ public class MetadataRDAMapper{
|
|||
this.metadataStandardIdRDAMapper = metadataStandardIdRDAMapper;
|
||||
}
|
||||
|
||||
public List<Metadatum> toRDA(List<FieldModel> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields) {
|
||||
public List<Metadatum> toRDA(Map<String, List<FieldModel>> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields) {
|
||||
if (nodes == null) return null;
|
||||
if (valueFields == null) throw new IllegalArgumentException("valueFields is missing");
|
||||
|
||||
Map<String, String> rdaMap = new HashMap<>();
|
||||
List<Metadatum> rdas = new ArrayList<>();
|
||||
for (FieldModel node : nodes) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.metadata")).findFirst().orElse("");
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x -> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
for (Map.Entry<String, List<FieldModel>> entry : nodes.entrySet()) {
|
||||
for (FieldModel node : entry.getValue()) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.metadata")).findFirst().orElse("");
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x -> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
|
||||
for (PropertyName propertyName : PropertyName.values()) {
|
||||
if (rdaProperty.contains(propertyName.getName())) {
|
||||
switch (propertyName) {
|
||||
case METADATA_STANDARD_ID:
|
||||
if (rdaValue != null && rdaValue.getReferences() != null) {
|
||||
for (ReferenceModel referenceModel : rdaValue.getReferences()) { //TODO reference ??
|
||||
String uri = referenceModel != null && referenceModel.getDefinition() != null && referenceModel.getDefinition().getFields() != null ? referenceModel.getDefinition().getFields().stream().filter(x-> x.getCode().equals("uri")).map(ReferenceFieldModel::getValue).findFirst().orElse(null) : null;
|
||||
if (uri!= null && !uri.isBlank()) { //TODO
|
||||
rdas.add(new Metadatum());
|
||||
rdas.getLast().setMetadataStandardId(metadataStandardIdRDAMapper.toRDA(uri));
|
||||
rdas.getLast().setDescription(referenceModel.getLabel());
|
||||
rdas.getLast().setAdditionalProperty("fieldId", node.getId());
|
||||
rdas.getLast().setAdditionalProperty("valueId", referenceModel.getReference());
|
||||
rdaMap.put(uri, node.getNumbering());
|
||||
for (PropertyName propertyName : PropertyName.values()) {
|
||||
if (rdaProperty.contains(propertyName.getName())) {
|
||||
switch (propertyName) {
|
||||
case METADATA_STANDARD_ID:
|
||||
if (rdaValue != null && rdaValue.getReferences() != null) {
|
||||
for (ReferenceModel referenceModel : rdaValue.getReferences()) { //TODO reference ??
|
||||
String uri = referenceModel != null && referenceModel.getDefinition() != null && referenceModel.getDefinition().getFields() != null ? referenceModel.getDefinition().getFields().stream().filter(x -> x.getCode().equals("uri")).map(ReferenceFieldModel::getValue).findFirst().orElse(null) : null;
|
||||
if (uri != null && !uri.isBlank()) { //TODO
|
||||
rdas.add(new Metadatum());
|
||||
rdas.getLast().setMetadataStandardId(metadataStandardIdRDAMapper.toRDA(uri));
|
||||
rdas.getLast().setDescription(referenceModel.getLabel());
|
||||
rdas.getLast().setAdditionalProperty("fieldId", node.getId());
|
||||
rdas.getLast().setAdditionalProperty("valueId", referenceModel.getReference());
|
||||
rdaMap.put(uri, entry.getKey());
|
||||
}
|
||||
}
|
||||
} else if (rdaValue != null && rdaValue.getTextValue() != null && !rdaValue.getTextValue().isEmpty()) {
|
||||
rdas.add(new Metadatum());
|
||||
rdas.getLast().setMetadataStandardId(metadataStandardIdRDAMapper.toRDA(rdaValue.getTextValue()));
|
||||
rdas.getLast().setAdditionalProperty("identifierId", node.getId());
|
||||
rdaMap.put(rdaValue.getTextValue(), entry.getKey());
|
||||
}
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
if (rdaValue != null && rdaValue.getTextValue() != null && !rdaValue.getTextValue().isEmpty()) {
|
||||
Metadatum rda = getRelative(rdas, rdaMap, entry.getKey());
|
||||
if (rda != null) {
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty("descriptionId", node.getId());
|
||||
} else {
|
||||
rdas.stream().filter(rda1 -> rda1.getDescription() == null || rda1.getDescription().isEmpty()).forEach(rda1 -> rda1.setDescription(rdaValue.getTextValue()));
|
||||
}
|
||||
}
|
||||
} else if (rdaValue != null && rdaValue.getTextValue() != null && !rdaValue.getTextValue().isEmpty()) {
|
||||
rdas.add(new Metadatum());
|
||||
rdas.getLast().setMetadataStandardId(metadataStandardIdRDAMapper.toRDA(rdaValue.getTextValue()));
|
||||
rdas.getLast().setAdditionalProperty("identifierId", node.getId());
|
||||
rdaMap.put(rdaValue.getTextValue(), node.getNumbering());
|
||||
}
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
if (rdaValue != null && rdaValue.getTextValue() != null && !rdaValue.getTextValue().isEmpty()) {
|
||||
Metadatum rda = getRelative(rdas, rdaMap, node.getNumbering());
|
||||
if (rda != null) {
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty("descriptionId", node.getId());
|
||||
} else {
|
||||
rdas.stream().filter(rda1 -> rda1.getDescription() == null || rda1.getDescription().isEmpty()).forEach(rda1 -> rda1.setDescription(rdaValue.getTextValue()));
|
||||
break;
|
||||
case LANGUAGE:
|
||||
if (rdaValue != null && rdaValue.getTextValue() != null && !rdaValue.getTextValue().isEmpty()) {
|
||||
String language = rdaValue.getTextValue();
|
||||
Metadatum.Language lang = Metadatum.Language.fromValue(language);
|
||||
Metadatum rda = getRelative(rdas, rdaMap, entry.getKey());
|
||||
if (rda != null) {
|
||||
rda.setLanguage(lang);
|
||||
rda.setAdditionalProperty("languageId", node.getId());
|
||||
} else {
|
||||
rdas.forEach(rda1 -> rda1.setLanguage(lang));
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LANGUAGE:
|
||||
if (rdaValue != null && rdaValue.getTextValue() != null && !rdaValue.getTextValue().isEmpty()) {
|
||||
String language = rdaValue.getTextValue();
|
||||
Metadatum.Language lang = Metadatum.Language.fromValue(language);
|
||||
Metadatum rda = getRelative(rdas, rdaMap, node.getNumbering());
|
||||
if (rda != null) {
|
||||
rda.setLanguage(lang);
|
||||
rda.setAdditionalProperty("languageId", node.getId());
|
||||
} else {
|
||||
rdas.forEach(rda1 -> rda1.setLanguage(lang));
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return rdas;
|
||||
|
|
|
@ -10,36 +10,38 @@ import java.util.stream.Collectors;
|
|||
|
||||
@Component
|
||||
public class SecurityAndPrivacyRDAMapper {
|
||||
public List<SecurityAndPrivacy> toRDA(List<FieldModel> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields) {
|
||||
public List<SecurityAndPrivacy> toRDA(Map<String, List<FieldModel>> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields) {
|
||||
if (nodes == null) return null;
|
||||
if (valueFields == null) throw new IllegalArgumentException("valueFields is missing");
|
||||
|
||||
Map<String, SecurityAndPrivacy> rdaMap = new HashMap<>();
|
||||
|
||||
for (FieldModel node: nodes) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.security_and_privacy")).findFirst().orElse("");
|
||||
if (node.getData() == null) {
|
||||
continue;
|
||||
}
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x-> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if(rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()){
|
||||
continue;
|
||||
}
|
||||
SecurityAndPrivacy rda = getRelative(rdaMap, node.getNumbering());
|
||||
if (!rdaMap.containsValue(rda)) {
|
||||
rdaMap.put(node.getNumbering(), rda);
|
||||
}
|
||||
for (ExportPropertyName exportPropertyName : ExportPropertyName.values()) {
|
||||
if (rdaProperty.contains(exportPropertyName.getName())) {
|
||||
switch (exportPropertyName) {
|
||||
case TITLE:
|
||||
rda.setTitle(rdaValue.getTextValue());
|
||||
rda.getAdditionalProperties().put(ImportPropertyName.TITLE.getName(), node.getId());
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.getAdditionalProperties().put(ImportPropertyName.DESCRIPTION.getName(), node.getId());
|
||||
break;
|
||||
for (Map.Entry<String, List<FieldModel>> entry: nodes.entrySet()) {
|
||||
for (FieldModel node : entry.getValue()) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.security_and_privacy")).findFirst().orElse("");
|
||||
if (node.getData() == null) {
|
||||
continue;
|
||||
}
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x -> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if (rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()) {
|
||||
continue;
|
||||
}
|
||||
SecurityAndPrivacy rda = getRelative(rdaMap, entry.getKey());
|
||||
if (!rdaMap.containsValue(rda)) {
|
||||
rdaMap.put(entry.getKey(), rda);
|
||||
}
|
||||
for (ExportPropertyName exportPropertyName : ExportPropertyName.values()) {
|
||||
if (rdaProperty.contains(exportPropertyName.getName())) {
|
||||
switch (exportPropertyName) {
|
||||
case TITLE:
|
||||
rda.setTitle(rdaValue.getTextValue());
|
||||
rda.getAdditionalProperties().put(ImportPropertyName.TITLE.getName(), node.getId());
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.getAdditionalProperties().put(ImportPropertyName.DESCRIPTION.getName(), node.getId());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,40 +11,41 @@ import java.util.stream.Collectors;
|
|||
@Component
|
||||
public class TechnicalResourceRDAMapper {
|
||||
|
||||
public List<TechnicalResource> toRDA(List<FieldModel> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields ) {
|
||||
public List<TechnicalResource> toRDA(Map<String, List<FieldModel>> nodes, List<org.opencdmp.commonmodels.models.description.FieldModel> valueFields ) {
|
||||
if (nodes == null) return null;
|
||||
if (valueFields == null) throw new IllegalArgumentException("valueFields is missing");
|
||||
Map<String, TechnicalResource> rdaMap = new HashMap<>();
|
||||
|
||||
for (FieldModel node: nodes) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.technical_resource")).findFirst().orElse("");
|
||||
if (node.getData() == null) {
|
||||
continue;
|
||||
}
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x-> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if(rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()){
|
||||
continue;
|
||||
}
|
||||
TechnicalResource rda = getRelative(rdaMap, node.getNumbering());
|
||||
if (!rdaMap.containsValue(rda)) {
|
||||
rdaMap.put(node.getNumbering(), rda);
|
||||
}
|
||||
for (ExportPropertyName exportPropertyName : ExportPropertyName.values()) {
|
||||
if (rdaProperty.contains(exportPropertyName.getName())) {
|
||||
switch (exportPropertyName) {
|
||||
case NAME:
|
||||
rda.setName(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.NAME.getName(), node.getId());
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.DESCRIPTION.getName(), node.getId());
|
||||
break;
|
||||
for (Map.Entry<String, List<FieldModel>> entry: nodes.entrySet()) {
|
||||
for (FieldModel node : entry.getValue()) {
|
||||
String rdaProperty = node.getSchematics().stream().filter(schematic -> schematic.startsWith("rda.dataset.technical_resource")).findFirst().orElse("");
|
||||
if (node.getData() == null) {
|
||||
continue;
|
||||
}
|
||||
org.opencdmp.commonmodels.models.description.FieldModel rdaValue = valueFields.stream().filter(x -> x.getId().equals(node.getId())).findFirst().orElse(null);
|
||||
if (rdaValue == null || rdaValue.getTextValue() == null || rdaValue.getTextValue().isBlank()) {
|
||||
continue;
|
||||
}
|
||||
TechnicalResource rda = getRelative(rdaMap, entry.getKey());
|
||||
if (!rdaMap.containsValue(rda)) {
|
||||
rdaMap.put(entry.getKey(), rda);
|
||||
}
|
||||
for (ExportPropertyName exportPropertyName : ExportPropertyName.values()) {
|
||||
if (rdaProperty.contains(exportPropertyName.getName())) {
|
||||
switch (exportPropertyName) {
|
||||
case NAME:
|
||||
rda.setName(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.NAME.getName(), node.getId());
|
||||
break;
|
||||
case DESCRIPTION:
|
||||
rda.setDescription(rdaValue.getTextValue());
|
||||
rda.setAdditionalProperty(ImportPropertyName.DESCRIPTION.getName(), node.getId());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rdaMap.values().stream()
|
||||
.filter(tr -> tr.getName() != null)
|
||||
.collect(Collectors.toList());
|
||||
|
|
|
@ -4,9 +4,10 @@ import org.opencdmp.commonmodels.models.descriptiotemplate.DescriptionTemplateMo
|
|||
import org.opencdmp.commonmodels.models.descriptiotemplate.FieldModel;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface TemplateFieldSearcherService {
|
||||
List<FieldModel> searchFieldsById(DescriptionTemplateModel template, String value);
|
||||
Map<String, List<FieldModel>> searchFieldsById(DescriptionTemplateModel template, String value);
|
||||
|
||||
List<FieldModel> searchFieldsBySemantics(DescriptionTemplateModel template, String value);
|
||||
Map<String, List<FieldModel>> searchFieldsBySemantics(DescriptionTemplateModel template, String value);
|
||||
}
|
||||
|
|
|
@ -3,23 +3,80 @@ package org.opencdmp.filetransformer.rda.service.descriptiontemplatesearcher;
|
|||
import org.opencdmp.commonmodels.models.descriptiotemplate.*;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class TemplateFieldSearcherServiceImpl implements TemplateFieldSearcherService {
|
||||
|
||||
@Override
|
||||
public List<FieldModel> searchFieldsById(DescriptionTemplateModel template, String value) {
|
||||
if (template == null || template.getDefinition() == null) return new ArrayList<>();
|
||||
return template.getDefinition().getFieldById(value);
|
||||
public Map<String, List<FieldModel>> searchFieldsById(DescriptionTemplateModel template, String value) {
|
||||
if (template == null || template.getDefinition() == null) return new HashMap<>();
|
||||
List<FieldModel> fieldModels = template.getDefinition().getFieldById(value);
|
||||
Map<String, List<FieldModel>> response = new HashMap<>();
|
||||
for (FieldModel fieldModel : fieldModels){
|
||||
String key = this.buildFieldKey(template, fieldModel);
|
||||
if (!response.containsKey(key)) response.put(key, new ArrayList<>());
|
||||
response.get(key).add(fieldModel);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FieldModel> searchFieldsBySemantics(DescriptionTemplateModel template, String value) {
|
||||
if (template == null || template.getDefinition() == null) return new ArrayList<>();
|
||||
public Map<String, List<FieldModel>> searchFieldsBySemantics(DescriptionTemplateModel template, String value) {
|
||||
if (template == null || template.getDefinition() == null) return new HashMap<>();
|
||||
List<FieldModel> fieldModels = template.getDefinition().getAllField();
|
||||
if (fieldModels == null) return new ArrayList<>();
|
||||
return fieldModels.stream().filter(x-> x.getSchematics() != null && x.getSchematics().contains(value)).toList();
|
||||
if (fieldModels == null) return new HashMap<>();
|
||||
fieldModels = fieldModels.stream().filter(x-> x.getSchematics() != null && x.getSchematics().contains(value)).toList();
|
||||
Map<String, List<FieldModel>> response = new HashMap<>();
|
||||
for (FieldModel fieldModel : fieldModels){
|
||||
String key = this.buildFieldKey(template, fieldModel);
|
||||
if (!response.containsKey(key)) response.put(key, new ArrayList<>());
|
||||
response.get(key).add(fieldModel);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
private String buildFieldKey(DescriptionTemplateModel template, FieldModel fieldModel){
|
||||
if (template == null || template.getDefinition() == null || template.getDefinition().getPages() == null) return null;
|
||||
for (PageModel pageModel : template.getDefinition().getPages().stream().sorted(Comparator.comparing(PageModel::getOrdinal)).toList()){
|
||||
String key = this.buildFieldKey(pageModel, fieldModel);
|
||||
if (key != null) return pageModel.getOrdinal() + "." + key;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private String buildFieldKey(PageModel pageModel, FieldModel fieldModel){
|
||||
if (pageModel == null || pageModel.getSections() == null) return null;
|
||||
for (SectionModel sectionModel : pageModel.getSections().stream().sorted(Comparator.comparing(SectionModel::getOrdinal)).toList()){
|
||||
String key = this.buildFieldKey(sectionModel, fieldModel);
|
||||
if (key != null) return sectionModel.getOrdinal() + "." + key;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String buildFieldKey(SectionModel sectionModel, FieldModel fieldModel){
|
||||
if (sectionModel == null) return null;
|
||||
if (sectionModel.getSections() != null) {
|
||||
for (SectionModel innerSectionModel : sectionModel.getSections().stream().sorted(Comparator.comparing(SectionModel::getOrdinal)).toList()) {
|
||||
String key = this.buildFieldKey(innerSectionModel, fieldModel);
|
||||
if (key != null) return innerSectionModel.getOrdinal() + "." + key;
|
||||
}
|
||||
}
|
||||
if (sectionModel.getFieldSets() != null) {
|
||||
for (FieldSetModel fieldSetModel : sectionModel.getFieldSets().stream().sorted(Comparator.comparing(FieldSetModel::getOrdinal)).toList()) {
|
||||
String key = this.buildFieldKey(fieldSetModel, fieldModel);
|
||||
if (key != null) return fieldSetModel.getOrdinal() + "." + key;
|
||||
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String buildFieldKey(FieldSetModel fieldSetModel, FieldModel fieldModel){
|
||||
if (fieldSetModel == null || fieldSetModel.getFields() == null) return null;
|
||||
for (FieldModel currentFieldModel : fieldSetModel.getFields().stream().sorted(Comparator.comparing(FieldModel::getOrdinal)).toList()){
|
||||
if (currentFieldModel.getId().equals(fieldModel.getId())) return currentFieldModel.getOrdinal().toString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue