From a9d6ab89f51f1250791bc4b2d691ee2cae3f3cab Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 18 Apr 2022 18:26:20 +0300 Subject: [PATCH] Update and clean maven depedencies (possible breaking changes) --- .../data/dao/entities/DatasetDaoImpl.java | 4 + dmp-backend/pom.xml | 122 +++-- dmp-backend/web/pom.xml | 31 +- .../eu/eudat/controllers/FileController.java | 74 ++- .../ControllerErrorHandler.java | 3 +- .../ControllerUnauthorisedHandler.java | 3 +- .../managers/DataManagementPlanManager.java | 29 +- .../eudat/logic/managers/DatasetManager.java | 121 ++--- .../eu/eudat/logic/managers/UserManager.java | 11 +- .../mapper/prefilling/PrefillingMapper.java | 32 +- .../google/GoogleTokenValidator.java | 8 +- .../AbstractAuthenticationService.java | 17 +- .../VerifiedUserAuthenticationService.java | 12 +- .../services/utilities/MailServiceImpl.java | 15 +- .../services/utilities/UtilitiesService.java | 3 + .../utilities/UtilitiesServiceImpl.java | 8 + .../utilities/documents/pdf/PDFUtils.java | 4 +- .../utilities/documents/word/WordBuilder.java | 73 +-- .../documents/xml/ExportXmlBuilder.java | 3 - .../notification/NotificationScheduleJob.java | 22 +- .../commons/datafield/UploadData.java | 6 +- .../models/data/dmp/DataManagementPlan.java | 221 ++++---- .../dmp/DataManagementPlanEditorModel.java | 93 ++-- .../data/rda/ContactRDAExportModel.java | 44 -- .../DatasetDistributionRDAExportModel.java | 93 ---- .../rda/DatasetMetadataRDAExportModel.java | 47 -- .../data/rda/DatasetRDAExportModel.java | 474 ------------------ ...tasetSecurityAndPrivacyRDAExportModel.java | 29 -- ...atasetTechnicalResourceRDAExportModel.java | 28 -- .../rda/DmpContributorRDAExportModel.java | 52 -- .../data/rda/DmpCostRDAExportModel.java | 36 -- .../models/data/rda/DmpRDAExportModel.java | 164 ------ .../data/rda/FundingRDAExportModel.java | 43 -- .../models/data/rda/HostRDAExportModel.java | 86 ---- .../models/data/rda/IdRDAExportModel.java | 25 - .../data/rda/LicenseRDAExportModel.java | 20 - .../data/rda/ProjectRDAExportModel.java | 54 -- .../eudat/models/data/rda/RDAExportModel.java | 25 - .../eu/eudat/models/data/rda/RdaField.java | 36 -- .../user/components/datasetprofile/Field.java | 14 +- .../models/rda/mapper/CostRDAMapper.java | 33 +- .../models/rda/mapper/DatasetRDAMapper.java | 4 +- .../eudat/models/rda/mapper/DmpRDAMapper.java | 20 +- 43 files changed, 531 insertions(+), 1711 deletions(-) delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ProjectRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RdaField.java diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index 5df4bdf88..aecb1655c 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -11,6 +11,8 @@ import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; import eu.eudat.types.grant.GrantStateType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @@ -25,6 +27,7 @@ import java.util.concurrent.CompletableFuture; @Component("datasetDao") public class DatasetDaoImpl extends DatabaseAccess implements DatasetDao { + private static final Logger logger = LoggerFactory.getLogger(DatasetDaoImpl.class); @Autowired public DatasetDaoImpl(DatabaseService databaseService) { super(databaseService); } @@ -99,6 +102,7 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa @Override public Dataset createOrUpdate(Dataset item) { + logger.info("I'm Here " + item.getLabel()); return getDatabaseService().createOrUpdate(item, Dataset.class); } diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index 60199781b..d5c34d549 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 2.5.2 + 2.6.6 @@ -27,46 +27,48 @@ 1.8 0.0.1-SNAPSHOT - 5.3.8 + - 5.3.10.RELEASE + - + - 5.5.3.Final + - 1.9 - 4.11 - 1.2.17 + + + 2.15.0 - 1.7.12 + - 1.2.3 + - 4.0.0 + 5.2.2 2.12.3 7.6.2 - 2.3.1 + 2.3.0 + 2.9.0 + 1.33.4 + 2.4.0 + 42.2.22 + 2.0.3.RELEASE + 1.0.2.RELEASE + 1.1.2.RELEASE + 3.12.0 - - - org.json - json - 20160810 - - + org.springframework.boot spring-boot-starter-data-jpa @@ -78,6 +80,13 @@ ${hibernate.version} + + + org.postgresql + postgresql + ${postgresql.version} + + @@ -92,10 +101,11 @@ ${elasticsearch.version} + - org.elasticsearch.client - transport - ${elasticsearch.version} + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} @@ -103,14 +113,35 @@ com.google.api-client google-api-client - 1.23.0 + ${google.api.version} + + + + + org.springframework.social + spring-social-facebook + ${social.facebook.version} + + + + + org.springframework.social + spring-social-linkedin + ${social.linkedin.version} + + + + + org.springframework.social + spring-social-twitter + ${social.twitter.version} com.jayway.jsonpath json-path - 2.4.0 + ${json.path.version} @@ -126,12 +157,19 @@ ${jackson.version} + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + org.apache.commons commons-lang3 - 3.5 + ${apache.commons.lang3.version} + org.apache.poi @@ -145,19 +183,6 @@ ${apache.poi.version} - - - org.apache.xmlgraphics - fop - 2.3 - - - - org.jsoup - jsoup - 1.14.3 - - @@ -167,11 +192,12 @@ - commons-io - commons-io - 2.1 + org.jsoup + jsoup + 1.14.3 + javax.xml.bind @@ -183,7 +209,7 @@ org.glassfish.jaxb jaxb-core - 2.3.0 + ${jaxb.version} @@ -195,12 +221,13 @@ - + + javax.validation @@ -213,7 +240,6 @@ io.micrometer micrometer-registry-prometheus - 1.7.1 org.springframework.boot diff --git a/dmp-backend/web/pom.xml b/dmp-backend/web/pom.xml index 6798b6022..3cbfbaff3 100644 --- a/dmp-backend/web/pom.xml +++ b/dmp-backend/web/pom.xml @@ -50,7 +50,6 @@ com.fasterxml.jackson.core jackson-annotations - 2.12.3 @@ -71,55 +70,45 @@ com.github.ben-manes.caffeine caffeine - 2.9.0 - + - - org.postgresql - postgresql - 42.2.22 - - - + - + + <!– linkedin Login –> org.springframework.social spring-social-linkedin - 1.0.2.RELEASE - + <!– tweeter login–> org.springframework.social spring-social-twitter - 1.1.2.RELEASE - - + --> + diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java index a064145bc..ac3c01ccd 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java @@ -1,6 +1,6 @@ package eu.eudat.controllers; -import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.FileUpload; @@ -12,14 +12,15 @@ import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; import eu.eudat.logic.utilities.json.JsonSearcher; import eu.eudat.models.HintedModelFactory; +import eu.eudat.models.data.components.commons.datafield.UploadData; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.security.Principal; import eu.eudat.types.ApiMessageCode; import eu.eudat.types.Authorities; import org.apache.poi.util.IOUtils; -import org.json.JSONArray; -import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; @@ -32,25 +33,29 @@ import org.springframework.web.multipart.MultipartFile; import javax.transaction.Transactional; import java.io.*; import java.nio.file.Files; -import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; +import java.util.HashSet; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.UUID; import java.util.stream.Collectors; @RestController @CrossOrigin @RequestMapping(value = {"/api/file/"}) public class FileController { + private static final Logger logger = LoggerFactory.getLogger(FileController.class); private DatasetProfileManager datasetProfileManager; private final Environment environment; private DatabaseRepository databaseRepository; + private final ObjectMapper objectMapper; @Autowired public FileController(DatasetProfileManager datasetProfileManager, Environment environment, ApiContext apiContext) { this.datasetProfileManager = datasetProfileManager; this.environment = environment; this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); + this.objectMapper = apiContext.getUtilitiesService().getGenericObjectMapper(); } @RequestMapping(method = RequestMethod.POST, value = {"/upload"}) @@ -62,57 +67,48 @@ public class FileController { eu.eudat.models.data.admin.composite.DatasetProfile datasetprofile = this.datasetProfileManager.getDatasetProfile(datasetProfileId); - ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - String json = mapper.writeValueAsString(datasetprofile.getSections());; - JsonNode propertiesJson = mapper.readTree(json); + String json = objectMapper.writeValueAsString(datasetprofile.getSections()); + JsonNode propertiesJson = objectMapper.readTree(json); Set fieldNodes = new HashSet<>(); fieldNodes.addAll(JsonSearcher.findNodes(propertiesJson, "id", fieldId, false)); // AtomicReference exceptionMessage = null; - AtomicBoolean acceptedFile = new AtomicBoolean(false); - fieldNodes.forEach(node -> { + Boolean acceptedFile = false; + for (JsonNode node : fieldNodes) { JsonNode data = node.get("data"); - if (data != null && !data.toString().equals("\"\"") && !data.toString().equals("null")) { - String stringValue = data.toString().replaceAll("=", ":"); - JSONObject dataObj = new JSONObject(stringValue); - Map dataMap = ((JSONObject) dataObj).toMap(); - if(dataMap.get("maxFileSizeInMB") != null && !dataMap.get("maxFileSizeInMB").toString().equals("\"\"") && !dataMap.get("maxFileSizeInMB").toString().equals("null")) { - if (file.getSize() <= Integer.parseInt(dataMap.get("maxFileSizeInMB").toString())*1048576) { - acceptedFile.set(true); + try { + UploadData uploadData = objectMapper.treeToValue(data, UploadData.class); + if (uploadData != null) { + if (uploadData.getMaxFileSizeInMB() != null) { + if (file.getSize() <= (uploadData.getMaxFileSizeInMB() * Math.pow(1024, 2))) { + acceptedFile = true; + } } -// else { -// exceptionMessage.set("The file is too large. Max file upload is " + dataMap.get("maxFileSizeInMB").toString() + " MB."); -// } - } - - if(acceptedFile.get() && data.get("types") != null && !data.get("types").toString().equals("\"\"") && !data.get("types").toString().equals("null")) { - acceptedFile.set(false); - - JSONArray types = new JSONArray(data.get("types").toString()); - - types.iterator().forEachRemaining(element -> { - Map typesMap = ((JSONObject) element).toMap(); - if(typesMap.get("value") != null && !typesMap.get("value").toString().equals("\"\"") && !typesMap.get("value").toString().equals("null")) { - if(file.getContentType().equals(typesMap.get("value").toString())) { - acceptedFile.set(true); + if (acceptedFile && uploadData.getTypes() != null && !uploadData.getTypes().isEmpty()) { + acceptedFile = false; + for (UploadData.Option option : uploadData.getTypes()) { + if (option.getValue() != null) { + if (file.getContentType().equals(option.getValue())) { + acceptedFile = true; + } } } - }); + } } + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } + } // if(!acceptedFile.get()) { // exceptionMessage.set("The file type is not accepted."); // } - } - }); - if(!acceptedFile.get()) { + if (!acceptedFile) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("The uploaded file is too large or has an unaccepted type")); } File convFile = new File(this.environment.getProperty("temp.temp") + uuid); - convFile.createNewFile(); FileOutputStream fos = new FileOutputStream(convFile); fos.write(file.getBytes()); fos.close(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java index 381f86972..c84f05cf2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java @@ -6,6 +6,7 @@ import eu.eudat.models.data.security.Principal; import eu.eudat.types.ApiMessageCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -18,7 +19,7 @@ import javax.annotation.Priority; * Created by ikalyvas on 6/12/2018. */ @ControllerAdvice -@Priority(5) +@Order(5) public class ControllerErrorHandler { private static final Logger logger = LoggerFactory.getLogger(ControllerErrorHandler.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java index 63bf582cf..5eb6401f1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java @@ -4,6 +4,7 @@ import eu.eudat.exceptions.security.UnauthorisedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -16,7 +17,7 @@ import javax.annotation.Priority; * Created by ikalyvas on 6/12/2018. */ @ControllerAdvice -@Priority(4) +@Order(4) public class ControllerUnauthorisedHandler { private static final Logger logger = LoggerFactory.getLogger(ControllerUnauthorisedHandler.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 34cfadcd2..c5e9fd3e4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -65,7 +65,6 @@ import eu.eudat.types.MetricNames; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -97,21 +96,20 @@ import java.util.stream.Stream; @Component public class DataManagementPlanManager { private static final Logger logger = LoggerFactory.getLogger(DataManagementPlanManager.class); - private static final ObjectMapper objectMapper = new ObjectMapper(); - private final Map notificationPaths = Stream.of(new Object[][] { + private final Map notificationPaths = Stream.of(new Object[][]{ {NotificationType.DMP_MODIFIED, "/plans/edit"}, {NotificationType.DMP_PUBLISH, "/plans/publicEdit"}, {NotificationType.DMP_FINALISED, "/plans/edit"}, {NotificationType.DMP_MODIFIED_FINALISED, "/plans/edit"} }).collect(Collectors.toMap(data -> (NotificationType) data[0], data -> (String) data[1])); - private ApiContext apiContext; - private DatasetManager datasetManager; - private DatabaseRepository databaseRepository; - private Environment environment; - private RDAManager rdaManager; - private UserManager userManager; + private final ApiContext apiContext; + private final DatasetManager datasetManager; + private final DatabaseRepository databaseRepository; + private final Environment environment; + private final RDAManager rdaManager; + private final UserManager userManager; private final MetricsManager metricsManager; private final ConfigLoader configLoader; @@ -125,6 +123,7 @@ public class DataManagementPlanManager { this.userManager = userManager; this.metricsManager = metricsManager; this.configLoader = configLoader; + } /* @@ -318,7 +317,7 @@ public class DataManagementPlanManager { } else { dataManagementPlan.fromDataModelNoDatasets(dataManagementPlanEntity); } - Map dmpProperties = dataManagementPlanEntity.getDmpProperties() != null ? new org.json.JSONObject(dataManagementPlanEntity.getDmpProperties()).toMap() : null; + Map dmpProperties = dataManagementPlanEntity.getDmpProperties() != null ? apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dataManagementPlanEntity.getDmpProperties(), LinkedHashMap.class) : null; if (dmpProperties != null && dataManagementPlan.getDynamicFields() != null) dataManagementPlan.getDynamicFields().forEach(item -> { @@ -1474,8 +1473,8 @@ public class DataManagementPlanManager { DatasetWizardModel datasetWizardModel = new DatasetWizardModel(); Map properties = new HashMap<>(); if (dataset.getProperties() != null) { - JSONObject jobject = new JSONObject(dataset.getProperties()); - properties = jobject.toMap(); + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dataset.getProperties(), LinkedHashMap.class); + ; } PagedDatasetProfile pagedDatasetProfile = datasetManager.getPagedProfile(datasetWizardModel, dataset); visibilityRuleService.setProperties(properties); @@ -1763,9 +1762,9 @@ public class DataManagementPlanManager { UserInfo me = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); dmp.setModified(new Date()); dmp.setCreator(me); - Map extraProperties = objectMapper.readValue(dmp.getExtraProperties(), HashMap.class); + Map extraProperties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dmp.getExtraProperties(), HashMap.class); extraProperties.put("contact", me.getId().toString()); - dmp.setExtraProperties(objectMapper.writeValueAsString(extraProperties)); + dmp.setExtraProperties(apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(extraProperties)); dmp.setVersion(0); dmp.setStatus((short)0); dmp.setGroupId(UUID.randomUUID()); @@ -2043,7 +2042,7 @@ public class DataManagementPlanManager { headers.setContentType(MediaType.APPLICATION_JSON); ZenodoDeposit deposit = DMPToZenodoMapper.fromDMP(dmp, environment, configLoader); //if (Objects.requireNonNull(environment.getProperty("spring.profiles.active")).contains("devel")) { - String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(deposit); + String json = apiContext.getUtilitiesService().getGenericObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(deposit); logger.info(json); //} HttpEntity request = new HttpEntity<>(deposit, headers); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 871c59e3c..049f8ce54 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.type.CollectionType; +import com.fasterxml.jackson.databind.type.TypeFactory; import eu.eudat.data.dao.criteria.*; import eu.eudat.data.dao.entities.DataRepositoryDao; import eu.eudat.data.dao.entities.DatasetDao; @@ -56,8 +58,6 @@ import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; -import org.json.JSONArray; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -98,18 +98,18 @@ import java.util.stream.Stream; public class DatasetManager { private static final Logger logger = LoggerFactory.getLogger(DatasetManager.class); - private final Map notificationPaths = Stream.of(new Object[][] { + private final Map notificationPaths = Stream.of(new Object[][]{ {NotificationType.DATASET_MODIFIED, "/datasets/edit"}, {NotificationType.DATASET_MODIFIED_FINALISED, "/datasets/edit"} }).collect(Collectors.toMap(data -> (NotificationType) data[0], data -> (String) data[1])); - private ApiContext apiContext; - private DatabaseRepository databaseRepository; - private DatasetRepository datasetRepository; - private BuilderFactory builderFactory; - private UserManager userManager; - private ConfigLoader configLoader; - private Environment environment; + private final ApiContext apiContext; + private final DatabaseRepository databaseRepository; + private final DatasetRepository datasetRepository; + private final BuilderFactory builderFactory; + private final UserManager userManager; + private final ConfigLoader configLoader; + private final Environment environment; private final MetricsManager metricsManager; private final FileManager fileManager; @@ -168,20 +168,14 @@ public class DatasetManager { datasets = null; } - UserInfo userInfo = builderFactory.getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());//builderFactory.getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); // QueryableList items = databaseRepository.getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DatasetListingModel.class)); QueryableList items; - if (datasets != null) { - - if (!datasets.isEmpty()) { - //items = databaseRepository.getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class)); - final List datasetIds = datasets.stream().map(datasetE -> UUID.fromString(datasetE.getId())).distinct().collect(Collectors.toList()); - items = databaseRepository.getDatasetDao().filterFromElastic(datasetTableRequest.getCriteria(), datasetIds).withHint(HintedModelFactory.getHint(DatasetListingModel.class));//.withFields(Collections.singletonList("id")); - //items.where((builder, root) -> root.get("id").in(datasetIds)); - } else { - items = databaseRepository.getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DatasetListingModel.class));//.withFields(Collections.singletonList("id")); - //items.where((builder, root) -> root.get("id").in(new UUID[]{UUID.randomUUID()})); - } + if (datasets != null && !datasets.isEmpty()) { + //items = databaseRepository.getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class)); + final List datasetIds = datasets.stream().map(datasetE -> UUID.fromString(datasetE.getId())).distinct().collect(Collectors.toList()); + items = databaseRepository.getDatasetDao().filterFromElastic(datasetTableRequest.getCriteria(), datasetIds).withHint(HintedModelFactory.getHint(DatasetListingModel.class));//.withFields(Collections.singletonList("id")); + //items.where((builder, root) -> root.get("id").in(datasetIds)); } else { items = databaseRepository.getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DatasetListingModel.class));//.withFields(Collections.singletonList("id")); } @@ -196,7 +190,6 @@ public class DatasetManager { roles.add(datasetTableRequest.getCriteria().getRole()); } authItems = databaseRepository.getDatasetDao().getAuthenticated(items, userInfo, roles).distinct(); - pagedItems = PaginationManager.applyPaging(authItems, datasetTableRequest); } else { if (principal.getId() != null && datasetTableRequest.getCriteria().getRole() != null) { items.where((builder, root) -> { @@ -204,12 +197,12 @@ public class DatasetManager { return builder.and(builder.equal(userJoin.join("user", JoinType.LEFT).get("id"), principal.getId()), builder.equal(userJoin.get("role"), datasetTableRequest.getCriteria().getRole())); }); } - String[] strings = new String[1]; + //String[] strings = new String[1]; //strings[0] = "-dmp:publishedAt|join|"; //datasetTableRequest.getOrderings().setFields(strings); authItems = items; - pagedItems = PaginationManager.applyPaging(items, datasetTableRequest); } + pagedItems = PaginationManager.applyPaging(authItems, datasetTableRequest); DataTableData dataTable = new DataTableData<>(); @@ -387,8 +380,12 @@ public class DatasetManager { eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(datasetEntity.getProfile()); datasetprofile.setStatus(dataset.getStatus()); if (datasetEntity.getProperties() != null) { - JSONObject jObject = new JSONObject(datasetEntity.getProperties()); - Map properties = jObject.toMap(); + Map properties = null; + try { + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(datasetEntity.getProperties(), LinkedHashMap.class); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } datasetprofile.fromJsonObject(properties); } PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile(); @@ -456,8 +453,7 @@ public class DatasetManager { Map properties = new HashMap<>(); if (datasetEntity.getProperties() != null) { - JSONObject jObject = new JSONObject(datasetEntity.getProperties()); - properties = jObject.toMap(); + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(datasetEntity.getProperties(), LinkedHashMap.class); } wordBuilder.addParagraphContent("Dataset Description", document, ParagraphStyle.HEADER2, BigInteger.ZERO); @@ -489,8 +485,7 @@ public class DatasetManager { Map properties = new HashMap<>(); if (dataset.getDatasetProfileDefinition() != null) { - JSONObject jObject = new JSONObject(propertiesModelToString(dataset.getDatasetProfileDefinition())); - properties = jObject.toMap(); + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(propertiesModelToString(dataset.getDatasetProfileDefinition()), LinkedHashMap.class); } wordBuilder.addParagraphContent("Dataset Description", document, ParagraphStyle.HEADER2, BigInteger.ZERO); @@ -547,8 +542,7 @@ public class DatasetManager { throw new UnauthorisedException(); Map properties = new HashMap<>(); if (datasetEntity.getProperties() != null) { - JSONObject jobject = new JSONObject(datasetEntity.getProperties()); - properties = jobject.toMap(); + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(datasetEntity.getProperties(), LinkedHashMap.class); } PagedDatasetProfile pagedDatasetProfile = getPagedProfile(dataset, datasetEntity); visibilityRuleService.setProperties(properties); @@ -609,6 +603,7 @@ public class DatasetManager { // datasetWizardModel.setDatasetProfileDefinition(getPagedProfile(datasetWizardModel, dataset1)); UUID dmpId = dataset1.getDmp().getId(); dataset1.getDmp().setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList())); + this.deleteOldFilesAndAddNew(datasetWizardModel, userInfo); updateTags(dataset1, datasetWizardModel.getTags()); if (sendNotification) { if (dataset1.getStatus() != Dataset.Status.FINALISED.getValue()) { @@ -618,9 +613,6 @@ public class DatasetManager { } } - this.deleteOldFilesAndAddNew(datasetWizardModel, userInfo); - - return dataset1; } @@ -631,7 +623,7 @@ public class DatasetManager { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - String json = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition());; + String json = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition()); JsonNode propertiesJson = mapper.readTree(json); Set uploadNodes = new HashSet<>(); @@ -641,11 +633,15 @@ public class DatasetManager { JsonNode value = node.get("value"); if (value != null && !value.toString().equals("\"\"") && !value.toString().equals("null")) { String stringValue = value.toString().replaceAll("=", ":"); - JSONObject values = new JSONObject(stringValue); - Map data = ((JSONObject) values).toMap(); + Map data = null; + try { + data = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(stringValue, LinkedHashMap.class); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } int index = fileUploadIds.indexOf(data.get("id").toString()); - if(index != -1) { + if (index != -1) { // file in DB is the same as file in the Dataset fileUploadIds.remove(index); fileUploads.remove(index); @@ -657,9 +653,7 @@ public class DatasetManager { }); // old files in DB that are not contained anymore in the Dataset -> mark them as Deleted - fileUploads.forEach(fileUpload -> { - fileManager.markOldFileAsDeleted(fileUpload); - }); + fileUploads.forEach(fileManager::markOldFileAsDeleted); } private void sendNotification(Dataset dataset, DMP dmp, UserInfo user, NotificationType notificationType) { @@ -707,9 +701,9 @@ public class DatasetManager { nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); - JSONObject obj = new JSONObject(dataset.getProperties()); + Map obj = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dataset.getProperties(), LinkedHashMap.class); VisibilityRuleService visibilityRuleService = new VisibilityRuleServiceImpl(); - visibilityRuleService.setProperties(obj.toMap()); + visibilityRuleService.setProperties(obj); dataset.setProfile(profile); PagedDatasetProfile pagedDatasetProfile = this.getPagedProfile(new DatasetWizardModel(), dataset); @@ -719,7 +713,7 @@ public class DatasetManager { String failedField = null; for (String validator : datasetProfileValidators) { - if (obj.has(validator) && isNullOrEmpty(obj.getString(validator)) && isElementVisible(nodeList, validator, visibilityRuleService)) { + if (obj.containsKey(validator) && isNullOrEmpty(obj.get(validator).toString()) && isElementVisible(nodeList, validator, visibilityRuleService)) { //throw new Exception("Field value of " + validator + " must be filled."); failedField = validator; break; @@ -759,8 +753,12 @@ public class DatasetManager { private String propertiesModelToString(PagedDatasetProfile pagedDatasetProfile) { Map values = new LinkedHashMap<>(); pagedDatasetProfile.toMap(values); - JSONObject jobject = new JSONObject(values); - return jobject.toString(); + try { + return apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(values); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } + return null; } public void updateTags(Dataset datasetEntity, List tags) throws Exception { @@ -969,12 +967,9 @@ public class DatasetManager { ))))) .collect(Collectors.toMap(DatasetImportField::getId, DatasetImportField::getValue)); - // Transforms map into json file. - JSONObject jsonDatasetProperties = new JSONObject(importMap); - // Creates the entity data set to save. eu.eudat.data.entities.Dataset entity = new Dataset(); - entity.setProperties(jsonDatasetProperties.toString()); + entity.setProperties(apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(importMap)); entity.setLabel(importFile.getOriginalFilename()); DMP dmp = new DMP(); dmp.setId(UUID.fromString(dmpId)); @@ -1047,8 +1042,12 @@ public class DatasetManager { eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(profile); datasetprofile.setStatus(datasetEntity.getStatus()); if (datasetEntity.getProperties() != null) { - JSONObject jobject = new JSONObject(datasetEntity.getProperties()); - Map properties = jobject.toMap(); + Map properties = null; + try { + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(datasetEntity.getProperties(), LinkedHashMap.class); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } datasetprofile.fromJsonObject(properties); } PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile(); @@ -1117,11 +1116,15 @@ public class DatasetManager { JsonNode value = node.get("value"); if (!value.toString().equals("\"\"") && !value.toString().equals("null") && value.toString().startsWith("[")) { String stringValue = value.toString().replaceAll("=", ":"); - JSONArray values = new JSONArray(stringValue); - values.iterator().forEachRemaining(element -> { - Map data = ((JSONObject) element).toMap(); - this.addTag(tags, wizardModel.getTags(), data.get("id").toString(), data.get("name").toString()); - }); + List values = null; + try { + CollectionType tagCollection = TypeFactory.defaultInstance().constructCollectionType(LinkedList.class, Tag.class); + values = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(stringValue, tagCollection); + values.iterator().forEachRemaining(element -> this.addTag(tags, wizardModel.getTags(), element.getId(), element.getName())); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } + } else { List values = Arrays.asList(value.textValue().split(", ")); List tagValues = values.stream().map(stringValue -> new Tag(stringValue, stringValue)).collect(Collectors.toList()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java index e7b00d0e6..f8de5e044 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java @@ -33,7 +33,6 @@ import eu.eudat.models.data.userinfo.UserProfile; import eu.eudat.queryable.QueryableList; import eu.eudat.types.Authorities; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -129,13 +128,13 @@ public class UserManager { eu.eudat.data.entities.UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); apiContext.getOperationsContext().getDatabaseRepository().detachEntity(userInfo); HashMap result = - new ObjectMapper().readValue(userInfo.getAdditionalinfo(), HashMap.class); + apiContext.getUtilitiesService().getGenericObjectMapper().readValue(userInfo.getAdditionalinfo(), HashMap.class); userInfo.setName(settings.entrySet().stream().filter(entry -> entry.getKey().equals("name")).filter(Objects::nonNull).map(entry -> entry.getValue().toString()).findFirst().orElse(userInfo.getName())); settings.remove("name"); - result.putAll(settings); - userInfo.setAdditionalinfo(new JSONObject(result).toString()); - apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao() - .createOrUpdate(userInfo); + result.putAll(settings); + userInfo.setAdditionalinfo(apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(result)); + apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao() + .createOrUpdate(userInfo); } public PrincipalModel authenticate(AuthenticationService authenticationServiceImpl, Credentials credentials) throws NullEmailException { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java index b869320e9..ebe8290db 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java @@ -20,7 +20,6 @@ import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.datasetprofile.RenderStyle; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.externaldataset.ExternalAutocompleteFieldModel; -import org.json.JSONObject; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -31,6 +30,7 @@ import java.util.stream.Collectors; public class PrefillingMapper { private static final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); + private static final List tagDelimiters = Arrays.asList(", ", "; "); public static DatasetWizardModel mapPrefilledEntityToDatasetWizard(Map prefilledEntity, PrefillingGet prefillingGet, String type, DatasetProfile profile, DatasetManager datasetManager) throws Exception { @@ -151,12 +151,12 @@ public class PrefillingMapper { properties.put(id, mapper.valueToTree(parseTags(parsedValue)).toString()); break; case DATASET_IDENTIFIER: - JSONObject datasetID = new JSONObject(); - datasetID.put("identifier", parsedValue); - if(type.equals("zenodo")){ - datasetID.put("type", "doi"); + Map datasetId = new LinkedHashMap<>(); + datasetId.put("identifier", parsedValue); + if (type.equals("zenodo")) { + datasetId.put("type", "doi"); } - properties.put(id, datasetID.toString()); + properties.put(id, mapper.writeValueAsString(datasetId)); break; default: if (!parsedValues.isEmpty()) @@ -210,13 +210,23 @@ public class PrefillingMapper { } private static List parseTags(String value) throws JsonProcessingException { + if (value == null || value.isEmpty()) return new LinkedList<>(); - String[] rawTags = value.split(", "); - List parsedTags = new LinkedList<>(); - for (String rawTag : rawTags) { - parsedTags.add(new Tag(rawTag, rawTag)); + String[] rawTags = null; + for (String tagDelim : tagDelimiters) { + rawTags = value.split(tagDelim); + if (rawTags.length > 1) { + break; + } } - return parsedTags; + if (rawTags != null) { + List parsedTags = new LinkedList<>(); + for (String rawTag : rawTags) { + parsedTags.add(new Tag(rawTag, rawTag)); + } + return parsedTags; + } + return null; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/security/validators/google/GoogleTokenValidator.java b/dmp-backend/web/src/main/java/eu/eudat/logic/security/validators/google/GoogleTokenValidator.java index add180486..ed3e8d7d8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/security/validators/google/GoogleTokenValidator.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/security/validators/google/GoogleTokenValidator.java @@ -5,7 +5,7 @@ import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload; import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; -import com.google.api.client.json.jackson2.JacksonFactory; +import com.google.api.client.json.gson.GsonFactory; import eu.eudat.logic.security.validators.TokenValidator; import eu.eudat.logic.security.validators.TokenValidatorFactoryImpl; import eu.eudat.logic.services.operations.authentication.AuthenticationService; @@ -29,9 +29,9 @@ public class GoogleTokenValidator implements TokenValidator { @Autowired public GoogleTokenValidator(Environment environment, AuthenticationService nonVerifiedUserAuthenticationService) { this.nonVerifiedUserAuthenticationService = nonVerifiedUserAuthenticationService; - verifier = new GoogleIdTokenVerifier.Builder(transport, JacksonFactory.getDefaultInstance()) - .setAudience(Collections.singletonList(environment.getProperty("google.login.clientId"))) - .build(); + verifier = new GoogleIdTokenVerifier.Builder(transport, GsonFactory.getDefaultInstance()) + .setAudience(Collections.singletonList(environment.getProperty("google.login.clientId"))) + .build(); } private GoogleIdToken verifyUserAndGetUser(String idTokenString) throws IOException, GeneralSecurityException { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java index 2983bfa1d..915d03c74 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java @@ -1,5 +1,6 @@ package eu.eudat.logic.services.operations.authentication; +import com.fasterxml.jackson.core.JsonProcessingException; import eu.eudat.data.entities.Credential; import eu.eudat.data.entities.UserInfo; import eu.eudat.data.entities.UserRole; @@ -14,7 +15,6 @@ import eu.eudat.models.data.login.Credentials; import eu.eudat.models.data.loginprovider.LoginProviderUser; import eu.eudat.models.data.security.Principal; import eu.eudat.types.Authorities; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; @@ -164,8 +164,13 @@ public abstract class AbstractAuthenticationService implements AuthenticationSer apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(role); } else { - Map additionalInfo = userInfo.getAdditionalinfo() != null ? - new JSONObject(userInfo.getAdditionalinfo()).toMap() : new HashMap<>(); + Map additionalInfo = null; + try { + additionalInfo = userInfo.getAdditionalinfo() != null ? + apiContext.getUtilitiesService().getGenericObjectMapper().readValue(userInfo.getAdditionalinfo(), LinkedHashMap.class) : new HashMap<>(); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } if (profile.getAvatarUrl() != null && !profile.getAvatarUrl().isEmpty() && !profile.getAvatarUrl().equals("null")) { additionalInfo.put("avatarUrl", profile.getAvatarUrl()); } @@ -182,7 +187,11 @@ public abstract class AbstractAuthenticationService implements AuthenticationSer additionalInfo.put("zenodoEmail", profile.getEmail()); } userInfo.setLastloggedin(new Date()); - userInfo.setAdditionalinfo(new JSONObject(additionalInfo).toString()); + try { + userInfo.setAdditionalinfo(apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(additionalInfo)); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } Set credentials = userInfo.getCredentials(); if (credentials.contains(credential)) { Credential oldCredential = credentials.stream().filter(item -> credential.getProvider().equals(item.getProvider())).findFirst().get(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/VerifiedUserAuthenticationService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/VerifiedUserAuthenticationService.java index dfaca0d7a..88ca0dc20 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/VerifiedUserAuthenticationService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/VerifiedUserAuthenticationService.java @@ -1,27 +1,21 @@ package eu.eudat.logic.services.operations.authentication; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.data.entities.Credential; import eu.eudat.data.entities.UserInfo; import eu.eudat.data.entities.UserRole; import eu.eudat.data.entities.UserToken; import eu.eudat.exceptions.security.NullEmailException; -import eu.eudat.logic.builders.entity.CredentialBuilder; -import eu.eudat.logic.builders.entity.UserInfoBuilder; -import eu.eudat.logic.builders.entity.UserTokenBuilder; import eu.eudat.logic.builders.model.models.PrincipalBuilder; -import eu.eudat.logic.security.validators.TokenValidatorFactoryImpl; import eu.eudat.logic.services.ApiContext; -import eu.eudat.models.data.login.Credentials; -import eu.eudat.models.data.loginprovider.LoginProviderUser; import eu.eudat.models.data.security.Principal; import eu.eudat.types.Authorities; -import org.json.JSONObject; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import java.time.Instant; -import java.util.*; +import java.util.Date; +import java.util.HashSet; +import java.util.List; @Service("verifiedUserAuthenticationService") diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java index 3f73d4996..aa16f0fa3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java @@ -1,7 +1,6 @@ package eu.eudat.logic.services.utilities; import eu.eudat.models.data.mail.SimpleMail; -import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -17,10 +16,15 @@ import javax.mail.MessagingException; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; -import java.io.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; @Service("mailService") @@ -84,10 +88,11 @@ public class MailServiceImpl implements MailService { Resource resource = applicationContext.getResource(resourceTemplate); try { InputStream inputStream = resource.getInputStream(); - StringWriter writer = new StringWriter(); - IOUtils.copy(inputStream, writer, "UTF-8"); + String tempate = new BufferedReader( + new InputStreamReader(inputStream, StandardCharsets.UTF_8) + ).lines().collect(Collectors.joining("\n")); inputStream.close(); - return writer.toString(); + return tempate; } catch (IOException e) { logger.error(e.getMessage(), e); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesService.java index 58e9c499b..46d87ca04 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesService.java @@ -1,5 +1,6 @@ package eu.eudat.logic.services.utilities; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.services.forms.VisibilityRuleService; /** @@ -12,4 +13,6 @@ public interface UtilitiesService { MailService getMailService(); ConfirmationEmailService getConfirmationEmailService(); + + ObjectMapper getGenericObjectMapper(); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesServiceImpl.java index 9bc943280..14b916dcc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesServiceImpl.java @@ -1,5 +1,6 @@ package eu.eudat.logic.services.utilities; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.services.forms.VisibilityRuleServiceImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -14,12 +15,14 @@ public class UtilitiesServiceImpl implements UtilitiesService { private InvitationService invitationService; private MailService mailService; private ConfirmationEmailService confirmationEmailService; + private final ObjectMapper objectMapper; @Autowired public UtilitiesServiceImpl(InvitationService invitationService, MailService mailService, ConfirmationEmailService confirmationEmailService) { this.invitationService = invitationService; this.mailService = mailService; this.confirmationEmailService = confirmationEmailService; + this.objectMapper = new ObjectMapper(); } @Override @@ -27,6 +30,11 @@ public class UtilitiesServiceImpl implements UtilitiesService { return confirmationEmailService; } + @Override + public ObjectMapper getGenericObjectMapper() { + return this.objectMapper; + } + @Override public InvitationService getInvitationService() { return invitationService; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/pdf/PDFUtils.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/pdf/PDFUtils.java index 6f842b1f3..5118aac25 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/pdf/PDFUtils.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/pdf/PDFUtils.java @@ -1,7 +1,6 @@ package eu.eudat.logic.utilities.documents.pdf; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; -import org.apache.commons.io.IOUtils; import org.springframework.core.env.Environment; import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpEntity; @@ -36,7 +35,8 @@ public class PDFUtils { File resultPdf = new File(environment.getProperty("temp.temp") + uuid + ".pdf"); FileOutputStream output = new FileOutputStream(resultPdf); - IOUtils.write(queueResult, output); + output.write(queueResult); + output.flush(); output.close(); Files.deleteIfExists(file.getFile().toPath()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java index df9549b8d..e1ce8e714 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java @@ -1,5 +1,6 @@ package eu.eudat.logic.utilities.documents.word; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.services.forms.VisibilityRuleService; @@ -15,11 +16,12 @@ import eu.eudat.models.data.user.composite.PagedDatasetProfile; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.*; -import org.json.JSONArray; -import org.json.JSONException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; @@ -45,26 +47,27 @@ import static org.apache.poi.xwpf.usermodel.Document.*; public class WordBuilder { private static final Logger logger = LoggerFactory.getLogger(WordBuilder.class); - private static final Map IMAGE_TYPE_MAP = Stream.of(new Object[][] { - {"image/jpeg", PICTURE_TYPE_JPEG}, - {"image/png", PICTURE_TYPE_PNG}, - {"image/gif", PICTURE_TYPE_GIF}, - {"image/tiff", PICTURE_TYPE_TIFF}, - {"image/bmp", PICTURE_TYPE_BMP}, - {"image/wmf", PICTURE_TYPE_WMF} - } - ).collect(Collectors.toMap(objects -> (String)objects[0], o -> (Integer)o[1])); + private static final Map IMAGE_TYPE_MAP = Stream.of(new Object[][]{ + {"image/jpeg", PICTURE_TYPE_JPEG}, + {"image/png", PICTURE_TYPE_PNG}, + {"image/gif", PICTURE_TYPE_GIF}, + {"image/tiff", PICTURE_TYPE_TIFF}, + {"image/bmp", PICTURE_TYPE_BMP}, + {"image/wmf", PICTURE_TYPE_WMF} + } + ).collect(Collectors.toMap(objects -> (String) objects[0], o -> (Integer) o[1])); - private Map> options = new HashMap<>(); - private CTAbstractNum cTAbstractNum; + private final Map> options = new HashMap<>(); + private final CTAbstractNum cTAbstractNum; private BigInteger numId; private Integer indent; - private static final ObjectMapper mapper = new ObjectMapper(); + private final ObjectMapper mapper; public WordBuilder(Environment environment) { this.cTAbstractNum = CTAbstractNum.Factory.newInstance(); this.cTAbstractNum.setAbstractNumId(BigInteger.valueOf(1)); this.indent = 0; + this.mapper = new ObjectMapper(); this.buildOptions(environment); } @@ -164,7 +167,7 @@ public class WordBuilder { int format; format = IMAGE_TYPE_MAP.getOrDefault(fileType, 0); try { - FileInputStream image = new FileInputStream(environment.getProperty("file.storage") + imageId); + ImageInputStream iis = ImageIO.createImageInputStream(new File(environment.getProperty("file.storage") + imageId)); Iterator readers = ImageIO.getImageReaders(iis); if (readers.hasNext()) { @@ -174,30 +177,30 @@ public class WordBuilder { int initialImageWidth = reader.getWidth(0); int initialImageHeight = reader.getHeight(0); - float ratio = initialImageHeight / (float)initialImageWidth; + float ratio = initialImageHeight / (float) initialImageWidth; - int marginLeftInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getLeft().intValue(); - int marginRightInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getRight().intValue(); - int pageWidthInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgSz().getW().intValue(); - int pageWidth = Math.round((pageWidthInDXA - marginLeftInDXA - marginRightInDXA) / (float)20); // /20 converts dxa to points + int marginLeftInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getLeft()).intValue(); + int marginRightInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getRight()).intValue(); + int pageWidthInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgSz().getW()).intValue(); + int pageWidth = Math.round((pageWidthInDXA - marginLeftInDXA - marginRightInDXA) / (float) 20); // /20 converts dxa to points - int imageWidth = Math.round(initialImageWidth*(float)0.75); // *0.75 converts pixels to points + int imageWidth = Math.round(initialImageWidth * (float) 0.75); // *0.75 converts pixels to points int width = Math.min(imageWidth, pageWidth); - int marginTopInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getTop().intValue(); - int marginBottomInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getBottom().intValue(); - int pageHeightInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgSz().getH().intValue(); - int pageHeight = Math.round((pageHeightInDXA - marginTopInDXA - marginBottomInDXA) / (float)20); // /20 converts dxa to points + int marginTopInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getTop()).intValue(); + int marginBottomInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getBottom()).intValue(); + int pageHeightInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgSz().getH()).intValue(); + int pageHeight = Math.round((pageHeightInDXA - marginTopInDXA - marginBottomInDXA) / (float) 20); // /20 converts dxa to points - int imageHeight = Math.round(initialImageHeight * ((float)0.75)); // *0.75 converts pixels to points + int imageHeight = Math.round(initialImageHeight * ((float) 0.75)); // *0.75 converts pixels to points - int height = Math.round(width*ratio); - if(height > pageHeight) { + int height = Math.round(width * ratio); + if (height > pageHeight) { // height calculated with ratio is too large. Image may have Portrait (vertical) orientation. Recalculate image dimensions. height = Math.min(imageHeight, pageHeight); - width = Math.round(height/ratio); + width = Math.round(height / ratio); } - + FileInputStream image = new FileInputStream(environment.getProperty("file.storage") + imageId); run.addPicture(image, format, fileName, Units.toEMU(width), Units.toEMU(height)); paragraph.setPageBreak(false); } @@ -380,16 +383,16 @@ public class WordBuilder { return null; } try { - JSONArray array = new JSONArray(JavaToJson.objectStringToJson(format)); + List> array = this.mapper.readValue(JavaToJson.objectStringToJson(format), ArrayList.class); StringBuilder multipleFormats = new StringBuilder(); - for (int i = 0; i < array.length(); i++) { - multipleFormats.append(array.getJSONObject(i).getString(attribute)).append(", "); + for (Map node : array) { + multipleFormats.append(node.get(attribute)).append(", "); } if (multipleFormats.length() > 0) { multipleFormats.setLength(multipleFormats.length() - 2); } return multipleFormats.toString(); - } catch (JSONException e) { + } catch (JsonProcessingException e) { return format; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java index 9c8a591b4..a435b62d2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java @@ -1,7 +1,6 @@ package eu.eudat.logic.utilities.documents.xml; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.exc.MismatchedInputException; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.data.components.commons.datafield.ExternalDatasetsData; @@ -10,8 +9,6 @@ import eu.eudat.models.data.user.components.datasetprofile.FieldSet; import eu.eudat.models.data.user.components.datasetprofile.Section; import eu.eudat.models.data.user.composite.DatasetProfilePage; import eu.eudat.models.data.user.composite.PagedDatasetProfile; -import org.json.JSONArray; -import org.json.JSONException; import org.springframework.core.env.Environment; import org.w3c.dom.Document; import org.w3c.dom.Element; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/notification/NotificationScheduleJob.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/notification/NotificationScheduleJob.java index 24c5b593a..150738a53 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/notification/NotificationScheduleJob.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/notification/NotificationScheduleJob.java @@ -18,20 +18,20 @@ import java.util.concurrent.CompletableFuture; @Component public class NotificationScheduleJob { - private static final Logger logger = LoggerFactory.getLogger(NotificationScheduleJob.class); + private static final Logger logger = LoggerFactory.getLogger(NotificationScheduleJob.class); - private ApiContext apiContext; - private NotificationManager notificationManager; + private final ApiContext apiContext; + private final NotificationManager notificationManager; - @Autowired - public NotificationScheduleJob(ApiContext apiContext, NotificationManager notificationManager) { - this.apiContext = apiContext; - this.notificationManager = notificationManager; - } + @Autowired + public NotificationScheduleJob(ApiContext apiContext, NotificationManager notificationManager) { + this.apiContext = apiContext; + this.notificationManager = notificationManager; + } - @Transactional - @Scheduled(fixedRateString = "${notification.rateInterval}") - public void sendNotifications() { + @Transactional + @Scheduled(fixedRateString = "${notification.rateInterval}") + public void sendNotifications() { List> futures = new LinkedList<>(); this.apiContext.getOperationsContext().getDatabaseRepository().getNotificationDao().asQueryable().where(((builder, root) -> builder.and( diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/UploadData.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/UploadData.java index c3b0dad59..1d493326d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/UploadData.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/UploadData.java @@ -13,7 +13,7 @@ import java.util.Map; public class UploadData extends FieldData { - public class Option implements XmlSerializable { + public static class Option implements XmlSerializable { private String label; private String value; @@ -77,7 +77,7 @@ public class UploadData extends FieldData { if (data != null) { List> types = ((Map>>) data).get("types"); for (Map map : types) { - UploadData.Option newOption = new UploadData.Option(); + UploadData.Option newOption = new Option(); newOption.setLabel(map.get("label")); newOption.setValue(map.get("value")); this.types.add(newOption); @@ -125,7 +125,7 @@ public class UploadData extends FieldData { for (int temp = 0; temp < optionElements.getLength(); temp++) { Node optionElement = optionElements.item(temp); if (optionElement.getNodeType() == Node.ELEMENT_NODE) { - this.types.add(new UploadData.Option().fromXml((Element) optionElement)); + this.types.add(new Option().fromXml((Element) optionElement)); } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index cc2dcd4fb..532ca8aa3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -1,5 +1,7 @@ package eu.eudat.models.data.dmp; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.*; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; @@ -7,18 +9,21 @@ import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile; import eu.eudat.models.data.funder.Funder; -import eu.eudat.models.data.helpermodels.Tuple; -import eu.eudat.models.data.listingmodels.DatasetListingModel; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.grant.Grant; +import eu.eudat.models.data.helpermodels.Tuple; +import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.project.Project; import eu.eudat.models.data.userinfo.UserListingModel; import net.minidev.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.*; import java.util.stream.Collectors; public class DataManagementPlan implements DataModel { + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final Logger logger = LoggerFactory.getLogger(DataManagementPlan.class); private UUID id; private String label; private UUID groupId; @@ -233,67 +238,71 @@ public class DataManagementPlan implements DataModel { @Override public DataManagementPlan fromDataModel(DMP entity) { - this.id = entity.getId(); - this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; - this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()): new ArrayList<>(); - this.version = entity.getVersion(); - this.groupId = this.groupId == null ? null : entity.getGroupId(); - this.label = entity.getLabel(); - this.grant = new Grant(); - this.properties = entity.getProperties() != null ? new org.json.JSONObject(entity.getProperties()).toMap() : null; - this.grant.fromDataModel(entity.getGrant()); - this.creator = new eu.eudat.models.data.userinfo.UserInfo(); - this.groupId = entity.getGroupId(); - this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); - this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); - if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { - this.definition.getFields().forEach(item -> { - Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); - if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); - }); - } - if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) - this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - - if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { - this.profiles = new LinkedList<>(); - for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) { - AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); - this.profiles.add(associatedProfile); + try { + this.id = entity.getId(); + this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; + this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.version = entity.getVersion(); + this.groupId = this.groupId == null ? null : entity.getGroupId(); + this.label = entity.getLabel(); + this.grant = new Grant(); + this.properties = entity.getProperties() != null ? objectMapper.readValue(entity.getProperties(), LinkedHashMap.class) : null; + this.grant.fromDataModel(entity.getGrant()); + this.creator = new eu.eudat.models.data.userinfo.UserInfo(); + this.groupId = entity.getGroupId(); + this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); + this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); + if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { + this.definition.getFields().forEach(item -> { + Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); + if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); + }); } - } - if (entity.getDataset() != null) { - if (entity.isPublic()) { - this.datasets = entity.getDataset().stream() - .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue()) && !dataset.getStatus().equals(Dataset.Status.SAVED.getValue())) - .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); - } else { - this.datasets = entity.getDataset().stream() - .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue())) - .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); + if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) + this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); + + if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { + this.profiles = new LinkedList<>(); + for (DatasetProfile datasetProfile : entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.profiles.add(associatedProfile); + } } - } - this.modified = entity.getModified(); - this.created = entity.getCreated(); - this.description = entity.getDescription(); - this.status = entity.getStatus(); - this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); - this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.doi = entity.getDoi(); + if (entity.getDataset() != null) { + if (entity.isPublic()) { + this.datasets = entity.getDataset().stream() + .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue()) && !dataset.getStatus().equals(Dataset.Status.SAVED.getValue())) + .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); + } else { + this.datasets = entity.getDataset().stream() + .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue())) + .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); + } + } + this.modified = entity.getModified(); + this.created = entity.getCreated(); + this.description = entity.getDescription(); + this.status = entity.getStatus(); + this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); + this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.doi = entity.getDoi(); - if (entity.getProject() != null) { - this.project = new Project(); - this.project = new Project().fromDataModel(entity.getProject()); - } + if (entity.getProject() != null) { + this.project = new Project(); + this.project = new Project().fromDataModel(entity.getProject()); + } - if (entity.getGrant().getFunder() != null) { - this.funder = new Funder(); - this.funder.fromDataModel(entity.getGrant().getFunder()); - } - this.isPublic = entity.isPublic(); + if (entity.getGrant().getFunder() != null) { + this.funder = new Funder(); + this.funder.fromDataModel(entity.getGrant().getFunder()); + } + this.isPublic = entity.isPublic(); - this.extraProperties = entity.getExtraProperties() != null ? new org.json.JSONObject(entity.getExtraProperties()).toMap() : null; + this.extraProperties = entity.getExtraProperties() != null ? objectMapper.readValue(entity.getExtraProperties(), LinkedHashMap.class) : null; + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } return this; } @@ -342,54 +351,58 @@ public class DataManagementPlan implements DataModel { } public DataManagementPlan fromDataModelNoDatasets(DMP entity) { - this.id = entity.getId(); - this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; - this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().filter(Objects::nonNull).map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.version = entity.getVersion(); - this.label = entity.getLabel(); - this.grant = new Grant(); - this.properties = entity.getProperties() != null ? new org.json.JSONObject(entity.getProperties()).toMap() : null; - this.creator = new eu.eudat.models.data.userinfo.UserInfo(); - this.groupId = entity.getGroupId(); - this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); - this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); - if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { - this.definition.getFields().forEach(item -> { - Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); - fieldOptional.ifPresent(stringObjectMap -> item.setValue(stringObjectMap.get("value"))); - }); - } - if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) - this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - - if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { - this.profiles = new LinkedList<>(); - for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) { - AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); - this.profiles.add(associatedProfile); + try { + this.id = entity.getId(); + this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; + this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().filter(Objects::nonNull).map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.version = entity.getVersion(); + this.label = entity.getLabel(); + this.grant = new Grant(); + this.properties = entity.getProperties() != null ? objectMapper.readValue(entity.getProperties(), LinkedHashMap.class) : null; + this.creator = new eu.eudat.models.data.userinfo.UserInfo(); + this.groupId = entity.getGroupId(); + this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); + this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); + if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { + this.definition.getFields().forEach(item -> { + Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); + fieldOptional.ifPresent(stringObjectMap -> item.setValue(stringObjectMap.get("value"))); + }); } - } - this.modified = entity.getModified(); - this.created = entity.getCreated(); - this.description = entity.getDescription(); - this.status = entity.getStatus(); - this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); - this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.doi = entity.getDoi(); - this.grant.fromDataModel(entity.getGrant()); + if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) + this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - if (entity.getProject() != null) { - this.project = new Project(); - this.project = new Project().fromDataModel(entity.getProject()); - } - if (entity.getGrant().getFunder() != null) { - this.funder = new Funder(); - this.funder.fromDataModel(entity.getGrant().getFunder()); - } - this.isPublic = entity.isPublic(); + if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { + this.profiles = new LinkedList<>(); + for (DatasetProfile datasetProfile : entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.profiles.add(associatedProfile); + } + } + this.modified = entity.getModified(); + this.created = entity.getCreated(); + this.description = entity.getDescription(); + this.status = entity.getStatus(); + this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); + this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.doi = entity.getDoi(); + this.grant.fromDataModel(entity.getGrant()); - this.extraProperties = entity.getExtraProperties() != null ? new org.json.JSONObject(entity.getExtraProperties()).toMap() : null; + if (entity.getProject() != null) { + this.project = new Project(); + this.project = new Project().fromDataModel(entity.getProject()); + } + if (entity.getGrant().getFunder() != null) { + this.funder = new Funder(); + this.funder.fromDataModel(entity.getGrant().getFunder()); + } + this.isPublic = entity.isPublic(); + + this.extraProperties = entity.getExtraProperties() != null ? objectMapper.readValue(entity.getExtraProperties(), LinkedHashMap.class) : null; + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } return this; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java index 1eca8b81c..5060f3f1e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java @@ -1,5 +1,8 @@ package eu.eudat.models.data.dmp; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.*; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; @@ -14,11 +17,15 @@ import eu.eudat.models.data.grant.GrantDMPEditorModel; import eu.eudat.models.data.project.ProjectDMPEditorModel; import eu.eudat.models.data.userinfo.UserListingModel; import net.minidev.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.*; import java.util.stream.Collectors; public class DataManagementPlanEditorModel implements DataModel { + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final Logger logger = LoggerFactory.getLogger(DataManagementPlanEditorModel.class); private UUID id; private String label; private UUID groupId; @@ -224,49 +231,53 @@ public class DataManagementPlanEditorModel implements DataModel(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; - this.organisations = entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()); - this.researchers = entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()); - this.version = entity.getVersion(); - this.groupId = this.groupId == null ? null : entity.getGroupId(); - this.label = entity.getLabel(); - this.grant = new GrantDMPEditorModel(); - this.properties = entity.getProperties() != null ? new org.json.JSONObject(entity.getProperties()).toMap() : null; - this.grant.getExistGrant().fromDataModel(entity.getGrant()); - this.grant.getExistGrant().setSource(""); - this.creator = new eu.eudat.models.data.userinfo.UserInfo(); - this.groupId = entity.getGroupId(); - this.lockable = entity.getDataset().stream().findAny().isPresent(); - this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); - if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { - this.definition.getFields().forEach(item -> { - Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); - if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); - }); - } - if (entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) - this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - - if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { - this.profiles = new LinkedList<>(); - for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) { - AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); - this.profiles.add(associatedProfile); + try { + this.id = entity.getId(); + this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; + this.organisations = entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()); + this.researchers = entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()); + this.version = entity.getVersion(); + this.groupId = this.groupId == null ? null : entity.getGroupId(); + this.label = entity.getLabel(); + this.grant = new GrantDMPEditorModel(); + this.properties = entity.getProperties() != null ? objectMapper.readValue(entity.getProperties(), LinkedHashMap.class) : null; + this.grant.getExistGrant().fromDataModel(entity.getGrant()); + this.grant.getExistGrant().setSource(""); + this.creator = new eu.eudat.models.data.userinfo.UserInfo(); + this.groupId = entity.getGroupId(); + this.lockable = entity.getDataset().stream().findAny().isPresent(); + this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); + if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { + this.definition.getFields().forEach(item -> { + Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); + if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); + }); } + if (entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) + this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); + + if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { + this.profiles = new LinkedList<>(); + for (DatasetProfile datasetProfile : entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.profiles.add(associatedProfile); + } + } + this.datasets = entity.getDataset().stream().map(item -> new DatasetWizardModel().fromDataModelNoDmp(item)).collect(Collectors.toList()); + this.modified = entity.getModified(); + this.created = entity.getCreated(); + this.description = entity.getDescription(); + this.status = entity.getStatus(); + this.project = new ProjectDMPEditorModel(); + this.project.getExistProject().fromDataModel(entity.getProject()); + this.associatedUsers = entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()); + this.users = entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()); + this.funder = new FunderDMPEditorModel(); + this.funder.getExistFunder().fromDataModel(entity.getGrant().getFunder()); + this.extraProperties = entity.getExtraProperties() != null ? objectMapper.readValue(entity.getExtraProperties(), LinkedHashMap.class) : null; + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); } - this.datasets = entity.getDataset().stream().map(item -> new DatasetWizardModel().fromDataModelNoDmp(item)).collect(Collectors.toList()); - this.modified = entity.getModified(); - this.created = entity.getCreated(); - this.description = entity.getDescription(); - this.status = entity.getStatus(); - this.project = new ProjectDMPEditorModel(); - this.project.getExistProject().fromDataModel(entity.getProject()); - this.associatedUsers = entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()); - this.users = entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()); - this.funder = new FunderDMPEditorModel(); - this.funder.getExistFunder().fromDataModel(entity.getGrant().getFunder()); - this.extraProperties = entity.getExtraProperties() != null ? new org.json.JSONObject(entity.getExtraProperties()).toMap() : null; return this; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java deleted file mode 100644 index 6f03ac9f7..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java +++ /dev/null @@ -1,44 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.UserInfo; - -public class ContactRDAExportModel { - private String mbox; - private String name; - private IdRDAExportModel contact_id; - - public String getMbox() { - return mbox; - } - public void setMbox(String mbox) { - this.mbox = mbox; - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public IdRDAExportModel getContact_id() { - return contact_id; - } - public void setContact_id(IdRDAExportModel contact_id) { - this.contact_id = contact_id; - } - - public ContactRDAExportModel fromDataModel(UserInfo entity) { - ContactRDAExportModel contact = new ContactRDAExportModel(); - contact.mbox = entity.getEmail(); - contact.name = entity.getName(); - // TODO: we should use a contact_id and not our UUID. - if (!entity.getId().toString().isEmpty()) { - contact.contact_id = new IdRDAExportModel(entity.getId().toString(), "other"); - } - else { - contact.contact_id = null; - } - return contact; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java deleted file mode 100644 index 0711822cb..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java +++ /dev/null @@ -1,93 +0,0 @@ -package eu.eudat.models.data.rda; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import java.util.List; - -public class DatasetDistributionRDAExportModel { - private String access_url; - private String available_till; - private String byte_size; - private String data_access; // Allowed values: open / shared / closed - private String description; - private String download_url; - private List format; // Format according to: https://www.iana.org/assignments/media-types/media-types.xhtml if appropriate, otherwise use the common name for this format - private HostRDAExportModel host; - private List license; - private String title; - - public String getAccess_url() { - return access_url; - } - public void setAccess_url(String access_url) { - this.access_url = access_url; - } - - public String getAvailable_till() { - return available_till; - } - public void setAvailable_till(String available_till) { - this.available_till = available_till; - } - - public String getByte_size() { - return byte_size; - } - public void setByte_size(String byte_size) { - this.byte_size = byte_size; - } - - public String getData_access() { - return data_access; - } - public void setData_access(String data_access) { - this.data_access = data_access; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getDownload_url() { - return download_url; - } - public void setDownload_url(String download_url) { - this.download_url = download_url; - } - - public List getFormat() { - return format; - } - public void setFormat(List format) { - this.format = format; - } - - public HostRDAExportModel getHost() { - return host; - } - public void setHost(HostRDAExportModel host) { - this.host = host; - } - - public List getLicense() { - return license; - } - public void setLicense(List license) { - this.license = license; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - @JsonIgnore - public boolean isValid() { - return title != null || data_access != null; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java deleted file mode 100644 index 2b5da6abd..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java +++ /dev/null @@ -1,47 +0,0 @@ -package eu.eudat.models.data.rda; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -public class DatasetMetadataRDAExportModel { - private String description; // Not mandatory. - private String language; - private IdRDAExportModel metadata_standard_id; - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; - } - - public IdRDAExportModel getMetadata_standard_id() { - return metadata_standard_id; - } - public void setMetadata_standard_id(IdRDAExportModel metadata_standard_id) { - this.metadata_standard_id = metadata_standard_id; - } - - public DatasetMetadataRDAExportModel fromDataModel(String key, Object value) { - DatasetMetadataRDAExportModel metadataRDAExportModel = new DatasetMetadataRDAExportModel(); - if (key.contains("metadata_standard_id")) - metadataRDAExportModel.setMetadata_standard_id(new IdRDAExportModel(value.toString(), "other")); - else if (key.contains("language")) - metadataRDAExportModel.setLanguage(value.toString()); - else if (key.contains("description")) - metadataRDAExportModel.setDescription(value.toString()); - - return metadataRDAExportModel; - } - - @JsonIgnore - public boolean isValid() { - return description != null || language != null || metadata_standard_id != null; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java deleted file mode 100644 index ccd79971f..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java +++ /dev/null @@ -1,474 +0,0 @@ -package eu.eudat.models.data.rda; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.jayway.jsonpath.JsonPath; -import eu.eudat.data.entities.Dataset; -import eu.eudat.logic.managers.DatasetManager; -import eu.eudat.logic.utilities.builders.XmlBuilder; -import eu.eudat.models.data.security.Principal; -import org.json.JSONArray; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import javax.xml.xpath.*; -import java.text.DateFormat; -import java.util.*; - -import static java.util.stream.Collectors.groupingBy; - -public class DatasetRDAExportModel { - private static final Logger logger = LoggerFactory.getLogger(DatasetRDAExportModel.class); - - private static final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - private Map multiplicityIdToFieldSetId = new HashMap<>(); - - private List data_quality_assurance; - private IdRDAExportModel dataset_id; - private String description; - private List distribution; - private String issued; // Created Date, could also use finalized one. - private List keyword; - private String language; - private List metadata; - private String personal_data; // Allowed Values: yes no unknown. - private String preservation_statement; - private List security_and_privacy; - private String sensitive_data; // Allowed Values: yes no unknown. - private List technical_resource; - private String title; - private String type; // Type according to: http://vocabularies.coar-repositories.org/pubby/resource_type.html - - public List getData_quality_assurance() { - return data_quality_assurance; - } - public void setData_quality_assurance(List data_quality_assurance) { - this.data_quality_assurance = data_quality_assurance; - } - - public IdRDAExportModel getDataset_id() { - return dataset_id; - } - public void setDataset_id(IdRDAExportModel dataset_id) { - this.dataset_id = dataset_id; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public List getDistribution() { - return distribution; - } - public void setDistribution(List distribution) { - this.distribution = distribution; - } - - public String getIssued() { - return issued; - } - public void setIssued(String issued) { - this.issued = issued; - } - - public List getKeyword() { - return keyword; - } - public void setKeyword(List keyword) { - this.keyword = keyword; - } - - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; - } - - public List getMetadata() { - return metadata; - } - public void setMetadata(List metadata) { - this.metadata = metadata; - } - - public String getPersonal_data() { - return personal_data; - } - public void setPersonal_data(String personal_data) { - this.personal_data = personal_data; - } - - public String getPreservation_statement() { - return preservation_statement; - } - public void setPreservation_statement(String preservation_statement) { - this.preservation_statement = preservation_statement; - } - - public List getSecurity_and_privacy() { - return security_and_privacy; - } - public void setSecurity_and_privacy(List security_and_privacy) { - this.security_and_privacy = security_and_privacy; - } - - public String getSensitive_data() { - return sensitive_data; - } - public void setSensitive_data(String sensitive_data) { - this.sensitive_data = sensitive_data; - } - - public List getTechnical_resource() { - return technical_resource; - } - public void setTechnical_resource(List technical_resource) { - this.technical_resource = technical_resource; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - public String getType() { - return type; - } - public void setType(String type) { - this.type = type; - } - - - public DatasetRDAExportModel fromDataModel(Dataset dataset, DatasetManager datasetManager, Principal principal) { - // Map of template Ids to rda values. - JSONObject jObject = new JSONObject(dataset.getProperties()); - Map templateIdsToValues = jObject.toMap(); - - /*--------- Building dataset rda export model ---------*/ - DatasetRDAExportModel datasetRDAExportModel = new DatasetRDAExportModel(); - datasetRDAExportModel.setDataset_id(new IdRDAExportModel(dataset.getId().toString(), "other")); - if (dataset.getDescription() != null) datasetRDAExportModel.setDescription(dataset.getDescription().replace("\n", " ")); - datasetRDAExportModel.setIssued(DateFormat.getDateInstance(DateFormat.SHORT).format(dataset.getCreated())); - datasetRDAExportModel.setLanguage("en"); // mock data - datasetRDAExportModel.setTitle(dataset.getLabel()); - - // Transform the answered dataset description to json so we can parse it and fill the rda model. - JSONObject datasetDescriptionJson = null; - try { - String jsonResult = mapper.writeValueAsString(datasetManager.getSingle(dataset.getId().toString(), principal).getDatasetProfileDefinition()); - datasetDescriptionJson = new JSONObject(jsonResult); - } catch (JsonProcessingException e) { - logger.error(e.getMessage(), e); - } - setMultiplicityIdToFieldSetId(datasetDescriptionJson); - - /*--------- Building personal data. ---------*/ - String personalData = buildSingleProperties("dataset.personal_data", datasetDescriptionJson, templateIdsToValues); - if (personalData != null) { - datasetRDAExportModel.setPersonal_data(personalData); - } else { - datasetRDAExportModel.setPersonal_data("unknown"); - } - - /*--------- Building preservation statement. ---------*/ - datasetRDAExportModel.setPreservation_statement(buildSingleProperties("dataset.preservation_statement", datasetDescriptionJson, templateIdsToValues)); - - /*--------- Building sensitive data. ---------*/ - String sensitiveData = buildSingleProperties("dataset.sensitive_data", datasetDescriptionJson, templateIdsToValues); - if (personalData != null) { - datasetRDAExportModel.setSensitive_data(sensitiveData); - } else { - datasetRDAExportModel.setSensitive_data("unknown"); - } - - /*--------- Building type. ---------*/ - datasetRDAExportModel.setType(buildSingleProperties("dataset.type", datasetDescriptionJson, templateIdsToValues)); - - /*--------- Building data_quality_assurance. ---------*/ - datasetRDAExportModel.setData_quality_assurance(buildDataQualityAssurance(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building distribution. ---------*/ - datasetRDAExportModel.setDistribution(buildDistribution(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building keywords. ---------*/ - datasetRDAExportModel.setKeyword(buildKeywords(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building metadata items. ---------*/ - datasetRDAExportModel.setMetadata(buildMetadata(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building security and privacy items. ---------*/ - datasetRDAExportModel.setSecurity_and_privacy(buildSecurityAndPrivacy(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building technical_resource. ---------*/ - datasetRDAExportModel.setTechnical_resource(buildTechnicalResource(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - return datasetRDAExportModel; - } - - private String buildSingleProperties(String rdaKey, JSONObject datasetDescriptionJson, Map templateIdsToValues) { - String expression = "$..fields[*][?(@.rdaProperty == \"" + rdaKey + "\" )].id"; - List list = jsonValueListFromExpression(datasetDescriptionJson, expression); - if (!list.isEmpty()) { - return templateIdsToValues.get(list.get(0)).toString(); - } else { - return null; - } - } - - private List buildDataQualityAssurance(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List dataQualityFields = getRDAFieldsFromJson(datasetDescriptionJson, new String[]{"dataset.data_quality_assurance"}, datasetProfileDefinition); - for (RdaField rdaField : dataQualityFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - List dataQualityAssuranceList = new LinkedList<>(); - for (RdaField rdaField : dataQualityFields) { - dataQualityAssuranceList.add(rdaField.getRdaValue()); - } - - return dataQualityAssuranceList; - } - - private List buildDistribution(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - DatasetDistributionRDAExportModel distributionModel = new DatasetDistributionRDAExportModel(); - distributionModel.setAccess_url(buildSingleProperties("dataset.distribution.access_url", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setAvailable_till(buildSingleProperties("dataset.distribution.available_till", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setByte_size(buildSingleProperties("dataset.distribution.byte_size", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setData_access(buildSingleProperties("dataset.distribution.data_access", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setDescription(buildSingleProperties("dataset.distribution.description", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setDownload_url(buildSingleProperties("dataset.distribution.download_url", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setTitle(buildSingleProperties("dataset.distribution.title", datasetDescriptionJson, templateIdsToValues)); - - /*--------- Building format. ---------*/ - - - // We currently support the return of only one distribution. - List distributionList = new LinkedList<>(); - if (distributionModel.isValid()) { - distributionList.add(distributionModel); - } else { - DatasetDistributionRDAExportModel model = new DatasetDistributionRDAExportModel(); - model.setDescription("Distribution data was not valid"); - distributionList.add(model); - } - - return distributionList; - } - - private List buildKeywords(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List keywordFields = getRDAFieldsFromJson(datasetDescriptionJson, new String[]{"dataset.keyword"}, datasetProfileDefinition); - for (RdaField rdaField : keywordFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - List keywordsList = new LinkedList<>(); - for (RdaField rdaField : keywordFields) { - keywordsList.add(rdaField.getRdaValue()); - } - - return keywordsList; - } - - private List buildMetadata(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List metadataFields = getRDAFieldsFromJson(datasetDescriptionJson, - new String[]{"dataset.metadata.metadata_standard_id.type", "dataset.metadata.metadata_standard_id.identifier", "dataset.metadata.description", "dataset.metadata.language", "dataset.metadata.metadata_standard_id"}, - datasetProfileDefinition); - - // Adding rdaValue and FieldSetIds on metadataFields. - for (RdaField rdaField : metadataFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - // Group metadataFields based on their field set id. - Map> groupedMetadataFields = metadataFields.stream().collect(groupingBy(RdaField::getFieldSetId)); - - // Creating the metadata. - List metadataRDAExportModelList = new LinkedList<>(); - for (String fieldSetId : groupedMetadataFields.keySet()) { - DatasetMetadataRDAExportModel metadataRda = new DatasetMetadataRDAExportModel(); - for (RdaField rdaField : groupedMetadataFields.get(fieldSetId)) { - if (rdaField.getRdaProperty().equals("dataset.metadata.metadata_standard_id.identifier")) { - if (metadataRda.getMetadata_standard_id() != null) { - metadataRda.getMetadata_standard_id().setIdentifier(rdaField.getRdaValue()); - } else { - metadataRda.setMetadata_standard_id(new IdRDAExportModel(rdaField.getRdaValue(), "other")); - } - } - if (rdaField.getRdaProperty().equals("dataset.metadata.metadata_standard_id.type")) { - if (metadataRda.getMetadata_standard_id() != null) { - metadataRda.getMetadata_standard_id().setType(rdaField.getRdaValue()); - } else { - metadataRda.setMetadata_standard_id(new IdRDAExportModel("", rdaField.getRdaValue())); - } - } - if (rdaField.getRdaProperty().equals("dataset.metadata.description")) { - metadataRda.setDescription(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.metadata.language")) { - metadataRda.setLanguage(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.metadata.metadata_standard_id") && !rdaField.getRdaValue().isEmpty()) { - JSONArray jsonArray = new JSONArray(rdaField.getRdaValue()); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Map jsonObjectMap = jsonObject.toMap(); - DatasetMetadataRDAExportModel metadataRda1 = new DatasetMetadataRDAExportModel(); -// metadataRda1.setMetadata_standard_id(new IdRDAExportModel(jsonObjectMap.get("label").toString(), jsonObjectMap.get("source").toString())); - metadataRda1.setMetadata_standard_id(new IdRDAExportModel(jsonObjectMap.get("uri").toString(), "url")); - metadataRDAExportModelList.add(metadataRda1); - } - } - } - if (metadataRda.isValid()) { - metadataRDAExportModelList.add(metadataRda); - } - } - - return new LinkedList<>(metadataRDAExportModelList); - } - - private List buildSecurityAndPrivacy(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List secAndPrFields = getRDAFieldsFromJson( - datasetDescriptionJson, - new String[]{"dataset.security_and_privacy.description", "dataset.security_and_privacy.title", "dataset.security_and_privacy"}, - datasetProfileDefinition); - for (RdaField rdaField : secAndPrFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - Map> groupedSecurityAndPrivacyFields = secAndPrFields.stream().collect(groupingBy(RdaField::getFieldSetId)); - - List securityAndPrivacyRDAExportModelList = new LinkedList<>(); - for (String fieldSetId : groupedSecurityAndPrivacyFields.keySet()) { - DatasetSecurityAndPrivacyRDAExportModel securityAndPrivacyModel = new DatasetSecurityAndPrivacyRDAExportModel(); - for (RdaField rdaField : groupedSecurityAndPrivacyFields.get(fieldSetId)) { - if (rdaField.getRdaProperty().equals("dataset.security_and_privacy.description")) { - securityAndPrivacyModel.setDescription(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.security_and_privacy.title")) { - securityAndPrivacyModel.setTitle(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.security_and_privacy")) { - JSONArray jsonArray = new JSONArray(rdaField.getRdaValue()); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Map jsonObjectMap = jsonObject.toMap(); - DatasetSecurityAndPrivacyRDAExportModel secAndPrivacy = new DatasetSecurityAndPrivacyRDAExportModel(jsonObjectMap.get("label").toString(), jsonObjectMap.get("source").toString()); - securityAndPrivacyRDAExportModelList.add(secAndPrivacy); - } - } - } - securityAndPrivacyRDAExportModelList.add(securityAndPrivacyModel); - } - - return securityAndPrivacyRDAExportModelList; - } - - private List buildTechnicalResource(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List dataQualityFields = getRDAFieldsFromJson(datasetDescriptionJson, - new String[]{"dataset.technical_resource.technical_resource", "dataset.technical_resource.technical_resource.description", "dataset.technical_resource.technical_resource.name"}, - datasetProfileDefinition); - for (RdaField rdaField : dataQualityFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - List technicalResourceList = new LinkedList<>(); - Map> groupedDataQualityFields = dataQualityFields.stream().collect(groupingBy(RdaField::getFieldSetId)); - for (String fieldSetId : groupedDataQualityFields.keySet()) { - DatasetTechnicalResourceRDAExportModel technicalResourceModel = new DatasetTechnicalResourceRDAExportModel(); - for (RdaField rdaField : groupedDataQualityFields.get(fieldSetId)) { - if (rdaField.getRdaProperty().equals("dataset.technical_resource.technical_resource.description")) { - technicalResourceModel.setDescription(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.technical_resource.technical_resource.name")) { - technicalResourceModel.setName(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.security_and_privacy")) { - JSONArray jsonArray = new JSONArray(rdaField.getRdaValue()); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Map jsonObjectMap = jsonObject.toMap(); - DatasetTechnicalResourceRDAExportModel technicalResource = new DatasetTechnicalResourceRDAExportModel(jsonObjectMap.get("label").toString(), jsonObjectMap.get("label").toString()); - technicalResourceList.add(technicalResource); - } - } - } - technicalResourceList.add(technicalResourceModel); - } - - return technicalResourceList; - } - - private void setMultiplicityIdToFieldSetId(JSONObject json) { - String multiplicityItemsFieldSetIdExp = "$..multiplicityItems[*].id"; - List multiplicityItemsFieldSetIdList = jsonValueListFromExpression(json, multiplicityItemsFieldSetIdExp); - for (String fieldSetId : multiplicityItemsFieldSetIdList) { - String fieldsFromFieldSetIdExp = "$..multiplicityItems[*][?(@.id == \""+ fieldSetId +"\")].fields[*].id"; - List fieldsIdList = jsonValueListFromExpression(json, fieldsFromFieldSetIdExp); - for (String fieldId : fieldsIdList) { - this.multiplicityIdToFieldSetId.put(fieldId, fieldSetId); - } - } - } - - private List getRDAFieldsFromJson(JSONObject json, String[] rdaKey, String datasetProfileDefinition) { - List rdaFields = new LinkedList<>(); - for (String key : rdaKey) { - String fieldIdExpression = "$..fields[*][?(@.rdaProperty == \"" + key + "\" )].id"; - List listFromExpression = jsonValueListFromExpression(json, fieldIdExpression); - for (String fieldId : listFromExpression) { - RdaField rdaField = new RdaField(); - rdaField.setRdaProperty(key); - rdaField.setFieldId(fieldId); - if (fieldId.startsWith("multiple_")) { - rdaField.setFieldSetId(this.multiplicityIdToFieldSetId.get(fieldId)); - } else { - rdaField.setFieldSetId(getFieldSetIdForFieldFromXML(datasetProfileDefinition, fieldId)); - } - rdaFields.add(rdaField); - } - } - return rdaFields; - } - - private List jsonValueListFromExpression(JSONObject json, String expression) { - net.minidev.json.JSONArray jsonArray = JsonPath.parse(json.toString()).read(expression); - List valueList = new LinkedList<>(); - for (Object o : jsonArray) { - valueList.add(o.toString()); - } - return valueList; - } - - private String getFieldSetIdForFieldFromXML(String datasetProfileDefinition, String fieldId) { - String fieldSetIdExpression = "//field[@id ='" + fieldId + "']/ancestor::fieldSet/@id"; - List listFromExpression = xmlValueListFromExpression(datasetProfileDefinition, fieldSetIdExpression); - if (listFromExpression.size() == 1) return listFromExpression.get(0); - return null; - } - - private List xmlValueListFromExpression(String xml, String expression) { - List valuesList = new LinkedList<>(); - Document document = XmlBuilder.fromXml(xml); - XPathFactory xpathFactory = XPathFactory.newInstance(); - XPath xpath = xpathFactory.newXPath(); - try { - XPathExpression expr = xpath.compile(expression); - NodeList nodeList = (NodeList) expr.evaluate(document, XPathConstants.NODESET); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - valuesList.add(node.getNodeValue()); - } - } catch (XPathExpressionException e) { - logger.error(e.getMessage(), e); - } - - return valuesList; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java deleted file mode 100644 index a2d2a5581..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java +++ /dev/null @@ -1,29 +0,0 @@ -package eu.eudat.models.data.rda; - -public class DatasetSecurityAndPrivacyRDAExportModel { - private String description; - private String title; - - public DatasetSecurityAndPrivacyRDAExportModel() { - - } - - public DatasetSecurityAndPrivacyRDAExportModel(String description, String title) { - this.description = description; - this.title = title; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java deleted file mode 100644 index 6c47ea98e..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java +++ /dev/null @@ -1,28 +0,0 @@ -package eu.eudat.models.data.rda; - -public class DatasetTechnicalResourceRDAExportModel { - private String description; - private String name; - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public DatasetTechnicalResourceRDAExportModel(String description, String name) { - this.description = description; - this.name = name; - } - - public DatasetTechnicalResourceRDAExportModel() { - } -} \ No newline at end of file diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java deleted file mode 100644 index 47079023f..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java +++ /dev/null @@ -1,52 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.UserInfo; - -import java.util.LinkedList; -import java.util.List; - -public class DmpContributorRDAExportModel { - private IdRDAExportModel contributor_id; - private String mbox; - private String name; - private List role; - - public IdRDAExportModel getContributor_id() { - return contributor_id; - } - public void setContributor_id(IdRDAExportModel contributor_id) { - this.contributor_id = contributor_id; - } - - public String getMbox() { - return mbox; - } - public void setMbox(String mbox) { - this.mbox = mbox; - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public List getRole() { - return role; - } - public void setRole(List role) { - this.role = role; - } - - public DmpContributorRDAExportModel fromDataModel(UserInfo user, String role) { - DmpContributorRDAExportModel contributor = new DmpContributorRDAExportModel(); - contributor.contributor_id = new IdRDAExportModel(user.getId().toString(), "other"); - contributor.mbox = user.getEmail(); - contributor.name = user.getName(); - contributor.role = new LinkedList<>(); - contributor.role.add(role); - - return contributor; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java deleted file mode 100644 index 98abbadd8..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java +++ /dev/null @@ -1,36 +0,0 @@ -package eu.eudat.models.data.rda; - -public class DmpCostRDAExportModel { - private String currency_code; //Allowed values defined by ISO 4217. - private String description; - private String title; - private String value; - - public String getCurrency_code() { - return currency_code; - } - public void setCurrency_code(String currency_code) { - this.currency_code = currency_code; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java deleted file mode 100644 index 47147fc4e..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java +++ /dev/null @@ -1,164 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.DMP; -import eu.eudat.data.entities.Dataset; -import eu.eudat.data.entities.UserDMP; -import eu.eudat.data.entities.UserInfo; -import eu.eudat.logic.managers.DatasetManager; -import eu.eudat.models.data.security.Principal; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.Collectors; - -public class DmpRDAExportModel { - private ContactRDAExportModel contact; - private List contributor; - private List cost; - private String created; - private List dataset; - private String description; - private IdRDAExportModel dmp_id; - private String ethical_issues_description; - private String ethical_issues_exist; // Allowed Values: yes no unknown. - private String ethical_issues_report; - private String language; - private String modified; - private ProjectRDAExportModel project; - private String title; - - public ContactRDAExportModel getContact() { - return contact; - } - public void setContact(ContactRDAExportModel contact) { - this.contact = contact; - } - - public List getContributor() { - return contributor; - } - public void setContributor(List contributor) { - this.contributor = contributor; - } - - public List getCost() { - return cost; - } - public void setCost(List cost) { - this.cost = cost; - } - - public String getCreated() { - return created; - } - public void setCreated(String created) { - this.created = created; - } - - public List getDataset() { - return dataset; - } - public void setDataset(List dataset) { - this.dataset = dataset; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public IdRDAExportModel getDmp_id() { - return dmp_id; - } - public void setDmp_id(IdRDAExportModel dmp_id) { - this.dmp_id = dmp_id; - } - - public String getEthical_issues_description() { - return ethical_issues_description; - } - public void setEthical_issues_description(String ethical_issues_description) { - this.ethical_issues_description = ethical_issues_description; - } - - public String getEthical_issues_exist() { - return ethical_issues_exist; - } - public void setEthical_issues_exist(String ethical_issues_exist) { - this.ethical_issues_exist = ethical_issues_exist; - } - - public String getEthical_issues_report() { - return ethical_issues_report; - } - public void setEthical_issues_report(String ethical_issues_report) { - this.ethical_issues_report = ethical_issues_report; - } - - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; - } - - public String getModified() { - return modified; - } - public void setModified(String modified) { - this.modified = modified; - } - - public ProjectRDAExportModel getProject() { - return project; - } - public void setProject(ProjectRDAExportModel project) { - this.project = project; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - public DmpRDAExportModel fromDataModel(DMP entity, DatasetManager datasetManager, Principal principal) { - DmpRDAExportModel dmpRda = new DmpRDAExportModel(); - dmpRda.contact = new ContactRDAExportModel().fromDataModel(entity.getUsers().stream().filter(x -> x.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - if (entity.getUsers().stream().anyMatch(x -> x.getRole().equals(UserDMP.UserDMPRoles.USER.getValue()))) { - dmpRda.contributor = new LinkedList<>(); - for (UserDMP userdmp : entity.getUsers().stream().filter(x -> x.getRole().equals(UserDMP.UserDMPRoles.USER.getValue())).collect(Collectors.toList())) { - dmpRda.contributor.add(new DmpContributorRDAExportModel().fromDataModel(userdmp.getUser(), UserDMP.UserDMPRoles.fromInteger(userdmp.getRole()).toString())); - } - } - dmpRda.cost = null; - SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); - dmpRda.created = formatter.format(entity.getCreated()); - dmpRda.dataset = new LinkedList<>(); - for (Dataset dataset : entity.getDataset()) { - if (dataset.getStatus() != Dataset.Status.DELETED.getValue() && dataset.getStatus() != Dataset.Status.CANCELED.getValue()) - dmpRda.dataset.add(new DatasetRDAExportModel().fromDataModel(dataset, datasetManager, principal)); - } - dmpRda.description = entity.getDescription().replace("\n", " "); - if (entity.getDoi() != null) { - dmpRda.dmp_id = new IdRDAExportModel(entity.getDoi(), "zenodo"); - } - else { - dmpRda.dmp_id = new IdRDAExportModel(entity.getId().toString(), "other"); - } - // Mock up data on "language" and "ethical_issues_*" for now. - dmpRda.ethical_issues_exist = "unknown"; - dmpRda.language = "en"; - dmpRda.modified = formatter.format(new Date()); - dmpRda.project = new ProjectRDAExportModel().fromDataModel(entity.getGrant()); - dmpRda.title = entity.getLabel(); - - return dmpRda; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java deleted file mode 100644 index 5691cae2c..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java +++ /dev/null @@ -1,43 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.Funder; -import eu.eudat.data.entities.Grant; - -public class FundingRDAExportModel { - private IdRDAExportModel funder_id; - private IdRDAExportModel grant_id; - private String funding_status; - - public IdRDAExportModel getFunder_id() { - return funder_id; - } - public void setFunder_id(IdRDAExportModel funder_id) { - this.funder_id = funder_id; - } - - public IdRDAExportModel getGrant_id() { - return grant_id; - } - public void setGrant_id(IdRDAExportModel grant_id) { - this.grant_id = grant_id; - } - - public String getFunding_status() { - return funding_status; - } - public void setFunding_status(String funding_status) { - this.funding_status = funding_status; - } - - public FundingRDAExportModel fromDataModel(Funder funder, Grant grant) { - FundingRDAExportModel funding = new FundingRDAExportModel(); - funding.funding_status = "planned"; // mock data - if (funder != null) { - funding.funder_id = new IdRDAExportModel(funder.getReference(), "other"); - } - if (grant != null) { - funding.grant_id = new IdRDAExportModel(grant.getReference(), "other"); - } - return funding; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java deleted file mode 100644 index bac169259..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java +++ /dev/null @@ -1,86 +0,0 @@ -package eu.eudat.models.data.rda; - -import java.util.List; - -public class HostRDAExportModel { - private String availability; - private String backup__frequency; - private String backup_type; - private String certified_with; // Repository certified with one the following standards: DIN31644 / DINI-Zertifikat / DSA / ISO16363 / ISO16919 /TRAC / WDS / CoreTrustSeal - private String description; - private String geo_location; // Physical location of the data expressed using ISO 3166-1 country code. - private List pid_system; // PID System: ark arxiv bibcode doi ean13 eissn handle igsn isbn issn istc lissn lsid pmid purl upc url urn other - private String storage_type; - private String support_versioning; // Allowed values: yes / no / unknown - private String title; - - public String getAvailability() { - return availability; - } - public void setAvailability(String availability) { - this.availability = availability; - } - - public String getBackup__frequency() { - return backup__frequency; - } - public void setBackup__frequency(String backup__frequency) { - this.backup__frequency = backup__frequency; - } - - public String getBackup_type() { - return backup_type; - } - public void setBackup_type(String backup_type) { - this.backup_type = backup_type; - } - - public String getCertified_with() { - return certified_with; - } - public void setCertified_with(String certified_with) { - this.certified_with = certified_with; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getGeo_location() { - return geo_location; - } - public void setGeo_location(String geo_location) { - this.geo_location = geo_location; - } - - public List getPid_system() { - return pid_system; - } - public void setPid_system(List pid_system) { - this.pid_system = pid_system; - } - - public String getStorage_type() { - return storage_type; - } - public void setStorage_type(String storage_type) { - this.storage_type = storage_type; - } - - public String getSupport_versioning() { - return support_versioning; - } - public void setSupport_versioning(String support_versioning) { - this.support_versioning = support_versioning; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java deleted file mode 100644 index 2aef46e5b..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -public class IdRDAExportModel { - private String identifier; - private String type; - - public String getIdentifier() { - return identifier; - } - public void setIdentifier(String identifier) { - this.identifier = identifier; - } - - public String getType() { - return type; - } - public void setType(String type) { - this.type = type; - } - - IdRDAExportModel(String identifier, String type) { - this.identifier = identifier; - this.type = type; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java deleted file mode 100644 index dec57a467..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package eu.eudat.models.data.rda; - -public class LicenseRDAExportModel { - private String license_ref; - private String start_date; // If date is set in the future, it indicates embargo period. - - public String getLicense_ref() { - return license_ref; - } - public void setLicense_ref(String license_ref) { - this.license_ref = license_ref; - } - - public String getStart_date() { - return start_date; - } - public void setStart_date(String start_date) { - this.start_date = start_date; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ProjectRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ProjectRDAExportModel.java deleted file mode 100644 index 2d5b1912a..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ProjectRDAExportModel.java +++ /dev/null @@ -1,54 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.Grant; - -import java.util.Date; - -public class ProjectRDAExportModel { - private String title; - private String description; - private Date project_start; - private Date project_end; - private FundingRDAExportModel funding; - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public Date getProject_start() { - return project_start; - } - public void setProject_start(Date project_start) { - this.project_start = project_start; - } - - public Date getProject_end() { - return project_end; - } - public void setProject_end(Date project_end) { - this.project_end = project_end; - } - - public FundingRDAExportModel getFunding() { - return funding; - } - public void setFunding(FundingRDAExportModel funding) { - this.funding = funding; - } - - - public ProjectRDAExportModel fromDataModel(Grant grant) { - this.funding = new FundingRDAExportModel().fromDataModel(grant.getFunder(), grant); - return this; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java deleted file mode 100644 index 98bb5627d..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.DMP; -import eu.eudat.data.entities.Dataset; -import eu.eudat.logic.managers.DatasetManager; -import eu.eudat.models.data.security.Principal; - -import java.util.LinkedList; -import java.util.List; - -public class RDAExportModel { - private DmpRDAExportModel dmp; - - public DmpRDAExportModel getDmp() { - return dmp; - } - public void setDmp(DmpRDAExportModel dmp) { - this.dmp = dmp; - } - - public RDAExportModel fromDataModel(DMP dmp, DatasetManager datasetManager, Principal principal) { - this.dmp = new DmpRDAExportModel().fromDataModel(dmp, datasetManager, principal); - return this; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RdaField.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RdaField.java deleted file mode 100644 index 31acd5c51..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RdaField.java +++ /dev/null @@ -1,36 +0,0 @@ -package eu.eudat.models.data.rda; - -public class RdaField { - private String rdaProperty; - private String rdaValue; - private String fieldId; - private String fieldSetId; - - public String getRdaProperty() { - return rdaProperty; - } - public void setRdaProperty(String rdaProperty) { - this.rdaProperty = rdaProperty; - } - - public String getRdaValue() { - return rdaValue; - } - public void setRdaValue(String rdaValue) { - this.rdaValue = rdaValue; - } - - public String getFieldId() { - return fieldId; - } - public void setFieldId(String fieldId) { - this.fieldId = fieldId; - } - - public String getFieldSetId() { - return fieldSetId; - } - public void setFieldSetId(String fieldSetId) { - this.fieldSetId = fieldSetId; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java index 2a006ec5b..956c753bb 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java @@ -2,18 +2,14 @@ package eu.eudat.models.data.user.components.datasetprofile; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import eu.eudat.logic.utilities.builders.ModelBuilder; +import eu.eudat.logic.utilities.interfaces.ViewStyleDefinition; import eu.eudat.models.data.components.commons.DefaultValue; import eu.eudat.models.data.components.commons.Multiplicity; import eu.eudat.models.data.components.commons.ViewStyle; import eu.eudat.models.data.components.commons.Visibility; import eu.eudat.models.data.properties.PropertiesGenerator; import eu.eudat.models.data.user.composite.PropertiesModelBuilder; -import eu.eudat.logic.utilities.interfaces.ViewStyleDefinition; -import eu.eudat.logic.utilities.builders.ModelBuilder; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,6 +22,7 @@ import java.util.stream.Collectors; public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefinition, PropertiesGenerator { private static final Logger logger = LoggerFactory.getLogger(Field.class); + private static final ObjectMapper objectMapper = new ObjectMapper(); private String id; private Integer ordinal; private Object value; @@ -205,10 +202,9 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin @Override public void fromJsonObject(Map properties) { try { - ObjectMapper mapper = new ObjectMapper(); - List stringList = mapper.readValue(properties.get(this.id).toString(), LinkedList.class); + List stringList = objectMapper.readValue(properties.get(this.id).toString(), LinkedList.class); this.value = stringList; - } catch (JSONException | NullPointerException | IOException e) { + } catch (NullPointerException | IOException e) { try { this.value = (String) properties.get(this.id); } catch (ClassCastException ce) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java index aa76750d7..dc1a83adc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java @@ -1,30 +1,33 @@ package eu.eudat.models.rda.mapper; -import java.util.*; -import java.util.stream.Collectors; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.logic.utilities.json.JavaToJson; import eu.eudat.models.rda.Cost; -import eu.eudat.models.rda.PidSystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.*; +import java.util.stream.Collectors; + public class CostRDAMapper { private static final Logger logger = LoggerFactory.getLogger(DatasetRDAMapper.class); - + private static final ObjectMapper objectMapper = new ObjectMapper(); + public static Cost toRDA(Map cost) { Cost rda = new Cost(); - Map code = new org.json.JSONObject((String) cost.get("code")).toMap(); - rda.setCurrencyCode(Cost.CurrencyCode.fromValue((String) code.get("value"))); - rda.setDescription((String) cost.get("description")); - if (cost.get("title") == null) { - throw new IllegalArgumentException("Cost Title is missing"); + try { + Map code = objectMapper.readValue((String) cost.get("code"), LinkedHashMap.class); + rda.setCurrencyCode(Cost.CurrencyCode.fromValue((String) code.get("value"))); + rda.setDescription((String) cost.get("description")); + if (cost.get("title") == null) { + throw new IllegalArgumentException("Cost Title is missing"); + } + rda.setTitle((String) cost.get("title")); + rda.setValue(((Integer) cost.get("value")).doubleValue()); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); } - rda.setTitle((String) cost.get("title")); - rda.setValue(((Integer) cost.get("value")).doubleValue()); return rda; } @@ -55,8 +58,8 @@ public class CostRDAMapper { rda.setValue(Double.valueOf(rdaValue)); } else if(rdaProperty.contains("currency_code")){ - HashMap result = - new ObjectMapper().readValue(rdaValue, HashMap.class); + HashMap result = + objectMapper.readValue(rdaValue, HashMap.class); rda.setCurrencyCode(Cost.CurrencyCode.fromValue(result.get("value"))); } else if(rdaProperty.contains("title")){ diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java index 39b4187c3..02e9ef68d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java @@ -12,7 +12,6 @@ import eu.eudat.logic.utilities.json.JsonSearcher; import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.rda.*; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -52,8 +51,7 @@ public class DatasetRDAMapper { rda.setDescription(dataset.getDescription()); rda.setAdditionalProperty("template", dataset.getProfile().getId()); try { - JSONObject jObject = new JSONObject(dataset.getProperties()); - Map templateIdsToValues = jObject.toMap(); + Map templateIdsToValues = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dataset.getProperties(), LinkedHashMap.class); DatasetWizardModel datasetWizardModel = new DatasetWizardModel().fromDataModel(dataset); datasetWizardModel.setDatasetProfileDefinition(datasetManager.getPagedProfile(datasetWizardModel, dataset)); ObjectMapper mapper = new ObjectMapper(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java index 539367e10..a45c896df 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java @@ -1,5 +1,6 @@ package eu.eudat.models.rda.mapper; +import com.fasterxml.jackson.core.JsonProcessingException; import eu.eudat.data.entities.*; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.utilities.helpers.StreamDistinctBy; @@ -7,6 +8,8 @@ import eu.eudat.models.rda.Cost; import eu.eudat.models.rda.Dmp; import eu.eudat.models.rda.DmpId; import net.minidev.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -17,6 +20,7 @@ import java.util.stream.Collectors; @Component public class DmpRDAMapper { + private static final Logger logger = LoggerFactory.getLogger(DmpRDAMapper.class); private DatasetRDAMapper datasetRDAMapper; private ApiContext apiContext; @@ -34,15 +38,19 @@ public class DmpRDAMapper { if (dmp.getDataset() == null || dmp.getDataset().isEmpty()) { throw new IllegalArgumentException("DMP has no Datasets"); } - Map extraProperties; + Map extraProperties = null; if (dmp.getExtraProperties() == null) { throw new IllegalArgumentException("DMP is missing language and contact properties"); } else { - extraProperties = new org.json.JSONObject(dmp.getExtraProperties()).toMap(); + try { + extraProperties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dmp.getExtraProperties(), LinkedHashMap.class); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } /*if (extraProperties.get("language") == null) { throw new IllegalArgumentException("DMP must have it's language property defined"); }*/ - if (extraProperties.get("contact") == null) { + if (extraProperties != null && extraProperties.get("contact") == null) { throw new IllegalArgumentException("DMP must have it's contact property defined"); } } @@ -66,7 +74,7 @@ public class DmpRDAMapper { rda.setModified(dmp.getModified()); rda.setTitle(dmp.getLabel()); - if (!extraProperties.isEmpty()) { + if (extraProperties != null && !extraProperties.isEmpty()) { if (extraProperties.get("ethicalIssues") != null) { rda.setEthicalIssuesExist(Dmp.EthicalIssuesExist.fromValue(extraProperties.get("ethicalIssues").toString())); } else { @@ -76,7 +84,7 @@ public class DmpRDAMapper { if (extraProperties.get("costs") != null) { rda.setCost(new ArrayList<>()); ((List) extraProperties.get("costs")).forEach(costl -> { - rda.getCost().add(CostRDAMapper.toRDA((Map)costl)); + rda.getCost().add(CostRDAMapper.toRDA((Map) costl)); }); } UserInfo contact = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact"))); @@ -107,7 +115,7 @@ public class DmpRDAMapper { if (rda.getDmpId().getType() == DmpId.Type.DOI) { entity.setDoi(rda.getDmpId().getIdentifier()); } - if (((List) rda.getAdditionalProperties().get("templates")) != null && !((List) rda.getAdditionalProperties().get("templates")).isEmpty()) { + if (rda.getAdditionalProperties().get("templates") != null && !((List) rda.getAdditionalProperties().get("templates")).isEmpty()) { entity.setAssociatedDmps(((List) rda.getAdditionalProperties().get("templates")).stream().map(this::getProfile).filter(Objects::nonNull).collect(Collectors.toSet())); } if (entity.getAssociatedDmps() == null) {