Tags created by the form by using the rda standard keyword or the tag field will be stored to the dataset's tags in elastic
This commit is contained in:
parent
c5f4701f97
commit
c7892f45df
|
@ -1428,7 +1428,10 @@ public class DataManagementPlanManager {
|
|||
if (elastic != null) {
|
||||
tags = elastic.getTags();
|
||||
}
|
||||
datasetManager.updateTags(dataset, tags);
|
||||
DatasetWizardModel datasetWizardModel = new DatasetWizardModel().fromDataModel(dataset);
|
||||
datasetWizardModel.setTags(tags);
|
||||
datasetManager.getTagsFromProfile(datasetWizardModel, dataset);
|
||||
datasetManager.updateTags(dataset, datasetWizardModel.getTags());
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package eu.eudat.logic.managers;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import eu.eudat.data.dao.criteria.*;
|
||||
import eu.eudat.data.dao.entities.DataRepositoryDao;
|
||||
import eu.eudat.data.dao.entities.DatasetDao;
|
||||
|
@ -27,6 +29,8 @@ import eu.eudat.logic.utilities.documents.helpers.FileEnvelope;
|
|||
import eu.eudat.logic.utilities.documents.types.ParagraphStyle;
|
||||
import eu.eudat.logic.utilities.documents.word.WordBuilder;
|
||||
import eu.eudat.logic.utilities.documents.xml.ExportXmlBuilder;
|
||||
import eu.eudat.logic.utilities.helpers.StreamDistinctBy;
|
||||
import eu.eudat.logic.utilities.json.JsonSearcher;
|
||||
import eu.eudat.models.HintedModelFactory;
|
||||
import eu.eudat.models.data.datasetImport.DatasetImportField;
|
||||
import eu.eudat.models.data.datasetImport.DatasetImportPagedDatasetProfile;
|
||||
|
@ -563,6 +567,7 @@ public class DatasetManager {
|
|||
eu.eudat.data.entities.Dataset dataset = datasetWizardModel.toDataModel();
|
||||
dataset.setDmp(dmp);
|
||||
dataset.setProperties(propertiesModelToString(datasetWizardModel.getDatasetProfileDefinition()));
|
||||
this.getTagsFromProfile(datasetWizardModel, dataset);
|
||||
if (datasetWizardModel.getStatus() == (int) Dataset.Status.FINALISED.getValue())
|
||||
checkDatasetValidation(dataset);
|
||||
UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build();
|
||||
|
@ -974,4 +979,41 @@ public class DatasetManager {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void getTagsFromProfile(DatasetWizardModel wizardModel, Dataset dataset) throws IOException {
|
||||
dataset.setProfile(apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(dataset.getProfile().getId()));
|
||||
wizardModel.setDatasetProfileDefinition(this.getPagedProfile(wizardModel, dataset));
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
String json = mapper.writeValueAsString(wizardModel.getDatasetProfileDefinition());
|
||||
JsonNode propertiesJson = mapper.readTree(json);
|
||||
List<Tag> tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().query(new DatasetCriteria()).stream().map(eu.eudat.elastic.entities.Dataset::getTags).flatMap(Collection::stream).filter(StreamDistinctBy.distinctByKey(Tag::getId)).collect(Collectors.toList());
|
||||
Set<JsonNode> tagNodes = new HashSet<>();
|
||||
tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "renderStyle", "tags", true));
|
||||
tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "rdaProperty", "dataset.keyword"));
|
||||
if (!tagNodes.isEmpty()) {
|
||||
tagNodes.forEach(node -> {
|
||||
JsonNode value = node.get("value");
|
||||
if (value.isArray()) {
|
||||
value.elements().forEachRemaining(element -> {
|
||||
try {
|
||||
Map<String, String> data = mapper.readValue(element.asText(), HashMap.class);
|
||||
Tag tag = new Tag();
|
||||
if(tags.stream().anyMatch(intag -> intag.getName().equals(data.get("name")))) {
|
||||
tag = tags.stream().filter(intag -> intag.getName().equals(data.get("name"))).findFirst().get();
|
||||
} else {
|
||||
tag.setName(data.get("name"));
|
||||
tag.setId(data.get("id"));
|
||||
}
|
||||
if (wizardModel.getTags().stream().noneMatch(intag -> intag.getName().equals(data.get("name")))) {
|
||||
wizardModel.getTags().add(tag);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,10 @@ import java.util.List;
|
|||
public class JsonSearcher {
|
||||
|
||||
public static List<JsonNode> findNodes(JsonNode root, String key, String value) {
|
||||
return findNodes(root, key, value, false);
|
||||
}
|
||||
|
||||
public static List<JsonNode> findNodes(JsonNode root, String key, String value, boolean parent) {
|
||||
List<JsonNode> nodes = new ArrayList<>();
|
||||
for (Iterator<JsonNode> it = root.elements(); it.hasNext(); ) {
|
||||
JsonNode node = it.next();
|
||||
|
@ -18,14 +22,18 @@ public class JsonSearcher {
|
|||
String fieldName = iter.next();
|
||||
if (fieldName.equals(key)) {
|
||||
if (node.get(fieldName).asText().equals(value) || node.get(fieldName).asText().startsWith(value)) {
|
||||
nodes.add(node);
|
||||
if (parent) {
|
||||
nodes.add(root);
|
||||
} else {
|
||||
nodes.add(node);
|
||||
}
|
||||
found++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if (found == 0) {
|
||||
nodes.addAll(findNodes(node, key, value));
|
||||
nodes.addAll(findNodes(node, key, value, parent));
|
||||
}
|
||||
}
|
||||
return nodes;
|
||||
|
|
Loading…
Reference in New Issue