From 265d4cf602bd4f8b1d27f4f5403326086b32ae62 Mon Sep 17 00:00:00 2001 From: annabakouli Date: Mon, 11 Dec 2017 11:48:18 +0200 Subject: [PATCH] referential integrity update --- .../xmlmodels/viewstyledefinition/Field.java | 4 +- .../components/datasetprofile/Field.java | 4 +- .../src/main/java/models/dataset/Dataset.java | 44 ++++++++++- .../java/models/dmp/DataManagementPlan.java | 1 + .../user/components/datasetprofile/Field.java | 4 +- .../user/components/datasetprofile/Group.java | 2 +- .../src/main/java/rest/entities/DMPs.java | 47 ++++++++---- .../src/main/java/rest/entities/Datasets.java | 73 ++++++++++++++----- .../src/app/datasets/dataset.component.ts | 17 ++--- 9 files changed, 145 insertions(+), 51 deletions(-) diff --git a/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Field.java b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Field.java index 3b423ad22..067231b28 100644 --- a/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Field.java +++ b/dmp-backend/src/main/java/entities/xmlmodels/viewstyledefinition/Field.java @@ -33,7 +33,7 @@ public class Field implements DatabaseViewStyleDefinition,XmlSerializable public void setOrdinal(int ordinal) { this.ordinal = ordinal; } - public boolean isDefaultVisibility() { + public boolean getDefaultVisibility() { return defaultVisibility; } public void setDefaultVisibility(boolean defaultVisibility) { @@ -111,7 +111,7 @@ public class Field implements DatabaseViewStyleDefinition,XmlSerializable public Field fromXml(Element element) { this.id = element.getAttribute("id"); this.ordinal = Integer.parseInt(element.getAttribute("ordinal")); - this.defaultVisibility = Boolean.getBoolean(element.getAttribute("defaultVisibility")); + this.defaultVisibility = Boolean.valueOf(element.getAttribute("defaultVisibility")).booleanValue(); Element extendedDescription = (Element)XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "extendedDescription"); diff --git a/dmp-backend/src/main/java/models/admin/components/datasetprofile/Field.java b/dmp-backend/src/main/java/models/admin/components/datasetprofile/Field.java index 6801a59e2..fe54311c2 100644 --- a/dmp-backend/src/main/java/models/admin/components/datasetprofile/Field.java +++ b/dmp-backend/src/main/java/models/admin/components/datasetprofile/Field.java @@ -73,7 +73,7 @@ public class Field implements ModelDefinition{ private UUID id; private String label; private String reference; private String uri; + private String description; private short status; private String properties; + private entities.DMP dmp; + private entities.DatasetProfile profile; private List registries; private List services; private List dataRepositories; @@ -74,8 +80,38 @@ public class Dataset implements DataModel{ this.dataRepositories = dataRepositories; } - public void fromDataModel(entities.Dataset entity){ - + + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public entities.DMP getDmp() { + return dmp; + } + public void setDmp(entities.DMP dmp) { + this.dmp = dmp; + } + public entities.DatasetProfile getProfile() { + return profile; + } + public void setProfile(entities.DatasetProfile profile) { + this.profile = profile; + } + + public void fromDataModel(entities.Dataset entity) throws IllegalAccessException, InstantiationException{ + this.id = entity.getId(); + this.label = entity.getLabel(); + this.properties = entity.getProperties(); + this.reference = entity.getReference(); + this.dmp = entity.getDmp(); + this.description = entity.getDescription(); + this.profile = entity.getProfile(); + this.registries = new DomainModelConverter().fromDataModel(entity.getRegistries().stream().collect(Collectors.toList()), Registry.class); + this.dataRepositories = new DomainModelConverter().fromDataModel(entity.getDataRepositories().stream().collect(Collectors.toList()), DataRepository.class); + this.services = new DomainModelConverter().fromDataModel(entity.getServices().stream().collect(Collectors.toList()), Service.class); } public entities.Dataset toDataModel(){ @@ -86,7 +122,9 @@ public class Dataset implements DataModel{ entity.setUri(this.uri); entity.setProperties(this.properties); entity.setStatus(this.status); - + entity.setDmp(dmp); + entity.setDescription(this.description); + entity.setProfile(profile); if(!this.registries.isEmpty()){ entity.setRegistries(new HashSet()); for(Registry registry:this.registries){ diff --git a/dmp-backend/src/main/java/models/dmp/DataManagementPlan.java b/dmp-backend/src/main/java/models/dmp/DataManagementPlan.java index 34bed1f56..cdc779e31 100644 --- a/dmp-backend/src/main/java/models/dmp/DataManagementPlan.java +++ b/dmp-backend/src/main/java/models/dmp/DataManagementPlan.java @@ -105,6 +105,7 @@ public class DataManagementPlan implements DataModel{ dataManagementPlanEntity.setVersion(this.version); dataManagementPlanEntity.setPrevious(this.previous); dataManagementPlanEntity.setLabel(this.label); + dataManagementPlanEntity.setProject(this.project.toDataModel()); return dataManagementPlanEntity; } } diff --git a/dmp-backend/src/main/java/models/user/components/datasetprofile/Field.java b/dmp-backend/src/main/java/models/user/components/datasetprofile/Field.java index a9f1e999c..997359dc5 100644 --- a/dmp-backend/src/main/java/models/user/components/datasetprofile/Field.java +++ b/dmp-backend/src/main/java/models/user/components/datasetprofile/Field.java @@ -75,7 +75,7 @@ public class Field implements PropertiesModelBuilder, ModelDefinition updateDMP(@RequestBody DMP dmp) { + public @ResponseBody ResponseEntity updateDMP(@RequestBody DataManagementPlan dataManagementPlan) { - DMP previousDmp = dMPDao.read(dmp.getId()); - addNullAndForeignElems(previousDmp, dmp); + DMP newDmp = dataManagementPlan.toDataModel(); + if(newDmp.getOrganisations()!=null&&!newDmp.getOrganisations().isEmpty()){ + for(entities.Organisation organisation: newDmp.getOrganisations()){ + OrganisationCriteria criteria = new OrganisationCriteria(); + criteria.setLike(organisation.getReference()); + List entries = this.organisationDao.listBy(criteria); + if(entries!=null&&!entries.isEmpty())organisation.setId(entries.get(0).getId()); + else organisation = this.organisationDao.create(organisation); + } + } + + if(newDmp.getResearchers()!=null&&!newDmp.getResearchers().isEmpty()){ + for(entities.Researcher researcher : newDmp.getResearchers()){ + ResearcherCriteria criteria = new ResearcherCriteria(); + criteria.setLike(researcher.getReference()); + List entries = this.researcherDao.listBy(criteria); + if(entries!=null&&!entries.isEmpty())researcher.setId(entries.get(0).getId()); + else researcher = this.researcherDao.create(researcher); + } + } + DMP previousDmp = dMPDao.read(dataManagementPlan.getId()); + previousDmp.setResearchers(newDmp.getResearchers()); + previousDmp.setOrganisations(newDmp.getOrganisations()); + previousDmp.setLabel(dataManagementPlan.getLabel()); + previousDmp.setVersion(dataManagementPlan.getVersion()); + previousDmp.setStatus((short)dataManagementPlan.getStatus()); + //if(!previousDmp.getProject().getId().equals(newDmp.getProject().getId()))previousDmp.setProject(projectDao.read(newDmp.getProject().getId())); try { - DMP updatedDMP = dMPDao.update(dmp); + DMP updatedDMP = dMPDao.update(previousDmp); return ResponseEntity.status(HttpStatus.CREATED).body(SerializerProvider.toJson(updatedDMP)); } catch (Exception e) { e.printStackTrace(); @@ -188,15 +213,11 @@ public class DMPs { @RequestMapping(method = RequestMethod.POST, value = { "/dmp/softdelete" }, consumes = "application/json", produces="text/plain") public @ResponseBody ResponseEntity softDelete(@RequestBody DMP dmp) { - DMP d = dMPDao.read(dmp.getId()); - d.setStatus(new Short("-1")); - - try { - int code = updateDMP(d).getStatusCodeValue(); - if(code>199 && code<300) - return ResponseEntity.status(HttpStatus.CREATED).body("DELETED!"); - else - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{\"msg\":\"Could not soft delete DMP!\""); + try{ + DMP d = dMPDao.read(dmp.getId()); + d.setStatus(new Short("-1")); + dMPDao.update(d); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{\"msg\":\"Could not soft delete DMP!\""); } catch (Exception e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{\"msg\":\"Could not soft delete DMP!\""); diff --git a/dmp-backend/src/main/java/rest/entities/Datasets.java b/dmp-backend/src/main/java/rest/entities/Datasets.java index bf3ca874c..487f3b1b8 100644 --- a/dmp-backend/src/main/java/rest/entities/Datasets.java +++ b/dmp-backend/src/main/java/rest/entities/Datasets.java @@ -1,6 +1,7 @@ package rest.entities; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.UUID; @@ -40,6 +41,7 @@ import models.criteria.DataRepositoryCriteria; import models.criteria.RegistryCriteria; import models.criteria.ServiceCriteria; import responses.RestResponse; +import utilities.builders.DomainModelConverter; @RestController @@ -80,8 +82,9 @@ public class Datasets { public @ResponseBody ResponseEntity getDataset(@PathVariable("id") String id) { try { Dataset ds = datasetDao.read(UUID.fromString(id)); - ds.setDmp(ds.getDmp()); - return ResponseEntity.status(HttpStatus.OK).body(SerializerProvider.toJson(ds)); + models.dataset.Dataset dataset = new models.dataset.Dataset(); + dataset.fromDataModel(ds); + return ResponseEntity.status(HttpStatus.OK).body(SerializerProvider.toJson(dataset)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); @@ -175,22 +178,59 @@ public class Datasets { @RequestMapping(method = RequestMethod.POST, value = { "/dataset/update" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseEntity updateDataset(@RequestBody String datasetJson) { + public @ResponseBody ResponseEntity updateDataset(@RequestBody models.dataset.Dataset modeldataset) { - Dataset dataset; - try { - dataset = SerializerProvider.fromJson(datasetJson, Dataset.class); - } catch (Exception e) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Could not create or update Dataset! Reason: " + e.getMessage()); + Dataset dataset = modeldataset.toDataModel(); + + if(dataset.getDataRepositories()!=null&&!dataset.getDataRepositories().isEmpty()){ + for(entities.DataRepository dataRepo : dataset.getDataRepositories()){ + DataRepositoryCriteria criteria = new DataRepositoryCriteria(); + criteria.setLike(dataRepo.getReference()); + List entries = this.dataRepositoryDao.listBy(criteria); + if(entries!=null&&!entries.isEmpty())dataRepo.setId(entries.get(0).getId()); + else dataRepo = this.dataRepositoryDao.create(dataRepo); + } } - SafeCleanAttribs.clean(dataset); + if(dataset.getServices()!=null&&!dataset.getServices().isEmpty()){ + for(entities.Service service : dataset.getServices()){ + ServiceCriteria criteria = new ServiceCriteria(); + criteria.setLike(service.getReference()); + List entries = this.serviceDao.listBy(criteria); + if(entries!=null&&!entries.isEmpty())service.setId(entries.get(0).getId()); + else service = this.serviceDao.create(service); + } + } + + if(dataset.getRegistries()!=null&&!dataset.getRegistries().isEmpty()){ + for(entities.Registry registry : dataset.getRegistries()){ + RegistryCriteria criteria = new RegistryCriteria(); + criteria.setLike(registry.getReference()); + List entries = this.registryDao.listBy(criteria); + if(entries!=null&&!entries.isEmpty())registry.setId( entries.get(0).getId()); + else registry = this.registryDao.create(registry); + } + } + + Dataset olddataset = datasetDao.read(modeldataset.getId()); + + olddataset.getServices().clear(); + olddataset.setServices(dataset.getServices()); + + olddataset.getDataRepositories().clear(); + olddataset.setDataRepositories(dataset.getDataRepositories()); + olddataset.getRegistries().clear(); + olddataset.setRegistries(dataset.getRegistries()); + + olddataset.setLabel(modeldataset.getLabel()); + olddataset.setDescription(modeldataset.getDescription()); + //SafeCleanAttribs.clean(dataset); if("".equals(dataset.getReference())) dataset.setReference(null); if("".equals(dataset.getProperties())) dataset.setProperties(null); try { - dataset = datasetDao.update(dataset); + dataset = datasetDao.update(olddataset); return ResponseEntity.status(HttpStatus.CREATED).body(SerializerProvider.toJson(dataset)); } catch(Exception ex) { @@ -221,15 +261,12 @@ public class Datasets { @RequestMapping(method = RequestMethod.POST, value = { "/dataset/softdelete" }, consumes = "application/json", produces="text/plain") public @ResponseBody ResponseEntity softDelete(@RequestBody Dataset dataset) { - - Dataset d = datasetDao.read(dataset.getId()); - d.setStatus(new Short("-1")); try { - int code = updateDataset(SerializerProvider.toJson(d)).getStatusCodeValue(); - if(code>199 && code<300) - return ResponseEntity.status(HttpStatus.CREATED).body("DELETED!"); - else - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{\"msg\":\"Could not soft delete dataset!\""); + + Dataset d = datasetDao.read(dataset.getId()); + d.setStatus(new Short("-1")); + dataset = datasetDao.update(dataset); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{\"msg\":\"Could not soft delete dataset!\""); } catch (Exception e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{\"msg\":\"Could not soft delete dataset!\""); diff --git a/dmp-frontend/src/app/datasets/dataset.component.ts b/dmp-frontend/src/app/datasets/dataset.component.ts index 656d0dc7a..50eb6e366 100644 --- a/dmp-frontend/src/app/datasets/dataset.component.ts +++ b/dmp-frontend/src/app/datasets/dataset.component.ts @@ -217,16 +217,13 @@ export class DatasetsComponent implements OnInit { editRow(item, event) { if (event.toElement.id == "editDataset") { //this.dataset = item; - this.dataset.label = item.label; - this.dataset.uri = item.uri; - this.dataset.created = item.created; - this.dataset.status = item.status; - this.dataset.description = item.description; - //this.dataset.dmp = item.dmp; - this.dataset.profile = item.profile == null ? null : item.profile.id; - this.dataset.id = item.id; - this.dataset.creator = item.creator; - $("#newDatasetModal").modal("show"); + + this.serverService.getDatasetByID(item.id).subscribe(item=>{ + this.dataset = item; + this.dataset.profile = item.profile.id; + $("#newDatasetModal").modal("show"); + } + ) } else if (event.toElement.id == "describeDataset") { this.describeDataset(item);