From 464610b068ff21e6535a8e43f9222b8da564e200 Mon Sep 17 00:00:00 2001 From: satyr Date: Fri, 17 Nov 2017 00:03:02 +0200 Subject: [PATCH 1/5] - --- dmp-backend/src/main/resources/dmp.properties | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 dmp-backend/src/main/resources/dmp.properties diff --git a/dmp-backend/src/main/resources/dmp.properties b/dmp-backend/src/main/resources/dmp.properties new file mode 100644 index 000000000..ddd3aa620 --- /dev/null +++ b/dmp-backend/src/main/resources/dmp.properties @@ -0,0 +1,48 @@ +##########################Security########################################## +#security.portmapping.http = 7081 +#security.portmapping.https = 7444 +##########################/Security######################################## + +##########################Persistence########################################## +persistence.jdbc.driver = org.postgresql.Driver +persistence.jdbc.url = jdbc:postgresql://HOST:PORT/DB +persistence.dbusername = USER +persistence.dbpassword = PASS +##########################/Persistence########################################## + +###################Allowed Proxy Service Host ############################ +proxy.allowed.host = https://eestore.paas2.uninett.no +####################################################### + +########################Persistence/Hibernate Generic############################# +persistence.hibernate.show_sql = false +persistence.hibernate.hbm2dll = validate +persistence.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect +#persistence.hibernate.dialect = org.hibernate.spatial.dialect.postgis.PostgisDialect +########################Persistence/Hibernate Generic############################# + + +########################Persistence/Hibernate/Batch############################## +persistence.hibernate.jdbc.batch_size = 30 +persistence.hibernate.order_inserts = true +persistence.hibernate.order_updates = true +persistence.hibernate.batch_versioned_data = true +persistence.hibernate.jdbc.batch_versioned_data = DELAYED_ACQUISITION_AND_RELEASE_AFTER_TRANSACTION +########################Persistence/Hibernate/Batch############################## + + +########################Persistence/Hibernate/Connection pool#################### +persistence.hibernate.connectionpool.provider_class = org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider +persistence.hibernate.connectionpool.c3p0.min_size = 5 +persistence.hibernate.connectionpool.c3p0.max_size = 100 +persistence.hibernate.connectionpool.c3p0.timeout = 0 +persistence.hibernate.connectionpool.c3p0.max_statements = 50 +persistence.hibernate.connectionpool.c3p0.acquire_retry_attempts = 30 +persistence.hibernate.connectionpool.c3p0.acquire_retry_delay = 1000 +persistence.hibernate.connectionpool.c3p0.idle_test_period = 3000 +persistence.hibernate.connectionpool.c3p0.break_after_acquire_failure = false +persistence.hibernate.connectionpool.c3p0.idle_connection_test_period = 3600 +persistence.hibernate.connectionpool.c3p0.test_connection_on_checkin = true +persistence.hibernate.connectionpool.c3p0.test_connection_on_checkout = false +persistence.hibernate.connectionpool.c3p0.preferred_test_query = select 1 +########################Persistence/Hibernate/Connection pool#################### \ No newline at end of file From 6b72242c2eb7dd0957d3adadb4248aa0c3075c8f Mon Sep 17 00:00:00 2001 From: Nikolaos Laskaris Date: Thu, 16 Nov 2017 23:27:23 +0100 Subject: [PATCH 2/5] added Creator column on {DMP, DATASET and PROJECT} --- dmp-db-scema/DataManagementPlanDB.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dmp-db-scema/DataManagementPlanDB.sql b/dmp-db-scema/DataManagementPlanDB.sql index 15d640f21..7b69f63c5 100644 --- a/dmp-db-scema/DataManagementPlanDB.sql +++ b/dmp-db-scema/DataManagementPlanDB.sql @@ -50,6 +50,7 @@ CREATE TABLE "DMP" ( "Version" integer NOT NULL, "Project" uuid NOT NULL, "ProfileData" xml, + "Creator" uuid not null, "Status" smallint not null default 0, "Created" timestamp not null default NOW(), "Modified" timestamp not null default NOW(), @@ -116,6 +117,7 @@ CREATE TABLE "Dataset" ( "Uri" character varying(250), "Properties" xml, "Reference" xml, + "Creator" uuid not null, "Status" smallint not null default 0, "Created" timestamp not null default NOW(), "Modified" timestamp not null default NOW(), From 67d95de255b68921006b654ecd6bc171a8e3c549 Mon Sep 17 00:00:00 2001 From: Nikolaos Laskaris Date: Fri, 17 Nov 2017 00:13:39 +0100 Subject: [PATCH 3/5] added foreign keys --- dmp-db-scema/DataManagementPlanDB.sql | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dmp-db-scema/DataManagementPlanDB.sql b/dmp-db-scema/DataManagementPlanDB.sql index 7b69f63c5..7c49dfbb8 100644 --- a/dmp-db-scema/DataManagementPlanDB.sql +++ b/dmp-db-scema/DataManagementPlanDB.sql @@ -537,6 +537,12 @@ ALTER TABLE "UserDMP" ADD CONSTRAINT fkey_userdmp_user FOREIGN KEY (usr) REFEREN ALTER TABLE "UserDMP" ADD CONSTRAINT fkey_userdmp_dmp FOREIGN KEY (dmp) REFERENCES "DMP"("ID"); +ALTER TABLE "DMP" ADD CONSTRAINT fk_dmp_creator FOREIGN KEY ("Creator") REFERENCES "UserInfo"(id); +ALTER TABLE "Dataset" ADD CONSTRAINT fk_dataset_creator FOREIGN KEY ("Creator") REFERENCES "UserInfo"(id); +ALTER TABLE "Project" ADD CONSTRAINT fk_project_creator FOREIGN KEY ("CreationUser") REFERENCES "UserInfo"(id); + + + ALTER TABLE "UserInfo" OWNER TO dmptool; ALTER TABLE "UserAuth" OWNER TO dmptool; ALTER TABLE "UserDMP" OWNER TO dmptool; From 946a626789a89aa017eb64b6d5bb9b5cae31878c Mon Sep 17 00:00:00 2001 From: satyr Date: Fri, 17 Nov 2017 02:43:16 +0200 Subject: [PATCH 4/5] - --- .../src/main/java/dao/entities/DMPDao.java | 2 +- .../main/java/dao/entities/DMPDaoImpl.java | 18 ++++++++++++++++ .../main/java/dao/entities/ProjectDao.java | 2 ++ .../java/dao/entities/ProjectDaoImpl.java | 20 ++++++++++++++++++ dmp-backend/src/main/java/entities/DMP.java | 16 +++++++++++++- .../src/main/java/entities/Dataset.java | 15 +++++++++++-- .../src/main/java/entities/Project.java | 17 ++++++++------- .../src/main/java/rest/entities/DMPs.java | 7 +++++-- .../src/main/java/rest/entities/Datasets.java | 21 +++++++++++++++++++ .../src/main/java/rest/entities/Projects.java | 14 ++++++++++++- 10 files changed, 117 insertions(+), 15 deletions(-) diff --git a/dmp-backend/src/main/java/dao/entities/DMPDao.java b/dmp-backend/src/main/java/dao/entities/DMPDao.java index 07b533143..1bc531e8b 100644 --- a/dmp-backend/src/main/java/dao/entities/DMPDao.java +++ b/dmp-backend/src/main/java/dao/entities/DMPDao.java @@ -15,6 +15,6 @@ public interface DMPDao extends Dao { List listAllIDsLabels(); - + List getDMPsOfUser(String userID); } \ No newline at end of file diff --git a/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java b/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java index 7553b7cd5..c3b1b83a7 100644 --- a/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java @@ -41,6 +41,24 @@ public class DMPDaoImpl extends JpaDao implements DMPDao { .collect(Collectors.toList()); } + @Override + public List getDMPsOfUser(String userID) { + + String queryString = "select dmp from DMP dmp where dmp.creator.id=:userid and dmp.status >= 0"; + TypedQuery typedQuery = entityManager.createQuery(queryString, DMP.class); + typedQuery.setParameter("userid", UUID.fromString(userID)); + try { + return typedQuery.getResultList(); + } + catch(Exception ex) { //no need to distinguish between exceptions for the moment + ex.printStackTrace(); + return null; + } + + + } + + } diff --git a/dmp-backend/src/main/java/dao/entities/ProjectDao.java b/dmp-backend/src/main/java/dao/entities/ProjectDao.java index 5591c76d2..376a38c0c 100644 --- a/dmp-backend/src/main/java/dao/entities/ProjectDao.java +++ b/dmp-backend/src/main/java/dao/entities/ProjectDao.java @@ -13,4 +13,6 @@ public interface ProjectDao extends Dao { public List listAllIDsLabels(); + public List getProjectsOfUser(String userID); + } \ No newline at end of file diff --git a/dmp-backend/src/main/java/dao/entities/ProjectDaoImpl.java b/dmp-backend/src/main/java/dao/entities/ProjectDaoImpl.java index 6aa4f394d..bdd2ce37c 100644 --- a/dmp-backend/src/main/java/dao/entities/ProjectDaoImpl.java +++ b/dmp-backend/src/main/java/dao/entities/ProjectDaoImpl.java @@ -9,6 +9,7 @@ import javax.persistence.TypedQuery; import org.hibernate.query.Query; import dao.JpaDao; +import entities.DMP; import entities.Project; import entities.responses.IDLabelPair; @@ -38,5 +39,24 @@ public class ProjectDaoImpl extends JpaDao implements ProjectDao .collect(Collectors.toList()); } + + public List getProjectsOfUser(String userID){ + + String queryString = "select p from Project p where p.creationUser.id=:userid and project.status >= 0"; + TypedQuery typedQuery = entityManager.createQuery(queryString, Project.class); + typedQuery.setParameter("userid", UUID.fromString(userID)); + try { + return typedQuery.getResultList(); + } + catch(Exception ex) { //no need to distinguish between exceptions for the moment + ex.printStackTrace(); + return null; + } + + } + + + + } diff --git a/dmp-backend/src/main/java/entities/DMP.java b/dmp-backend/src/main/java/entities/DMP.java index 0932e6666..561555644 100644 --- a/dmp-backend/src/main/java/entities/DMP.java +++ b/dmp-backend/src/main/java/entities/DMP.java @@ -77,6 +77,11 @@ public class DMP implements Serializable { private DMPProfile profile; + @OneToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "\"Creator\"", nullable = true) + private UserInfo creator; + + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name="\"DMPOrganisation\"", joinColumns={@JoinColumn(name="\"DMP\"", referencedColumnName="\"ID\"")}, @@ -125,7 +130,16 @@ public class DMP implements Serializable { this.description = description; } - + + public UserInfo getCreator() { + return creator; + } + + + public void setCreator(UserInfo creator) { + this.creator = creator; + } + public Short getStatus() { return status; diff --git a/dmp-backend/src/main/java/entities/Dataset.java b/dmp-backend/src/main/java/entities/Dataset.java index 71b439ad8..dd55f1457 100644 --- a/dmp-backend/src/main/java/entities/Dataset.java +++ b/dmp-backend/src/main/java/entities/Dataset.java @@ -106,6 +106,10 @@ public class Dataset implements Serializable { @Column(name = "\"Modified\"") private Date modified = new Date(); + @OneToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "\"Creator\"", nullable = true) + private UserInfo creator; + @Column(name = "\"Description\"") private String description; @@ -113,13 +117,20 @@ public class Dataset implements Serializable { public String getDescription() { return description; } - - + public void setDescription(String description) { this.description = description; } + public UserInfo getCreator() { + return creator; + } + + public void setCreator(UserInfo creator) { + this.creator = creator; + } + public Short getStatus() { return status; } diff --git a/dmp-backend/src/main/java/entities/Project.java b/dmp-backend/src/main/java/entities/Project.java index ff5bbebae..e79ce8792 100644 --- a/dmp-backend/src/main/java/entities/Project.java +++ b/dmp-backend/src/main/java/entities/Project.java @@ -80,9 +80,11 @@ public class Project implements Serializable { @Column(name = "\"Status\"", nullable = false) private Short status; - @Type(type="org.hibernate.type.PostgresUUIDType") - @Column(name = "\"CreationUser\"") - private UUID creationUser; + + @OneToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "\"CreationUser\"", nullable = true) + private UserInfo creationUser; + @Column(name = "\"Created\"") private Date created = null; @@ -210,15 +212,14 @@ public class Project implements Serializable { public void setDmps(Set dmps) { this.dmps = dmps; } - - - - public UUID getCreationUser() { + + + public UserInfo getCreationUser() { return creationUser; } - public void setCreationUser(UUID creationUser) { + public void setCreationUser(UserInfo creationUser) { this.creationUser = creationUser; } diff --git a/dmp-backend/src/main/java/rest/entities/DMPs.java b/dmp-backend/src/main/java/rest/entities/DMPs.java index f7f4abc95..0ad83aa16 100644 --- a/dmp-backend/src/main/java/rest/entities/DMPs.java +++ b/dmp-backend/src/main/java/rest/entities/DMPs.java @@ -153,7 +153,6 @@ public class DMPs { addNullAndForeignElems(previousDmp, dmp); - try { DMP updatedDMP = dMPDao.update(dmp); return ResponseEntity.status(HttpStatus.CREATED).body(SerializerProvider.toJson(updatedDMP)); @@ -233,7 +232,8 @@ public class DMPs { } try { - List nonDeleted = userInfoDao.getDmpsOfUser(userID); + //List nonDeleted = userInfoDao.getDmpsOfUser(userID); + List nonDeleted = dMPDao.getDMPsOfUser(userID); return ResponseEntity.status(HttpStatus.OK).body(SerializerProvider.toJson(nonDeleted)); } catch(Exception ex) { @@ -262,6 +262,8 @@ public class DMPs { dmp.setId(null); + dmp.setCreator(userInfo); + Set users = new HashSet(); users.add(userInfo); dmp.setUsers(users); @@ -269,6 +271,7 @@ public class DMPs { dmp.setCreated(new Date()); dmp.setModified(new Date()); dmp.setStatus(new Short("0")); + dmp.setProfileData(null); DMP newdmp = dMPDao.create(dmp); diff --git a/dmp-backend/src/main/java/rest/entities/Datasets.java b/dmp-backend/src/main/java/rest/entities/Datasets.java index 3bc26d569..c5818b6a6 100644 --- a/dmp-backend/src/main/java/rest/entities/Datasets.java +++ b/dmp-backend/src/main/java/rest/entities/Datasets.java @@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PathVariable; @@ -43,6 +44,7 @@ import dao.entities.ProjectDao; import dao.entities.RegistryDao; import dao.entities.ResearcherDao; import dao.entities.ServiceDao; +import dao.entities.UserInfoDao; import entities.DMP; import entities.DMPProfile; import entities.Dataset; @@ -51,6 +53,7 @@ import entities.DatasetProfileRuleset; import entities.DatasetProfileViewstyle; import entities.Organisation; import entities.Project; +import entities.UserInfo; import helpers.SafeCleanAttribs; import helpers.SerializerProvider; import helpers.Transformers; @@ -73,6 +76,7 @@ public class Datasets { @Autowired private RegistryDao registryDao; @Autowired private ResearcherDao researcherDao; @Autowired private ServiceDao serviceDao; + @Autowired private UserInfoDao userInfoDao; // FETCH BY DATASET(S) @@ -124,10 +128,27 @@ public class Datasets { @RequestMapping(method = RequestMethod.POST, value = { "/dataset/create" }, consumes = "application/json", produces="application/json") public @ResponseBody ResponseEntity createDataset(@RequestBody Dataset dataset) { + + + String userID = null; + try { + userID = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString(); + } catch(NullPointerException ex) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("You have not logged in. You shouldn't be here"); + } + + UserInfo userInfo = userInfoDao.read(UUID.fromString(userID)); + + if(userInfo==null) //this should normally never happer + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("There's no such a user on the system. You shouldn't be here"); + + + dataset.setId(null); dataset.setCreated(new Date()); dataset.setModified(new Date()); dataset.setStatus(new Short("0")); + dataset.setCreator(userInfo); try { dataset = datasetDao.create(dataset); return ResponseEntity.status(HttpStatus.CREATED).body(SerializerProvider.toJson(dataset)); diff --git a/dmp-backend/src/main/java/rest/entities/Projects.java b/dmp-backend/src/main/java/rest/entities/Projects.java index 2679270ba..80bec6518 100644 --- a/dmp-backend/src/main/java/rest/entities/Projects.java +++ b/dmp-backend/src/main/java/rest/entities/Projects.java @@ -219,6 +219,17 @@ public class Projects { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("There's no such a user on the system. You shouldn't be here"); + try { + List userProjects = projectDao.getProjectsOfUser(userID); + return ResponseEntity.status(HttpStatus.OK).body(SerializerProvider.toJson(userProjects)); + } + catch(Exception ex) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); + } + + + /* + * OLD ONE Map userProjects = new HashMap(); userInfo.getDmps().forEach( dmp -> { @@ -232,6 +243,7 @@ public class Projects { catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); } + */ } @@ -257,7 +269,7 @@ public class Projects { project.setId(null); project.setStatus(new Short("0")); - project.setCreationUser(userInfo.getId()); + project.setCreationUser(userInfo); project.setCreated(new Date()); project.setModified(new Date()); From c2fc7a6fe8de37ccaadd667304f6235efc957b2b Mon Sep 17 00:00:00 2001 From: satyr Date: Fri, 17 Nov 2017 02:48:09 +0200 Subject: [PATCH 5/5] - --- dmp-backend/src/main/java/rest/entities/DMPs.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dmp-backend/src/main/java/rest/entities/DMPs.java b/dmp-backend/src/main/java/rest/entities/DMPs.java index 0ad83aa16..254dbf304 100644 --- a/dmp-backend/src/main/java/rest/entities/DMPs.java +++ b/dmp-backend/src/main/java/rest/entities/DMPs.java @@ -271,7 +271,6 @@ public class DMPs { dmp.setCreated(new Date()); dmp.setModified(new Date()); dmp.setStatus(new Short("0")); - dmp.setProfileData(null); DMP newdmp = dMPDao.create(dmp);