diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java index bcb15b3c5..38d1e6c4c 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java @@ -18,6 +18,7 @@ import eu.eudat.models.dmp.DataManagementPlanTableRequest; import eu.eudat.models.helpers.DataTableData; import eu.eudat.models.helpers.responses.*; import eu.eudat.models.listingmodels.DataManagementPlanListingModel; +import eu.eudat.models.security.Principal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -96,10 +97,17 @@ public class DMPs { } @Transactional - @RequestMapping(method = RequestMethod.POST, value = { "/dmps/add" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseEntity addDmp(@RequestBody eu.eudat.models.dmp.DataManagementPlan dataManagementPlan) { - eu.eudat.entities.DMP createdProject = dMPDao.createOrUpdate(dataManagementPlan.toDataModel()); - return ResponseEntity.status(HttpStatus.CREATED).body(createdProject); + @RequestMapping(method = RequestMethod.POST, value = { "/dmps/createOrUpdate" }, consumes = "application/json", produces="application/json") + public @ResponseBody ResponseItem createOrUpdate(@RequestBody eu.eudat.models.dmp.DataManagementPlan dataManagementPlan, Principal principal) { + try{ + DataManagementPlanManager.createOrUpdate(dMPDao,researcherDao,userInfoDao,organisationDao,dataManagementPlan,principal); + return new ResponseItem().status(HttpStatus.CREATED); + }catch (Exception ex){ + ex.printStackTrace(); + return new ResponseItem().status(HttpStatus.BAD_REQUEST).message(ex.getMessage()); + } + + } diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java new file mode 100644 index 000000000..11b965e99 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java @@ -0,0 +1,44 @@ +package eu.eudat.controllers; + +import eu.eudat.dao.entities.DMPDao; +import eu.eudat.managers.DatasetManager; +import eu.eudat.managers.DatasetWizardManager; +import eu.eudat.models.dataset.DatasetTableRequest; +import eu.eudat.models.datasetwizard.DataManagentPlanListingModel; +import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest; +import eu.eudat.models.dmp.DataManagementPlan; +import eu.eudat.models.helpers.DataTableData; +import eu.eudat.models.helpers.responses.ResponseItem; +import eu.eudat.models.listingmodels.DatasetListingModel; +import eu.eudat.models.security.Principal; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Created by ikalyvas on 12/20/2017. + */ + +@RestController +@CrossOrigin +@RequestMapping( value = { "/datasetwizard" }) +public class DatasetWizardController { + + @Autowired + private DMPDao dMPDao; + + @RequestMapping(method = RequestMethod.POST, value = { "/userDmps" }, produces="application/json") + public @ResponseBody + ResponseItem> getUserDmps(@RequestBody DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, Principal principal) { + try { + List dataManagementPlans = DatasetWizardManager.getUserDmps(dMPDao,datasetWizardAutocompleteRequest,principal); + return new ResponseItem>().status(HttpStatus.OK).payload(dataManagementPlans); + + } catch (Exception ex) { + ex.printStackTrace(); + return new ResponseItem>().status(HttpStatus.BAD_REQUEST).message(ex.getMessage()); + } + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java b/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java index 0e688bbc0..35d975463 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java @@ -13,6 +13,7 @@ import eu.eudat.models.external.ProjectsExternalSourcesModel; import eu.eudat.models.external.RegistriesExternalSourcesModel; import eu.eudat.models.helpers.responses.*; import eu.eudat.models.project.ProjectCriteriaRequest; +import eu.eudat.models.security.Principal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -102,9 +103,9 @@ public class Projects { @Transactional @RequestMapping(method = RequestMethod.POST, value = { "/projects/createOrUpdate" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseItem addProject(@RequestBody eu.eudat.models.project.Project project) { + public @ResponseBody ResponseItem addProject(@RequestBody eu.eudat.models.project.Project project, Principal principal) { try { - Project createdProject = projectDao.createOrUpdate(project.toDataModel()); + ProjectManager.createOrUpdate(projectDao,userInfoDao,project,principal); return new ResponseItem().status(HttpStatus.OK); }catch (Exception ex){ return new ResponseItem().status(HttpStatus.BAD_REQUEST).message(ex.getMessage()); diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDao.java index f23c92ea1..efc58140d 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDao.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDao.java @@ -5,15 +5,20 @@ import java.util.UUID; import eu.eudat.dao.Dao; import eu.eudat.entities.DMP; +import eu.eudat.entities.Dataset; +import eu.eudat.entities.UserInfo; import eu.eudat.entities.responses.IDLabelPair; import eu.eudat.models.criteria.DataManagementPlanCriteria; +import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest; import eu.eudat.models.dmp.DataManagementPlanTableRequest; import eu.eudat.queryable.QueryableList; import org.springframework.stereotype.Service; public interface DMPDao { - public QueryableList getWithCriteria(DataManagementPlanCriteria criteria); + QueryableList getWithCriteria(DataManagementPlanCriteria criteria); + + QueryableList getUserDmps(DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, UserInfo userInfo); DMP createOrUpdate(DMP item); diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDaoImpl.java index 5302e1b8e..f937e394f 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DMPDaoImpl.java @@ -11,8 +11,11 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import eu.eudat.dao.databaselayer.service.DatabaseService; +import eu.eudat.entities.Dataset; import eu.eudat.entities.Project; +import eu.eudat.entities.UserInfo; import eu.eudat.models.criteria.DataManagementPlanCriteria; +import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest; import eu.eudat.queryable.QueryableList; import org.hibernate.query.Query; @@ -53,4 +56,13 @@ public class DMPDaoImpl implements DMPDao { public Long count(){ return this.databaseService.count(DMP.class); } + + @Override + public QueryableList getUserDmps(DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, UserInfo userInfo) { + QueryableList query = databaseService.getQueryable(DMP.class).where((builder, root) -> builder.equal(root.get("creator"),userInfo)); + if(datasetWizardAutocompleteRequest.getCriteria().getLike()!=null&&!datasetWizardAutocompleteRequest.getCriteria().getLike().isEmpty()){ + query.where((builder, root) -> builder.like(root.get("label"),"%"+datasetWizardAutocompleteRequest.getCriteria().getLike()+"%")); + } + return query; + } } diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDao.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDao.java index 1c21091f7..a1f1bc63a 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDao.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDao.java @@ -6,18 +6,20 @@ import java.util.UUID; import eu.eudat.dao.Dao; import eu.eudat.entities.Dataset; import eu.eudat.entities.Project; +import eu.eudat.entities.UserInfo; import eu.eudat.entities.responses.IDLabelPair; import eu.eudat.models.criteria.DatasetCriteria; import eu.eudat.models.criteria.ProjectCriteria; import eu.eudat.models.dataset.DatasetTableRequest; import eu.eudat.models.project.ProjectTableRequest; +import eu.eudat.models.security.Principal; import eu.eudat.queryable.QueryableList; import org.springframework.stereotype.Service; public interface DatasetDao { - public QueryableList getWithCriteria(DatasetCriteria criteria); + QueryableList getWithCriteria(DatasetCriteria criteria); Dataset createOrUpdate(Dataset item); diff --git a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java index 8f7edbdb2..3855104fe 100644 --- a/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/dao/entities/DatasetDaoImpl.java @@ -15,9 +15,11 @@ import eu.eudat.dao.JpaDao; import eu.eudat.dao.databaselayer.service.DatabaseService; import eu.eudat.entities.Dataset; import eu.eudat.entities.Project; +import eu.eudat.entities.UserInfo; import eu.eudat.entities.responses.IDLabelPair; import eu.eudat.models.criteria.DatasetCriteria; import eu.eudat.models.dataset.DatasetTableRequest; +import eu.eudat.models.security.Principal; import eu.eudat.queryable.QueryableList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -51,4 +53,6 @@ public class DatasetDaoImpl implements DatasetDao { public Long count(){ return this.databaseService.count(Dataset.class); } + + } diff --git a/dmp-backend/src/main/java/eu/eudat/entities/DMP.java b/dmp-backend/src/main/java/eu/eudat/entities/DMP.java index fb9d28652..8ef3ff1c4 100644 --- a/dmp-backend/src/main/java/eu/eudat/entities/DMP.java +++ b/dmp-backend/src/main/java/eu/eudat/entities/DMP.java @@ -59,8 +59,8 @@ public class DMP implements Serializable,DataEntity { @Type(type="eu.eudat.typedefinition.XMLType") - @Column(name = "\"ProfileData\"", columnDefinition = "xml", nullable = true) - private String profileData; + @Column(name = "\"AssociatedDmps\"", columnDefinition = "xml", nullable = true) + private String associatedDmps; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "\"Profile\"") @@ -211,12 +211,12 @@ public class DMP implements Serializable,DataEntity { this.project = project; } - public String getProfileData() { - return profileData; + public String getAssociatedDmps() { + return associatedDmps; } - public void setProfileData(String profileData) { - this.profileData = profileData; + public void setAssociatedDmps(String associatedDmps) { + this.associatedDmps = associatedDmps; } public DMPProfile getProfile() { @@ -253,7 +253,13 @@ public class DMP implements Serializable,DataEntity { @Override public void update(DMP entity) { - + this.setAssociatedDmps(entity.associatedDmps); + this.label = entity.getLabel(); + this.status = entity.getStatus(); + this.created = entity.created; + this.description = entity.getDescription(); + this.researchers = entity.getResearchers(); + this.organisations = entity.getOrganisations(); } @Override diff --git a/dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java b/dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java index e4c1a175e..c51e1bdde 100644 --- a/dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java +++ b/dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java @@ -91,7 +91,7 @@ public class Transformers { dmp.setPrevious(UUID.fromString(formData.getFirst("DMP.previous"))); }catch(Exception ex) {/*do nothing*/} dmp.setProfile(profile); - dmp.setProfileData(formData.getFirst("DMP.profileData")); + dmp.setAssociatedDmps(formData.getFirst("DMP.profileData")); dmp.setProject(project); dmp.setVersion(Integer.parseInt(formData.getFirst("DMP.version"))); dmp.setDataset(datasets); diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java index 397c3c51f..52eea0987 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java @@ -4,13 +4,19 @@ import java.util.List; import java.util.UUID; import eu.eudat.dao.entities.DMPDao; +import eu.eudat.dao.entities.OrganisationDao; +import eu.eudat.dao.entities.ResearcherDao; +import eu.eudat.dao.entities.UserInfoDao; import eu.eudat.entities.DMP; import eu.eudat.models.criteria.DataManagementPlanCriteria; +import eu.eudat.models.criteria.OrganisationCriteria; +import eu.eudat.models.criteria.ResearcherCriteria; import eu.eudat.models.dmp.DataManagementPlan; import eu.eudat.models.dmp.DataManagementPlanCriteriaRequest; import eu.eudat.models.dmp.DataManagementPlanTableRequest; import eu.eudat.models.helpers.DataTableData; import eu.eudat.models.listingmodels.DataManagementPlanListingModel; +import eu.eudat.models.security.Principal; import eu.eudat.queryable.QueryableList; import eu.eudat.utilities.builders.DomainModelConverter; @@ -37,4 +43,37 @@ public class DataManagementPlanManager { List datamanagementPlans = new DomainModelConverter().fromDataModel( items.toList(), eu.eudat.models.dmp.DataManagementPlan.class); return datamanagementPlans; } + + public static void createOrUpdate(DMPDao dmpsRepository, ResearcherDao researcherRepository, UserInfoDao userInfoDao, OrganisationDao organisationRepository, DataManagementPlan dataManagementPlan, Principal principal){ + DMP newDmp = dataManagementPlan.toDataModel(); + createOrganisationsIfTheyDontExist(newDmp,organisationRepository); + createResearchersIfTheyDontExist(newDmp,researcherRepository); + newDmp.setCreator(userInfoDao.read(principal.getId())); + dmpsRepository.createOrUpdate(newDmp); + + } + + private static void createResearchersIfTheyDontExist(DMP newDmp,ResearcherDao researcherRepository){ + if(newDmp.getResearchers()!=null&&!newDmp.getResearchers().isEmpty()){ + for(eu.eudat.entities.Researcher researcher : newDmp.getResearchers()){ + ResearcherCriteria criteria = new ResearcherCriteria(); + criteria.setLike(researcher.getReference()); + List entries = researcherRepository.listBy(criteria); + if(entries!=null&&!entries.isEmpty())researcher.setId(entries.get(0).getId()); + else researcher = researcherRepository.create(researcher); + } + } + } + + private static void createOrganisationsIfTheyDontExist(DMP newDmp,OrganisationDao organisationRepository){ + if(newDmp.getOrganisations()!=null&&!newDmp.getOrganisations().isEmpty()){ + for(eu.eudat.entities.Organisation organisation: newDmp.getOrganisations()){ + OrganisationCriteria criteria = new OrganisationCriteria(); + criteria.setLike(organisation.getReference()); + List entries = organisationRepository.listBy(criteria); + if(entries!=null&&!entries.isEmpty())organisation.setId(entries.get(0).getId()); + else organisation = organisationRepository.create(organisation); + } + } + } } diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java index ce93d5ac0..81308bbfd 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java @@ -34,4 +34,5 @@ public class DatasetManager { dataset.fromDataModel(datatasetRepository.find(UUID.fromString(id))); return dataset; } + } diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DatasetWizardManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DatasetWizardManager.java new file mode 100644 index 000000000..787a83573 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/managers/DatasetWizardManager.java @@ -0,0 +1,30 @@ +package eu.eudat.managers; + +import eu.eudat.dao.entities.DMPDao; +import eu.eudat.dao.entities.DatasetDao; +import eu.eudat.entities.DMP; +import eu.eudat.entities.Dataset; +import eu.eudat.entities.UserInfo; +import eu.eudat.models.datasetwizard.DataManagentPlanListingModel; +import eu.eudat.models.datasetwizard.DatasetWizardAutocompleteRequest; +import eu.eudat.models.dmp.DataManagementPlan; +import eu.eudat.models.listingmodels.DatasetListingModel; +import eu.eudat.models.security.Principal; +import eu.eudat.queryable.QueryableList; +import eu.eudat.utilities.builders.DomainModelConverter; + +import java.util.List; + +/** + * Created by ikalyvas on 12/20/2017. + */ +public class DatasetWizardManager { + + public static List getUserDmps(DMPDao dmpRepository, DatasetWizardAutocompleteRequest datasetWizardAutocompleteRequest, Principal principal) throws InstantiationException, IllegalAccessException { + UserInfo userInfo = new UserInfo(); + userInfo.setId(principal.getId()); + QueryableList items = dmpRepository.getUserDmps(datasetWizardAutocompleteRequest,userInfo); + List dataManagementPlans = new DomainModelConverter().fromDataModel( items.toList(), DataManagentPlanListingModel.class); + return dataManagementPlans; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java b/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java index f4e2431bd..6a4f631e5 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/ProjectManager.java @@ -4,11 +4,13 @@ import java.util.List; import java.util.UUID; import eu.eudat.dao.entities.ProjectDao; +import eu.eudat.dao.entities.UserInfoDao; import eu.eudat.models.criteria.ProjectCriteria; import eu.eudat.models.helpers.DataTableData; import eu.eudat.models.project.Project; import eu.eudat.models.project.ProjectCriteriaRequest; import eu.eudat.models.project.ProjectTableRequest; +import eu.eudat.models.security.Principal; import eu.eudat.queryable.QueryableList; import eu.eudat.utilities.builders.DomainModelConverter; @@ -42,4 +44,10 @@ public class ProjectManager { List projects = new DomainModelConverter().fromDataModel(items.toList(), eu.eudat.models.project.Project.class); return projects; } + + public static void createOrUpdate(ProjectDao projectRepository, UserInfoDao userInfoRepository, eu.eudat.models.project.Project project, Principal principal){ + eu.eudat.entities.Project projectEntity = project.toDataModel(); + projectEntity.setCreationUser(userInfoRepository.read(principal.getId())); + projectRepository.createOrUpdate(projectEntity); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/criteria/DatasetWizardUserDmpCriteria.java b/dmp-backend/src/main/java/eu/eudat/models/criteria/DatasetWizardUserDmpCriteria.java new file mode 100644 index 000000000..9e58e058b --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/criteria/DatasetWizardUserDmpCriteria.java @@ -0,0 +1,10 @@ +package eu.eudat.models.criteria; + +import eu.eudat.entities.DMP; +import eu.eudat.models.dmp.DataManagementPlan; + +/** + * Created by ikalyvas on 12/20/2017. + */ +public class DatasetWizardUserDmpCriteria extends Criteria{ +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/dataset/Dataset.java b/dmp-backend/src/main/java/eu/eudat/models/dataset/Dataset.java index af56a8287..473dc367a 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/dataset/Dataset.java +++ b/dmp-backend/src/main/java/eu/eudat/models/dataset/Dataset.java @@ -2,6 +2,7 @@ package eu.eudat.models.dataset; import eu.eudat.models.DataModel; import eu.eudat.models.datasetprofile.DatasetProfileListingModel; +import eu.eudat.models.dmp.AssociatedProfiles; import eu.eudat.models.dmp.DataManagementPlan; import eu.eudat.utilities.builders.DomainModelConverter; @@ -25,7 +26,7 @@ public class Dataset implements DataModel{ private List registries; private List services; private List dataRepositories; - + public UUID getId() { return id; } diff --git a/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DataManagentPlanListingModel.java b/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DataManagentPlanListingModel.java new file mode 100644 index 000000000..ebded52f1 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DataManagentPlanListingModel.java @@ -0,0 +1,40 @@ +package eu.eudat.models.datasetwizard; + +import eu.eudat.entities.DMP; +import eu.eudat.models.DataModel; + +/** + * Created by ikalyvas on 12/20/2017. + */ +public class DataManagentPlanListingModel implements DataModel{ + + private String id; + private String label; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + @Override + public void fromDataModel(DMP entity) throws InstantiationException, IllegalAccessException { + this.id = entity.getId().toString(); + this.label = entity.getLabel(); + } + + @Override + public DMP toDataModel() { + return null; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DatasetWizardAutocompleteRequest.java b/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DatasetWizardAutocompleteRequest.java new file mode 100644 index 000000000..fca452ee4 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/datasetwizard/DatasetWizardAutocompleteRequest.java @@ -0,0 +1,10 @@ +package eu.eudat.models.datasetwizard; + +import eu.eudat.models.criteria.DatasetWizardUserDmpCriteria; +import eu.eudat.models.helpers.requests.RequestItem; + +/** + * Created by ikalyvas on 12/20/2017. + */ +public class DatasetWizardAutocompleteRequest extends RequestItem { +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/dmp/AssociatedProfile.java b/dmp-backend/src/main/java/eu/eudat/models/dmp/AssociatedProfile.java new file mode 100644 index 000000000..3cc94d8d9 --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/dmp/AssociatedProfile.java @@ -0,0 +1,46 @@ +package eu.eudat.models.dmp; + +import eu.eudat.utilities.XmlSerializable; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import java.util.UUID; + +/** + * Created by ikalyvas on 12/20/2017. + */ +public class AssociatedProfile implements XmlSerializable{ + private UUID profileId; + private String label; + + public UUID getProfileId() { + return profileId; + } + + public void setProfileId(UUID profileId) { + this.profileId = profileId; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + @Override + public Element toXml(Document doc) { + Element profile = doc.createElement("profile"); + profile.setAttribute("profileId",this.profileId.toString()); + profile.setAttribute("label",this.label); + return profile; + } + + @Override + public AssociatedProfile fromXml(Element item) { + this.profileId = UUID.fromString(item.getAttribute("profileId")); + this.label = item.getAttribute("label"); + return this; + } +} \ No newline at end of file diff --git a/dmp-backend/src/main/java/eu/eudat/models/dmp/AssociatedProfiles.java b/dmp-backend/src/main/java/eu/eudat/models/dmp/AssociatedProfiles.java new file mode 100644 index 000000000..69520f15a --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/dmp/AssociatedProfiles.java @@ -0,0 +1,49 @@ +package eu.eudat.models.dmp; + +import eu.eudat.utilities.XmlSerializable; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.util.LinkedList; +import java.util.List; + +/** + * Created by ikalyvas on 12/20/2017. + */ +public class AssociatedProfiles implements XmlSerializable{ + List associatedProfiles; + + public List getAssociatedProfiles() { + return associatedProfiles; + } + + public void setAssociatedProfiles(List associatedProfiles) { + this.associatedProfiles = associatedProfiles; + } + + @Override + public Element toXml(Document doc) { + Element associatedProfilesElement = doc.createElement("profiles"); + for(AssociatedProfile associatedProfile:associatedProfiles){ + associatedProfilesElement.appendChild(associatedProfile.toXml(doc)); + } + return associatedProfilesElement; + } + + @Override + public AssociatedProfiles fromXml(Element item) { + this.associatedProfiles = new LinkedList<>(); + if(item!=null){ + NodeList associatedProfilesElement = item.getChildNodes(); + for (int temp = 0; temp < associatedProfilesElement.getLength(); temp++) { + Node associatedProfileElement = associatedProfilesElement.item(temp); + if (associatedProfileElement.getNodeType() == Node.ELEMENT_NODE) { + this.associatedProfiles.add(new AssociatedProfile().fromXml((Element)associatedProfileElement)); + } + } + } + return this; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/dmp/DataManagementPlan.java b/dmp-backend/src/main/java/eu/eudat/models/dmp/DataManagementPlan.java index a638d5183..4220c2eb6 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/dmp/DataManagementPlan.java +++ b/dmp-backend/src/main/java/eu/eudat/models/dmp/DataManagementPlan.java @@ -3,6 +3,9 @@ package eu.eudat.models.dmp; import eu.eudat.entities.*; import eu.eudat.models.DataModel; import eu.eudat.utilities.builders.DomainModelConverter; +import eu.eudat.utilities.builders.XmlBuilder; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import java.util.*; import java.util.stream.Collector; @@ -14,10 +17,13 @@ public class DataManagementPlan implements DataModel{ private UUID previous; private int version; private int status; + private String description; + private AssociatedProfiles associatedProfile; private eu.eudat.models.dmp.Project project; - private List organizations; + private List organisations; private List researchers; private UserInfo creator; + private Date created; public UUID getId() { return id; } @@ -50,12 +56,12 @@ public class DataManagementPlan implements DataModel{ this.version = version; } - public List getOrganizations() { - return organizations; + public List getOrganisations() { + return organisations; } - public void setOrganizations(List organizations) { - this.organizations = organizations; + public void setOrganisations(List organizations) { + this.organisations = organizations; } public List getResearchers() { @@ -90,10 +96,34 @@ public class DataManagementPlan implements DataModel{ this.creator = creator; } - @Override + public AssociatedProfiles getAssociatedProfile() { + return associatedProfile; + } + + public void setAssociatedProfile(AssociatedProfiles associatedProfile) { + this.associatedProfile = associatedProfile; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + @Override public void fromDataModel(DMP entity) throws InstantiationException, IllegalAccessException { this.id = entity.getId(); - this.organizations =new DomainModelConverter().fromDataModel(entity.getOrganisations().stream().collect(Collectors.toList()),Organisation.class); + this.organisations =new DomainModelConverter().fromDataModel(entity.getOrganisations().stream().collect(Collectors.toList()),Organisation.class); this.researchers =new DomainModelConverter().fromDataModel(entity.getResearchers().stream().collect(Collectors.toList()),Researcher.class); this.version = entity.getVersion(); this.previous = entity.getPrevious(); @@ -102,18 +132,35 @@ public class DataManagementPlan implements DataModel{ this.project.fromDataModel(entity.getProject()); this.creator = new eu.eudat.models.dmp.UserInfo(); if(entity.getCreator()!=null)this.creator.fromDataModel(entity.getCreator()); + + if(entity.getAssociatedDmps()!=null&&!entity.getAssociatedDmps().isEmpty()){ + Document viewStyleDoc = XmlBuilder.fromXml(entity.getAssociatedDmps()); + Element root = (Element)viewStyleDoc.getDocumentElement(); + this.associatedProfile = new AssociatedProfiles().fromXml(root); + } + this.created = entity.getCreated(); + this.description = entity.getDescription(); } @Override public DMP toDataModel() { DMP dataManagementPlanEntity = new DMP(); dataManagementPlanEntity.setId(this.id); - dataManagementPlanEntity.setOrganisations(new HashSet(new DomainModelConverter().toDataModel(this.organizations))); + dataManagementPlanEntity.setOrganisations(new HashSet(new DomainModelConverter().toDataModel(this.organisations))); dataManagementPlanEntity.setResearchers(new HashSet(new DomainModelConverter().toDataModel(this.researchers))); dataManagementPlanEntity.setVersion(this.version); dataManagementPlanEntity.setPrevious(this.previous); dataManagementPlanEntity.setLabel(this.label); dataManagementPlanEntity.setProject(this.project.toDataModel()); + dataManagementPlanEntity.setStatus((short)this.status); + dataManagementPlanEntity.setDescription(this.description); + if(this.associatedProfile!=null) { + Document associatedProfileDoc = XmlBuilder.getDocument(); + Element associatedProfileElement = this.associatedProfile.toXml(associatedProfileDoc); + associatedProfileDoc.appendChild(associatedProfileElement); + dataManagementPlanEntity.setAssociatedDmps(XmlBuilder.generateXml(associatedProfileDoc)); + } + dataManagementPlanEntity.setCreated(this.created!=null?this.created:new Date()); return dataManagementPlanEntity; } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/dmp/Organisation.java b/dmp-backend/src/main/java/eu/eudat/models/dmp/Organisation.java index e4eb448c5..25d8d15df 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/dmp/Organisation.java +++ b/dmp-backend/src/main/java/eu/eudat/models/dmp/Organisation.java @@ -6,17 +6,17 @@ import eu.eudat.utilities.helpers.LabelGenerator; import java.util.Date; public class Organisation implements DataModel,LabelGenerator { - private String pid; + private String label; private String name; - private String uri; + private String id; private int status; - public String getPid() { - return pid; + public String getLabel() { + return label; } - public void setPid(String pid) { - this.pid = pid; + public void setLabel(String label) { + this.label = label; } public String getName() { @@ -27,27 +27,35 @@ public class Organisation implements DataModel,L this.name = name; } - public String getUri() { - return uri; + public String getId() { + return id; } - public void setUri(String uri) { - this.uri = uri; + public void setId(String id) { + this.id = id; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; } @Override public void fromDataModel(eu.eudat.entities.Organisation entity) { - this.pid = entity.getReference(); + this.id = entity.getReference(); this.name = entity.getLabel(); - this.uri = entity.getUri(); + this.label = entity.getUri(); } @Override public eu.eudat.entities.Organisation toDataModel() { eu.eudat.entities.Organisation organisationEntity = new eu.eudat.entities.Organisation(); - organisationEntity.setReference(this.pid); + organisationEntity.setReference(this.id); organisationEntity.setLabel(this.name); - organisationEntity.setUri(this.uri); + organisationEntity.setUri(this.label); organisationEntity.setCreated(new Date()); organisationEntity.setStatus((short)this.status); return organisationEntity; diff --git a/dmp-backend/src/main/java/eu/eudat/models/dmp/Researcher.java b/dmp-backend/src/main/java/eu/eudat/models/dmp/Researcher.java index 8480ec959..843a58426 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/dmp/Researcher.java +++ b/dmp-backend/src/main/java/eu/eudat/models/dmp/Researcher.java @@ -6,17 +6,17 @@ import eu.eudat.utilities.helpers.LabelGenerator; import java.util.Date; public class Researcher implements DataModel,LabelGenerator { - private String pid; + private String label; private String name; - private String uri; + private String id; private int status; - public String getPid() { - return pid; + public String getLabel() { + return label; } - public void setPid(String pid) { - this.pid = pid; + public void setLabel(String label) { + this.label = label; } public String getName() { @@ -27,12 +27,12 @@ public class Researcher implements DataModel,Label this.name = name; } - public String getUri() { - return uri; + public String getId() { + return id; } - public void setUri(String uri) { - this.uri = uri; + public void setId(String id) { + this.id = id; } public int getStatus() { @@ -45,17 +45,18 @@ public class Researcher implements DataModel,Label @Override public void fromDataModel(eu.eudat.entities.Researcher entity) { - this.pid = entity.getReference(); + this.id = entity.getReference(); + this.label = entity.getUri(); this.name = entity.getLabel(); this.status = entity.getStatus(); - this.uri = entity.getUri(); } @Override public eu.eudat.entities.Researcher toDataModel() { eu.eudat.entities.Researcher researcher = new eu.eudat.entities.Researcher(); - researcher.setReference(this.pid); + researcher.setReference(this.id); researcher.setLabel(this.name); + researcher.setUri(this.label); researcher.setCreated(new Date()); researcher.setStatus((short)this.status); return researcher; diff --git a/dmp-backend/src/main/java/eu/eudat/models/external/ExternalListingItem.java b/dmp-backend/src/main/java/eu/eudat/models/external/ExternalListingItem.java index 12cddebb4..fd87dd781 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/external/ExternalListingItem.java +++ b/dmp-backend/src/main/java/eu/eudat/models/external/ExternalListingItem.java @@ -1,18 +1,11 @@ package eu.eudat.models.external; +import java.util.ArrayList; import java.util.List; /** * Created by ikalyvas on 12/19/2017. */ -public abstract class ExternalListingItem implements ExternalItem{ - private List data; +public abstract class ExternalListingItem extends ArrayList implements ExternalItem { - public List getData() { - return data; - } - - public void setData(List data) { - this.data = data; - } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/external/OrganisationsExternalSourcesModel.java b/dmp-backend/src/main/java/eu/eudat/models/external/OrganisationsExternalSourcesModel.java index 598f558aa..bfd6f573c 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/external/OrganisationsExternalSourcesModel.java +++ b/dmp-backend/src/main/java/eu/eudat/models/external/OrganisationsExternalSourcesModel.java @@ -10,15 +10,13 @@ import java.util.Map; public class OrganisationsExternalSourcesModel extends ExternalListingItem{ @Override public OrganisationsExternalSourcesModel fromExternalItem(List> values) { - List items = new LinkedList<>(); for(Map item : values){ ExternalSourcesItemModel model = new ExternalSourcesItemModel(); model.setId(item.get("pid")); model.setLabel(item.get("uri")); model.setName(item.get("name")); - items.add(model); + this.add(model); } - this.setData(items); return this; } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/external/ProjectsExternalSourcesModel.java b/dmp-backend/src/main/java/eu/eudat/models/external/ProjectsExternalSourcesModel.java index 4af013905..a158c7787 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/external/ProjectsExternalSourcesModel.java +++ b/dmp-backend/src/main/java/eu/eudat/models/external/ProjectsExternalSourcesModel.java @@ -10,15 +10,13 @@ import java.util.Map; public class ProjectsExternalSourcesModel extends ExternalListingItem { @Override public ProjectsExternalSourcesModel fromExternalItem(List> values) { - List items = new LinkedList<>(); for(Map item : values){ ExternalSourcesItemModel model = new ExternalSourcesItemModel(); model.setId(item.get("pid")); model.setLabel(item.get("uri")); model.setName(item.get("name")); - items.add(model); + this.add(model); } - this.setData(items); return this; } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/external/RegistriesExternalSourcesModel.java b/dmp-backend/src/main/java/eu/eudat/models/external/RegistriesExternalSourcesModel.java index 1a047aaa1..9f98faedf 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/external/RegistriesExternalSourcesModel.java +++ b/dmp-backend/src/main/java/eu/eudat/models/external/RegistriesExternalSourcesModel.java @@ -10,15 +10,13 @@ import java.util.Map; public class RegistriesExternalSourcesModel extends ExternalListingItem { @Override public RegistriesExternalSourcesModel fromExternalItem(List> values) { - List items = new LinkedList<>(); for(Map item : values){ ExternalSourcesItemModel model = new ExternalSourcesItemModel(); model.setId(item.get("pid")); model.setLabel(item.get("uri")); model.setName(item.get("name")); - items.add(model); + this.add(model); } - this.setData(items); return this; } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/external/ResearchersExternalSourcesModel.java b/dmp-backend/src/main/java/eu/eudat/models/external/ResearchersExternalSourcesModel.java index 613fa3be0..e23b71713 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/external/ResearchersExternalSourcesModel.java +++ b/dmp-backend/src/main/java/eu/eudat/models/external/ResearchersExternalSourcesModel.java @@ -10,15 +10,13 @@ import java.util.Map; public class ResearchersExternalSourcesModel extends ExternalListingItem { @Override public ResearchersExternalSourcesModel fromExternalItem(List> values) { - List items = new LinkedList<>(); for(Map item : values){ ExternalSourcesItemModel model = new ExternalSourcesItemModel(); model.setId(item.get("pid")); model.setLabel(item.get("uri")); model.setName(item.get("name")); - items.add(model); + this.add(model); } - this.setData(items); return this; } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/external/ServiceExternalSourcesModel.java b/dmp-backend/src/main/java/eu/eudat/models/external/ServiceExternalSourcesModel.java index db859d801..96d52ab62 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/external/ServiceExternalSourcesModel.java +++ b/dmp-backend/src/main/java/eu/eudat/models/external/ServiceExternalSourcesModel.java @@ -10,15 +10,13 @@ import java.util.Map; public class ServiceExternalSourcesModel extends ExternalListingItem { @Override public ServiceExternalSourcesModel fromExternalItem(List> values) { - List items = new LinkedList<>(); for(Map item : values){ ExternalSourcesItemModel model = new ExternalSourcesItemModel(); model.setId(item.get("pid")); model.setLabel(item.get("label")); model.setName(item.get("name")); - items.add(model); + this.add(model); } - this.setData(items); return this; } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/listingmodels/DataManagementPlanListingModel.java b/dmp-backend/src/main/java/eu/eudat/models/listingmodels/DataManagementPlanListingModel.java index 22b7c3759..9ab64713a 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/listingmodels/DataManagementPlanListingModel.java +++ b/dmp-backend/src/main/java/eu/eudat/models/listingmodels/DataManagementPlanListingModel.java @@ -85,7 +85,7 @@ public class DataManagementPlanListingModel implements DataModel { this.id = entity.getId().toString(); this.label = entity.getLabel(); this.project = entity.getProject().getLabel(); - this.profile = entity.getProfile().getLabel(); + if(entity.getProfile()!=null)this.profile = entity.getProfile().getLabel(); this.organisations =LabelBuilder.getLabel(new DomainModelConverter().fromDataModel(entity.getOrganisations().stream().collect(Collectors.toList()),Organisation.class)); this.researchers =LabelBuilder.getLabel(new DomainModelConverter().fromDataModel(entity.getResearchers().stream().collect(Collectors.toList()),Researcher.class)); this.version = ""+entity.getVersion(); diff --git a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts index 5724eb6c2..bfa8284e2 100644 --- a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts +++ b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts @@ -87,7 +87,7 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { duration: 3000, extraClasses: ['snackbar-success'] }) - this.router.navigate(['/dataManagementPlans']); + this.router.navigate(['/dmps']); } onCallbackError(error: any) { @@ -102,7 +102,7 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { } public cancel(): void { - this.router.navigate(['/dataManagementPlans']); + this.router.navigate(['/dmps']); } filterOrganisations(value: string): void { diff --git a/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts b/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts index a41669d0c..4d8fb963f 100644 --- a/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts +++ b/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts @@ -40,13 +40,14 @@ export class DataManagementPlanModel implements Serializable