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/dao/entities/UserInfoDao.java b/dmp-backend/src/main/java/dao/entities/UserInfoDao.java index d97fbbb38..29ee3d138 100644 --- a/dmp-backend/src/main/java/dao/entities/UserInfoDao.java +++ b/dmp-backend/src/main/java/dao/entities/UserInfoDao.java @@ -1,13 +1,17 @@ package dao.entities; +import java.util.List; import java.util.UUID; import dao.Dao; +import entities.DMP; import entities.UserInfo; public interface UserInfoDao extends Dao { - public UserInfo getByIdAndMail(String identification, String email); + public UserInfo getUserInfo(String userID); + + public UserInfo getByIdAndMail(String id, String email); public UserInfo getByMail(String email); @@ -15,4 +19,6 @@ public interface UserInfoDao extends Dao { public UserInfo getByUsername(String username); + public List getDmpsOfUser(String userID); + } \ No newline at end of file diff --git a/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java b/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java index 6a1a76b17..305bbde6c 100644 --- a/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java +++ b/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java @@ -1,12 +1,14 @@ package dao.entities; import java.util.List; +import java.util.Set; import java.util.UUID; import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import dao.JpaDao; +import entities.DMP; import entities.UserInfo; import entities.security.UserAuth; @@ -21,10 +23,25 @@ public class UserInfoDaoImpl extends JpaDao implements UserInfoD @Override - public UserInfo getByIdAndMail(String identification, String email) { - String queryString = "FROM UserInfo userInfo where userInfo.identification = :userInfoID and userInfo.email = :userInfoEmail"; + public UserInfo getUserInfo(String userID) { + String queryString = "FROM UserInfo userInfo where userInfo.id = :userInfoID"; TypedQuery typedQuery = entityManager.createQuery(queryString, UserInfo.class); - typedQuery.setParameter("userInfoID", identification); + typedQuery.setParameter("userInfoID", UUID.fromString(userID)); + try { + return typedQuery.getSingleResult(); + } + catch(NoResultException ex) { + return null; + } + } + + + + @Override + public UserInfo getByIdAndMail(String id, String email) { + String queryString = "FROM UserInfo userInfo where userInfo.id = :userInfoID and userInfo.email = :userInfoEmail"; + TypedQuery typedQuery = entityManager.createQuery(queryString, UserInfo.class); + typedQuery.setParameter("userInfoID", UUID.fromString(id)); typedQuery.setParameter("userInfoEmail", email); try { return typedQuery.getSingleResult(); @@ -80,6 +97,23 @@ public class UserInfoDaoImpl extends JpaDao implements UserInfoD } } + @Override + public List getDmpsOfUser(String userID) { + + String queryString = "select dmp from DMP dmp join dmp.users user where user.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/entities/DMP.java b/dmp-backend/src/main/java/entities/DMP.java index 9e56fcb5e..2193361e1 100644 --- a/dmp-backend/src/main/java/entities/DMP.java +++ b/dmp-backend/src/main/java/entities/DMP.java @@ -36,7 +36,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; @Entity @Table(name="\"DMP\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope = DMP.class) public class DMP implements Serializable { @@ -77,6 +77,11 @@ public class DMP implements Serializable { private DMPProfile profile; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "\"Creator\"") + 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..b20c4f7c6 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(); + @ManyToOne(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 90919e81f..c1092ce10 100644 --- a/dmp-backend/src/main/java/entities/Project.java +++ b/dmp-backend/src/main/java/entities/Project.java @@ -14,6 +14,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; +import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; @@ -81,6 +82,11 @@ public class Project implements Serializable { private Short status; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "\"CreationUser\"", nullable = true) + private UserInfo creationUser; + + @Column(name = "\"Created\"") private Date created = null; @@ -207,10 +213,19 @@ public class Project implements Serializable { public void setDmps(Set dmps) { this.dmps = dmps; } - - - - public String toString() { + + + public UserInfo getCreationUser() { + return creationUser; + } + + + public void setCreationUser(UserInfo creationUser) { + this.creationUser = creationUser; + } + + + public String toString() { try { return new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(this).replace("\"", """); } catch (JsonProcessingException e) { diff --git a/dmp-backend/src/main/java/entities/UserInfo.java b/dmp-backend/src/main/java/entities/UserInfo.java index 8b107660f..3910d160e 100644 --- a/dmp-backend/src/main/java/entities/UserInfo.java +++ b/dmp-backend/src/main/java/entities/UserInfo.java @@ -85,10 +85,11 @@ public class UserInfo implements Serializable{ private Set dmps; - + /* public Set getDmpsNonDeleted(){ return getDmps().parallelStream().filter(dmp -> dmp.getStatus()>=0).collect(Collectors.toSet()); } + */ public Set getDmps() { return dmps; diff --git a/dmp-backend/src/main/java/helpers/SafeCleanAttribs.java b/dmp-backend/src/main/java/helpers/SafeCleanAttribs.java index 929a96df3..617a23c3b 100644 --- a/dmp-backend/src/main/java/helpers/SafeCleanAttribs.java +++ b/dmp-backend/src/main/java/helpers/SafeCleanAttribs.java @@ -13,6 +13,7 @@ public class SafeCleanAttribs { newdmp.setId(dmp.getId()); dataset.setDmp(newdmp); } + } } diff --git a/dmp-backend/src/main/java/rest/entities/DMPs.java b/dmp-backend/src/main/java/rest/entities/DMPs.java index 0d594172d..254dbf304 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)); @@ -232,13 +231,9 @@ public class DMPs { 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"); - try { - Set nonDeleted = userInfo.getDmpsNonDeleted(); + //List nonDeleted = userInfoDao.getDmpsOfUser(userID); + List nonDeleted = dMPDao.getDMPsOfUser(userID); return ResponseEntity.status(HttpStatus.OK).body(SerializerProvider.toJson(nonDeleted)); } catch(Exception ex) { @@ -267,6 +262,8 @@ public class DMPs { dmp.setId(null); + dmp.setCreator(userInfo); + Set users = new HashSet(); users.add(userInfo); dmp.setUsers(users); diff --git a/dmp-backend/src/main/java/rest/entities/Datasets.java b/dmp-backend/src/main/java/rest/entities/Datasets.java index 3bc26d569..b50fa2cf9 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,15 +128,36 @@ 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); + if("".equals(dataset.getReference())) dataset.setReference(null); + if("".equals(dataset.getProperties())) dataset.setProperties(null); + try { dataset = datasetDao.create(dataset); return ResponseEntity.status(HttpStatus.CREATED).body(SerializerProvider.toJson(dataset)); } catch(Exception e) { + e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Could not create or update Dataset! Reason: " + e.getMessage()); } @@ -151,6 +176,9 @@ public class Datasets { SafeCleanAttribs.clean(dataset); + if("".equals(dataset.getReference())) dataset.setReference(null); + if("".equals(dataset.getProperties())) dataset.setProperties(null); + try { dataset = datasetDao.update(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 2990c5d2b..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,24 +269,25 @@ public class Projects { project.setId(null); project.setStatus(new Short("0")); + project.setCreationUser(userInfo); project.setCreated(new Date()); project.setModified(new Date()); Project newproj = projectDao.create(project); - DMP newdmp = new DMP(); - newdmp.setId(null); - newdmp.setLabel("Auto-Generated"); - newdmp.setCreated(new Date()); - newdmp.setVersion(1); - newdmp.setStatus(new Short("0")); - newdmp.setProject(newproj); - - Set users = new HashSet(); - users.add(userInfo); - newdmp.setUsers(users); - - newdmp = dMPDao.create(newdmp); +// DMP newdmp = new DMP(); +// newdmp.setId(null); +// newdmp.setLabel("Auto-Generated"); +// newdmp.setCreated(new Date()); +// newdmp.setVersion(1); +// newdmp.setStatus(new Short("0")); +// newdmp.setProject(newproj); +// +// Set users = new HashSet(); +// users.add(userInfo); +// newdmp.setUsers(users); +// +// newdmp = dMPDao.create(newdmp); return ResponseEntity.status(HttpStatus.OK).body(SerializerProvider.toJson(newproj)); } diff --git a/dmp-backend/src/main/java/rest/entities/Users.java b/dmp-backend/src/main/java/rest/entities/Users.java index 0a611c286..1424d5086 100644 --- a/dmp-backend/src/main/java/rest/entities/Users.java +++ b/dmp-backend/src/main/java/rest/entities/Users.java @@ -11,6 +11,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; @@ -36,6 +37,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.DataRepository; @@ -47,6 +49,7 @@ import entities.Project; import entities.Registry; import entities.Researcher; import entities.Service; +import entities.UserInfo; import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -68,6 +71,38 @@ public class Users { @Autowired private RegistryDao registryDao; @Autowired private ResearcherDao researcherDao; @Autowired private ServiceDao serviceDao; + @Autowired private UserInfoDao userInfoDao; + + + + @RequestMapping(method = RequestMethod.GET, value = { "/user/whoami" }, produces="application/json;charset=UTF-8") + public @ResponseBody ResponseEntity whoami(){ + + + 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.getUserInfo(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"); + + + try { + + return new ResponseEntity(SerializerProvider.toJson(userInfo), HttpStatus.OK); + } + catch(Exception ex) { + ex.printStackTrace(); + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + } + } + 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 diff --git a/dmp-backend/src/main/webapp/WEB-INF/web.xml b/dmp-backend/src/main/webapp/WEB-INF/web.xml index 6de4a1563..8cc95c48c 100644 --- a/dmp-backend/src/main/webapp/WEB-INF/web.xml +++ b/dmp-backend/src/main/webapp/WEB-INF/web.xml @@ -65,16 +65,16 @@ - - contextConfigLocation - /WEB-INF/applicationContext.xml,/WEB-INF/spring-security.xml - - - - 30 - + + + contextConfigLocation + /WEB-INF/applicationContext.xml,/WEB-INF/spring-security.xml + + + + 30 + - springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy @@ -85,6 +85,23 @@ + + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + encodingFilter + /* + \ No newline at end of file diff --git a/dmp-backend/src/test/java/TestRest.java b/dmp-backend/src/test/java/TestRest.java index 9b9701dc7..b2fbcefaa 100644 --- a/dmp-backend/src/test/java/TestRest.java +++ b/dmp-backend/src/test/java/TestRest.java @@ -3,6 +3,7 @@ import static org.junit.Assert.*; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.UUID; import org.junit.Before; @@ -17,6 +18,7 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.CollectionType; import com.fasterxml.jackson.databind.type.TypeFactory; @@ -201,7 +203,7 @@ public class TestRest { } - @Test + //@Test public void testDmpClone() { System.out.println(dmpsService.getDmpsOfUser().getBody()); @@ -266,5 +268,40 @@ public class TestRest { } + @Test + public void testProject2() { + + +// String a = null; +// try { +// //a = (String)dmpsService.getDmpsOfUser().getBody(); +// +// Set dmps = new ObjectMapper().readValue(dmpsService.getDmpsOfUser().getBody().toString(), new TypeReference>(){}); +// System.out.println(dmps); +// +//// Set dmps = SerializerProvider.fromJson((String)dmpsService.getDmpsOfUser().getBody(), new TypeReference>(){}); +// } catch (Exception e) { +// +// e.printStackTrace(); +// } + + + CollectionType typeReference = TypeFactory.defaultInstance().constructCollectionType(List.class, DMP.class); + List dmps = null; + try { + dmps = SerializerProvider.fromJson(dmpsService.getDmpsOfUser().getBody().toString(), typeReference) ; + System.out.println(dmps); + } catch (Exception e) { + e.printStackTrace(); + fail("Should not have thrown any exception"); + } + + + assertEquals("aaa", "aaa"); + + } + + + } diff --git a/dmp-db-scema/DataManagementPlanDB.sql b/dmp-db-scema/DataManagementPlanDB.sql index 8d0ce0a6c..7c49dfbb8 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(), @@ -214,6 +216,7 @@ CREATE TABLE "Project" ( "Abbreviation" character varying(50), "Reference" xml, "Uri" character varying(250), + "CreationUser" uuid not null, "Status" smallint not null default 0, "Created" timestamp not null default NOW(), "Modified" timestamp not null default NOW(), @@ -534,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; diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index 1a43546f1..ff0a98692 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { PageNotFoundComponent } from './not-found.component'; -import { EmptyComponent } from './empty.component'; +import { HomepageComponent } from './homepage/homepage.component'; import { DynamicFormComponent } from './form/dynamic-form.component'; import { AuthGuard } from './guards/auth.guard'; import { ProjectsComponent } from './projects/projects.component'; @@ -10,6 +10,8 @@ import { DmpComponent } from './dmps/dmp.component'; import { AppComponent } from './app.component'; import { UserWorkspaceComponent } from './user-workspace/user-workspace.component'; import { MainSignInComponent } from './login/main-sign-in/main-sign-in.component'; +import { DmpDetailedComponent } from './viewers/dmp-detailed/dmp-detailed.component'; + const appRoutes: Routes = [ //{ path: 'dynamic-form/:id', component: DynamicFormComponent, canActivate: [AuthGuard] }, @@ -18,8 +20,9 @@ const appRoutes: Routes = [ { path: 'login', component: MainSignInComponent}, { path: 'projects', component: ProjectsComponent}, { path: 'dmps', component: DmpComponent}, + { path: 'dmp', component: DmpDetailedComponent }, { path: 'workspace', component: UserWorkspaceComponent}, - { path: 'welcome', component: EmptyComponent}, + { path: 'welcome', component: HomepageComponent}, { path: '', redirectTo: '/login', pathMatch: 'full' }, { path: '**', component: PageNotFoundComponent }, /* diff --git a/dmp-frontend/src/app/app.component.html b/dmp-frontend/src/app/app.component.html index 4ee6d4ad0..d74ab8bae 100644 --- a/dmp-frontend/src/app/app.component.html +++ b/dmp-frontend/src/app/app.component.html @@ -22,7 +22,7 @@ diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index 182a7ba77..5305ecb6f 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -22,7 +22,7 @@ import { DynamicFormGroupComponent } from './form/dynamic-form-group/dynamic-for import { AppRoutingModule } from './app-routing.module'; import { AuthGuard } from './guards/auth.guard'; import { PageNotFoundComponent } from './not-found.component'; -import { EmptyComponent } from './empty.component'; +import { HomepageComponent } from './homepage/homepage.component'; import { TocComponent } from './form/tableOfContents/toc.component'; import { ConfirmationComponent } from './widgets/confirmation/confirmation.component'; @@ -70,6 +70,7 @@ import { AutocompleteRemoteComponent } from './form/fields/autocomplete-remote/a import { Ng4LoadingSpinnerModule } from 'ng4-loading-spinner'; import { BreadcrumbComponent } from './widgets/breadcrumb/breadcrumb.component'; +import { DmpDetailedComponent } from './viewers/dmp-detailed/dmp-detailed.component'; @@ -84,7 +85,7 @@ import { BreadcrumbComponent } from './widgets/breadcrumb/breadcrumb.component'; GooggleSignInComponent, MainSignInComponent, PageNotFoundComponent, - EmptyComponent, + HomepageComponent, ModalComponent, ProjectDetailComponent, ProjectsComponent, @@ -101,7 +102,7 @@ import { BreadcrumbComponent } from './widgets/breadcrumb/breadcrumb.component'; DatasetTableFilterPipe, DatasetStatusFilterPipe, StatusToString, - BreadcrumbComponent + BreadcrumbComponent, DmpDetailedComponent ], imports: [ BrowserModule, diff --git a/dmp-frontend/src/app/datasets/dataset.component.css b/dmp-frontend/src/app/datasets/dataset.component.css index 2279ed4e1..44ba4eb62 100644 --- a/dmp-frontend/src/app/datasets/dataset.component.css +++ b/dmp-frontend/src/app/datasets/dataset.component.css @@ -40,4 +40,8 @@ tr.hover:hover > * { .cursor-hand{ cursor: pointer; +} + +.hidden-keepspace{ + visibility: hidden; } \ No newline at end of file diff --git a/dmp-frontend/src/app/datasets/dataset.component.ts b/dmp-frontend/src/app/datasets/dataset.component.ts index fd8746660..202fc9f0a 100644 --- a/dmp-frontend/src/app/datasets/dataset.component.ts +++ b/dmp-frontend/src/app/datasets/dataset.component.ts @@ -60,6 +60,8 @@ export class DatasetsComponent implements OnInit { dataSetValue: boolean = true; + uriRegex = "/^([a-z0-9+.-]+):(?://(?:((?:[a-z0-9-._~!$&'()*+,;=:]|%[0-9A-F]{2})*)@)?((?:[a-z0-9-._~!$&'()*+,;=]|%[0-9A-F]{2})*)(?::(\d*))?(/(?:[a-z0-9-._~!$&'()*+,;=:@/]|%[0-9A-F]{2})*)?|(/?(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})+(?:[a-z0-9-._~!$&'()*+,;=:@/]|%[0-9A-F]{2})*)?)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:/?@]|%[0-9A-F]{2})*))?$/i"; + constructor( @@ -140,8 +142,11 @@ export class DatasetsComponent implements OnInit { } else{ - this.dataset.dmp = { "id": this.dmpIdforDatasets } - this.dataset.profile = { "id": this.dataset.profile } + + this.dataset.dmp = { "id": this.dmpIdforDatasets }; + this.dataset.profile = { "id": this.dataset.profile }; + this.dataset.creator = {"id" : this.dataset.creator }; + this.serverService.updateDatsetsProfile(this.dataset).subscribe( response => { simple_notifier("success",null,"Dataset edited"); @@ -203,6 +208,7 @@ export class DatasetsComponent implements OnInit { //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"); } else if(event.toElement.id == "describeDataset"){ @@ -245,7 +251,13 @@ export class DatasetsComponent implements OnInit { this.getDatasets(); }, err => { - simple_notifier("danger",null,"Could not delete the dataset"); + + if(err.status>=200 && err.status<300) + simple_notifier("success",null,"Deleted dataset"); + else + simple_notifier("danger",null,"Could not delete the dataset"); + this.getDatasets(); + } ); } diff --git a/dmp-frontend/src/app/datasets/dataset.html b/dmp-frontend/src/app/datasets/dataset.html index 4211506fe..ff2f5c9d8 100644 --- a/dmp-frontend/src/app/datasets/dataset.html +++ b/dmp-frontend/src/app/datasets/dataset.html @@ -55,14 +55,14 @@ {{dataset.id}} - {{dataset?.label}} - {{dataset?.uri}} - {{dataset?.profile?.label}} - {{dataset?.description}} + {{(dataset?.label?.length > 80) ? (dataset?.label | slice:0:80)+'...':(dataset?.label) }} + {{(dataset?.uri?.length > 40) ? (dataset?.uri | slice:0:40)+'...':(dataset?.uri) }} + {{(dataset?.profile?.label?.length > 40) ? (dataset?.profile?.label | slice:0:40)+'...':(dataset?.profile?.label) }} + {{(dataset?.description?.length > 40) ? (dataset?.description | slice:0:40)+'...':(dataset?.description) }} {{dataset?.created | date:'yyyy-MM-dd HH:mm:ss Z'}} {{dataset?.status | statusToString }} - + @@ -87,31 +87,26 @@