From 38676904c890f0126e4195936106f2f719ad023b Mon Sep 17 00:00:00 2001 From: Nikolaos Laskaris Date: Fri, 20 Oct 2017 18:11:40 +0300 Subject: [PATCH] Changed {lazy/eager} annotations of hibernate fetching... --- dmp-backend/pom.xml | 7 ++ .../src/main/java/dao/entities/DMPDao.java | 3 + .../main/java/dao/entities/DMPDaoImpl.java | 18 ++++ dmp-backend/src/main/java/entities/DMP.java | 30 ++++--- .../main/java/entities/DMPOrganisation.java | 7 +- .../src/main/java/entities/DMPProfile.java | 9 +- .../src/main/java/entities/DMPResearcher.java | 7 +- .../main/java/entities/DataRepository.java | 7 +- .../src/main/java/entities/Dataset.java | 13 ++- .../java/entities/DatasetDataRepository.java | 7 +- .../main/java/entities/DatasetProfile.java | 24 ++++-- .../java/entities/DatasetProfileRuleset.java | 7 +- .../entities/DatasetProfileViewstyle.java | 7 +- .../main/java/entities/DatasetRegistry.java | 7 +- .../main/java/entities/DatasetService.java | 7 +- .../src/main/java/entities/Organisation.java | 9 +- .../src/main/java/entities/Project.java | 28 ++++--- .../src/main/java/entities/Registry.java | 9 +- .../src/main/java/entities/Researcher.java | 9 +- .../src/main/java/entities/Service.java | 7 +- .../src/main/java/entities/UserDMP.java | 8 +- .../src/main/java/entities/UserInfo.java | 9 +- .../main/java/entities/security/UserAuth.java | 9 ++ .../main/java/helpers/SerializerProvider.java | 22 +++++ .../src/main/java/helpers/Transformers.java | 6 +- .../src/main/java/rest/entities/DMPs.java | 60 +++++++++++--- .../java/rest/entities/DataRepositories.java | 7 +- .../src/main/java/rest/entities/Datasets.java | 17 ++-- .../main/java/rest/entities/DmpProfiles.java | 9 +- .../java/rest/entities/Organisations.java | 7 +- .../src/main/java/rest/entities/Projects.java | 15 +++- .../main/java/rest/entities/Registries.java | 7 +- .../main/java/rest/entities/Researchers.java | 9 +- .../src/main/java/rest/entities/Services.java | 3 +- .../src/main/java/rest/entities/Users.java | 83 +++++++++++++++++++ .../CustomAuthenticationProvider.java | 6 +- .../webapp/WEB-INF/applicationContext.xml | 2 + dmp-backend/src/main/webapp/WEB-INF/web.xml | 20 ++--- 38 files changed, 415 insertions(+), 106 deletions(-) create mode 100644 dmp-backend/src/main/java/helpers/SerializerProvider.java create mode 100644 dmp-backend/src/main/java/rest/entities/Users.java diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index 3e790fb93..324adee61 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -142,6 +142,13 @@ 2.8.4 + + com.fasterxml.jackson.datatype + jackson-datatype-hibernate5 + 2.8.4 + + + diff --git a/dmp-backend/src/main/java/dao/entities/DMPDao.java b/dmp-backend/src/main/java/dao/entities/DMPDao.java index 45012ea39..d4223aadf 100644 --- a/dmp-backend/src/main/java/dao/entities/DMPDao.java +++ b/dmp-backend/src/main/java/dao/entities/DMPDao.java @@ -14,6 +14,9 @@ public interface DMPDao extends Dao { List listAllIDsLabels(); + List listUserDMPs(String username); + + // public boolean createFromForm(); diff --git a/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java b/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java index d00fa59f4..07e5f6e7a 100644 --- a/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/src/main/java/dao/entities/DMPDaoImpl.java @@ -11,6 +11,7 @@ import org.hibernate.query.Query; import dao.JpaDao; import entities.DMP; +import entities.UserInfo; import entities.responses.IDLabelPair; public class DMPDaoImpl extends JpaDao implements DMPDao { @@ -39,6 +40,23 @@ public class DMPDaoImpl extends JpaDao implements DMPDao { .collect(Collectors.toList()); } + @Override + public List listUserDMPs(String username) { + +// String queryString = "select ui from UserInfo ui join UserAuth ui.authentication ua where ua.username=:username"; + + +// TypedQuery typedQuery = entityManager.createQuery(queryString, UserInfo.class); +// typedQuery.setParameter("username", username); + + return null; + } + + + + + + // @Override // public boolean createFromForm(Map keyVals) { // String query = "insert into DMP () values" diff --git a/dmp-backend/src/main/java/entities/DMP.java b/dmp-backend/src/main/java/entities/DMP.java index ed5bf9f60..52216d150 100644 --- a/dmp-backend/src/main/java/entities/DMP.java +++ b/dmp-backend/src/main/java/entities/DMP.java @@ -20,10 +20,14 @@ import javax.persistence.Table; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; @@ -31,14 +35,15 @@ import com.fasterxml.jackson.databind.SerializationFeature; @Entity @Table(name="\"DMP\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DMP implements Serializable { private static final long serialVersionUID = -8263056535208547615L; - @Id @GeneratedValue @GenericGenerator(name = "uuid2", strategy = "uuid2") @@ -55,10 +60,11 @@ public class DMP implements Serializable { @Column(name = "\"Version\"") private Integer version; - @OneToOne(mappedBy = "dmp", fetch = FetchType.EAGER) - private Dataset dataset; + @OneToMany(mappedBy = "dmp", fetch = FetchType.LAZY) + private Set dataset; - @OneToOne(fetch = FetchType.EAGER) + + @ManyToOne() @JoinColumn(name = "\"Project\"") private Project project; @@ -67,12 +73,12 @@ public class DMP implements Serializable { @Column(name = "\"ProfileData\"", columnDefinition = "xml", nullable = true) private String profileData; - @OneToOne(fetch = FetchType.EAGER) + @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "\"Profile\"") private DMPProfile profile; - @OneToMany(fetch = FetchType.EAGER) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name="\"DMPOrganisation\"", joinColumns={@JoinColumn(name="\"DMP\"", referencedColumnName="\"ID\"")}, inverseJoinColumns={@JoinColumn(name="\"Organisation\"", referencedColumnName="\"ID\"")} @@ -80,7 +86,7 @@ public class DMP implements Serializable { private Set organisations; - @OneToMany(fetch = FetchType.EAGER) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name="\"DMPResearcher\"", joinColumns={@JoinColumn(name="\"DMP\"", referencedColumnName="\"ID\"")}, inverseJoinColumns={@JoinColumn(name="\"Researcher\"", referencedColumnName="\"ID\"")} @@ -88,7 +94,7 @@ public class DMP implements Serializable { private Set researchers; - @OneToMany(fetch = FetchType.EAGER) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name="\"UserDMP\"", joinColumns={@JoinColumn(name="dmp", referencedColumnName="\"ID\"")}, inverseJoinColumns={@JoinColumn(name="usr", referencedColumnName="id")} @@ -161,14 +167,14 @@ public class DMP implements Serializable { this.profile = profile; } - public Dataset getDataset() { + public Set getDataset() { return dataset; } - public void setDataset(Dataset dataset) { + public void setDataset(Set dataset) { this.dataset = dataset; } - + public Set getOrganisations() { return organisations; } diff --git a/dmp-backend/src/main/java/entities/DMPOrganisation.java b/dmp-backend/src/main/java/entities/DMPOrganisation.java index 24c57c880..5b3d7d69d 100644 --- a/dmp-backend/src/main/java/entities/DMPOrganisation.java +++ b/dmp-backend/src/main/java/entities/DMPOrganisation.java @@ -11,15 +11,20 @@ import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DMPOrganisation\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DMPOrganisation implements Serializable { diff --git a/dmp-backend/src/main/java/entities/DMPProfile.java b/dmp-backend/src/main/java/entities/DMPProfile.java index c45dcf38f..fdf8354fc 100644 --- a/dmp-backend/src/main/java/entities/DMPProfile.java +++ b/dmp-backend/src/main/java/entities/DMPProfile.java @@ -14,15 +14,20 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DMPProfile\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DMPProfile implements Serializable { private static final long serialVersionUID = 3213099144442689808L; @@ -37,7 +42,7 @@ public class DMPProfile implements Serializable { private UUID id; - @OneToOne(fetch = FetchType.EAGER, mappedBy = "profile") + @OneToOne(fetch = FetchType.LAZY, mappedBy = "profile") private DMP dmp; diff --git a/dmp-backend/src/main/java/entities/DMPResearcher.java b/dmp-backend/src/main/java/entities/DMPResearcher.java index 0973b9ba2..5d17ee075 100644 --- a/dmp-backend/src/main/java/entities/DMPResearcher.java +++ b/dmp-backend/src/main/java/entities/DMPResearcher.java @@ -11,15 +11,20 @@ import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DMPResearcher\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DMPResearcher implements Serializable { private static final long serialVersionUID = 135449857355252959L; diff --git a/dmp-backend/src/main/java/entities/DataRepository.java b/dmp-backend/src/main/java/entities/DataRepository.java index f1ca03ec8..4213b18ae 100644 --- a/dmp-backend/src/main/java/entities/DataRepository.java +++ b/dmp-backend/src/main/java/entities/DataRepository.java @@ -18,14 +18,19 @@ import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DataRepository\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DataRepository implements Serializable { diff --git a/dmp-backend/src/main/java/entities/Dataset.java b/dmp-backend/src/main/java/entities/Dataset.java index 132e1bc51..421bcce5d 100644 --- a/dmp-backend/src/main/java/entities/Dataset.java +++ b/dmp-backend/src/main/java/entities/Dataset.java @@ -13,20 +13,26 @@ 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; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity(name = "Dataset") @Table(name="\"Dataset\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class Dataset implements Serializable { private static final long serialVersionUID = 3575723814399553259L; @@ -44,7 +50,7 @@ public class Dataset implements Serializable { private String label; - @OneToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.EAGER) // @Cascade(value=org.hibernate.annotations.CascadeType.ALL) @JoinColumn(name = "\"DMP\"", nullable = true) private DMP dmp; @@ -58,12 +64,13 @@ public class Dataset implements Serializable { private String properties; - @OneToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.EAGER) //@Cascade(value=org.hibernate.annotations.CascadeType.ALL) @JoinColumn(name = "\"Profile\"", nullable = true) private DatasetProfile profile; + @OneToMany(fetch = FetchType.EAGER) @JoinTable(name="\"DatasetDataRepository\"", joinColumns={@JoinColumn(name="\"Dataset\"", referencedColumnName="\"ID\"")}, diff --git a/dmp-backend/src/main/java/entities/DatasetDataRepository.java b/dmp-backend/src/main/java/entities/DatasetDataRepository.java index a72b2864b..d625471d4 100644 --- a/dmp-backend/src/main/java/entities/DatasetDataRepository.java +++ b/dmp-backend/src/main/java/entities/DatasetDataRepository.java @@ -11,15 +11,20 @@ import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DatasetDataRepository\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DatasetDataRepository implements Serializable { diff --git a/dmp-backend/src/main/java/entities/DatasetProfile.java b/dmp-backend/src/main/java/entities/DatasetProfile.java index 016ac1633..44db91616 100644 --- a/dmp-backend/src/main/java/entities/DatasetProfile.java +++ b/dmp-backend/src/main/java/entities/DatasetProfile.java @@ -2,6 +2,7 @@ package entities; import java.io.Serializable; +import java.util.Set; import java.util.UUID; import javax.persistence.CascadeType; @@ -11,6 +12,7 @@ import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; @@ -20,13 +22,16 @@ import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DatasetProfile\"") -//@Proxy(lazy = false) -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DatasetProfile implements Serializable { @@ -44,8 +49,13 @@ public class DatasetProfile implements Serializable { @Column(name = "\"Label\"") private String label; - @OneToOne(fetch = FetchType.EAGER, mappedBy = "profile") - private Dataset dataset; +// @OneToOne(fetch = FetchType.EAGER, mappedBy = "profile") +// private Dataset dataset; + + @OneToMany(fetch = FetchType.EAGER, mappedBy = "profile") + private Set dataset; + + @OneToOne(fetch = FetchType.EAGER) // @Cascade(value=org.hibernate.annotations.CascadeType.ALL) @@ -105,11 +115,13 @@ public class DatasetProfile implements Serializable { this.definition = definition; } - public Dataset getDataset() { + + + public Set getDataset() { return dataset; } - public void setDataset(Dataset dataset) { + public void setDataset(Set dataset) { this.dataset = dataset; } diff --git a/dmp-backend/src/main/java/entities/DatasetProfileRuleset.java b/dmp-backend/src/main/java/entities/DatasetProfileRuleset.java index a87db74db..40be7b1ba 100644 --- a/dmp-backend/src/main/java/entities/DatasetProfileRuleset.java +++ b/dmp-backend/src/main/java/entities/DatasetProfileRuleset.java @@ -14,17 +14,22 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import org.json.JSONObject; import org.json.XML; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DatasetProfileRuleset\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DatasetProfileRuleset implements Serializable { private static final long serialVersionUID = 4249565129050898613L; diff --git a/dmp-backend/src/main/java/entities/DatasetProfileViewstyle.java b/dmp-backend/src/main/java/entities/DatasetProfileViewstyle.java index c4abd72d0..64011c2fc 100644 --- a/dmp-backend/src/main/java/entities/DatasetProfileViewstyle.java +++ b/dmp-backend/src/main/java/entities/DatasetProfileViewstyle.java @@ -14,16 +14,21 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import org.json.XML; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DatasetProfileViewstyle\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DatasetProfileViewstyle implements Serializable { private static final long serialVersionUID = -3251295258160291468L; diff --git a/dmp-backend/src/main/java/entities/DatasetRegistry.java b/dmp-backend/src/main/java/entities/DatasetRegistry.java index 58209c03e..58ba36446 100644 --- a/dmp-backend/src/main/java/entities/DatasetRegistry.java +++ b/dmp-backend/src/main/java/entities/DatasetRegistry.java @@ -11,15 +11,20 @@ import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DatasetRegistry\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DatasetRegistry implements Serializable { private static final long serialVersionUID = -5594183793725819187L; diff --git a/dmp-backend/src/main/java/entities/DatasetService.java b/dmp-backend/src/main/java/entities/DatasetService.java index c6c133500..f3ffd3fb1 100644 --- a/dmp-backend/src/main/java/entities/DatasetService.java +++ b/dmp-backend/src/main/java/entities/DatasetService.java @@ -11,15 +11,20 @@ import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"DatasetService\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class DatasetService implements Serializable { private static final long serialVersionUID = 1469161193939096037L; diff --git a/dmp-backend/src/main/java/entities/Organisation.java b/dmp-backend/src/main/java/entities/Organisation.java index f046046e1..a720e32f2 100644 --- a/dmp-backend/src/main/java/entities/Organisation.java +++ b/dmp-backend/src/main/java/entities/Organisation.java @@ -17,15 +17,20 @@ import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"Organisation\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class Organisation implements Serializable { @@ -58,7 +63,7 @@ public class Organisation implements Serializable { private String definition; - @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name="\"DMPOrganisation\"", joinColumns={@JoinColumn(name="\"Organisation\"", referencedColumnName="\"ID\"")}, inverseJoinColumns={@JoinColumn(name="\"DMP\"", referencedColumnName="\"ID\"")} diff --git a/dmp-backend/src/main/java/entities/Project.java b/dmp-backend/src/main/java/entities/Project.java index ba822afbd..c6d1aef5d 100644 --- a/dmp-backend/src/main/java/entities/Project.java +++ b/dmp-backend/src/main/java/entities/Project.java @@ -16,10 +16,13 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; @@ -27,6 +30,8 @@ import com.fasterxml.jackson.databind.SerializationFeature; @Entity @Table(name="\"Project\"") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") public class Project implements Serializable { @@ -42,8 +47,8 @@ public class Project implements Serializable { private UUID id; - @OneToOne(fetch = FetchType.EAGER, mappedBy = "project") - private DMP dmp; + @OneToMany(mappedBy = "project") + private Set dmps; @Column(name = "\"Label\"") @@ -111,14 +116,16 @@ public class Project implements Serializable { this.definition = definition; } - - public DMP getDMP() { - return dmp; - } - public void setDMP(DMP dmp) { - this.dmp = dmp; - } + public Set getDmps() { + return dmps; + } + + public void setDmps(Set dmps) { + this.dmps = dmps; + } + + public String toString() { try { @@ -127,6 +134,7 @@ public class Project implements Serializable { return ""; } } - + + } diff --git a/dmp-backend/src/main/java/entities/Registry.java b/dmp-backend/src/main/java/entities/Registry.java index 1a24da42e..3fff1a0df 100644 --- a/dmp-backend/src/main/java/entities/Registry.java +++ b/dmp-backend/src/main/java/entities/Registry.java @@ -17,15 +17,20 @@ import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"Registry\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class Registry implements Serializable { private static final long serialVersionUID = -277572262583178090L; @@ -57,7 +62,7 @@ public class Registry implements Serializable { private String definition; - @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL) + @OneToMany(fetch = FetchType.EAGER) @JoinTable(name="\"DatasetRegistry\"", joinColumns={@JoinColumn(name="\"Registry\"", referencedColumnName="\"ID\"")}, inverseJoinColumns={@JoinColumn(name="\"Dataset\"", referencedColumnName="\"ID\"")} diff --git a/dmp-backend/src/main/java/entities/Researcher.java b/dmp-backend/src/main/java/entities/Researcher.java index a8ba70f02..1ef03aaa6 100644 --- a/dmp-backend/src/main/java/entities/Researcher.java +++ b/dmp-backend/src/main/java/entities/Researcher.java @@ -17,15 +17,20 @@ import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"Researcher\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class Researcher implements Serializable { @@ -58,7 +63,7 @@ public class Researcher implements Serializable { private String reference; - @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name="\"DMPResearcher\"", joinColumns={@JoinColumn(name="\"Researcher\"", referencedColumnName="\"ID\"")}, inverseJoinColumns={@JoinColumn(name="\"DMP\"", referencedColumnName="\"ID\"")} diff --git a/dmp-backend/src/main/java/entities/Service.java b/dmp-backend/src/main/java/entities/Service.java index dc1a2a406..b69de373b 100644 --- a/dmp-backend/src/main/java/entities/Service.java +++ b/dmp-backend/src/main/java/entities/Service.java @@ -19,15 +19,20 @@ import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"Service\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class Service implements Serializable { private static final long serialVersionUID = 7243446610500174060L; diff --git a/dmp-backend/src/main/java/entities/UserDMP.java b/dmp-backend/src/main/java/entities/UserDMP.java index 1ffba53f9..5d525641d 100644 --- a/dmp-backend/src/main/java/entities/UserDMP.java +++ b/dmp-backend/src/main/java/entities/UserDMP.java @@ -10,18 +10,22 @@ import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"UserDMP\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class UserDMP implements Serializable{ private static final long serialVersionUID = -4467370784003784660L; - @Id @GeneratedValue diff --git a/dmp-backend/src/main/java/entities/UserInfo.java b/dmp-backend/src/main/java/entities/UserInfo.java index c99655367..acf7c28cd 100644 --- a/dmp-backend/src/main/java/entities/UserInfo.java +++ b/dmp-backend/src/main/java/entities/UserInfo.java @@ -19,17 +19,22 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; import entities.security.UserAuth; @Entity @Table(name="\"UserInfo\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class UserInfo implements Serializable{ private static final long serialVersionUID = 1225151430484658395L; @@ -73,7 +78,7 @@ public class UserInfo implements Serializable{ @Column(name = "additionalinfo", columnDefinition = "xml", nullable = true) private String additionalinfo; - @OneToMany(fetch = FetchType.EAGER) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name="\"UserDMP\"", joinColumns={@JoinColumn(name="usr", referencedColumnName="id")}, inverseJoinColumns={@JoinColumn(name="dmp", referencedColumnName="\"ID\"")} diff --git a/dmp-backend/src/main/java/entities/security/UserAuth.java b/dmp-backend/src/main/java/entities/security/UserAuth.java index daafca794..f8f7b2766 100644 --- a/dmp-backend/src/main/java/entities/security/UserAuth.java +++ b/dmp-backend/src/main/java/entities/security/UserAuth.java @@ -9,9 +9,18 @@ import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Proxy; + +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.annotation.JsonInclude.Include; @Entity @Table(name="\"UserAuth\"") +//@Proxy(lazy = false) +//@JsonInclude(Include.NON_NULL) +@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id") public class UserAuth { @Id diff --git a/dmp-backend/src/main/java/helpers/SerializerProvider.java b/dmp-backend/src/main/java/helpers/SerializerProvider.java new file mode 100644 index 000000000..be9380a19 --- /dev/null +++ b/dmp-backend/src/main/java/helpers/SerializerProvider.java @@ -0,0 +1,22 @@ +package helpers; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; + + +public class SerializerProvider { + + + private static ObjectMapper objectMapper = new ObjectMapper() +// .setSerializationInclusion(Include.NON_NULL) +// .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .registerModule(new Hibernate5Module()) + ; + + + public static ObjectMapper getJsonSerializer() { + return objectMapper; + } + + +} diff --git a/dmp-backend/src/main/java/helpers/Transformers.java b/dmp-backend/src/main/java/helpers/Transformers.java index 7f1f35f74..679af3f5a 100644 --- a/dmp-backend/src/main/java/helpers/Transformers.java +++ b/dmp-backend/src/main/java/helpers/Transformers.java @@ -2,6 +2,7 @@ package helpers; import java.util.Arrays; import java.util.HashSet; +import java.util.Set; import java.util.UUID; import org.springframework.util.MultiValueMap; @@ -80,6 +81,9 @@ public class Transformers { ds.setRegistries(new HashSet(Arrays.asList(reg))); ds.setServices(new HashSet(Arrays.asList(ser))); + Set datasets = new HashSet(); + datasets.add(ds); + DMP dmp = new DMP(); dmp.setLabel(formData.getFirst("DMP.label")); @@ -90,7 +94,7 @@ public class Transformers { dmp.setProfileData(formData.getFirst("DMP.profileData")); dmp.setProject(project); dmp.setVersion(Integer.parseInt(formData.getFirst("DMP.version"))); - dmp.setDataset(ds); + dmp.setDataset(datasets); System.out.println(dmp); diff --git a/dmp-backend/src/main/java/rest/entities/DMPs.java b/dmp-backend/src/main/java/rest/entities/DMPs.java index 179ad8508..a3ec75513 100644 --- a/dmp-backend/src/main/java/rest/entities/DMPs.java +++ b/dmp-backend/src/main/java/rest/entities/DMPs.java @@ -1,18 +1,15 @@ package rest.entities; -import java.io.Console; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; import javax.transaction.Transactional; -import org.apache.commons.lang3.SerializationUtils; 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.util.MultiValueMap; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; @@ -22,7 +19,9 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.mchange.v2.sql.filter.SynchronizedFilterDataSource; @@ -38,13 +37,16 @@ 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; import entities.DatasetProfile; import entities.DatasetProfileRuleset; import entities.Project; +import entities.UserInfo; import entities.responses.IDLabelPair; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -65,9 +67,11 @@ public class DMPs { @Autowired private RegistryDao registryDao; @Autowired private ResearcherDao researcherDao; @Autowired private ServiceDao serviceDao; + @Autowired private UserInfoDao userInfoDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); + // FETCH BY DMP(S) @@ -75,20 +79,26 @@ public class DMPs { public @ResponseBody ResponseEntity listDMPs(){ try { List allIDs = dMPDao.listAllIDs(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); } } + @Transactional @RequestMapping(method = RequestMethod.GET, value = { "/dmps/{id}" }, produces="application/json") public @ResponseBody ResponseEntity getDMP(@PathVariable("id") String id){ try { + System.out.println("Trying for id: "+ id); DMP dmp = dMPDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(dmp)); + System.out.println("tried, got : "+ dmp.getId()); + + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(dmp)); +// return ResponseEntity.status(HttpStatus.OK).body(dmp); } catch(Exception ex) { + ex.printStackTrace(); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); } } @@ -97,14 +107,37 @@ public class DMPs { public @ResponseBody ResponseEntity listDmpLabelID(){ try { List allIDLabels = dMPDao.listAllIDsLabels(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDLabels)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDLabels)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); } } - + @RequestMapping(method = RequestMethod.GET, value = { "/dmp/ofuser" }, produces="text/plain") + public @ResponseBody ResponseEntity getDmpsOfUser(){ + + 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"); + + try { + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(userInfo.getDmps())); + } + catch(Exception ex) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); + } + + } + /** @@ -112,6 +145,7 @@ public class DMPs { */ @RequestMapping(method = RequestMethod.GET, value = { "/dmp/getAll" }, produces="application/json") public @ResponseBody ResponseEntity getAllDMPs(){ + try { List allDMPs = dMPDao.getAll(); @@ -136,7 +170,6 @@ public class DMPs { @Transactional @RequestMapping(method = RequestMethod.POST, value = { "/dmp/create" }, consumes = "application/json", produces="application/json") public @ResponseBody ResponseEntity setDMP(@RequestBody DMP dmp) { - ObjectMapper objectMapper = new ObjectMapper(); DMP createdDmp = dMPDao.update(dmp); try { return ResponseEntity.status(HttpStatus.CREATED).body(objectMapper.writeValueAsString(createdDmp)); @@ -146,7 +179,7 @@ public class DMPs { } - + /* @RequestMapping(method = RequestMethod.POST, value = { "/dmp/set/full" }, consumes = "application/json", produces="application/json") public @ResponseBody ResponseEntity setFullDMP(@RequestBody DMP dmp) { @@ -231,6 +264,8 @@ public class DMPs { } + */ + @RequestMapping(method = RequestMethod.POST, value = { "/dmp/delete" }, consumes = "application/json", produces="text/plain") public @ResponseBody ResponseEntity delete(@RequestBody DMP dmp) { @@ -249,7 +284,7 @@ public class DMPs { - + /* // OLD ONES, USED BY THE EMBEDDED (simple) UI OF THIS SERVICE @RequestMapping(method = RequestMethod.POST, value = { "/setDMPByForm" }, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces="text/plain") public @ResponseBody ResponseEntity setDMPByForm(@RequestBody MultiValueMap formData) { @@ -267,6 +302,7 @@ public class DMPs { dmp.getDataset().getProfile().getViewstyle().setDefinition(formData.getFirst("DatasetProfileViewStyle.definition")); return setDMP(dmp); } + */ diff --git a/dmp-backend/src/main/java/rest/entities/DataRepositories.java b/dmp-backend/src/main/java/rest/entities/DataRepositories.java index 0edaab611..74697f48d 100644 --- a/dmp-backend/src/main/java/rest/entities/DataRepositories.java +++ b/dmp-backend/src/main/java/rest/entities/DataRepositories.java @@ -47,6 +47,7 @@ import entities.Project; import entities.Registry; import entities.Researcher; import entities.Service; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -69,7 +70,7 @@ public class DataRepositories { @Autowired private ServiceDao serviceDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); // MANAGE DATAREPOSITORy(IES) @@ -77,7 +78,7 @@ public class DataRepositories { public @ResponseBody ResponseEntity listDataRepositories(){ try { List allIDs = dataRepositoryDao.listAllIDs(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); @@ -89,7 +90,7 @@ public class DataRepositories { public @ResponseBody ResponseEntity getDataRepository(@PathVariable("id") String id) { try { DataRepository dataRepository = dataRepositoryDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(dataRepository)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(dataRepository)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); diff --git a/dmp-backend/src/main/java/rest/entities/Datasets.java b/dmp-backend/src/main/java/rest/entities/Datasets.java index f8f4352f8..f86ae3b8d 100644 --- a/dmp-backend/src/main/java/rest/entities/Datasets.java +++ b/dmp-backend/src/main/java/rest/entities/Datasets.java @@ -2,7 +2,9 @@ package rest.entities; import java.io.IOException; import java.io.PrintStream; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -48,6 +50,7 @@ import entities.DatasetProfileRuleset; import entities.DatasetProfileViewstyle; import entities.Organisation; import entities.Project; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -69,7 +72,7 @@ public class Datasets { @Autowired private ResearcherDao researcherDao; @Autowired private ServiceDao serviceDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); // FETCH BY DATASET(S) @@ -78,7 +81,7 @@ public class Datasets { public @ResponseBody ResponseEntity listDatasets(){ try { List allIDs = datasetDao.listAllIDs(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); @@ -90,7 +93,7 @@ public class Datasets { public @ResponseBody ResponseEntity getDataset(@PathVariable("id") String id) { try { Dataset ds = datasetDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(ds)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(ds)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); @@ -226,7 +229,7 @@ public class Datasets { public @ResponseBody ResponseEntity getDatasetProfile(@PathVariable("id") String id) { try { DatasetProfile profile = datasetProfileDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(profile)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(profile)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); @@ -300,11 +303,13 @@ public class Datasets { Dataset ds = new Dataset(); ds.setId(UUID.fromString(datasetID)); - datasetProfile.setDataset(ds); + Set datasets = new HashSet(); + datasets.add(ds); + datasetProfile.setDataset(datasets); try { datasetProfile = datasetProfileDao.create(datasetProfile); - return ResponseEntity.status(HttpStatus.CREATED).body(new ObjectMapper().writeValueAsString(datasetProfile)); + return ResponseEntity.status(HttpStatus.CREATED).body(objectMapper.writeValueAsString(datasetProfile)); } catch(Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("FAILED: reason: "+e.getMessage()); diff --git a/dmp-backend/src/main/java/rest/entities/DmpProfiles.java b/dmp-backend/src/main/java/rest/entities/DmpProfiles.java index 6a59bcce6..d768ffe01 100644 --- a/dmp-backend/src/main/java/rest/entities/DmpProfiles.java +++ b/dmp-backend/src/main/java/rest/entities/DmpProfiles.java @@ -48,6 +48,7 @@ import entities.Registry; import entities.Researcher; import entities.Service; import entities.responses.IDLabelPair; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -69,7 +70,7 @@ public class DmpProfiles { @Autowired private ResearcherDao researcherDao; @Autowired private ServiceDao serviceDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); // MANAGE DMPPROFILE(S) @@ -77,7 +78,7 @@ public class DmpProfiles { public @ResponseBody ResponseEntity listDmpProfiles(){ try { List allIDs = dMPProfileDao.listAllIDs(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); @@ -91,7 +92,7 @@ public class DmpProfiles { public @ResponseBody ResponseEntity getDmpProfile(@PathVariable("id") String id) { try { DMPProfile dmpProfile = dMPProfileDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(dmpProfile)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(dmpProfile)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); @@ -104,7 +105,7 @@ public class DmpProfiles { public @ResponseBody ResponseEntity listLabelIds(){ try { List allIDs = dMPProfileDao.listAllIDsLabels(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); diff --git a/dmp-backend/src/main/java/rest/entities/Organisations.java b/dmp-backend/src/main/java/rest/entities/Organisations.java index 85258c0ec..b4b86a869 100644 --- a/dmp-backend/src/main/java/rest/entities/Organisations.java +++ b/dmp-backend/src/main/java/rest/entities/Organisations.java @@ -47,6 +47,7 @@ import entities.Project; import entities.Registry; import entities.Researcher; import entities.Service; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -69,7 +70,7 @@ public class Organisations { @Autowired private ServiceDao serviceDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); // MANAGE ORGANISATIONS(S) @@ -77,7 +78,7 @@ public class Organisations { public @ResponseBody ResponseEntity listOrganisations(){ try { List allIDs = organisationDao.listAllIDs(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); @@ -89,7 +90,7 @@ public class Organisations { public @ResponseBody ResponseEntity getOrganisations(@PathVariable("id") String id) { try { Organisation organisation = organisationDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(organisation)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(organisation)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); diff --git a/dmp-backend/src/main/java/rest/entities/Projects.java b/dmp-backend/src/main/java/rest/entities/Projects.java index 04246a58d..03577a659 100644 --- a/dmp-backend/src/main/java/rest/entities/Projects.java +++ b/dmp-backend/src/main/java/rest/entities/Projects.java @@ -21,8 +21,11 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; import dao.entities.DMPDao; import dao.entities.DMPProfileDao; @@ -48,6 +51,7 @@ import entities.Registry; import entities.Researcher; import entities.Service; import entities.responses.IDLabelPair; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -70,7 +74,7 @@ public class Projects { @Autowired private ServiceDao serviceDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); // MANAGE PROJECT(S) @@ -78,7 +82,7 @@ public class Projects { public @ResponseBody ResponseEntity listProjects(){ try { List allIDs = projectDao.listAllIDs(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); @@ -89,7 +93,10 @@ public class Projects { public @ResponseBody ResponseEntity getProject(@PathVariable("id") String id) { try { Project project = projectDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(project)); + + System.out.println(project.getId().toString()); + + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(project)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); @@ -101,7 +108,7 @@ public class Projects { public @ResponseBody ResponseEntity listLabelIds(){ try { List allIDs = projectDao.listAllIDsLabels(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); diff --git a/dmp-backend/src/main/java/rest/entities/Registries.java b/dmp-backend/src/main/java/rest/entities/Registries.java index 08489c17a..b707d68b7 100644 --- a/dmp-backend/src/main/java/rest/entities/Registries.java +++ b/dmp-backend/src/main/java/rest/entities/Registries.java @@ -47,6 +47,7 @@ import entities.Registry; import entities.Researcher; import entities.Service; import entities.responses.IDLabelPair; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -69,7 +70,7 @@ public class Registries { @Autowired private ServiceDao serviceDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); // MANAGE REGISTRY(IES) @@ -77,7 +78,7 @@ public class Registries { public @ResponseBody ResponseEntity listRegistries(){ try { List allIDs = registryDao.listAllIDs(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); @@ -89,7 +90,7 @@ public class Registries { public @ResponseBody ResponseEntity getRegistries(@PathVariable("id") String id) { try { Registry registry = registryDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(registry)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(registry)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); diff --git a/dmp-backend/src/main/java/rest/entities/Researchers.java b/dmp-backend/src/main/java/rest/entities/Researchers.java index c38840d60..faecb5781 100644 --- a/dmp-backend/src/main/java/rest/entities/Researchers.java +++ b/dmp-backend/src/main/java/rest/entities/Researchers.java @@ -47,6 +47,7 @@ import entities.Project; import entities.Registry; import entities.Researcher; import entities.Service; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -69,7 +70,7 @@ public class Researchers { @Autowired private ServiceDao serviceDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); // MANAGE RESEARCHER(S) @@ -77,7 +78,7 @@ public class Researchers { public @ResponseBody ResponseEntity listResearchers(){ try { List allIDs = researcherDao.listAllIDs(); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(allIDs)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(allIDs)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: "+ex.getMessage()); @@ -89,7 +90,7 @@ public class Researchers { public @ResponseBody ResponseEntity getResearchers(@PathVariable("id") String id) { try { Researcher researcher = researcherDao.read(UUID.fromString(id)); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(researcher)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(researcher)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); @@ -100,7 +101,7 @@ public class Researchers { public @ResponseBody ResponseEntity getResearcherByEmail(@RequestParam("email") String email){ try { Researcher researcher = researcherDao.getResearcherByEmail(email); - return ResponseEntity.status(HttpStatus.OK).body(new ObjectMapper().writeValueAsString(researcher)); + return ResponseEntity.status(HttpStatus.OK).body(objectMapper.writeValueAsString(researcher)); } catch(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Erroneous input: "+ex.getMessage()); diff --git a/dmp-backend/src/main/java/rest/entities/Services.java b/dmp-backend/src/main/java/rest/entities/Services.java index 768a48012..b82145f9c 100644 --- a/dmp-backend/src/main/java/rest/entities/Services.java +++ b/dmp-backend/src/main/java/rest/entities/Services.java @@ -47,6 +47,7 @@ import entities.Project; import entities.Registry; import entities.Researcher; import entities.Service; +import helpers.SerializerProvider; import helpers.Transformers; import responses.RestResponse; @@ -69,7 +70,7 @@ public class Services { @Autowired private ServiceDao serviceDao; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); // MANAGE SERVICE(S) diff --git a/dmp-backend/src/main/java/rest/entities/Users.java b/dmp-backend/src/main/java/rest/entities/Users.java new file mode 100644 index 000000000..ffbb7c3cb --- /dev/null +++ b/dmp-backend/src/main/java/rest/entities/Users.java @@ -0,0 +1,83 @@ +package rest.entities; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +import javax.transaction.Transactional; + +import org.apache.commons.lang3.SerializationUtils; +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.util.MultiValueMap; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import dao.entities.DMPDao; +import dao.entities.DMPProfileDao; +import dao.entities.DataRepositoryDao; +import dao.entities.DatasetDao; +import dao.entities.DatasetProfileDao; +import dao.entities.DatasetProfileRulesetDao; +import dao.entities.DatasetProfileViewstyleDao; +import dao.entities.OrganisationDao; +import dao.entities.ProjectDao; +import dao.entities.RegistryDao; +import dao.entities.ResearcherDao; +import dao.entities.ServiceDao; +import entities.DMP; +import entities.DMPProfile; +import entities.DataRepository; +import entities.Dataset; +import entities.DatasetProfile; +import entities.DatasetProfileRuleset; +import entities.Organisation; +import entities.Project; +import entities.Registry; +import entities.Researcher; +import entities.Service; +import helpers.SerializerProvider; +import helpers.Transformers; +import responses.RestResponse; + + +@RestController +@CrossOrigin +public class Users { + + @Autowired private DataRepositoryDao dataRepositoryDao; + @Autowired private DatasetDao datasetDao; + @Autowired private DatasetProfileDao datasetProfileDao; + @Autowired private DatasetProfileRulesetDao datasetProfileRulesetDao; + @Autowired private DatasetProfileViewstyleDao datasetProfileViewstyleDao; + @Autowired private DMPDao dMPDao; + @Autowired private DMPProfileDao dMPProfileDao; + @Autowired private OrganisationDao organisationDao; + @Autowired private ProjectDao projectDao; + @Autowired private RegistryDao registryDao; + @Autowired private ResearcherDao researcherDao; + @Autowired private ServiceDao serviceDao; + + + private ObjectMapper objectMapper = SerializerProvider.getJsonSerializer(); + + + + + + + + +} + diff --git a/dmp-backend/src/main/java/security/CustomAuthenticationProvider.java b/dmp-backend/src/main/java/security/CustomAuthenticationProvider.java index 3a87b19fa..c02a8f202 100644 --- a/dmp-backend/src/main/java/security/CustomAuthenticationProvider.java +++ b/dmp-backend/src/main/java/security/CustomAuthenticationProvider.java @@ -51,10 +51,10 @@ public class CustomAuthenticationProvider implements AuthenticationProvider { System.out.println("Could not validate a user by his token! Reason: "+e.getMessage()); throw new AuthenticationServiceException("Token validation failed - Not a valid token"); } - - // if reached this point, authentication is ok, so return just an instance with whatever. - return new UsernamePasswordAuthenticationToken(authentication.getPrincipal(), authentication.getCredentials(), new ArrayList<>()); + // if reached this point, authentication is ok, so return just an instance where the principal is the UserInfo ID + //(to have it at the webservices calls - it's ESSENTIAL) while the password can be whatever... + return new UsernamePasswordAuthenticationToken(userInfo.getId(), authentication.getCredentials(), new ArrayList<>()); } else diff --git a/dmp-backend/src/main/webapp/WEB-INF/applicationContext.xml b/dmp-backend/src/main/webapp/WEB-INF/applicationContext.xml index 5b2d0c977..99297f5f8 100644 --- a/dmp-backend/src/main/webapp/WEB-INF/applicationContext.xml +++ b/dmp-backend/src/main/webapp/WEB-INF/applicationContext.xml @@ -55,6 +55,8 @@ ${persistence.hibernate.hbm2dll} ${persistence.hibernate.dialect} + true + ${persistence.hibernate.jdbc.batch_size} ${persistence.hibernate.order_inserts} ${persistence.hibernate.order_updates} diff --git a/dmp-backend/src/main/webapp/WEB-INF/web.xml b/dmp-backend/src/main/webapp/WEB-INF/web.xml index 6de4a1563..829a522e3 100644 --- a/dmp-backend/src/main/webapp/WEB-INF/web.xml +++ b/dmp-backend/src/main/webapp/WEB-INF/web.xml @@ -67,22 +67,22 @@ contextConfigLocation - /WEB-INF/applicationContext.xml,/WEB-INF/spring-security.xml - + + /WEB-INF/applicationContext.xml 30 - - springSecurityFilterChain - org.springframework.web.filter.DelegatingFilterProxy - - - springSecurityFilterChain - /rest/* - + + + + + + + +