referential integrity update

This commit is contained in:
annabakouli 2017-12-11 11:48:18 +02:00
parent 1cc7933693
commit 265d4cf602
9 changed files with 145 additions and 51 deletions

View File

@ -33,7 +33,7 @@ public class Field implements DatabaseViewStyleDefinition,XmlSerializable<Field>
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<Field>
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");

View File

@ -73,7 +73,7 @@ public class Field implements ModelDefinition<entities.xmlmodels.modeldefinition
public void setViewStyle(ViewStyle viewStyle) {
this.viewStyle = viewStyle;
}
public boolean isDefaultVisibility() {
public boolean getDefaultVisibility() {
return defaultVisibility;
}
public void setDefaultVisibility(boolean defaultVisibility) {
@ -150,7 +150,7 @@ public class Field implements ModelDefinition<entities.xmlmodels.modeldefinition
}
@Override
public void fromDatabaseDefinition(entities.xmlmodels.viewstyledefinition.Field item) {
this.defaultVisibility = item.isDefaultVisibility();
this.defaultVisibility = item.getDefaultVisibility();
this.description = item.getDescription();
this.extendedDescription = item.getExtendedDescription();
this.id = item.getId();

View File

@ -1,19 +1,25 @@
package models.dataset;
import models.DataModel;
import utilities.builders.DomainModelConverter;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
public class Dataset implements DataModel<entities.Dataset>{
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<Registry> registries;
private List<Service> services;
private List<DataRepository> dataRepositories;
@ -74,8 +80,38 @@ public class Dataset implements DataModel<entities.Dataset>{
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<entities.Registry,Registry>().fromDataModel(entity.getRegistries().stream().collect(Collectors.toList()), Registry.class);
this.dataRepositories = new DomainModelConverter<entities.DataRepository,DataRepository>().fromDataModel(entity.getDataRepositories().stream().collect(Collectors.toList()), DataRepository.class);
this.services = new DomainModelConverter<entities.Service,Service>().fromDataModel(entity.getServices().stream().collect(Collectors.toList()), Service.class);
}
public entities.Dataset toDataModel(){
@ -86,7 +122,9 @@ public class Dataset implements DataModel<entities.Dataset>{
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<entities.Registry>());
for(Registry registry:this.registries){

View File

@ -105,6 +105,7 @@ public class DataManagementPlan implements DataModel<DMP>{
dataManagementPlanEntity.setVersion(this.version);
dataManagementPlanEntity.setPrevious(this.previous);
dataManagementPlanEntity.setLabel(this.label);
dataManagementPlanEntity.setProject(this.project.toDataModel());
return dataManagementPlanEntity;
}
}

View File

@ -75,7 +75,7 @@ public class Field implements PropertiesModelBuilder, ModelDefinition<entities.x
public void setViewStyle(ViewStyle viewStyle) {
this.viewStyle = viewStyle;
}
public boolean isDefaultVisibility() {
public boolean getDefaultVisibility() {
return defaultVisibility;
}
public void setDefaultVisibility(boolean defaultVisibility) {
@ -145,7 +145,7 @@ public class Field implements PropertiesModelBuilder, ModelDefinition<entities.x
}
@Override
public void fromDatabaseDefinition(entities.xmlmodels.viewstyledefinition.Field item) {
this.defaultVisibility = item.isDefaultVisibility();
this.defaultVisibility = item.getDefaultVisibility();
this.description = item.getDescription();
this.extendedDescription = item.getExtendedDescription();
this.id = item.getId();

View File

@ -59,7 +59,7 @@ public class Group implements PropertiesModelBuilder, ModelDefinition<entities.x
public void setExtendedDescription(String extendedDescription) {
this.extendedDescription = extendedDescription;
}
public boolean isDefaultVisibility() {
public boolean getDefaultVisibility() {
return defaultVisibility;
}
public void setDefaultVisibility(boolean defaultVisibility) {

View File

@ -137,14 +137,39 @@ public class DMPs {
@Transactional
@RequestMapping(method = RequestMethod.POST, value = { "/dmp/update" }, consumes = "application/json", produces="application/json")
public @ResponseBody ResponseEntity<Object> updateDMP(@RequestBody DMP dmp) {
public @ResponseBody ResponseEntity<Object> 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<entities.Organisation> 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<entities.Researcher> 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<Object> 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!\"");

View File

@ -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<Object> 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<Object> updateDataset(@RequestBody String datasetJson) {
public @ResponseBody ResponseEntity<Object> 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<entities.DataRepository> 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<entities.Service> 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<entities.Registry> 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<Object> 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!\"");

View File

@ -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);