Merge remote-tracking branch 'origin/semantics' into Development

This commit is contained in:
Diamantis Tziotzios 2023-04-18 11:19:48 +03:00
commit 89922eaecc
59 changed files with 1348 additions and 585 deletions

View File

@ -34,7 +34,7 @@
<dependency> <dependency>
<groupId>gr.cite.opendmp</groupId> <groupId>gr.cite.opendmp</groupId>
<artifactId>repositorydepositbase</artifactId> <artifactId>repositorydepositbase</artifactId>
<version>1.0.1</version> <version>1.0.2</version>
</dependency> </dependency>

View File

@ -190,8 +190,10 @@ public class Admin extends BaseController {
.status(ApiMessageCode.SUCCESS_MESSAGE).message("")); .status(ApiMessageCode.SUCCESS_MESSAGE).message(""));
} }
@RequestMapping(method = RequestMethod.GET, value = {"/getRDACommonStandards"}, produces = "application/json")
public ResponseEntity getRDACommonStandards(@ClaimedAuthorities(claims = {ADMIN, DATASET_PROFILE_MANAGER}) Principal principal) { @RequestMapping(method = RequestMethod.GET, value = {"/getSchematics"}, produces = "application/json")
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<String>>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(configLoader.getRdaProperties())); public ResponseEntity<ResponseItem<List<String>>> getSchematics(@RequestParam(value = "query", required = false) String query, @ClaimedAuthorities(claims = {ADMIN, DATASET_PROFILE_MANAGER}) Principal principal) {
List<String> schematics = this.datasetProfileManager.getSchematics(query);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<String>>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(schematics));
} }
} }

View File

@ -9,12 +9,10 @@ import eu.eudat.data.entities.DMP;
import eu.eudat.data.entities.Dataset; import eu.eudat.data.entities.Dataset;
import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem;
import eu.eudat.data.query.items.table.dmp.DataManagementPlanTableRequest; import eu.eudat.data.query.items.table.dmp.DataManagementPlanTableRequest;
import eu.eudat.data.query.items.table.dmp.DataManagmentPlanPublicTableRequest;
import eu.eudat.exceptions.datamanagementplan.DMPNewVersionException; import eu.eudat.exceptions.datamanagementplan.DMPNewVersionException;
import eu.eudat.exceptions.datamanagementplan.DMPWithDatasetsDeleteException; import eu.eudat.exceptions.datamanagementplan.DMPWithDatasetsDeleteException;
import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.exceptions.security.UnauthorisedException;
import eu.eudat.logic.managers.DataManagementPlanManager; import eu.eudat.logic.managers.DataManagementPlanManager;
import eu.eudat.logic.managers.DatasetManager;
import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.proxy.config.configloaders.ConfigLoader;
import eu.eudat.logic.security.claims.ClaimedAuthorities; import eu.eudat.logic.security.claims.ClaimedAuthorities;
import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.ApiContext;
@ -152,7 +150,7 @@ public class DMPs extends BaseController {
@RequestMapping(method = RequestMethod.GET, value = {"/publicOverview/{id}"}) @RequestMapping(method = RequestMethod.GET, value = {"/publicOverview/{id}"})
public @ResponseBody public @ResponseBody
ResponseEntity getOverviewSinglePublic(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception { ResponseEntity<ResponseItem<DataManagementPlanOverviewModel>> getOverviewSinglePublic(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception {
// try { // try {
DataManagementPlanOverviewModel dataManagementPlan = this.dataManagementPlanManager.getOverviewSingle(id, principal, true); DataManagementPlanOverviewModel dataManagementPlan = this.dataManagementPlanManager.getOverviewSingle(id, principal, true);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DataManagementPlanOverviewModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlan)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DataManagementPlanOverviewModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlan));
@ -184,7 +182,21 @@ public class DMPs extends BaseController {
public @ResponseBody public @ResponseBody
ResponseEntity getRDAJsonDocument(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) { ResponseEntity getRDAJsonDocument(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) {
try { try {
return this.dataManagementPlanManager.getRDAJsonDocument(id, principal); FileEnvelope rdaJsonDocument = this.dataManagementPlanManager.getRDAJsonDocument(id, principal);
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentLength(rdaJsonDocument.getFile().length());
responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
responseHeaders.set("Content-Disposition", "attachment;filename=" + rdaJsonDocument.getFilename());
responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition");
responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type");
InputStream resource = new FileInputStream(rdaJsonDocument.getFile());
byte[] content = org.apache.poi.util.IOUtils.toByteArray(resource);
resource.close();
Files.deleteIfExists(rdaJsonDocument.getFile().toPath());
return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK);
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new ResponseItem<>().message(e.getMessage()).status(ApiMessageCode.ERROR_MESSAGE)); return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new ResponseItem<>().message(e.getMessage()).status(ApiMessageCode.ERROR_MESSAGE));
} }
@ -321,21 +333,6 @@ public class DMPs extends BaseController {
} }
} }
/*
* DOI Generation
* */
@RequestMapping(method = RequestMethod.POST, value = {"/createZenodoDoi/{id}"})
public ResponseEntity<ResponseItem<String>> createZenodoDoi(@PathVariable String id, Principal principal) {
try {
String zenodoDOI = this.dataManagementPlanManager.createZenodoDoi(UUID.fromString(id), principal);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<String>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully created DOI for Data Datamanagement Plan in question.").payload(zenodoDOI));
} catch (Exception e) {
logger.error(e.getMessage(), e);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<String>().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to create DOI for the Data Management Plan: " + e.getMessage()));
}
}
/* /*
* Data Index * Data Index
* */ * */

View File

@ -117,7 +117,7 @@ public class Datasets extends BaseController {
@RequestMapping(method = RequestMethod.GET, value = {"/publicOverview/{id}"}) @RequestMapping(method = RequestMethod.GET, value = {"/publicOverview/{id}"})
public @ResponseBody public @ResponseBody
ResponseEntity getOverviewSinglePublic(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception { ResponseEntity<ResponseItem<DatasetOverviewModel>> getOverviewSinglePublic(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception {
// try { // try {
DatasetOverviewModel dataset = this.datasetManager.getOverviewSingle(id, principal, true); DatasetOverviewModel dataset = this.datasetManager.getOverviewSingle(id, principal, true);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetOverviewModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetOverviewModel>().status(ApiMessageCode.NO_MESSAGE).payload(dataset));

View File

@ -0,0 +1,43 @@
package eu.eudat.controllers;
import eu.eudat.exceptions.datasetprofile.DatasetProfileNewVersionException;
import eu.eudat.logic.managers.DatasetProfileManager;
import eu.eudat.logic.security.claims.ClaimedAuthorities;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.models.data.admin.composite.DatasetProfile;
import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.models.data.security.Principal;
import eu.eudat.types.ApiMessageCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.transaction.Transactional;
import static eu.eudat.types.Authorities.ADMIN;
@RestController
@CrossOrigin
@RequestMapping(value = {"/api/management/"})
public class ManagementController extends BaseController {
private DatasetProfileManager datasetProfileManager;
@Autowired
public ManagementController(ApiContext apiContext, DatasetProfileManager datasetProfileManager){
super(apiContext);
this.datasetProfileManager = datasetProfileManager;
}
@Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/addSchematics"})
public ResponseEntity addSchematicsInDatasetProfiles(@ClaimedAuthorities(claims = {ADMIN}) Principal principal) throws Exception {
try {
this.datasetProfileManager.addSchematicsInDatasetProfiles();
return ResponseEntity.status(HttpStatus.OK).body(null);
} catch (Exception exception) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<Void>().status(ApiMessageCode.ERROR_MESSAGE).message(exception.getMessage()));
}
}
}

View File

@ -88,16 +88,6 @@ public class Users extends BaseController {
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DataTableData<UserListingModel>>().payload(dataTable).status(ApiMessageCode.NO_MESSAGE)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DataTableData<UserListingModel>>().payload(dataTable).status(ApiMessageCode.NO_MESSAGE));
} }
@RequestMapping(method = RequestMethod.GET, value = {"/hasDOIToken"}, consumes = "application/json", produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<Boolean>> hasDOIToken(Principal principal) throws NullEmailException {
try {
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<Boolean>().payload(this.userManager.isDOITokenValid(principal)).status(ApiMessageCode.NO_MESSAGE));
} catch (NonValidTokenException | ExpiredTokenException | IOException e) {
return ResponseEntity.status(460).body(new ResponseItem<Boolean>().payload(false).status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage()));
}
}
@Transactional @Transactional
@RequestMapping(method = RequestMethod.POST, value = {"/registerDOIToken"}, consumes = "application/json", produces = "application/json") @RequestMapping(method = RequestMethod.POST, value = {"/registerDOIToken"}, consumes = "application/json", produces = "application/json")
public @ResponseBody public @ResponseBody

View File

@ -481,6 +481,7 @@ public class DataManagementPlanManager {
checkDmpValidationRules(newDmp); checkDmpValidationRules(newDmp);
} }
UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());
newDmp.setCreator(user);
createOrganisationsIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getOrganisationDao()); createOrganisationsIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getOrganisationDao());
createResearchersIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao(), user); createResearchersIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao(), user);
@ -645,6 +646,7 @@ public class DataManagementPlanManager {
if (latestVersionDMP.get(0).getVersion().equals(oldDmp.getVersion())) { if (latestVersionDMP.get(0).getVersion().equals(oldDmp.getVersion())) {
DMP newDmp = dataManagementPlan.toDataModel(); DMP newDmp = dataManagementPlan.toDataModel();
UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build();
newDmp.setCreator(user);
createOrganisationsIfTheyDontExist(newDmp, databaseRepository.getOrganisationDao()); createOrganisationsIfTheyDontExist(newDmp, databaseRepository.getOrganisationDao());
createResearchersIfTheyDontExist(newDmp, databaseRepository.getResearcherDao(), user); createResearchersIfTheyDontExist(newDmp, databaseRepository.getResearcherDao(), user);
@ -705,6 +707,7 @@ public class DataManagementPlanManager {
DMP newDmp = dataManagementPlan.toDataModel(); DMP newDmp = dataManagementPlan.toDataModel();
UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build();
newDmp.setCreator(user);
createOrganisationsIfTheyDontExist(newDmp, databaseRepository.getOrganisationDao()); createOrganisationsIfTheyDontExist(newDmp, databaseRepository.getOrganisationDao());
createResearchersIfTheyDontExist(newDmp, databaseRepository.getResearcherDao(), user); createResearchersIfTheyDontExist(newDmp, databaseRepository.getResearcherDao(), user);
@ -1064,9 +1067,6 @@ public class DataManagementPlanManager {
}); });
UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());
sendNotification(dmp, user, NotificationType.DMP_PUBLISH); sendNotification(dmp, user, NotificationType.DMP_PUBLISH);
// if (dmp.getDois() != null && !dmp.getDois().isEmpty()) {
// this.createZenodoDoi(dmp.getId(), principal, true);
// }
} }
@Transactional @Transactional
@ -1456,6 +1456,40 @@ public class DataManagementPlanManager {
} }
dmpElement.appendChild(dmpProfileElement); dmpElement.appendChild(dmpProfileElement);
Element dmpContactElement = xmlDoc.createElement("contact");
Element dmpContactName = xmlDoc.createElement("name");
Element dmpContactEmail = xmlDoc.createElement("email");
if(dmp.getCreator() != null){
dmpContactName.setTextContent(dmp.getCreator().getName());
dmpContactEmail.setTextContent(dmp.getCreator().getEmail());
}
else{
Iterator<UserDMP> users = dmp.getUsers().iterator();
if(users.hasNext()){
UserDMP creator = users.next();
dmpContactName.setTextContent(creator.getUser().getName());
dmpContactEmail.setTextContent(creator.getUser().getEmail());
}
}
dmpContactElement.appendChild(dmpContactName);
dmpContactElement.appendChild(dmpContactEmail);
dmpElement.appendChild(dmpContactElement);
Element dmpContributorsElement = xmlDoc.createElement("contributors");
Iterator<UserDMP> users = dmp.getUsers().iterator();
while(users.hasNext()){
Element dmpContributorElement = xmlDoc.createElement("contributor");
Element dmpContributorName = xmlDoc.createElement("name");
Element dmpContributorEmail= xmlDoc.createElement("email");
UserDMP contributor = users.next();
dmpContributorName.setTextContent(contributor.getUser().getName());
dmpContributorEmail.setTextContent(contributor.getUser().getEmail());
dmpContributorElement.appendChild(dmpContributorName);
dmpContributorElement.appendChild(dmpContributorEmail);
dmpContributorsElement.appendChild(dmpContributorElement);
}
dmpElement.appendChild(dmpContributorsElement);
// Funder. // Funder.
Element funder = xmlDoc.createElement("funder"); Element funder = xmlDoc.createElement("funder");
Element funderLabel = xmlDoc.createElement("label"); Element funderLabel = xmlDoc.createElement("label");
@ -1464,6 +1498,13 @@ public class DataManagementPlanManager {
funderId.setTextContent(dmp.getGrant().getFunder().getId().toString()); funderId.setTextContent(dmp.getGrant().getFunder().getId().toString());
funder.appendChild(funderLabel); funder.appendChild(funderLabel);
funder.appendChild(funderId); funder.appendChild(funderId);
if(dmp.getGrant().getFunder().getReference() != null){
String referencePrefix = dmp.getGrant().getFunder().getReference().split(":")[0];
String shortReference = dmp.getGrant().getFunder().getReference().substring(referencePrefix.length() + 1);
Element funderReference = xmlDoc.createElement("reference");
funderReference.setTextContent(shortReference);
funder.appendChild(funderReference);
}
dmpElement.appendChild(funder); dmpElement.appendChild(funder);
// Grant. // Grant.
Element grant = xmlDoc.createElement("grant"); Element grant = xmlDoc.createElement("grant");
@ -1473,15 +1514,31 @@ public class DataManagementPlanManager {
grantId.setTextContent(dmp.getGrant().getId().toString()); grantId.setTextContent(dmp.getGrant().getId().toString());
grant.appendChild(grantLabel); grant.appendChild(grantLabel);
grant.appendChild(grantId); grant.appendChild(grantId);
if(dmp.getGrant().getReference() != null) {
String referencePrefix = dmp.getGrant().getReference().split(":")[0];
String shortReference = dmp.getGrant().getReference().substring(referencePrefix.length() + 1);
Element grantReference = xmlDoc.createElement("reference");
grantReference.setTextContent(shortReference);
grant.appendChild(grantReference);
}
dmpElement.appendChild(grant); dmpElement.appendChild(grant);
// Project. // Project.
Element project = xmlDoc.createElement("project"); Element project = xmlDoc.createElement("project");
Element projectLabel = xmlDoc.createElement("label");
Element projectId = xmlDoc.createElement("id"); Element projectId = xmlDoc.createElement("id");
projectLabel.setTextContent(dmp.getProject().getLabel()); Element projectLabel = xmlDoc.createElement("label");
Element projectDescription = xmlDoc.createElement("description");
Element projectStartDate = xmlDoc.createElement("start");
Element projectEndDate = xmlDoc.createElement("end");
projectId.setTextContent(dmp.getProject().getId().toString()); projectId.setTextContent(dmp.getProject().getId().toString());
project.appendChild(projectLabel); projectLabel.setTextContent(dmp.getProject().getLabel());
projectDescription.setTextContent(dmp.getProject().getDescription());
projectStartDate.setTextContent(dmp.getProject().getStartdate().toString());
projectEndDate.setTextContent(dmp.getProject().getEnddate().toString());
project.appendChild(projectId); project.appendChild(projectId);
project.appendChild(projectLabel);
project.appendChild(projectDescription);
project.appendChild(projectStartDate);
project.appendChild(projectEndDate);
dmpElement.appendChild(project); dmpElement.appendChild(project);
Element organisationsElement = xmlDoc.createElement("organisations"); Element organisationsElement = xmlDoc.createElement("organisations");
@ -1513,11 +1570,20 @@ public class DataManagementPlanManager {
for (Dataset dataset : datasets) { for (Dataset dataset : datasets) {
Element datasetElement = xmlDoc.createElement("dataset"); Element datasetElement = xmlDoc.createElement("dataset");
Element datsetProfileElement = xmlDoc.createElement("profile");
datasetElement.setAttribute("name", dataset.getLabel()); datasetElement.setAttribute("name", dataset.getLabel());
Element datasetDescriptionElement = xmlDoc.createElement("description");
datasetElement.appendChild(datasetDescriptionElement);
datasetDescriptionElement.setTextContent(dataset.getDescription());
Element datsetProfileElement = xmlDoc.createElement("profile-id");
datasetElement.appendChild(datsetProfileElement); datasetElement.appendChild(datsetProfileElement);
datsetProfileElement.setTextContent(dataset.getProfile().getId().toString()); datsetProfileElement.setTextContent(dataset.getProfile().getId().toString());
Element datsetProfileLabelElement = xmlDoc.createElement("profile-label");
datasetElement.appendChild(datsetProfileLabelElement);
datsetProfileLabelElement.setTextContent(dataset.getProfile().getLabel());
DatasetWizardModel datasetWizardModel = new DatasetWizardModel(); DatasetWizardModel datasetWizardModel = new DatasetWizardModel();
Map<String, Object> properties = new HashMap<>(); Map<String, Object> properties = new HashMap<>();
if (dataset.getProperties() != null) { if (dataset.getProperties() != null) {
@ -1535,12 +1601,18 @@ public class DataManagementPlanManager {
// Get DatasetProfiles from DMP to add to XML. // Get DatasetProfiles from DMP to add to XML.
for (DatasetProfile datasetProfile : dmp.getAssociatedDmps()) { for (DatasetProfile datasetProfile : dmp.getAssociatedDmps()) {
Element profile = xmlDoc.createElement("profile"); Element profile = xmlDoc.createElement("profile");
Element profileLabel = xmlDoc.createElement("profilelabel");
profileLabel.setTextContent(datasetProfile.getLabel());
profile.appendChild(profileLabel);
Element profileId = xmlDoc.createElement("profileId"); Element profileId = xmlDoc.createElement("profileId");
profileId.setTextContent(datasetProfile.getId().toString()); profileId.setTextContent(datasetProfile.getId().toString());
profile.appendChild(profileId); profile.appendChild(profileId);
Element profileGroupId = xmlDoc.createElement("profileGroupId");
profileGroupId.setTextContent(datasetProfile.getGroupId().toString());
profile.appendChild(profileGroupId);
Element profileLabel = xmlDoc.createElement("profileLabel");
profileLabel.setTextContent(datasetProfile.getLabel());
profile.appendChild(profileLabel);
Element profileVersion = xmlDoc.createElement("profileVersion");
profileVersion.setTextContent(String.valueOf(datasetProfile.getVersion()));
profile.appendChild(profileVersion);
profiles.appendChild(profile); profiles.appendChild(profile);
} }
dmpElement.appendChild(profiles); dmpElement.appendChild(profiles);
@ -1556,13 +1628,12 @@ public class DataManagementPlanManager {
return fileEnvelope; return fileEnvelope;
} }
public ResponseEntity<byte[]> getRDAJsonDocument(String id, Principal principal) throws Exception { public FileEnvelope getRDAJsonDocument(String id, Principal principal) throws Exception {
eu.eudat.data.entities.DMP dmp = databaseRepository.getDmpDao().find(UUID.fromString(id)); eu.eudat.data.entities.DMP dmp = databaseRepository.getDmpDao().find(UUID.fromString(id));
if (!dmp.isPublic() && dmp.getUsers().stream().noneMatch(userInfo -> userInfo.getUser().getId() == principal.getId())) if (!dmp.isPublic() && dmp.getUsers().stream().noneMatch(userInfo -> userInfo.getUser().getId() == principal.getId()))
throw new UnauthorisedException(); throw new UnauthorisedException();
// RDAExportModel rdaExportModel = new RDAExportModel().fromDataModel(dmp, datasetManager, principal); final boolean isFinalized = dmp.getStatus() == DMP.DMPStatus.FINALISED.getValue();
final Boolean isFinalized = dmp.getStatus() == DMP.DMPStatus.FINALISED.getValue(); final boolean isPublic = dmp.isPublic();
final Boolean isPublic = dmp.isPublic();
dmp.setDataset(dmp.getDataset().stream() dmp.setDataset(dmp.getDataset().stream()
.filter(dataset -> dataset.getStatus() != Dataset.Status.DELETED.getValue() && .filter(dataset -> dataset.getStatus() != Dataset.Status.DELETED.getValue() &&
dataset.getStatus() != Dataset.Status.CANCELED.getValue()) dataset.getStatus() != Dataset.Status.CANCELED.getValue())
@ -1570,15 +1641,12 @@ public class DataManagementPlanManager {
.collect(Collectors.toSet())); .collect(Collectors.toSet()));
String result = rdaManager.convertToRDA(dmp); String result = rdaManager.convertToRDA(dmp);
/*ObjectMapper mapper = new ObjectMapper(); String fileName = "DMP_" + dmp.getGrant().getLabel() + "_" + dmp.getVersion();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);*/
String fileName = "DMP_" + dmp.getGrant().getLabel() + "_" + dmp.getVersion();//dmp.getLabel();
fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", "").replace(" ", "_").replace(",", "_"); fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", "").replace(" ", "_").replace(",", "_");
String uuid = UUID.randomUUID().toString(); String uuid = UUID.randomUUID().toString();
File file = new File(this.environment.getProperty("temp.temp") + uuid + ".json"); File file = new File(this.environment.getProperty("temp.temp") + uuid + ".json");
OutputStream output = new FileOutputStream(file); OutputStream output = new FileOutputStream(file);
try { try {
// mapper.writeValue(file, rdaExportModel);
output.write(result.getBytes()); output.write(result.getBytes());
output.flush(); output.flush();
output.close(); output.close();
@ -1586,18 +1654,10 @@ public class DataManagementPlanManager {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
} }
InputStream resource = new FileInputStream(file); FileEnvelope rdaJsonDocument = new FileEnvelope();
HttpHeaders responseHeaders = new HttpHeaders(); rdaJsonDocument.setFilename(fileName + ".json");
responseHeaders.setContentLength(file.length()); rdaJsonDocument.setFile(file);
responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM); return rdaJsonDocument;
responseHeaders.set("Content-Disposition", "attachment;filename=" + fileName + ".json");
responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition");
responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type");
byte[] content = org.apache.poi.util.IOUtils.toByteArray(resource);
resource.close();
Files.deleteIfExists(file.toPath());
return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK);
} }
public ResponseEntity<byte[]> getDocument(String id, String contentType, Principal principal, ConfigLoader configLoader) throws InstantiationException, IllegalAccessException, IOException { public ResponseEntity<byte[]> getDocument(String id, String contentType, Principal principal, ConfigLoader configLoader) throws InstantiationException, IllegalAccessException, IOException {
@ -2041,100 +2101,6 @@ public class DataManagementPlanManager {
return null; return null;
} }
private String getUnpublishedDOI(String DOI, String token, Integer version) {
try {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
Map createResponse = null;
LinkedHashMap<String, String> links = null;
LinkedHashMap<String, String> metadata = null;
String listUrl = this.environment.getProperty("zenodo.url") + "deposit/depositions" + "?q=conceptdoi:\"" + DOI + "\"&access_token=" + token;
ResponseEntity<Map[]> listResponses = restTemplate.getForEntity(listUrl, Map[].class);
createResponse = listResponses.getBody()[0];
metadata = (LinkedHashMap<String, String>) createResponse.get("metadata");
links = (LinkedHashMap<String, String>) createResponse.get("links");
if (metadata.get("version").equals(version.toString())) {
return links.get("publish");
} else {
return null;
}
}catch (Exception e) {
logger.warn(e.getMessage(), e);
return null;
}
}
public String createZenodoDoi(UUID id, Principal principal) throws Exception {
return this.createZenodoDoi(id, principal, false);
}
public String createZenodoDoi(UUID id, Principal principal, boolean update) throws Exception {
DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(id);
if (!isUserOwnerOfDmp(dmp, principal))
throw new Exception("User is not authorized to invoke this action");
if (!dmp.getStatus().equals(DMP.DMPStatus.FINALISED.getValue()))
throw new Exception("DMP is not finalized");
/*if (dmp.getDoi() != null)
throw new Exception("DMP already has a DOI");*/
FileEnvelope file = getWordDocument(id.toString(), principal, configLoader);
String name = file.getFilename().substring(0, file.getFilename().length() - 5);
File pdfFile = PDFUtils.convertToPDF(file, environment);
String fileName = name + ".pdf";
ResponseEntity<byte[]> jsonFile;
try {
jsonFile = getRDAJsonDocument(id.toString(), principal);
} catch (Exception e) {
throw e;
}
String previousDOI = this.getPreviousDOI(dmp.getGroupId(), dmp.getId(), "Zenodo");
File supportingFilesZip = this.createSupportingFilesZip(dmp);
DMPDepositModel dmpDepositModel = DMPToDepositMapper.fromDMP(dmp, pdfFile, fileName, jsonFile, supportingFilesZip, previousDOI);
String zenodoToken = "";
try {
if (this.userManager.isDOITokenValid(principal)) {
zenodoToken = principal.getZenodoToken();
}
} catch (NonValidTokenException e) {
zenodoToken = this.environment.getProperty("zenodo.access_token");
}
String finalDoi = null;
for(RepositoryDeposit repo: this.repositoriesDeposit) { //temp
if(repo.getConfiguration().getRepositoryId().equals("Zenodo")) {
finalDoi = repo.deposit(dmpDepositModel, zenodoToken);
if (finalDoi != null) {
EntityDoi doiEntity = new EntityDoi();
doiEntity.setId(UUID.randomUUID());
doiEntity.setEntityType(EntityDoi.EntityType.DMP);
doiEntity.setDoi(finalDoi);
doiEntity.setRepositoryId("Zenodo");
Date now = new Date();
doiEntity.setCreatedAt(now);
doiEntity.setUpdatedAt(now);
doiEntity.setEntityId(dmp);
apiContext.getOperationsContext().getDatabaseRepository().getEntityDoiDao().createOrUpdate(doiEntity);
dmp.getDois().add(doiEntity);
apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(dmp);
}
}
}
if(supportingFilesZip != null) {
Files.deleteIfExists(supportingFilesZip.toPath());
}
Files.deleteIfExists(pdfFile.toPath());
Files.deleteIfExists(file.getFile().toPath());
return finalDoi;
}
public Doi createDoi(DepositRequest depositRequest, Principal principal) throws Exception { public Doi createDoi(DepositRequest depositRequest, Principal principal) throws Exception {
DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(UUID.fromString(depositRequest.getDmpId())); DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(UUID.fromString(depositRequest.getDmpId()));
if (!isUserOwnerOfDmp(dmp, principal)) if (!isUserOwnerOfDmp(dmp, principal))
@ -2147,18 +2113,22 @@ public class DataManagementPlanManager {
FileEnvelope file = getWordDocument(depositRequest.getDmpId(), principal, configLoader); FileEnvelope file = getWordDocument(depositRequest.getDmpId(), principal, configLoader);
String name = file.getFilename().substring(0, file.getFilename().length() - 5).replaceAll("[^a-zA-Z0-9_+ ]", "").replace(" ", "_").replace(",", "_"); String name = file.getFilename().substring(0, file.getFilename().length() - 5).replaceAll("[^a-zA-Z0-9_+ ]", "").replace(" ", "_").replace(",", "_");
File pdfFile = PDFUtils.convertToPDF(file, environment); File pdfFile = PDFUtils.convertToPDF(file, environment);
String fileName = name + ".pdf"; eu.eudat.depositinterface.models.FileEnvelope pdfEnvelope = new eu.eudat.depositinterface.models.FileEnvelope();
ResponseEntity<byte[]> jsonFile; pdfEnvelope.setFile(pdfFile);
pdfEnvelope.setFilename(name + ".pdf");
eu.eudat.depositinterface.models.FileEnvelope rdaJsonFile = new eu.eudat.depositinterface.models.FileEnvelope();
try { try {
jsonFile = getRDAJsonDocument(depositRequest.getDmpId(), principal); FileEnvelope rdaJsonDocument = getRDAJsonDocument(depositRequest.getDmpId(), principal);
rdaJsonFile.setFile(rdaJsonDocument.getFile());
rdaJsonFile.setFilename(rdaJsonDocument.getFilename());
} catch (Exception e) { } catch (Exception e) {
throw e; logger.error(e.getMessage(), e);
} }
String previousDOI = this.getPreviousDOI(dmp.getGroupId(), dmp.getId(), depositRequest.getRepositoryId()); String previousDOI = this.getPreviousDOI(dmp.getGroupId(), dmp.getId(), depositRequest.getRepositoryId());
File supportingFilesZip = this.createSupportingFilesZip(dmp); File supportingFilesZip = this.createSupportingFilesZip(dmp);
DMPDepositModel dmpDepositModel = DMPToDepositMapper.fromDMP(dmp, pdfFile, fileName, jsonFile, supportingFilesZip, previousDOI); DMPDepositModel dmpDepositModel = DMPToDepositMapper.fromDMP(dmp, pdfEnvelope, rdaJsonFile, supportingFilesZip, previousDOI);
Optional<RepositoryDeposit> repo = this.repositoriesDeposit.stream().filter(x -> x.getConfiguration().getRepositoryId().equals(depositRequest.getRepositoryId())).findFirst(); Optional<RepositoryDeposit> repo = this.repositoriesDeposit.stream().filter(x -> x.getConfiguration().getRepositoryId().equals(depositRequest.getRepositoryId())).findFirst();
String finalDoi = repo.map(r -> { String finalDoi = repo.map(r -> {
@ -2192,10 +2162,12 @@ public class DataManagementPlanManager {
if(supportingFilesZip != null) { if(supportingFilesZip != null) {
Files.deleteIfExists(supportingFilesZip.toPath()); Files.deleteIfExists(supportingFilesZip.toPath());
} }
Files.deleteIfExists(rdaJsonFile.getFile().toPath());
Files.deleteIfExists(pdfFile.toPath()); Files.deleteIfExists(pdfFile.toPath());
Files.deleteIfExists(file.getFile().toPath()); Files.deleteIfExists(file.getFile().toPath());
return doiModel; return doiModel;
} }
private File createSupportingFilesZip(DMP dmp) throws IOException { private File createSupportingFilesZip(DMP dmp) throws IOException {

View File

@ -1136,7 +1136,7 @@ public class DatasetManager {
List<Tag> tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().query(criteria).stream().map(eu.eudat.elastic.entities.Dataset::getTags).flatMap(Collection::stream).filter(StreamDistinctBy.distinctByKey(Tag::getId)).collect(Collectors.toList()); List<Tag> tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().query(criteria).stream().map(eu.eudat.elastic.entities.Dataset::getTags).flatMap(Collection::stream).filter(StreamDistinctBy.distinctByKey(Tag::getId)).collect(Collectors.toList());
Set<JsonNode> tagNodes = new HashSet<>(); Set<JsonNode> tagNodes = new HashSet<>();
tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "renderStyle", "tags", true)); tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "renderStyle", "tags", true));
tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "rdaProperty", "dataset.keyword")); tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "schematics", "rda.dataset.keyword"));
if(wizardModel.getTags() == null){ if(wizardModel.getTags() == null){
wizardModel.setTags(new ArrayList<>()); wizardModel.setTags(new ArrayList<>());
} }

View File

@ -10,6 +10,8 @@ import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileAutocompleteR
import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem;
import eu.eudat.exceptions.datasetprofile.DatasetProfileNewVersionException; import eu.eudat.exceptions.datasetprofile.DatasetProfileNewVersionException;
import eu.eudat.logic.builders.model.models.DataTableDataBuilder; import eu.eudat.logic.builders.model.models.DataTableDataBuilder;
import eu.eudat.logic.proxy.config.Schematic;
import eu.eudat.logic.proxy.config.configloaders.ConfigLoader;
import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.ApiContext;
import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.logic.services.operations.DatabaseRepository;
import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.logic.utilities.builders.XmlBuilder;
@ -43,9 +45,17 @@ import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.activation.MimetypesFileTypeMap; import javax.activation.MimetypesFileTypeMap;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.*; import javax.xml.xpath.*;
import java.io.*; import java.io.*;
import java.nio.file.Files; import java.nio.file.Files;
@ -62,14 +72,16 @@ public class DatasetProfileManager {
private ApiContext apiContext; private ApiContext apiContext;
private DatabaseRepository databaseRepository; private DatabaseRepository databaseRepository;
private Environment environment; private Environment environment;
private ConfigLoader configLoader;
private final MetricsManager metricsManager; private final MetricsManager metricsManager;
@Autowired @Autowired
public DatasetProfileManager(ApiContext apiContext, Environment environment, MetricsManager metricsManager) { public DatasetProfileManager(ApiContext apiContext, Environment environment, ConfigLoader configLoader, MetricsManager metricsManager) {
this.apiContext = apiContext; this.apiContext = apiContext;
this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository();
this.environment = environment; this.environment = environment;
this.configLoader = configLoader;
this.metricsManager = metricsManager; this.metricsManager = metricsManager;
} }
@ -363,4 +375,55 @@ public class DatasetProfileManager {
} }
} }
public List<String> getSchematics(String query) {
List<Schematic> schematics = configLoader.getSchematics();
List<String> filteredSchematics = schematics.stream().map(Schematic::getName).collect(Collectors.toList());
if(query != null && !query.isEmpty()){
filteredSchematics = schematics.stream().filter(x -> x.getCategory().contains(query) || x.getName().contains(query)).map(Schematic::getName).collect(Collectors.toList());
}
return filteredSchematics;
}
public void addSchematicsInDatasetProfiles() throws XPathExpressionException {
List<DatasetProfile> datasetProfiles = this.databaseRepository.getDatasetProfileDao().getAll().toList();
for(DatasetProfile datasetProfile: datasetProfiles){
Document document = XmlBuilder.fromXml(datasetProfile.getDefinition());
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
XPathExpression expr = xpath.compile("//rdaCommonStandard");
NodeList rdaProperties = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
for(int i = 0; i < rdaProperties.getLength(); i++){
Node rdaPropertyNode = rdaProperties.item(i);
String rdaProperty = rdaPropertyNode.getTextContent();
Element schematics = document.createElement("schematics");
Node fieldParent = rdaPropertyNode.getParentNode();
if(rdaProperty != null && !rdaProperty.isEmpty()){
Element schematic = document.createElement("schematic");
schematic.setTextContent(rdaProperty);
schematics.appendChild(schematic);
}
fieldParent.insertBefore(schematics, rdaPropertyNode);
fieldParent.removeChild(rdaPropertyNode);
}
try {
DOMSource domSource = new DOMSource(document);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(domSource, result);
String newDefinition = writer.toString();
if(newDefinition != null){
}
datasetProfile.setDefinition(newDefinition);
this.databaseRepository.getDatasetProfileDao().createOrUpdate(datasetProfile);
}
catch(TransformerException ex) {
logger.error(ex.getMessage(), ex);
}
}
}
} }

View File

@ -159,31 +159,10 @@ public class UserManager {
return dataTableData; return dataTableData;
} }
public Boolean isDOITokenValid(Principal principal) throws NonValidTokenException, ExpiredTokenException, IOException {
if (principal.getZenodoToken() != null && !principal.getZenodoToken().isEmpty()) {
if (Instant.now().isBefore(principal.getZenodoDuration())) {
return true;
}
try {
this.updateDOIToken(ZenodoAccessType.REFRESH_TOKEN, principal.getZenodoRefresh(), this.environment.getProperty("zenodo.login.redirect_uri"), principal);
return true;
}catch (Exception e) {
this.deleteDOIToken(principal);
throw new ExpiredTokenException("Zenodo Token is expired.");
}
}
throw new NonValidTokenException("This account has no Zenodo Token");
}
public void registerDOIToken(DOIRequest doiRequest, Principal principal) throws IOException { public void registerDOIToken(DOIRequest doiRequest, Principal principal) throws IOException {
this.updateDOIToken(ZenodoAccessType.AUTHORIZATION_CODE, doiRequest.getZenodoRequest().getCode(), doiRequest.getRedirectUri(), principal); ZenodoResponseToken responseToken = this.zenodoCustomProvider.getAccessToken(ZenodoAccessType.AUTHORIZATION_CODE,
} doiRequest.getZenodoRequest().getCode(), this.environment.getProperty("zenodo.login.client_id"),
this.environment.getProperty("zenodo.login.client_secret"), doiRequest.getRedirectUri());
private void updateDOIToken(ZenodoAccessType accessType, String code, String redirectUri, Principal principal) throws IOException {
ZenodoResponseToken responseToken = this.zenodoCustomProvider.getAccessToken(accessType, code
, this.environment.getProperty("zenodo.login.client_id")
, this.environment.getProperty("zenodo.login.client_secret")
, redirectUri);
Map<String, Object> settings = new HashMap<>(); Map<String, Object> settings = new HashMap<>();
settings.put("zenodoEmail", responseToken.getEmail()); settings.put("zenodoEmail", responseToken.getEmail());
settings.put("zenodoRefresh", responseToken.getRefreshToken()); settings.put("zenodoRefresh", responseToken.getRefreshToken());

View File

@ -112,17 +112,17 @@ public class PrefillingMapper {
throw e; throw e;
} }
} else { } else {
List<JsonNode> nodes = JsonSearcher.findNodes(parentNode, "rdaProperty", prefillingMapping.getMaDmpTarget()); List<JsonNode> nodes = JsonSearcher.findNodes(parentNode, "schematics", "rda." + prefillingMapping.getMaDmpTarget());
// zenodo prefilling customizations // zenodo prefilling customizations
if(type.equals("zenodo")){ if(type.equals("zenodo")){
if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.data_access")){ if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.data_access")){
if(parsedValue != null && parsedValue.equals("open")){ if(parsedValue != null && parsedValue.equals("open")){
List<JsonNode> issuedNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.issued"); List<JsonNode> issuedNodes = JsonSearcher.findNodes(parentNode, "schematics", "rda.dataset.issued");
if(!issuedNodes.isEmpty()){ if(!issuedNodes.isEmpty()){
String issuedIdNode = issuedNodes.get(0).get("id").asText(); String issuedIdNode = issuedNodes.get(0).get("id").asText();
String issuedValue = (String) properties.get(issuedIdNode); String issuedValue = (String) properties.get(issuedIdNode);
List<JsonNode> licStartDateNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.distribution.license.start_date"); List<JsonNode> licStartDateNodes = JsonSearcher.findNodes(parentNode, "schematics", "rda.dataset.distribution.license.start_date");
for (JsonNode licStartDateNode : licStartDateNodes) { for (JsonNode licStartDateNode : licStartDateNodes) {
String licStartDateId = licStartDateNode.get(0) != null ? licStartDateNode.get(0).get("id").asText() : licStartDateNode.get("id").asText(); String licStartDateId = licStartDateNode.get(0) != null ? licStartDateNode.get(0).get("id").asText() : licStartDateNode.get("id").asText();
properties.put(licStartDateId, issuedValue); properties.put(licStartDateId, issuedValue);

View File

@ -0,0 +1,25 @@
package eu.eudat.logic.proxy.config;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Schematic {
@JsonProperty("category")
private String category;
@JsonProperty("name")
private String name;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -1,6 +1,7 @@
package eu.eudat.logic.proxy.config.configloaders; package eu.eudat.logic.proxy.config.configloaders;
import eu.eudat.logic.proxy.config.ExternalUrls; import eu.eudat.logic.proxy.config.ExternalUrls;
import eu.eudat.logic.proxy.config.Schematic;
import eu.eudat.logic.security.customproviders.ConfigurableProvider.entities.ConfigurableProviders; import eu.eudat.logic.security.customproviders.ConfigurableProvider.entities.ConfigurableProviders;
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument;
@ -9,7 +10,7 @@ import java.util.Map;
public interface ConfigLoader { public interface ConfigLoader {
ExternalUrls getExternalUrls(); ExternalUrls getExternalUrls();
List<String> getRdaProperties(); List<Schematic> getSchematics();
XWPFDocument getDocument(); XWPFDocument getDocument();
XWPFDocument getDatasetDocument(); XWPFDocument getDatasetDocument();
ConfigurableProviders getConfigurableProviders(); ConfigurableProviders getConfigurableProviders();

View File

@ -1,8 +1,10 @@
package eu.eudat.logic.proxy.config.configloaders; package eu.eudat.logic.proxy.config.configloaders;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import eu.eudat.logic.proxy.config.ExternalUrls; import eu.eudat.logic.proxy.config.ExternalUrls;
import eu.eudat.logic.proxy.config.Schematic;
import eu.eudat.logic.security.customproviders.ConfigurableProvider.entities.ConfigurableProviders; import eu.eudat.logic.security.customproviders.ConfigurableProvider.entities.ConfigurableProviders;
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -35,7 +37,7 @@ public class DefaultConfigLoader implements ConfigLoader {
private static final ObjectMapper mapper = new ObjectMapper(); private static final ObjectMapper mapper = new ObjectMapper();
private ExternalUrls externalUrls; private ExternalUrls externalUrls;
private List<String> rdaProperties; private List<Schematic> schematics;
private XWPFDocument document; private XWPFDocument document;
private XWPFDocument datasetDocument; private XWPFDocument datasetDocument;
private ConfigurableProviders configurableProviders; private ConfigurableProviders configurableProviders;
@ -64,24 +66,17 @@ public class DefaultConfigLoader implements ConfigLoader {
} }
} }
private void setRdaProperties() { private void setSchematics() {
String filePath = environment.getProperty("configuration.rda"); String filePath = environment.getProperty("configuration.schematics");
logger.info("Loaded also config file: " + filePath); logger.info("Loaded also config file: " + filePath);
BufferedReader reader; if (filePath != null) {
List<String> rdaList = new LinkedList<>(); try {
try { schematics = mapper.readValue(getStreamFromPath(filePath), new TypeReference<List<Schematic>>(){});
reader = new BufferedReader(new InputStreamReader(getStreamFromPath(filePath))); }
String line = reader.readLine(); catch (IOException e) {
while (line != null) { logger.error(e.getMessage(), e);
rdaList.add(line);
line = reader.readLine();
} }
reader.close();
} catch (IOException | NullPointerException e) {
logger.error(e.getMessage(), e);
} }
rdaProperties = rdaList;
} }
private void setDocument() { private void setDocument() {
@ -171,12 +166,12 @@ public class DefaultConfigLoader implements ConfigLoader {
return externalUrls; return externalUrls;
} }
public List<String> getRdaProperties() { public List<Schematic> getSchematics() {
if (rdaProperties == null) { if (schematics == null) {
rdaProperties = new ArrayList<>(); schematics = new ArrayList<>();
this.setRdaProperties(); this.setSchematics();
} }
return rdaProperties; return schematics;
} }
public XWPFDocument getDocument() { public XWPFDocument getDocument() {

View File

@ -1,29 +1,45 @@
package eu.eudat.logic.security.repositorydeposit.mapper; package eu.eudat.logic.security.repositorydeposit.mapper;
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.data.entities.*;
import eu.eudat.depositinterface.models.*; import eu.eudat.depositinterface.models.*;
import org.springframework.http.ResponseEntity; import eu.eudat.logic.utilities.builders.XmlBuilder;
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.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class DMPToDepositMapper { public class DMPToDepositMapper {
public static DMPDepositModel fromDMP(DMP entity, File pdfFile, String fileName, ResponseEntity<byte[]> jsonFile, File supportingFilesZip, String previousDOI) { private static final Logger logger = LoggerFactory.getLogger(DMPToDepositMapper.class);
private static final ObjectMapper mapper = new ObjectMapper();
public static DMPDepositModel fromDMP(DMP entity, FileEnvelope pdfFile, FileEnvelope jsonFile, File supportingFilesZip, String previousDOI) {
DMPDepositModel deposit = new DMPDepositModel(); DMPDepositModel deposit = new DMPDepositModel();
deposit.setId(entity.getId()); deposit.setId(entity.getId());
deposit.setVersion(entity.getVersion()); deposit.setVersion(entity.getVersion());
deposit.setLabel(entity.getLabel()); deposit.setLabel(entity.getLabel());
deposit.setDescription(entity.getDescription()); deposit.setDescription(entity.getDescription());
deposit.setPublic(entity.isPublic()); deposit.setPublic(entity.isPublic());
deposit.setDatasets(entity.getDataset().stream().map(DMPToDepositMapper::fromDataset).collect(Collectors.toList()));
deposit.setUsers(entity.getUsers().stream().map(DMPToDepositMapper::fromUserDMP).collect(Collectors.toSet())); deposit.setUsers(entity.getUsers().stream().map(DMPToDepositMapper::fromUserDMP).collect(Collectors.toSet()));
deposit.setOrganisations(entity.getOrganisations().stream().map(DMPToDepositMapper::fromOrganisation).collect(Collectors.toSet())); deposit.setOrganisations(entity.getOrganisations().stream().map(DMPToDepositMapper::fromOrganisation).collect(Collectors.toSet()));
deposit.setResearchers(entity.getResearchers().stream().map(DMPToDepositMapper::fromResearcher).collect(Collectors.toSet())); deposit.setResearchers(entity.getResearchers().stream().map(DMPToDepositMapper::fromResearcher).collect(Collectors.toSet()));
deposit.setGrant(fromGrant(entity.getGrant())); deposit.setGrant(fromGrant(entity.getGrant()));
deposit.setPdfFile(pdfFile); deposit.setPdfFile(pdfFile);
deposit.setPdfFileName(fileName); deposit.setRdaJsonFile(jsonFile);
deposit.setRdaJson(jsonFile);
deposit.setSupportingFilesZip(supportingFilesZip); deposit.setSupportingFilesZip(supportingFilesZip);
deposit.setPreviousDOI(previousDOI); deposit.setPreviousDOI(previousDOI);
@ -31,6 +47,54 @@ public class DMPToDepositMapper {
return deposit; return deposit;
} }
private static DatasetDepositModel fromDataset(Dataset entity){
DatasetDepositModel deposit = new DatasetDepositModel();
deposit.setLabel(entity.getLabel());
deposit.setDescription(entity.getDescription());
deposit.setProfileDefinition(entity.getProfile().getDefinition());
deposit.setProperties(entity.getProperties());
deposit.setFields(fromDefinitionAndProperties(deposit.getProfileDefinition(), deposit.getProperties()));
return deposit;
}
private static List<DatasetFieldsDepositModel> fromDefinitionAndProperties(String definition, String properties){
List<DatasetFieldsDepositModel> deposit = new ArrayList<>();
try {
Map<String, Object> datasetAnswers = mapper.readValue(properties, HashMap.class);
Document document = XmlBuilder.fromXml(definition);
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
XPathExpression expr = xpath.compile("//schematics");
NodeList schematics = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < schematics.getLength(); i++) {
Node schematicsNode = schematics.item(i);
NodeList schematicsList = schematicsNode.getChildNodes();
DatasetFieldsDepositModel fieldDeposit = new DatasetFieldsDepositModel();
List<String> schematicsDeposit = new ArrayList<>();
if(schematicsList != null){
for(int j = 0; j < schematicsList.getLength(); j++){
Node schematic = schematicsList.item(j);
if(schematic.getTextContent().matches(".*\\w+.*")) {
schematicsDeposit.add(schematic.getTextContent());
}
}
}
fieldDeposit.setSchematics(schematicsDeposit);
String fieldId = schematicsNode.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
String value = (String) datasetAnswers.get(fieldId);
fieldDeposit.setValue(value);
deposit.add(fieldDeposit);
}
}
catch (XPathExpressionException | JsonProcessingException ex){
logger.error(ex.getMessage(), ex);
return null;
}
return deposit;
}
private static UserDMPDepositModel fromUserDMP(UserDMP entity){ private static UserDMPDepositModel fromUserDMP(UserDMP entity){
UserDMPDepositModel deposit = new UserDMPDepositModel(); UserDMPDepositModel deposit = new UserDMPDepositModel();
deposit.setUser(fromUserInfo(entity.getUser())); deposit.setUser(fromUserInfo(entity.getUser()));

View File

@ -86,6 +86,11 @@ public class ExportXmlBuilder {
composite.appendChild(title); composite.appendChild(title);
} }
composite.appendChild(createFields(compositeField.getFields(), visibilityRuleService, element)); composite.appendChild(createFields(compositeField.getFields(), visibilityRuleService, element));
if(compositeField.getHasCommentField()){
Element comment = element.createElement("comment");
comment.setTextContent(compositeField.getCommentFieldValue());
composite.appendChild(comment);
}
elementComposites.appendChild(composite); elementComposites.appendChild(composite);
} }

View File

@ -164,10 +164,14 @@ public class ExportXmlBuilderDatasetProfile {
numbering.setTextContent(field.getNumbering()); numbering.setTextContent(field.getNumbering());
elementField.appendChild(numbering); elementField.appendChild(numbering);
} }
if (field.getRdaProperty() != null) { if (field.getSchematics() != null) {
Element rdaProperty = element.createElement("rdaProperty"); Element schematics = element.createElement("schematics");
rdaProperty.setTextContent(field.getRdaProperty()); field.getSchematics().forEach(schematic -> {
elementField.appendChild(rdaProperty); Element schematicChild = element.createElement("schematic");
schematicChild.setTextContent(schematic);
schematics.appendChild(schematicChild);
});
elementField.appendChild(schematics);
} }
if (field.getValidations() != null) { if (field.getValidations() != null) {
Element validations = element.createElement("validations"); Element validations = element.createElement("validations");

View File

@ -29,7 +29,7 @@ public class Field {
private Object data; private Object data;
private String rdaProperty; private Schematics schematics;
@XmlAttribute(name = "id") @XmlAttribute(name = "id")
public String getId() { public String getId() {
@ -103,16 +103,15 @@ public class Field {
this.data = data; this.data = data;
} }
@XmlElement(name = "rdaProperty") @XmlElement(name = "schematics")
public String getRdaProperty() { public Schematics getSchematics() {
return rdaProperty; return schematics;
} }
public void setRdaProperty(String rdaProperty) { public void setSchematics(Schematics schematics) {
this.rdaProperty = rdaProperty; this.schematics = schematics;
} }
public eu.eudat.models.data.admin.components.datasetprofile.Field toAdminCompositeModelSection() { public eu.eudat.models.data.admin.components.datasetprofile.Field toAdminCompositeModelSection() {
eu.eudat.models.data.admin.components.datasetprofile.Field fieldEntity =new eu.eudat.models.data.admin.components.datasetprofile.Field(); eu.eudat.models.data.admin.components.datasetprofile.Field fieldEntity =new eu.eudat.models.data.admin.components.datasetprofile.Field();
fieldEntity.setId(this.id); fieldEntity.setId(this.id);
@ -131,7 +130,14 @@ public class Field {
if (data != null) { if (data != null) {
fieldEntity.setData(data.toMap((Element) this.data)); fieldEntity.setData(data.toMap((Element) this.data));
} }
fieldEntity.setRdaCommonStandard(this.rdaProperty); List<String> schematicsList = new LinkedList<>();
if (this.schematics != null && this.schematics.getSchematics() != null) {
for (Schematic schematic : this.schematics.getSchematics()) {
if (schematic != null && schematic.getSchematic() != null && !schematic.getSchematic().isEmpty())
schematicsList.add(schematic.getSchematic());
}
}
fieldEntity.setSchematics(schematicsList);
return fieldEntity; return fieldEntity;
} }
} }

View File

@ -0,0 +1,19 @@
package eu.eudat.logic.utilities.documents.xml.datasetProfileXml.datasetProfileModel.Fields;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
@XmlRootElement(name = "schematic")
public class Schematic {
private String schematic;
@XmlValue
public String getSchematic() {
return schematic;
}
public void setSchematic(String schematic) {
this.schematic = schematic;
}
}

View File

@ -0,0 +1,20 @@
package eu.eudat.logic.utilities.documents.xml.datasetProfileXml.datasetProfileModel.Fields;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name = "schematics")
public class Schematics {
private List<Schematic> schematics;
@XmlElement(name = "schematic")
public List<Schematic> getSchematics() {
return schematics;
}
public void setSchematics(List<Schematic> schematics) {
this.schematics = schematics;
}
}

View File

@ -29,6 +29,18 @@ public class JsonSearcher {
} }
found++; found++;
} }
else if(node.get(fieldName).isArray()){
for(JsonNode item: node.get(fieldName)){
if(item.asText().equals(value) || item.asText().startsWith(value)){
if (parent) {
nodes.add(root);
} else {
nodes.add(node);
}
found++;
}
}
}
} }
} }

View File

@ -45,7 +45,7 @@ public class Field implements ViewStyleDefinition<eu.eudat.models.data.entities.
private String id; private String id;
private Integer ordinal; private Integer ordinal;
private String rdaCommonStandard; private List<String> schematics;
private String value; private String value;
private ViewStyle viewStyle; private ViewStyle viewStyle;
private String datatype; private String datatype;
@ -70,11 +70,12 @@ public class Field implements ViewStyleDefinition<eu.eudat.models.data.entities.
this.ordinal = ordinal; this.ordinal = ordinal;
} }
public String getRdaCommonStandard() {
return rdaCommonStandard; public List<String> getSchematics() {
return schematics;
} }
public void setRdaCommonStandard(String rdaCommonStandard) { public void setSchematics(List<String> schematics) {
this.rdaCommonStandard = rdaCommonStandard; this.schematics = schematics;
} }
public String getValue() { public String getValue() {
@ -152,7 +153,7 @@ public class Field implements ViewStyleDefinition<eu.eudat.models.data.entities.
field.setVisible(this.visible); field.setVisible(this.visible);
field.setDefaultValue(this.defaultValue); field.setDefaultValue(this.defaultValue);
field.setValidations(this.validations); field.setValidations(this.validations);
field.setRdaCommonStandard(this.rdaCommonStandard); field.setSchematics(this.schematics);
field.setExport(this.export); field.setExport(this.export);
return field; return field;
} }
@ -166,7 +167,7 @@ public class Field implements ViewStyleDefinition<eu.eudat.models.data.entities.
this.visible = item.getVisible(); this.visible = item.getVisible();
this.defaultValue = item.getDefaultValue(); this.defaultValue = item.getDefaultValue();
this.validations = item.getValidations(); this.validations = item.getValidations();
this.rdaCommonStandard = item.getRdaCommonStandard(); this.schematics = item.getSchematics();
this.export = item.getExport(); this.export = item.getExport();
} }

View File

@ -18,7 +18,7 @@ import java.util.List;
public class Field implements DatabaseViewStyleDefinition, XmlSerializable<Field> { public class Field implements DatabaseViewStyleDefinition, XmlSerializable<Field> {
private String id; private String id;
private int ordinal; private int ordinal;
private String rdaCommonStandard; private List<String> schematics;
private String numbering; private String numbering;
private ViewStyle viewStyle; private ViewStyle viewStyle;
private DefaultValue defaultValue; private DefaultValue defaultValue;
@ -42,11 +42,11 @@ public class Field implements DatabaseViewStyleDefinition, XmlSerializable<Field
this.ordinal = ordinal; this.ordinal = ordinal;
} }
public String getRdaCommonStandard() { public List<String> getSchematics() {
return rdaCommonStandard; return schematics;
} }
public void setRdaCommonStandard(String rdaCommonStandard) { public void setSchematics(List<String> schematics) {
this.rdaCommonStandard = rdaCommonStandard; this.schematics = schematics;
} }
public ViewStyle getViewStyle() { public ViewStyle getViewStyle() {
@ -105,8 +105,14 @@ public class Field implements DatabaseViewStyleDefinition, XmlSerializable<Field
rootElement.setAttribute("id", this.id); rootElement.setAttribute("id", this.id);
rootElement.setAttribute("ordinal", "" + this.ordinal); rootElement.setAttribute("ordinal", "" + this.ordinal);
Element rdaCommonStandard = doc.createElement("rdaCommonStandard"); Element schematics = doc.createElement("schematics");
rdaCommonStandard.setTextContent(this.rdaCommonStandard); if (this.schematics != null) {
for (String s : this.schematics) {
Element schematic = doc.createElement("schematic");
schematic.setTextContent(s);
schematics.appendChild(schematic);
}
}
Element viewStyle = doc.createElement("viewStyle"); Element viewStyle = doc.createElement("viewStyle");
viewStyle.setAttribute("renderstyle", this.viewStyle.getRenderStyle()); viewStyle.setAttribute("renderstyle", this.viewStyle.getRenderStyle());
@ -128,7 +134,7 @@ public class Field implements DatabaseViewStyleDefinition, XmlSerializable<Field
Element numbering = doc.createElement("numbering"); Element numbering = doc.createElement("numbering");
numbering.setTextContent(this.numbering); numbering.setTextContent(this.numbering);
rootElement.appendChild(rdaCommonStandard); rootElement.appendChild(schematics);
rootElement.appendChild(numbering); rootElement.appendChild(numbering);
rootElement.appendChild(validations); rootElement.appendChild(validations);
rootElement.appendChild(defaultValue); rootElement.appendChild(defaultValue);
@ -158,8 +164,17 @@ public class Field implements DatabaseViewStyleDefinition, XmlSerializable<Field
Element numbering = XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "numbering"); Element numbering = XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "numbering");
if (numbering != null) this.numbering = numbering.getTextContent(); if (numbering != null) this.numbering = numbering.getTextContent();
Element rdaCommonStandard = XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "rdaCommonStandard"); this.schematics = new LinkedList<>();
if (rdaCommonStandard != null) this.rdaCommonStandard = rdaCommonStandard.getTextContent(); Element schematics = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "schematics");
if(schematics != null){
NodeList schematicElements = schematics.getChildNodes();
for (int temp = 0; temp < schematicElements.getLength(); temp++) {
Node schematicElement = schematicElements.item(temp);
if (schematicElement.getNodeType() == Node.ELEMENT_NODE) {
this.schematics.add(schematicElement.getTextContent());
}
}
}
Element dataElement = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "data"); Element dataElement = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "data");

View File

@ -39,7 +39,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin
private List<Field> multiplicityItems; private List<Field> multiplicityItems;
private List<eu.eudat.models.data.admin.components.datasetprofile.Field.ValidationType> validations; private List<eu.eudat.models.data.admin.components.datasetprofile.Field.ValidationType> validations;
private Visibility visible; private Visibility visible;
private String rdaProperty; private List<String> schematics;
private Boolean export; private Boolean export;
@ -154,12 +154,12 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin
this.numbering = numbering; this.numbering = numbering;
} }
public String getRdaProperty() { public List<String> getSchematics() {
return rdaProperty; return schematics;
} }
public void setRdaProperty(String rdaProperty) { public void setSchematics(List<String> schematics) {
this.rdaProperty = rdaProperty; this.schematics = schematics;
} }
public Boolean getExport() { public Boolean getExport() {
@ -181,7 +181,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin
newField.defaultValue = this.defaultValue; newField.defaultValue = this.defaultValue;
newField.data = this.data; newField.data = this.data;
newField.validations = this.validations; newField.validations = this.validations;
newField.rdaProperty = this.rdaProperty; newField.schematics = this.schematics;
newField.numbering = "mult" + index + "_" + this.numbering; newField.numbering = "mult" + index + "_" + this.numbering;
newField.export = this.export; newField.export = this.export;
return newField; return newField;
@ -196,7 +196,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin
field.setDefaultValue(this.defaultValue); field.setDefaultValue(this.defaultValue);
field.setVisible(this.visible); field.setVisible(this.visible);
field.setValidations(this.validations); field.setValidations(this.validations);
field.setRdaCommonStandard(this.rdaProperty); field.setSchematics(this.schematics);
field.setExport(this.export); field.setExport(this.export);
return field; return field;
} }
@ -211,7 +211,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin
this.defaultValue = item.getDefaultValue(); this.defaultValue = item.getDefaultValue();
this.visible = item.getVisible(); this.visible = item.getVisible();
this.validations = item.getValidations(); this.validations = item.getValidations();
this.rdaProperty = item.getRdaCommonStandard(); this.schematics = item.getSchematics();
this.export = item.getExport(); this.export = item.getExport();
} }

View File

@ -31,7 +31,19 @@ public class CostRDAMapper {
public static List<Cost> toRDAList(List<JsonNode> nodes) throws JsonProcessingException { public static List<Cost> toRDAList(List<JsonNode> nodes) throws JsonProcessingException {
Map<String, Cost> rdaMap = new HashMap<>(); Map<String, Cost> rdaMap = new HashMap<>();
for(JsonNode node: nodes){ for(JsonNode node: nodes){
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dmp.cost")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
String rdaValue = node.get("value").asText(); String rdaValue = node.get("value").asText();
if(rdaValue == null || (rdaValue.isEmpty() && !node.get("value").isArray())){ if(rdaValue == null || (rdaValue.isEmpty() && !node.get("value").isArray())){
continue; continue;

View File

@ -27,7 +27,19 @@ public class DatasetIdRDAMapper {
public static DatasetId toRDA(List<JsonNode> nodes) { public static DatasetId toRDA(List<JsonNode> nodes) {
DatasetId data = new DatasetId(); DatasetId data = new DatasetId();
for (JsonNode node: nodes) { for (JsonNode node: nodes) {
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.dataset_id")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
String rdaValue = node.get("value").asText(); String rdaValue = node.get("value").asText();
if(rdaValue == null || rdaValue.isEmpty()){ if(rdaValue == null || rdaValue.isEmpty()){
continue; continue;
@ -77,20 +89,25 @@ public class DatasetIdRDAMapper {
public static Map<String, String> toProperties(DatasetId rda, JsonNode node) { public static Map<String, String> toProperties(DatasetId rda, JsonNode node) {
Map<String, String> properties = new HashMap<>(); Map<String, String> properties = new HashMap<>();
List<JsonNode> idNodes = JsonSearcher.findNodes(node, "rdaProperty", "dataset.dataset_id"); List<JsonNode> idNodes = JsonSearcher.findNodes(node, "schematics", "rda.dataset.dataset_id");
for (JsonNode idNode: idNodes) { for (JsonNode idNode: idNodes) {
for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) { for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) {
if (idNode.get("rdaProperty").asText().endsWith(datasetIdProperties.getName())) { JsonNode schematics = idNode.get("schematics");
switch (datasetIdProperties) { if(schematics.isArray()){
case IDENTIFIER: for(JsonNode schematic: schematics){
properties.put(idNode.get("id").asText(), rda.getIdentifier()); if(schematic.asText().endsWith(datasetIdProperties.getName())){
break; switch (datasetIdProperties) {
case TYPE: case IDENTIFIER:
properties.put(idNode.get("id").asText(), rda.getType().value()); properties.put(idNode.get("id").asText(), rda.getIdentifier());
break;
case TYPE:
properties.put(idNode.get("id").asText(), rda.getType().value());
break;
}
break; break;
}
} }
} }
} }
} }

View File

@ -59,32 +59,32 @@ public class DatasetRDAMapper {
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
String datasetDescriptionJson = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition()); String datasetDescriptionJson = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition());
JsonNode datasetDescriptionObj = mapper.readTree(datasetDescriptionJson); JsonNode datasetDescriptionObj = mapper.readTree(datasetDescriptionJson);
List<JsonNode> idNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.dataset_id"); List<JsonNode> idNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.dataset_id");
if (!idNodes.isEmpty()) { if (!idNodes.isEmpty()) {
rda.setDatasetId(DatasetIdRDAMapper.toRDA(idNodes)); rda.setDatasetId(DatasetIdRDAMapper.toRDA(idNodes));
} }
if (rda.getDatasetId() == null) { if (rda.getDatasetId() == null) {
rda.setDatasetId(new DatasetId(dataset.getId().toString(), DatasetId.Type.OTHER)); rda.setDatasetId(new DatasetId(dataset.getId().toString(), DatasetId.Type.OTHER));
} }
List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type"); List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.type");
if (!typeNodes.isEmpty() && !typeNodes.get(0).get("value").asText().isEmpty()) { if (!typeNodes.isEmpty() && !typeNodes.get(0).get("value").asText().isEmpty()) {
rda.setType(typeNodes.get(0).get("value").asText()); rda.setType(typeNodes.get(0).get("value").asText());
} else { } else {
rda.setType("DMP Dataset"); rda.setType("DMP Dataset");
} }
List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language"); List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.language");
if (!languageNodes.isEmpty() && !languageNodes.get(0).get("value").asText().isEmpty()) { if (!languageNodes.isEmpty() && !languageNodes.get(0).get("value").asText().isEmpty()) {
rda.setLanguage(Language.fromValue(languageNodes.get(0).get("value").asText())); rda.setLanguage(Language.fromValue(languageNodes.get(0).get("value").asText()));
} else { } else {
rda.setLanguage(LanguageRDAMapper.mapLanguageIsoToRDAIso(dataset.getProfile().getLanguage())); rda.setLanguage(LanguageRDAMapper.mapLanguageIsoToRDAIso(dataset.getProfile().getLanguage()));
} }
List<JsonNode> metadataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.metadata"); List<JsonNode> metadataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.metadata");
if (!metadataNodes.isEmpty()) { if (!metadataNodes.isEmpty()) {
rda.setMetadata(MetadataRDAMapper.toRDAList(metadataNodes)); rda.setMetadata(MetadataRDAMapper.toRDAList(metadataNodes));
}else{ }else{
rda.setMetadata(new ArrayList<>()); rda.setMetadata(new ArrayList<>());
} }
List<JsonNode> qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.data_quality_assurance"); List<JsonNode> qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.data_quality_assurance");
if (!qaNodes.isEmpty()) { if (!qaNodes.isEmpty()) {
/*rda.setDataQualityAssurance(qaNodes.stream().map(qaNode -> qaNode.get("value").asText()).collect(Collectors.toList())); /*rda.setDataQualityAssurance(qaNodes.stream().map(qaNode -> qaNode.get("value").asText()).collect(Collectors.toList()));
for (int i = 0; i < qaNodes.size(); i++) { for (int i = 0; i < qaNodes.size(); i++) {
@ -115,17 +115,17 @@ public class DatasetRDAMapper {
}else{ }else{
rda.setDataQualityAssurance(new ArrayList<>()); rda.setDataQualityAssurance(new ArrayList<>());
} }
List<JsonNode> preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.preservation_statement"); List<JsonNode> preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.preservation_statement");
if (!preservationNodes.isEmpty() && !preservationNodes.get(0).get("value").asText().isEmpty()) { if (!preservationNodes.isEmpty() && !preservationNodes.get(0).get("value").asText().isEmpty()) {
rda.setPreservationStatement(preservationNodes.get(0).get("value").asText()); rda.setPreservationStatement(preservationNodes.get(0).get("value").asText());
} }
List<JsonNode> distributionNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.distribution"); List<JsonNode> distributionNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.distribution");
if (!distributionNodes.isEmpty()) { if (!distributionNodes.isEmpty()) {
rda.setDistribution(DistributionRDAMapper.toRDAList(distributionNodes)); rda.setDistribution(DistributionRDAMapper.toRDAList(distributionNodes));
}else{ }else{
rda.setDistribution(new ArrayList<>()); rda.setDistribution(new ArrayList<>());
} }
List<JsonNode> keywordNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.keyword"); List<JsonNode> keywordNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.keyword");
if (!keywordNodes.isEmpty()) { if (!keywordNodes.isEmpty()) {
rda.setKeyword(keywordNodes.stream().map(keywordNode -> { rda.setKeyword(keywordNodes.stream().map(keywordNode -> {
JsonNode value = keywordNode.get("value"); JsonNode value = keywordNode.get("value");
@ -142,7 +142,7 @@ public class DatasetRDAMapper {
List<String> tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags().stream().map(Tag::getName).collect(Collectors.toList()); List<String> tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags().stream().map(Tag::getName).collect(Collectors.toList());
rda.setKeyword(tags); rda.setKeyword(tags);
} }
List<JsonNode> personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.personal_data"); List<JsonNode> personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.personal_data");
if (!personalDataNodes.isEmpty()) { if (!personalDataNodes.isEmpty()) {
try{ try{
rda.setPersonalData(personalDataNodes.stream().map(personalDataNode -> Dataset.PersonalData.fromValue(personalDataNode.get("value").asText())).findFirst().get()); rda.setPersonalData(personalDataNodes.stream().map(personalDataNode -> Dataset.PersonalData.fromValue(personalDataNode.get("value").asText())).findFirst().get());
@ -152,13 +152,13 @@ public class DatasetRDAMapper {
} else { } else {
rda.setPersonalData(Dataset.PersonalData.UNKNOWN); rda.setPersonalData(Dataset.PersonalData.UNKNOWN);
} }
List<JsonNode> securityAndPrivacyNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.security_and_privacy"); List<JsonNode> securityAndPrivacyNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.security_and_privacy");
if (!securityAndPrivacyNodes.isEmpty()) { if (!securityAndPrivacyNodes.isEmpty()) {
rda.setSecurityAndPrivacy(SecurityAndPrivacyRDAMapper.toRDAList(securityAndPrivacyNodes)); rda.setSecurityAndPrivacy(SecurityAndPrivacyRDAMapper.toRDAList(securityAndPrivacyNodes));
}else{ }else{
rda.setSecurityAndPrivacy(new ArrayList<>()); rda.setSecurityAndPrivacy(new ArrayList<>());
} }
List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data"); List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.sensitive_data");
if (!sensitiveDataNodes.isEmpty()) { if (!sensitiveDataNodes.isEmpty()) {
try{ try{
rda.setSensitiveData(sensitiveDataNodes.stream().map(sensitiveDataNode -> Dataset.SensitiveData.fromValue(sensitiveDataNode.get("value").asText())).findFirst().get()); rda.setSensitiveData(sensitiveDataNodes.stream().map(sensitiveDataNode -> Dataset.SensitiveData.fromValue(sensitiveDataNode.get("value").asText())).findFirst().get());
@ -168,35 +168,47 @@ public class DatasetRDAMapper {
} else { } else {
rda.setSensitiveData(Dataset.SensitiveData.UNKNOWN); rda.setSensitiveData(Dataset.SensitiveData.UNKNOWN);
} }
List<JsonNode> technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.technical_resource"); List<JsonNode> technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.technical_resource");
if (!technicalResourceNodes.isEmpty()) { if (!technicalResourceNodes.isEmpty()) {
rda.setTechnicalResource(TechnicalResourceRDAMapper.toRDAList(technicalResourceNodes)); rda.setTechnicalResource(TechnicalResourceRDAMapper.toRDAList(technicalResourceNodes));
}else{ }else{
rda.setTechnicalResource(new ArrayList<>()); rda.setTechnicalResource(new ArrayList<>());
} }
List<JsonNode> issuedNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.issued"); List<JsonNode> issuedNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.issued");
if (!issuedNodes.isEmpty() && !issuedNodes.get(0).get("value").asText().isEmpty()) { if (!issuedNodes.isEmpty() && !issuedNodes.get(0).get("value").asText().isEmpty()) {
rda.setIssued(issuedNodes.get(0).get("value").asText()); rda.setIssued(issuedNodes.get(0).get("value").asText());
} }
List<JsonNode> contributorNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dmp.contributor"); List<JsonNode> contributorNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dmp.contributor");
if (!contributorNodes.isEmpty()) { if (!contributorNodes.isEmpty()) {
dmp.getContributor().addAll(contributorNodes.stream().map(contributorNode -> { dmp.getContributor().addAll(contributorNodes.stream().map(contributorNode -> {
JsonNode value = contributorNode.get("value"); JsonNode value = contributorNode.get("value");
if (value.isArray()) { if (value.isArray()) {
return StreamSupport.stream(value.spliterator(), false).map(node -> ContributorRDAMapper.toRDA(node.asText())).collect(Collectors.toList()); return StreamSupport.stream(value.spliterator(), false).map(node -> ContributorRDAMapper.toRDA(node.asText())).collect(Collectors.toList());
} else { } else {
return Collections.singletonList(new Contributor()); // return null kalutera return Collections.singletonList(new Contributor());
} }
}).flatMap(Collection::stream).collect(Collectors.toList())); }).flatMap(Collection::stream).collect(Collectors.toList()));
} }
List<JsonNode> costNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dmp.cost"); List<JsonNode> costNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dmp.cost");
if (!costNodes.isEmpty()) { if (!costNodes.isEmpty()) {
dmp.getCost().addAll(CostRDAMapper.toRDAList(costNodes)); dmp.getCost().addAll(CostRDAMapper.toRDAList(costNodes));
} }
List<JsonNode> ethicsNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dmp.ethical_issues"); List<JsonNode> ethicsNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dmp.ethical_issues");
if (!ethicsNodes.isEmpty()) { if (!ethicsNodes.isEmpty()) {
for(JsonNode node: ethicsNodes){ for(JsonNode node: ethicsNodes){
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dmp.ethical_issues")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
String rdaValue = node.get("value").asText(); String rdaValue = node.get("value").asText();
if(rdaValue == null || rdaValue.isEmpty()){ if(rdaValue == null || rdaValue.isEmpty()){
continue; continue;
@ -276,12 +288,12 @@ public class DatasetRDAMapper {
String datasetDescriptionJson = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition()); String datasetDescriptionJson = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition());
JsonNode datasetDescriptionObj = mapper.readTree(datasetDescriptionJson); JsonNode datasetDescriptionObj = mapper.readTree(datasetDescriptionJson);
List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type"); List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.type");
if (!typeNodes.isEmpty()) { if (!typeNodes.isEmpty()) {
properties.put(typeNodes.get(0).get("id").asText(), rda.getType()); properties.put(typeNodes.get(0).get("id").asText(), rda.getType());
} }
List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language"); List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.language");
if (!languageNodes.isEmpty() && rda.getLanguage() != null) { if (!languageNodes.isEmpty() && rda.getLanguage() != null) {
properties.put(languageNodes.get(0).get("id").asText(), rda.getLanguage().value()); properties.put(languageNodes.get(0).get("id").asText(), rda.getLanguage().value());
} }
@ -298,7 +310,7 @@ public class DatasetRDAMapper {
for (int i = 0; i < qaIds.size(); i++) { for (int i = 0; i < qaIds.size(); i++) {
properties.put(qaIds.get(i), rda.getDataQualityAssurance().get(i)); properties.put(qaIds.get(i), rda.getDataQualityAssurance().get(i));
}*/ }*/
List<JsonNode> qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.data_quality_assurance"); List<JsonNode> qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.data_quality_assurance");
if (!qaNodes.isEmpty() && rda.getDataQualityAssurance() != null && !rda.getDataQualityAssurance().isEmpty()) { if (!qaNodes.isEmpty() && rda.getDataQualityAssurance() != null && !rda.getDataQualityAssurance().isEmpty()) {
ObjectMapper m = new ObjectMapper(); ObjectMapper m = new ObjectMapper();
List<String> qas = new ArrayList<>(rda.getDataQualityAssurance()); List<String> qas = new ArrayList<>(rda.getDataQualityAssurance());
@ -310,12 +322,12 @@ public class DatasetRDAMapper {
} }
} }
List<JsonNode> preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.preservation_statement"); List<JsonNode> preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.preservation_statement");
if (!preservationNodes.isEmpty()) { if (!preservationNodes.isEmpty()) {
properties.put(preservationNodes.get(0).get("id").asText(), rda.getPreservationStatement()); properties.put(preservationNodes.get(0).get("id").asText(), rda.getPreservationStatement());
} }
List<JsonNode> issuedNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.issued"); List<JsonNode> issuedNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.issued");
if (!issuedNodes.isEmpty()) { if (!issuedNodes.isEmpty()) {
properties.put(issuedNodes.get(0).get("id").asText(), rda.getIssued()); properties.put(issuedNodes.get(0).get("id").asText(), rda.getIssued());
} }
@ -351,7 +363,7 @@ public class DatasetRDAMapper {
} }
} }
List<JsonNode> personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.personal_data"); List<JsonNode> personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.personal_data");
if (!personalDataNodes.isEmpty()) { if (!personalDataNodes.isEmpty()) {
properties.put(personalDataNodes.get(0).get("id").asText(), rda.getPersonalData().value()); properties.put(personalDataNodes.get(0).get("id").asText(), rda.getPersonalData().value());
} }
@ -360,7 +372,7 @@ public class DatasetRDAMapper {
properties.putAll(SecurityAndPrivacyRDAMapper.toProperties(rda.getSecurityAndPrivacy())); properties.putAll(SecurityAndPrivacyRDAMapper.toProperties(rda.getSecurityAndPrivacy()));
} }
List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data"); List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.sensitive_data");
if (!sensitiveDataNodes.isEmpty()) { if (!sensitiveDataNodes.isEmpty()) {
properties.put(sensitiveDataNodes.get(0).get("id").asText(), rda.getSensitiveData().value()); properties.put(sensitiveDataNodes.get(0).get("id").asText(), rda.getSensitiveData().value());
} }

View File

@ -24,7 +24,10 @@ public class DistributionRDAMapper {
Map<String, Distribution> rdaMap = new HashMap<>(); Map<String, Distribution> rdaMap = new HashMap<>();
for (JsonNode node: nodes) { for (JsonNode node: nodes) {
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = getRdaDistributionProperty(node);
if(rdaProperty.isEmpty()){
continue;
}
String rdaValue = node.get("value").asText(); String rdaValue = node.get("value").asText();
//if(rdaValue == null || rdaValue.isEmpty()){ //if(rdaValue == null || rdaValue.isEmpty()){
if(rdaValue == null || (rdaValue.isEmpty() && !node.get("value").isArray())){ if(rdaValue == null || (rdaValue.isEmpty() && !node.get("value").isArray())){
@ -79,7 +82,16 @@ public class DistributionRDAMapper {
rda.setAdditionalProperty(ImportPropertyName.BYTE_SIZE.getName(), node.get("id").asText()); rda.setAdditionalProperty(ImportPropertyName.BYTE_SIZE.getName(), node.get("id").asText());
break; break;
case LICENSE: case LICENSE:
List<JsonNode> licenseNodes = nodes.stream().filter(lnode -> lnode.get("rdaProperty").asText().toLowerCase().contains("license")).collect(Collectors.toList()); List<JsonNode> licenseNodes = nodes.stream().filter(lnode -> {
if(lnode.get("schematics").isArray()){
for(JsonNode schematic: lnode.get("schematics")){
if(schematic.asText().startsWith("rda.dataset.distribution.license")){
return true;
}
}
}
return false;
}).collect(Collectors.toList());
License license = LicenseRDAMapper.toRDA(licenseNodes); License license = LicenseRDAMapper.toRDA(licenseNodes);
rda.setLicense(license != null? Collections.singletonList(license): new ArrayList<>()); rda.setLicense(license != null? Collections.singletonList(license): new ArrayList<>());
break; break;
@ -182,71 +194,77 @@ public class DistributionRDAMapper {
public static Map<String, String> toProperties(Distribution rda, JsonNode root) { public static Map<String, String> toProperties(Distribution rda, JsonNode root) {
Map<String, String> properties = new HashMap<>(); Map<String, String> properties = new HashMap<>();
List<JsonNode> distributionNodes = JsonSearcher.findNodes(root, "rdaProperty", "dataset.distribution"); List<JsonNode> distributionNodes = JsonSearcher.findNodes(root, "schematics", "rda.dataset.distribution");
for (JsonNode distributionNode: distributionNodes) { for (JsonNode distributionNode: distributionNodes) {
for (ExportPropertyName exportPropertyName: ExportPropertyName.values()) { for (ExportPropertyName exportPropertyName: ExportPropertyName.values()) {
if (distributionNode.get("rdaProperty").asText().contains(exportPropertyName.getName())) { JsonNode schematics = distributionNode.get("schematics");
switch (exportPropertyName) { if(schematics.isArray()){
case ACCESS_URL: for(JsonNode schematic: schematics){
properties.put(distributionNode.get("id").asText(), rda.getAccessUrl()); if(schematic.asText().contains(exportPropertyName.getName())){
break; switch (exportPropertyName) {
case DESCRIPTION: case ACCESS_URL:
properties.put(distributionNode.get("id").asText(), rda.getDescription()); properties.put(distributionNode.get("id").asText(), rda.getAccessUrl());
break; break;
case TITLE: case DESCRIPTION:
properties.put(distributionNode.get("id").asText(), rda.getTitle()); properties.put(distributionNode.get("id").asText(), rda.getDescription());
break; break;
case AVAILABLE_UNTIL: case TITLE:
properties.put(distributionNode.get("id").asText(), rda.getAvailableUntil()); properties.put(distributionNode.get("id").asText(), rda.getTitle());
break; break;
case DOWNLOAD_URL: case AVAILABLE_UNTIL:
if (rda.getDownloadUrl() != null) { properties.put(distributionNode.get("id").asText(), rda.getAvailableUntil());
properties.put(distributionNode.get("id").asText(), rda.getDownloadUrl().toString()); break;
} case DOWNLOAD_URL:
break; if (rda.getDownloadUrl() != null) {
case DATA_ACCESS: properties.put(distributionNode.get("id").asText(), rda.getDownloadUrl().toString());
properties.put(distributionNode.get("id").asText(), rda.getDataAccess().value());
break;
case BYTE_SIZE:
if (rda.getByteSize() != null) {
properties.put(distributionNode.get("id").asText(), rda.getByteSize().toString());
}
break;
case FORMAT:
if (rda.getFormat() != null && !rda.getFormat().isEmpty()) {
String style = distributionNode.get("viewStyle").get("renderStyle").asText();
if(style.equals("combobox")) {
if (distributionNode.get("data").get("type").asText().equals("autocomplete")) {
Map<String, Object> additionalProperties = rda.getAdditionalProperties();
List<Object> standardFormats = new ArrayList<>();
rda.getAdditionalProperties().forEach((key, value) -> {
try {
if (key.matches("format\\d+")) {
standardFormats.add(additionalProperties.get(key));
properties.put(distributionNode.get("id").asText(), mapper.writeValueAsString(standardFormats));
}
} catch (JsonProcessingException e) {
logger.error(e.getMessage(), e);
}
});
} }
} break;
else if(style.equals("freetext")){ case DATA_ACCESS:
properties.put(distributionNode.get("id").asText(), String.join(", ", rda.getFormat())); properties.put(distributionNode.get("id").asText(), rda.getDataAccess().value());
} break;
} case BYTE_SIZE:
break; if (rda.getByteSize() != null) {
case LICENSE: properties.put(distributionNode.get("id").asText(), rda.getByteSize().toString());
if (rda.getLicense() != null && !rda.getLicense().isEmpty()) { }
properties.putAll(LicenseRDAMapper.toProperties(rda.getLicense().get(0), root)); break;
} case FORMAT:
break; if (rda.getFormat() != null && !rda.getFormat().isEmpty()) {
case HOST: String style = distributionNode.get("viewStyle").get("renderStyle").asText();
if (rda.getHost() != null) { if(style.equals("combobox")) {
properties.putAll(HostRDAMapper.toProperties(rda.getHost())); if (distributionNode.get("data").get("type").asText().equals("autocomplete")) {
Map<String, Object> additionalProperties = rda.getAdditionalProperties();
List<Object> standardFormats = new ArrayList<>();
rda.getAdditionalProperties().forEach((key, value) -> {
try {
if (key.matches("format\\d+")) {
standardFormats.add(additionalProperties.get(key));
properties.put(distributionNode.get("id").asText(), mapper.writeValueAsString(standardFormats));
}
} catch (JsonProcessingException e) {
logger.error(e.getMessage(), e);
}
});
}
}
else if(style.equals("freetext")){
properties.put(distributionNode.get("id").asText(), String.join(", ", rda.getFormat()));
}
}
break;
case LICENSE:
if (rda.getLicense() != null && !rda.getLicense().isEmpty()) {
properties.putAll(LicenseRDAMapper.toProperties(rda.getLicense().get(0), root));
}
break;
case HOST:
if (rda.getHost() != null) {
properties.putAll(HostRDAMapper.toProperties(rda.getHost()));
}
break;
} }
break; break;
}
} }
} }
} }
@ -258,7 +276,10 @@ public class DistributionRDAMapper {
public static Distribution toRDA(List<JsonNode> nodes) { public static Distribution toRDA(List<JsonNode> nodes) {
Distribution rda = new Distribution(); Distribution rda = new Distribution();
for (JsonNode node: nodes) { for (JsonNode node: nodes) {
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = getRdaDistributionProperty(node);
if(rdaProperty.isEmpty()){
continue;
}
String rdaValue = node.get("value").asText(); String rdaValue = node.get("value").asText();
for (ExportPropertyName exportPropertyName: ExportPropertyName.values()) { for (ExportPropertyName exportPropertyName: ExportPropertyName.values()) {
if (rdaProperty.contains(exportPropertyName.getName())) { if (rdaProperty.contains(exportPropertyName.getName())) {
@ -288,11 +309,29 @@ public class DistributionRDAMapper {
rda.setFormat(Collections.singletonList(rdaValue)); rda.setFormat(Collections.singletonList(rdaValue));
break; break;
case LICENSE: case LICENSE:
List<JsonNode> licenseNodes = nodes.stream().filter(lnode -> lnode.get("rdaProperty").asText().toLowerCase().contains("license")).collect(Collectors.toList()); List<JsonNode> licenseNodes = nodes.stream().filter(lnode -> {
if(lnode.get("schematics").isArray()){
for(JsonNode schematic: lnode.get("schematics")){
if(schematic.asText().startsWith("rda.dataset.distribution.license")){
return true;
}
}
}
return false;
}).collect(Collectors.toList());
rda.setLicense(Collections.singletonList(LicenseRDAMapper.toRDA(licenseNodes))); rda.setLicense(Collections.singletonList(LicenseRDAMapper.toRDA(licenseNodes)));
break; break;
case HOST: case HOST:
List<JsonNode> hostNodes = nodes.stream().filter(lnode -> lnode.get("rdaProperty").asText().toLowerCase().contains("host")).collect(Collectors.toList()); List<JsonNode> hostNodes = nodes.stream().filter(lnode -> {
if(lnode.get("schematics").isArray()){
for(JsonNode schematic: lnode.get("schematics")){
if(schematic.asText().startsWith("rda.dataset.distribution.host")){
return true;
}
}
}
return false;
}).collect(Collectors.toList());
rda.setHost(HostRDAMapper.toRDA(hostNodes, "0")); rda.setHost(HostRDAMapper.toRDA(hostNodes, "0"));
break; break;
} }
@ -333,6 +372,20 @@ public class DistributionRDAMapper {
return rda; return rda;
} }
private static String getRdaDistributionProperty(JsonNode node) {
String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.distribution")){
rdaProperty = schematic.asText();
break;
}
}
}
return rdaProperty;
}
private static Distribution getRelative( Map<String, Distribution> rdaMap, String numbering) { private static Distribution getRelative( Map<String, Distribution> rdaMap, String numbering) {
return rdaMap.entrySet().stream().filter(entry -> MyStringUtils.getFirstDifference(entry.getKey(), numbering) > 0) return rdaMap.entrySet().stream().filter(entry -> MyStringUtils.getFirstDifference(entry.getKey(), numbering) > 0)
.max(Comparator.comparingInt(entry -> MyStringUtils.getFirstDifference(entry.getKey(), numbering))).map(Map.Entry::getValue).orElse(new Distribution()); .max(Comparator.comparingInt(entry -> MyStringUtils.getFirstDifference(entry.getKey(), numbering))).map(Map.Entry::getValue).orElse(new Distribution());

View File

@ -19,7 +19,19 @@ public class HostRDAMapper {
public static Host toRDA(List<JsonNode> nodes, String numbering) { public static Host toRDA(List<JsonNode> nodes, String numbering) {
Host rda = new Host(); Host rda = new Host();
for (JsonNode node: nodes) { for (JsonNode node: nodes) {
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.distribution.host")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
if (rdaProperty.contains("host")) { if (rdaProperty.contains("host")) {
int firstDiff = MyStringUtils.getFirstDifference(numbering, node.get("numbering").asText()); int firstDiff = MyStringUtils.getFirstDifference(numbering, node.get("numbering").asText());
if (firstDiff == -1 || firstDiff >= 2) { if (firstDiff == -1 || firstDiff >= 2) {

View File

@ -17,7 +17,19 @@ public class LicenseRDAMapper {
public static License toRDA(List<JsonNode> nodes) { public static License toRDA(List<JsonNode> nodes) {
License rda = new License(); License rda = new License();
for (JsonNode node: nodes) { for (JsonNode node: nodes) {
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.distribution.license")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
String value = node.get("value").asText(); String value = node.get("value").asText();
if(value == null || value.isEmpty()){ if(value == null || value.isEmpty()){
continue; continue;
@ -78,20 +90,26 @@ public class LicenseRDAMapper {
public static Map<String, String> toProperties(License rda, JsonNode root) { public static Map<String, String> toProperties(License rda, JsonNode root) {
Map<String, String> properties = new HashMap<>(); Map<String, String> properties = new HashMap<>();
List<JsonNode> licenseNodes = JsonSearcher.findNodes(root, "rdaProperty", "dataset.distribution.license"); List<JsonNode> licenseNodes = JsonSearcher.findNodes(root, "schematics", "rda.dataset.distribution.license");
for (JsonNode licenseNode: licenseNodes) { for (JsonNode licenseNode: licenseNodes) {
for (LicenceProperties licenceProperty: LicenceProperties.values()) { for (LicenceProperties licenceProperty: LicenceProperties.values()) {
if (licenseNode.get("rdaProperty").asText().endsWith(licenceProperty.getName())) { JsonNode schematics = licenseNode.get("schematics");
switch (licenceProperty) { if(schematics.isArray()) {
case LICENSE_REF: for (JsonNode schematic : schematics) {
if (rda.getLicenseRef() != null) { if (schematic.asText().endsWith(licenceProperty.getName())) {
properties.put(licenseNode.get("id").asText(), rda.getLicenseRef().toString()); switch (licenceProperty) {
case LICENSE_REF:
if (rda.getLicenseRef() != null) {
properties.put(licenseNode.get("id").asText(), rda.getLicenseRef().toString());
}
break;
case START_DATE:
properties.put(licenseNode.get("id").asText(), rda.getStartDate());
break;
} }
break; }
case START_DATE: break;
properties.put(licenseNode.get("id").asText(), rda.getStartDate());
break;
} }
} }
} }

View File

@ -20,7 +20,19 @@ public class MetadataRDAMapper {
Map<String, String> rdaMap = new HashMap<>(); Map<String, String> rdaMap = new HashMap<>();
List<Metadatum> rdas = new ArrayList<>(); List<Metadatum> rdas = new ArrayList<>();
for (JsonNode node: nodes) { for (JsonNode node: nodes) {
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.metadata")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
JsonNode rdaValue = node.get("value"); JsonNode rdaValue = node.get("value");
for (PropertyName propertyName: PropertyName.values()) { for (PropertyName propertyName: PropertyName.values()) {
@ -119,7 +131,16 @@ public class MetadataRDAMapper {
public static Metadatum toRDA(JsonNode node) { public static Metadatum toRDA(JsonNode node) {
Metadatum rda = new Metadatum(); Metadatum rda = new Metadatum();
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.metadata")){
rdaProperty = schematic.asText();
break;
}
}
}
JsonNode rdaValue = node.get("value"); JsonNode rdaValue = node.get("value");
if (rdaProperty.contains("metadata_standard_id")) { if (rdaProperty.contains("metadata_standard_id")) {
if (rdaValue instanceof ArrayNode) { if (rdaValue instanceof ArrayNode) {

View File

@ -16,7 +16,19 @@ public class SecurityAndPrivacyRDAMapper {
Map<String, SecurityAndPrivacy> rdaMap = new HashMap<>(); Map<String, SecurityAndPrivacy> rdaMap = new HashMap<>();
for (JsonNode node: nodes) { for (JsonNode node: nodes) {
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.security_and_privacy")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
String rdaValue = node.get("value").asText(); String rdaValue = node.get("value").asText();
if(rdaValue == null || rdaValue.isEmpty()){ if(rdaValue == null || rdaValue.isEmpty()){
continue; continue;
@ -69,8 +81,17 @@ public class SecurityAndPrivacyRDAMapper {
public static SecurityAndPrivacy toRDA(JsonNode node) { public static SecurityAndPrivacy toRDA(JsonNode node) {
SecurityAndPrivacy rda = new SecurityAndPrivacy(); SecurityAndPrivacy rda = new SecurityAndPrivacy();
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
String value =node.get("value").asText(); JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.security_and_privacy")){
rdaProperty = schematic.asText();
break;
}
}
}
String value = node.get("value").asText();
if (rdaProperty.contains("description")) { if (rdaProperty.contains("description")) {
rda.setDescription(value); rda.setDescription(value);

View File

@ -16,7 +16,19 @@ public class TechnicalResourceRDAMapper {
Map<String, TechnicalResource> rdaMap = new HashMap<>(); Map<String, TechnicalResource> rdaMap = new HashMap<>();
for (JsonNode node: nodes) { for (JsonNode node: nodes) {
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.technical_resource")){
rdaProperty = schematic.asText();
break;
}
}
}
else{
continue;
}
String rdaValue = node.get("value").asText(); String rdaValue = node.get("value").asText();
if(rdaValue == null || rdaValue.isEmpty()){ if(rdaValue == null || rdaValue.isEmpty()){
continue; continue;
@ -70,7 +82,16 @@ public class TechnicalResourceRDAMapper {
public static TechnicalResource toRDA(JsonNode node) { public static TechnicalResource toRDA(JsonNode node) {
TechnicalResource rda = new TechnicalResource(); TechnicalResource rda = new TechnicalResource();
String rdaProperty = node.get("rdaProperty").asText(); String rdaProperty = "";
JsonNode schematics = node.get("schematics");
if(schematics.isArray()){
for(JsonNode schematic: schematics){
if(schematic.asText().startsWith("rda.dataset.technical_resource")){
rdaProperty = schematic.asText();
break;
}
}
}
String value = node.get("value").asText(); String value = node.get("value").asText();
if (rdaProperty.contains("description")) { if (rdaProperty.contains("description")) {

View File

@ -1,70 +0,0 @@
[
{
"Funder": "Australian Research Council",
"DOI": "10.13039/501100000923"
},
{
"Funder": "Austrian Science Fund",
"DOI": "10.13039/501100002428"
},
{
"Funder": "European Commission",
"DOI": "10.13039/501100000780"
},
{
"Funder": "European Environment Agency",
"DOI": "10.13039/501100000806"
},
{
"Funder": "Academy of Finland",
"DOI": "10.13039/501100002341"
},
{
"Funder": "Hrvatska Zaklada za Znanost",
"DOI": "10.13039/501100004488"
},
{
"Funder": "Fundação para a Ciência e a Tecnologia",
"DOI": "10.13039/501100001871"
},
{
"Funder": "Ministarstvo Prosvete, Nauke i Tehnološkog Razvoja",
"DOI": "10.13039/501100004564"
},
{
"Funder": "Ministarstvo Znanosti, Obrazovanja i Sporta",
"DOI": "10.13039/501100006588"
},
{
"Funder": "National Health and Medical Research Council",
"DOI": "10.13039/501100000925"
},
{
"Funder": "National Institutes of Health",
"DOI": "10.13039/100000002"
},
{
"Funder": "National Science Foundation",
"DOI": "10.13039/100000001"
},
{
"Funder": "Nederlandse Organisatie voor Wetenschappelijk Onderzoek",
"DOI": "10.13039/501100003246"
},
{
"Funder": "Research Councils",
"DOI": "10.13039/501100000690"
},
{
"Funder": "Schweizerischer Nationalfonds zur Förderung der wissenschaftlichen Forschung",
"DOI": "10.13039/501100001711"
},
{
"Funder": "Science Foundation Ireland",
"DOI": "10.13039/501100001602"
},
{
"Funder": "Wellcome Trust",
"DOI": "10.13039/100004440"
}
]

View File

@ -0,0 +1,374 @@
[
{
"category": "rda",
"name": "rda.dataset.data_quality_assurance"
},
{
"category": "rda",
"name": "rda.dataset.distribution.access_url"
},
{
"category": "rda",
"name": "rda.dataset.distribution.available_until"
},
{
"category": "rda",
"name": "rda.dataset.distribution.byte_size"
},
{
"category": "rda",
"name": "rda.dataset.distribution.data_access"
},
{
"category": "rda",
"name": "rda.dataset.distribution.description"
},
{
"category": "rda",
"name": "rda.dataset.distribution.download_url"
},
{
"category": "rda",
"name": "rda.dataset.distribution.format"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.availability"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.backup_frequency"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.backup_type"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.certified_with"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.description"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.geo_location"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.pid_system"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.storage_type"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.supports_versioning"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.title"
},
{
"category": "rda",
"name": "rda.dataset.distribution.host.url"
},
{
"category": "rda",
"name": "rda.dataset.distribution.license.license_ref"
},
{
"category": "rda",
"name": "rda.dataset.distribution.license.start_date"
},
{
"category": "rda",
"name": "rda.dataset.distribution.title"
},
{
"category": "rda",
"name": "rda.dataset.keyword"
},
{
"category": "rda",
"name": "rda.dataset.language"
},
{
"category": "rda",
"name": "rda.dataset.metadata.description"
},
{
"category": "rda",
"name": "rda.dataset.metadata.language"
},
{
"category": "rda",
"name": "rda.dataset.metadata.metadata_standard_id"
},
{
"category": "rda",
"name": "rda.dataset.metadata.metadata_standard_id.identifier"
},
{
"category": "rda",
"name": "rda.dataset.metadata.metadata_standard_id.type"
},
{
"category": "rda",
"name": "rda.dataset.personal_data"
},
{
"category": "rda",
"name": "rda.dataset.preservation_statement"
},
{
"category": "rda",
"name": "rda.dataset.security_and_privacy"
},
{
"category": "rda",
"name": "rda.dataset.security_and_privacy.description"
},
{
"category": "rda",
"name": "rda.dataset.security_and_privacy.title"
},
{
"category": "rda",
"name": "rda.dataset.sensitive_data"
},
{
"category": "rda",
"name": "rda.dataset.technical_resource.description"
},
{
"category": "rda",
"name": "rda.dataset.technical_resource.name"
},
{
"category": "rda",
"name": "rda.dataset.title"
},
{
"category": "rda",
"name": "rda.dataset.type"
},
{
"category": "rda",
"name": "rda.dataset.issued"
},
{
"category": "rda",
"name": "rda.dataset.dataset_id"
},
{
"category": "rda",
"name": "rda.dataset.dataset_id.identifier"
},
{
"category": "rda",
"name": "rda.dataset.dataset_id.type"
},
{
"category": "rda",
"name": "rda.dataset.description"
},
{
"category": "rda",
"name": "rda.dmp.contact"
},
{
"category": "rda",
"name": "rda.dmp.contact.contact_id.identifier"
},
{
"category": "rda",
"name": "rda.dmp.contact.contact_id.type"
},
{
"category": "rda",
"name": "rda.dmp.contact.mbox"
},
{
"category": "rda",
"name": "rda.dmp.contact.name"
},
{
"category": "rda",
"name": "rda.dmp.contributor"
},
{
"category": "rda",
"name": "rda.dmp.contributor.contributor_id.identifier"
},
{
"category": "rda",
"name": "rda.dmp.contributor.contributor_id.type"
},
{
"category": "rda",
"name": "rda.dmp.contributor.mbox"
},
{
"category": "rda",
"name": "rda.dmp.contributor.name"
},
{
"category": "rda",
"name": "rda.dmp.contributor.role"
},
{
"category": "rda",
"name": "rda.dmp.cost"
},
{
"category": "rda",
"name": "rda.dmp.cost.currency_code"
},
{
"category": "rda",
"name": "rda.dmp.cost.description"
},
{
"category": "rda",
"name": "rda.dmp.cost.title"
},
{
"category": "rda",
"name": "rda.dmp.cost.value"
},
{
"category": "rda",
"name": "rda.dmp.created"
},
{
"category": "rda",
"name": "rda.dmp.description"
},
{
"category": "rda",
"name": "rda.dmp.dmp_id"
},
{
"category": "rda",
"name": "rda.dmp.dmp_id.identifier"
},
{
"category": "rda",
"name": "rda.dmp.dmp_id.type"
},
{
"category": "rda",
"name": "rda.dmp.ethical_issues_description"
},
{
"category": "rda",
"name": "rda.dmp.ethical_issues_exist"
},
{
"category": "rda",
"name": "rda.dmp.ethical_issues_report"
},
{
"category": "rda",
"name": "rda.dmp.language"
},
{
"category": "rda",
"name": "rda.dmp.modified"
},
{
"category": "rda",
"name": "rda.dmp.project"
},
{
"category": "rda",
"name": "rda.dmp.project.description"
},
{
"category": "rda",
"name": "rda.dmp.project.end"
},
{
"category": "rda",
"name": "rda.dmp.project.funding"
},
{
"category": "rda",
"name": "rda.dmp.project.funding.funder_id.identifier"
},
{
"category": "rda",
"name": "rda.dmp.project.funding.funder_id.type"
},
{
"category": "rda",
"name": "rda.dmp.project.funding.funding_status"
},
{
"category": "rda",
"name": "rda.dmp.project.funding.grant_id.identifier"
},
{
"category": "rda",
"name": "rda.dmp.project.funding.grant_id.type"
},
{
"category": "rda",
"name": "rda.dmp.project.start"
},
{
"category": "rda",
"name": "rda.dmp.dmp.project.title"
},
{
"category": "rda",
"name": "rda.dmp.title"
},
{
"category": "zenodo",
"name": "zenodo.related_identifiers"
},
{
"category": "zenodo",
"name": "zenodo.related_identifiers.relation"
},
{
"category": "zenodo",
"name": "zenodo.related_identifiers.identifier"
},
{
"category": "zenodo",
"name": "zenodo.communities"
},
{
"category": "zenodo",
"name": "zenodo.grants"
},
{
"category": "zenodo",
"name": "zenodo.creators"
},
{
"category": "zenodo",
"name": "zenodo.contributors"
},
{
"category": "zenodo",
"name": "zenodo.keywords"
},
{
"category": "zenodo",
"name": "zenodo.references"
},
{
"category": "zenodo",
"name": "zenodo.notes"
},
{
"category": "zenodo",
"name": "zenodo.publication_date"
}
]

View File

@ -23,11 +23,10 @@ pdf.converter.url=http://localhost:3000/
####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS##########
configuration.externalUrls=externalUrls/ExternalUrls.xml configuration.externalUrls=externalUrls/ExternalUrls.xml
configuration.rda=RDACommonStandards.txt configuration.schematics=Schematics.json
configuration.h2020template=documents/h2020.docx configuration.h2020template=documents/h2020.docx
configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx
configuration.configurable_login_providers=configurableLoginProviders.json configuration.configurable_login_providers=configurableLoginProviders.json
configuration.doi_funder=DOI_Funder.json
####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## ####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS##########
email.invite=classpath:templates/email/email.html email.invite=classpath:templates/email/email.html
@ -78,8 +77,6 @@ conf_email.expiration_time_seconds=14400
conf_email.subject=OpenDMP email confirmation conf_email.subject=OpenDMP email confirmation
#############ZENODO CONFIGURATIONS######### #############ZENODO CONFIGURATIONS#########
zenodo.url=https://sandbox.zenodo.org/api/
zenodo.access_token=
zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token
zenodo.login.client_id= zenodo.login.client_id=
zenodo.login.client_secret= zenodo.login.client_secret=

View File

@ -23,11 +23,9 @@ pdf.converter.url=http://opendmp-pdf:3000/
####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS##########
configuration.externalUrls=externalUrls/ExternalUrls.xml configuration.externalUrls=externalUrls/ExternalUrls.xml
configuration.rda=RDACommonStandards.txt
configuration.h2020template=documents/h2020.docx configuration.h2020template=documents/h2020.docx
configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx
configuration.configurable_login_providers=configurableLoginProviders.json configuration.configurable_login_providers=configurableLoginProviders.json
configuration.doi_funder=DOI_Funder.json
####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## ####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS##########
email.invite=classpath:templates/email/email.html email.invite=classpath:templates/email/email.html
@ -100,14 +98,11 @@ conf_email.expiration_time_seconds=14400
conf_email.subject=OpenDMP email confirmation conf_email.subject=OpenDMP email confirmation
#############ZENODO CONFIGURATIONS######### #############ZENODO CONFIGURATIONS#########
zenodo.url=https://sandbox.zenodo.org/api/
zenodo.access_token=
zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token
zenodo.login.client_id= zenodo.login.client_id=
zenodo.login.client_secret= zenodo.login.client_secret=
zenodo.login.redirect_uri=http://localhost:8080/login/external/zenodo zenodo.login.redirect_uri=http://localhost:8080/login/external/zenodo
#############CONTACT EMAIL CONFIGURATIONS######### #############CONTACT EMAIL CONFIGURATIONS#########
contact_email.mail= contact_email.mail=
logging.config=classpath:logging/logback-${spring.profiles.active}.xml logging.config=classpath:logging/logback-${spring.profiles.active}.xml

View File

@ -17,7 +17,6 @@ pdf.converter.url=http://docsbox-web/
####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS##########
configuration.externalUrls=externalUrls/ExternalUrls.xml configuration.externalUrls=externalUrls/ExternalUrls.xml
configuration.rda=RDACommonStandards.txt
configuration.h2020template=documents/h2020.docx configuration.h2020template=documents/h2020.docx
configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx
configuration.configurable_login_providers=ConfigurableLoginProviders.json configuration.configurable_login_providers=ConfigurableLoginProviders.json

View File

@ -49,11 +49,10 @@ elasticsearch.certKey=
####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS##########
configuration.externalUrls=externalUrls/ExternalUrls.xml configuration.externalUrls=externalUrls/ExternalUrls.xml
configuration.rda=RDACommonStandards.txt configuration.schematics=Schematics.json
configuration.h2020template=documents/h2020.docx configuration.h2020template=documents/h2020.docx
configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx
configuration.configurable_login_providers=configurableLoginProviders.json configuration.configurable_login_providers=configurableLoginProviders.json
configuration.doi_funder=DOI_Funder.json
####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## ####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS##########
email.invite=file:templates/email/email.html email.invite=file:templates/email/email.html

View File

@ -224,6 +224,13 @@ const appRoutes: Routes = [
title: 'GENERAL.TITLES.INDEX-MANAGMENT' title: 'GENERAL.TITLES.INDEX-MANAGMENT'
}, },
}, },
{
path: 'maintenance-tasks',
loadChildren: () => import('./ui/admin/maintenance-tasks/maintenance-tasks.module').then(m => m.MaintenanceTasksModule),
data: {
breadcrumb: true
},
},
{ {
path: 'login/admin', path: 'login/admin',
loadChildren: () => import('./ui/auth/admin-login/admin-login.module').then(m => m.AdminLoginModule), loadChildren: () => import('./ui/auth/admin-login/admin-login.module').then(m => m.AdminLoginModule),

View File

@ -59,7 +59,7 @@ export interface Field {
data: any; data: any;
visible: Visibility; visible: Visibility;
validations: ValidationType[]; validations: ValidationType[];
rdaCommonStandard: string; schematics: string[];
export: boolean; export: boolean;
} }

View File

@ -19,9 +19,6 @@ import { ConfigurationService } from '../configuration/configuration.service';
@Injectable() @Injectable()
export class DatasetProfileService extends BaseService { export class DatasetProfileService extends BaseService {
private rdaCommonStandards: String[];
private rdaCommonStandardsLoading: boolean;
private actionUrl: string; private actionUrl: string;
private headers = new HttpHeaders(); private headers = new HttpHeaders();
@ -68,26 +65,20 @@ export class DatasetProfileService extends BaseService {
return this.httpClient.get(this.actionUrl + 'getXml/' + id, { responseType: 'blob', observe: 'response', headers: headerXml }); return this.httpClient.get(this.actionUrl + 'getXml/' + id, { responseType: 'blob', observe: 'response', headers: headerXml });
} }
uploadFile(file: FileList, labelSent: string): Observable<DataTableData<DatasetListingModel>> { uploadFile(file: FileList, labelSent: string, datasetProfileId?: string): Observable<DataTableData<DatasetListingModel>> {
const params = new BaseHttpParams(); const params = new BaseHttpParams();
params.interceptorContext = { params.interceptorContext = {
excludedInterceptors: [InterceptorType.JSONContentType] excludedInterceptors: [InterceptorType.JSONContentType]
}; };
const formData = new FormData(); const formData = new FormData();
formData.append('file', file[0], labelSent); formData.append('file', file[0], labelSent);
return this.http.post(this.actionUrl + "upload", formData, { params: params }); return (datasetProfileId === undefined || datasetProfileId == null)
? this.http.post(this.actionUrl + "upload", formData, { params: params })
: this.http.post(this.actionUrl + "upload/" + datasetProfileId, formData, { params: params });
} }
getRDACommonStandards(): String[] { searchSchematics(like: string): Observable<String[]> {
if (!this.rdaCommonStandards && !this.rdaCommonStandardsLoading) { this.getRDACommonStandardsInternal(); } return this.http.get<String[]>(this.actionUrl + "getSchematics?query=" + like);
return this.rdaCommonStandards;
}
private getRDACommonStandardsInternal() {
this.rdaCommonStandardsLoading = true;
return this.http.get<String[]>(this.actionUrl + "getRDACommonStandards").pipe(takeUntil(this._destroyed)).subscribe(x => {
this.rdaCommonStandards = x;
this.rdaCommonStandardsLoading = false;
});
} }
} }

View File

@ -114,10 +114,6 @@ export class DmpService {
return this.http.post<DmpModel>(`${this.actionUrl}updateusers/${id}`, users, { headers: this.headers }); return this.http.post<DmpModel>(`${this.actionUrl}updateusers/${id}`, users, { headers: this.headers });
} }
getDoi(id: string): Observable<string> {
return this.http.post<string>(this.actionUrl + 'createZenodoDoi/' + id, { headers: this.headers });
}
getDynamicField(requestItem: RequestItem<DynamicFieldGrantCriteria>): any { getDynamicField(requestItem: RequestItem<DynamicFieldGrantCriteria>): any {
return this.http.post<any>(this.actionUrl + 'dynamic', requestItem, { headers: this.headers }); return this.http.post<any>(this.actionUrl + 'dynamic', requestItem, { headers: this.headers });
} }

View File

@ -0,0 +1,20 @@
import { Injectable } from "@angular/core";
import { BaseService } from "@common/base/base.service";
import { Observable } from "rxjs";
import { ConfigurationService } from "../configuration/configuration.service";
import { BaseHttpService } from "../http/base-http.service";
@Injectable()
export class MaintenanceTasksService extends BaseService {
private actionUrl: string;
constructor(private http: BaseHttpService, configurationService: ConfigurationService) {
super();
this.actionUrl = configurationService.server + 'management/';
}
migrateSchematics(): Observable<void> {
return this.http.post<null>(this.actionUrl + 'addSchematics/', null);
}
}

View File

@ -57,11 +57,6 @@ export class UserService {
return this.http.post<UserListingModel>(this.actionUrl + 'find', email, {headers: this.headers}); return this.http.post<UserListingModel>(this.actionUrl + 'find', email, {headers: this.headers});
} }
public hasDOIToken(): Observable<any> {
const url = this.actionUrl + 'hasDOIToken';
return this.http.get(url, { headers: this.headers });
}
public registerDOIToken(code: string, redirectUri: string): Observable<any> { public registerDOIToken(code: string, redirectUri: string): Observable<any> {
const url = this.actionUrl + 'registerDOIToken'; const url = this.actionUrl + 'registerDOIToken';
return this.http.post(url, {zenodoRequest: {code: code}, redirectUri: redirectUri}, { headers: this.headers }); return this.http.post(url, {zenodoRequest: {code: code}, redirectUri: redirectUri}, { headers: this.headers });

View File

@ -47,7 +47,7 @@ export class FieldEditorModel extends BaseFormModel {
public visible: VisibilityEditorModel = new VisibilityEditorModel(); public visible: VisibilityEditorModel = new VisibilityEditorModel();
public data: FieldDataEditorModel<any>; public data: FieldDataEditorModel<any>;
public validations: ValidationType[] = []; public validations: ValidationType[] = [];
public rdaCommonStandard: string; public schematics: string[];
public export: boolean = true; public export: boolean = true;
fromModel(item: Field): FieldEditorModel { fromModel(item: Field): FieldEditorModel {
@ -58,7 +58,7 @@ export class FieldEditorModel extends BaseFormModel {
this.validations = item.validations; this.validations = item.validations;
this.viewStyle = new ViewStyleEditorModel().fromModel(item.viewStyle); this.viewStyle = new ViewStyleEditorModel().fromModel(item.viewStyle);
this.visible = new VisibilityEditorModel().fromModel(item.visible); this.visible = new VisibilityEditorModel().fromModel(item.visible);
this.rdaCommonStandard = item.rdaCommonStandard; this.schematics = item.schematics;
this.export = item.export; this.export = item.export;
if (item.data) { if (item.data) {
@ -105,7 +105,7 @@ export class FieldEditorModel extends BaseFormModel {
page: [{ value: this.page, disabled: (disabled && !skipDisable.includes('FieldEditorModel.page')) }], page: [{ value: this.page, disabled: (disabled && !skipDisable.includes('FieldEditorModel.page')) }],
ordinal: [{ value: this.ordinal, disabled: (disabled && !skipDisable.includes('FieldEditorModel.ordinal')) }], ordinal: [{ value: this.ordinal, disabled: (disabled && !skipDisable.includes('FieldEditorModel.ordinal')) }],
validations: [{ value: this.validations, disabled: (disabled && !skipDisable.includes('FieldEditorModel.validations')) }], validations: [{ value: this.validations, disabled: (disabled && !skipDisable.includes('FieldEditorModel.validations')) }],
rdaCommonStandard: [{value: this.rdaCommonStandard, disabled: (disabled && !skipDisable.includes('FieldSetEditorModel.rdaCommonStandard')) }], schematics: [{ value: this.schematics, disabled: (disabled && !skipDisable.includes('FieldEditorModel.schematics')) }],
export: [{value: this.export, disabled: (disabled && !skipDisable.includes('FieldSetEditorModel.export'))}] export: [{value: this.export, disabled: (disabled && !skipDisable.includes('FieldSetEditorModel.export'))}]
}); });

View File

@ -227,13 +227,9 @@
</mat-form-field> --> </mat-form-field> -->
<mat-form-field class="col-6"> <mat-form-field class="col-6">
<mat-label>{{'DATASET-PROFILE-EDITOR.STEPS.FORM.COMPOSITE-FIELD.FIELDS.RDA-COMMON-STANDARDS' | translate}}</mat-label> <mat-label>Schematics</mat-label>
<mat-select [formControl]="this.form.get('rdaCommonStandard')"> <app-multiple-auto-complete placeholder="Schematics" [hidePlaceholder]="true" required='false' [formControl]="this.form.get('schematics')" [configuration]="schematicsAutoCompleteConfiguration">
<mat-option>--</mat-option> </app-multiple-auto-complete>
<mat-option *ngFor="let property of datasetProfileService.getRDACommonStandards()" [value]="property">
{{property}}
</mat-option>
</mat-select>
</mat-form-field> </mat-form-field>
<mat-checkbox [formControl]="this.form.get('export')" class="col-6" [disabled]="viewOnly">{{'DATASET-PROFILE-EDITOR.STEPS.FORM.COMPOSITE-FIELD.FIELDS.EXPORT' | translate}}</mat-checkbox> <mat-checkbox [formControl]="this.form.get('export')" class="col-6" [disabled]="viewOnly">{{'DATASET-PROFILE-EDITOR.STEPS.FORM.COMPOSITE-FIELD.FIELDS.EXPORT' | translate}}</mat-checkbox>

View File

@ -6,7 +6,7 @@ import {DatasetProfileService} from '@app/core/services/dataset-profile/dataset-
import {EnumUtils} from '@app/core/services/utilities/enum-utils.service'; import {EnumUtils} from '@app/core/services/utilities/enum-utils.service';
import {RuleEditorModel} from '@app/ui/admin/dataset-profile/admin/rule-editor-model'; import {RuleEditorModel} from '@app/ui/admin/dataset-profile/admin/rule-editor-model';
import {BaseComponent} from '@common/base/base.component'; import {BaseComponent} from '@common/base/base.component';
import {Subscription} from 'rxjs'; import {Observable, Subscription} from 'rxjs';
import {ViewStyleType} from './view-style-enum'; import {ViewStyleType} from './view-style-enum';
import {DatasetProfileComboBoxType} from '@app/core/common/enum/dataset-profile-combo-box-type'; import {DatasetProfileComboBoxType} from '@app/core/common/enum/dataset-profile-combo-box-type';
import {ErrorStateMatcher} from '@angular/material/core'; import {ErrorStateMatcher} from '@angular/material/core';
@ -44,6 +44,8 @@ import {
WordListFieldData WordListFieldData
} from '@app/core/model/dataset-profile-definition/field-data/field-data'; } from '@app/core/model/dataset-profile-definition/field-data/field-data';
import {ConfigurationService} from "@app/core/services/configuration/configuration.service"; import {ConfigurationService} from "@app/core/services/configuration/configuration.service";
import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration';
import { map } from 'rxjs/operators';
@Component({ @Component({
selector: 'app-dataset-profile-editor-field-component', selector: 'app-dataset-profile-editor-field-component',
@ -70,9 +72,17 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements
@Output() delete = new EventEmitter<void>(); @Output() delete = new EventEmitter<void>();
schematicsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = {
filterFn: this.filterSchematics.bind(this),
initialItems: (excludedItems: any[]) => this.filterSchematics('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x !== resultItem)))),
displayFn: (item) => item,
titleFn: (item) => item
}
//rdaCommonStandards = this.datasetProfileService.getRDACommonStandards(); //GK: Don't do that again. The service has a weird async behaviour. filterSchematics(value: string): Observable<String[]> {
return this.datasetProfileService.searchSchematics(value);
}
constructor( constructor(
public enumUtils: EnumUtils, public enumUtils: EnumUtils,
public datasetProfileService: DatasetProfileService, public datasetProfileService: DatasetProfileService,

View File

@ -60,6 +60,9 @@
<button mat-menu-item (click)="newVersion(row.id, row.label)"> <button mat-menu-item (click)="newVersion(row.id, row.label)">
<mat-icon>queue</mat-icon>{{'DATASET-PROFILE-LISTING.ACTIONS.NEW-VERSION' | translate}} <mat-icon>queue</mat-icon>{{'DATASET-PROFILE-LISTING.ACTIONS.NEW-VERSION' | translate}}
</button> </button>
<button mat-menu-item (click)="newVersionFromFile(row.id, row.label)">
<mat-icon>file_copy</mat-icon>{{'DATASET-PROFILE-LISTING.ACTIONS.NEW-VERSION-FROM-FILE' | translate}}
</button>
<button mat-menu-item (click)="clone(row.id)"> <button mat-menu-item (click)="clone(row.id)">
<mat-icon>filter_none</mat-icon>{{'DATASET-PROFILE-LISTING.ACTIONS.CLONE' | translate}} <mat-icon>filter_none</mat-icon>{{'DATASET-PROFILE-LISTING.ACTIONS.CLONE' | translate}}
</button> </button>

View File

@ -123,6 +123,35 @@ export class DatasetProfileListingComponent extends BaseComponent implements OnI
this.router.navigate(['dataset-profiles/newversion/' + id]); this.router.navigate(['dataset-profiles/newversion/' + id]);
} }
newVersionFromFile(id: string, label: string): void {
const dialogRef = this.dialog.open(DialogConfirmationUploadDatasetProfiles, {
width: '500px',
restoreFocus: false,
data: {
message: this.language.instant('DATASET-WIZARD.NEW-VERSION-FROM-FILE.NEW-VERSION-XML-FILE-TITLE', {datasetName: label}),
confirmButton: this.language.instant('DATASET-WIZARD.NEW-VERSION-FROM-FILE.NEW-VERSION-XML'),
cancelButton: this.language.instant('DATASET-WIZARD.NEW-VERSION-FROM-FILE.NEW-VERSION-XML-FILE-CANCEL'),
name: "",
file: FileList,
sucsess: false
}
});
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(data => {
if (data && data.sucsess && data.name != null && data.file != null) {
this.datasetService.uploadFile(data.file, data.name, id)
.pipe(takeUntil(this._destroyed))
.subscribe(_=>{
this.uiNotificationService.snackBarNotification(this.language.instant('DATASET-WIZARD.NEW-VERSION-FROM-FILE.NEW-VERSION-XML-SUCCESSFUL'), SnackBarNotificationLevel.Success);
this.refresh();
},
error=>{
this.uiNotificationService.snackBarNotification(error.message, SnackBarNotificationLevel.Error);
}
);
}
});
}
viewVersions(rowId, rowLabel) { viewVersions(rowId, rowLabel) {
this.router.navigate(['/dataset-profiles/versions/' + rowId], { queryParams: { groupLabel: rowLabel } }); this.router.navigate(['/dataset-profiles/versions/' + rowId], { queryParams: { groupLabel: rowLabel } });
} }

View File

@ -0,0 +1,8 @@
<div class="row root">
<mat-card class="col-md-3 offset-md-4">
<div>
<div style="color: red;">Warning: Danger zone. Irreversible action!</div>
<button mat-raised-button color="primary" (click)="migrateSchematics($event)" class="lightblue-btn button">Migrate schematics</button>
</div>
</mat-card>
</div>

View File

@ -0,0 +1,7 @@
.root {
padding-bottom: 2em;
.button {
margin: 5px;
}
}

View File

@ -0,0 +1,51 @@
import { Component, OnInit } from '@angular/core';
import { BaseComponent } from '@common/base/base.component';
import { takeUntil } from 'rxjs/operators';
import { UiNotificationService, SnackBarNotificationLevel } from '@app/core/services/notification/ui-notification-service';
import { TranslateService } from '@ngx-translate/core';
import { Router } from '@angular/router';
import { MaintenanceTasksService } from '@app/core/services/maintenance-tasks/maintenance-tasks.service';
@Component({
selector: 'app-maintenance-tasks',
templateUrl: './maintenance-tasks.component.html',
styleUrls: ['./maintenance-tasks.component.scss']
})
export class MaintenanceTasksComponent extends BaseComponent implements OnInit {
constructor(
private maintenanceTasksService: MaintenanceTasksService,
private uiNotificationService: UiNotificationService,
private translate: TranslateService,
private router: Router,
) {
super();
}
ngOnInit(): void {
}
migrateSchematics(ev: Event) {
(ev.srcElement as HTMLButtonElement).disabled = true;
this.maintenanceTasksService.migrateSchematics().pipe(takeUntil(this._destroyed)).subscribe(
response => {
(ev.srcElement as HTMLButtonElement).disabled = false;
this.onCallbackSuccess();
},
error => {
(ev.srcElement as HTMLButtonElement).disabled = false;
this.onCallbackError(error);
}
);
}
onCallbackSuccess(): void {
this.uiNotificationService.snackBarNotification( this.translate.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success);
this.router.navigate(['/reload']).then(() => this.router.navigate(['/maintenance-tasks']));
}
onCallbackError(error: any) {
this.uiNotificationService.snackBarNotification( error, SnackBarNotificationLevel.Error);
}
}

View File

@ -0,0 +1,23 @@
import { NgModule } from '@angular/core';
import { MaintenanceTasksRoutingModule } from './maintenance-tasks.routing';
import { MaintenanceTasksComponent } from './maintenance-tasks.component';
import { CommonUiModule } from '@common/ui/common-ui.module';
import { CommonFormsModule } from '@common/forms/common-forms.module';
import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module';
import { MaintenanceTasksService } from '@app/core/services/maintenance-tasks/maintenance-tasks.service';
@NgModule({
declarations: [MaintenanceTasksComponent],
imports: [
CommonUiModule,
CommonFormsModule,
ConfirmationDialogModule,
MaintenanceTasksRoutingModule
],
providers: [
MaintenanceTasksService
]
})
export class MaintenanceTasksModule { }

View File

@ -0,0 +1,15 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MaintenanceTasksComponent } from './maintenance-tasks.component';
import { AdminAuthGuard } from '@app/core/admin-auth-guard.service';
const routes: Routes = [
{ path: '', component: MaintenanceTasksComponent, canActivate: [AdminAuthGuard] },
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MaintenanceTasksRoutingModule { }

View File

@ -53,7 +53,6 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit {
breadCrumbs: Observable<BreadcrumbItem[]> = observableOf(); breadCrumbs: Observable<BreadcrumbItem[]> = observableOf();
isUserOwner: boolean; isUserOwner: boolean;
expand = false; expand = false;
hasDOIToken = false;
researchers: ResearcherModel[]; researchers: ResearcherModel[];
users: UserInfoListingModel[]; users: UserInfoListingModel[];
lockStatus: Boolean; lockStatus: Boolean;

View File

@ -64,7 +64,6 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit {
breadCrumbs: Observable<BreadcrumbItem[]> = observableOf(); breadCrumbs: Observable<BreadcrumbItem[]> = observableOf();
isUserOwner: boolean; isUserOwner: boolean;
expand = false; expand = false;
hasDOIToken = false;
lockStatus: Boolean; lockStatus: Boolean;
textMessage: any; textMessage: any;
versions: VersionListingModel[]; versions: VersionListingModel[];
@ -510,7 +509,6 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit {
if (result.length > 0) { if (result.length > 0) {
this.dmp.dois = result; this.dmp.dois = result;
this.selectedModel = this.dmp.dois[this.dmp.dois.length - 1]; this.selectedModel = this.dmp.dois[this.dmp.dois.length - 1];
this.hasDOIToken = true;
} }
} }
@ -838,90 +836,4 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit {
// return url; // return url;
// } // }
// getDoi(dmp: DmpOverviewModel) {
// this.userService.hasDOIToken().subscribe(response => {
// this.hasDOIToken = true;
// this.showConfirmationDOIDialog(dmp);
// }, error => {
// this.hasDOIToken = false;
// this.showErrorConfirmationDOIDialog(error.error.message, dmp);
// });
// }
// showConfirmationDOIDialog(dmp: DmpOverviewModel) {
// const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
// maxWidth: '600px',
// restoreFocus: false,
// data: {
// message: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ZENODO-DOI', { 'username': this.hasDOIToken ? this.authentication.current().zenodoEmail : 'default' }),
// confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'),
// cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL'),
// }
// });
// dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
// if (result) {
// this.dmpService.getDoi(dmp.id)
// .pipe(takeUntil(this._destroyed))
// .subscribe(
// complete => {
// this.onDOICallbackSuccess();
// this.dmp.doi = complete;
// },
// error => this.onDeleteCallbackError(error)
// );
// }
// });
// }
// showErrorConfirmationDOIDialog(message: string, dmp: DmpOverviewModel) {
// const dialogRef = this.dialog.open(MultipleChoiceDialogComponent, {
// maxWidth: '600px',
// restoreFocus: false,
// data: {
// message: message ? this.language.instant(message) : this.language.instant('GENERAL.ERRORS.HTTP-REQUEST-ERROR'),
// titles: [this.language.instant('DMP-OVERVIEW.MULTIPLE-DIALOG.ZENODO-LOGIN'), this.language.instant('DMP-OVERVIEW.MULTIPLE-DIALOG.USE-DEFAULT')]
// }
// });
// dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
// switch (result) {
// case 0:
// // this.authentication.logout();
// // this.router.navigate(['/login/external/zenodo']);
// this.showOauth2Dialog(this.getAccessUrl(), dmp);
// break;
// case 1:
// this.showConfirmationDOIDialog(dmp);
// break;
// }
// });
// }
// showOauth2Dialog(url: string, dmp: DmpOverviewModel) {
// this.oauth2DialogService.login(url)
// .pipe(takeUntil(this._destroyed))
// .subscribe(result => {
// if (result !== undefined) {
// if (result.oauthCode !== undefined && result.oauthCode !== null && !this.oauthLock) {
// this.userService.registerDOIToken(result.oauthCode, this.configurationService.app + 'oauth2')
// .pipe(takeUntil(this._destroyed))
// .subscribe(() => {
// this.hasDOIToken = true;
// this.showConfirmationDOIDialog(dmp);
// });
// this.oauthLock = true;
// }
// } else {
// this.oauthLock = false;
// }
// });
// }
// onDOICallbackSuccess(): void {
// this.uiNotificationService.snackBarNotification(this.language.instant('DMP-EDITOR.SNACK-BAR.SUCCESSFUL-DOI'), SnackBarNotificationLevel.Success);
// }
// onDOICallbackError(error) {
// this.uiNotificationService.snackBarNotification(error.error.message ? error.error.message : this.language.instant('DMP-EDITOR.SNACK-BAR.UNSUCCESSFUL-DOI'), SnackBarNotificationLevel.Error);
// }
} }

View File

@ -765,6 +765,12 @@
"UPLOAD-XML-IMPORT": "File", "UPLOAD-XML-IMPORT": "File",
"UPLOAD-XML-FILE-CANCEL": "Cancel" "UPLOAD-XML-FILE-CANCEL": "Cancel"
}, },
"NEW-VERSION-FROM-FILE": {
"NEW-VERSION-XML": "Import",
"NEW-VERSION-XML-FILE-TITLE": "New Version from File for {{datasetName}}",
"NEW-VERSION-XML-FILE-CANCEL": "Cancel",
"NEW-VERSION-XML-SUCCESSFUL": "New Version successfully uploaded"
},
"DIALOGUE": { "DIALOGUE": {
"TITLE": "Copy Dataset to DMP", "TITLE": "Copy Dataset to DMP",
"DMP-SEARCH": { "DMP-SEARCH": {
@ -930,6 +936,7 @@
"VIEW": "View", "VIEW": "View",
"CLONE": "Clone", "CLONE": "Clone",
"NEW-VERSION": "New Version", "NEW-VERSION": "New Version",
"NEW-VERSION-FROM-FILE": "New Version from File",
"VIEW-VERSIONS": "All Dataset Template Versions", "VIEW-VERSIONS": "All Dataset Template Versions",
"DELETE": "Delete", "DELETE": "Delete",
"CREATE-DATASET-TEMPLATE": "Create Dataset Template" "CREATE-DATASET-TEMPLATE": "Create Dataset Template"

View File

@ -11,6 +11,6 @@
"FreeTextFieldDataEditorModel.label", "FreeTextFieldDataEditorModel.label",
"WordListFieldDataEditorModel.label", "WordListFieldDataEditorModel.label",
"FieldDataOptionEditorModel.label", "FieldDataOptionEditorModel.label",
"FieldSetEditorModel.rdaCommonStandard", "FieldSetEditorModel.schematics",
"FieldSetEditorModel.export" "FieldSetEditorModel.export"
] ]