diff --git a/.env b/.env
index abfd8c55f..31c132e98 100644
--- a/.env
+++ b/.env
@@ -1,6 +1,6 @@
-TAG=6.2.1
-ENV=dev
+TAG=6.3.0
+ENV=prod
PROFILE=production
-AOT=no-aot
-ELASTIC_VERSION=6.2.1
+AOT=aot
+ELASTIC_VERSION=6.3.0
ELASTIC_PASSWORD=changeme
diff --git a/.gitignore b/.gitignore
index a064ebc2a..8bd13f118 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,15 @@ dmp-backend/web/src/main/ui-resources/static/
dmp-backend/data/target/data-1.0-SNAPSHOT.jar
dmp-backend/data/target/
dmp-backend/queryable/target/
+dmp-backend/elastic/target/
+dmp-backend/queryengine/target/
+*.tar
+*.gz
+final/
+temp/
+*.jar
+*.lst
+dmp-frontend/.vscode/
+*.docx
+
+
diff --git a/ELK.Docker/.env b/ELK.Docker/.env
index fcb78b08a..d2aa1da5a 100644
--- a/ELK.Docker/.env
+++ b/ELK.Docker/.env
@@ -1,3 +1,3 @@
-TAG=6.2.1
-ELASTIC_VERSION=6.2.1
+TAG=6.3.1
+ELASTIC_VERSION=6.3.1
ELASTIC_PASSWORD=changeme
diff --git a/ELK.Docker/docker-compose.yml b/ELK.Docker/docker-compose.yml
index 28357dce4..e64762965 100644
--- a/ELK.Docker/docker-compose.yml
+++ b/ELK.Docker/docker-compose.yml
@@ -100,7 +100,72 @@ services:
networks: ['stack']
depends_on: ['kibana']
-#volumes:
+
+##########################DOCSBOX######################################################################
+ web:
+ restart: always
+ build: ./docsbox-master/docsbox
+ expose:
+ - "8000"
+ links:
+ - redis:redis
+ volumes:
+ - docsbox:/home/docsbox
+ - media:/home/docsbox/media
+ command: gunicorn -b :8000 docsbox:app
+ networks: ['stack']
+
+ rqworker:
+ restart: always
+ build: ./docsbox-master/docsbox
+ links:
+ - redis:redis
+ volumes:
+ - web
+ command: rq worker -c docsbox.settings
+ networks: ['stack']
+
+ rqscheduler:
+ restart: always
+ build: ./docsbox-master/docsbox
+ links:
+ - redis:redis
+ volumes:
+ - web
+ command: rqscheduler -H redis -p 6379 -d 0
+ networks: ['stack']
+
+ nginx:
+ restart: always
+ build: ./docsbox-master/nginx/
+ ports:
+ - "81:80"
+ volumes:
+ - web
+ links:
+ - web:web
+ networks: ['stack']
+
+ redis:
+ restart: always
+ image: redis:latest
+ expose:
+ - "6379"
+ volumes:
+ - redisdata:/data
+ networks: ['stack']
+
+
+##########################SETTIGNS######################################################################
+
+volumes:
#esdata:
- # driver: local
+ #driver: local
+ redisdata:
+ driver: local
+ docsbox:
+ driver: local
+ media:
+ driver: local
networks: {stack: {}}
+
diff --git a/dmp-backend/Dockerfile b/dmp-backend/Dockerfile
index 79cf08791..8701a23a0 100644
--- a/dmp-backend/Dockerfile
+++ b/dmp-backend/Dockerfile
@@ -1,5 +1,11 @@
FROM openjdk:8-jdk-alpine
+RUN apk add --update \
+ curl \
+ && rm -rf /var/cache/apk/*
VOLUME /tmp
-ARG PROFILE=dev
+ARG PROFILE=production
+ENV PROF $PROFILE
+ADD web/src/main/resources/ProjectConfiguration.xml /tmp/ProjectConfiguration.xml
+ADD web/src/main/resources/ExternalUrls.xml /tmp/ExternalUrls.xml
ADD web/target/web-1.0-SNAPSHOT.jar app.jar
-ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=${PROFILE}","-jar","/app.jar"]
\ No newline at end of file
+ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom" ,"-Dspring.profiles.active=${PROF}","-jar","/app.jar"]
\ No newline at end of file
diff --git a/dmp-backend/data/pom.xml b/dmp-backend/data/pom.xml
index c7cfef263..7a256c0ea 100644
--- a/dmp-backend/data/pom.xml
+++ b/dmp-backend/data/pom.xml
@@ -21,5 +21,10 @@
queryable
1.0-SNAPSHOT
+
+ eu.eudat
+ elastic
+ 1.0.0-SNAPSHOT
+
\ No newline at end of file
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/converters/DateToUTCConverter.java b/dmp-backend/data/src/main/java/eu/eudat/data/converters/DateToUTCConverter.java
new file mode 100644
index 000000000..35fb84dae
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/converters/DateToUTCConverter.java
@@ -0,0 +1,46 @@
+package eu.eudat.data.converters;
+
+import org.springframework.format.datetime.DateFormatter;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * Created by ikalyvas on 9/25/2018.
+ */
+@Converter
+public class DateToUTCConverter implements AttributeConverter {
+
+ @Override
+ public Date convertToDatabaseColumn(Date attribute) {
+ if(attribute == null) return null;
+ DateFormat formatterIST = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ formatterIST.setTimeZone(TimeZone.getTimeZone("UTC"));
+ try {
+ String date = formatterIST.format(attribute);
+ return formatterIST.parse(date);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Override
+ public Date convertToEntityAttribute(Date dbData) {
+ if(dbData == null) return null;
+ DateFormat formatterIST = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ formatterIST.setTimeZone(TimeZone.getTimeZone("UTC"));
+ try {
+ String date = formatterIST.format(dbData);
+ return formatterIST.parse(date);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java
index d79643daf..09376a3ab 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java
@@ -1,7 +1,8 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.DMP;
-import eu.eudat.data.entities.Project;
+
+import eu.eudat.data.entities.Grant;
import java.util.Date;
import java.util.List;
@@ -10,39 +11,19 @@ import java.util.UUID;
public class DataManagementPlanCriteria extends Criteria {
private Date periodStart;
private Date periodEnd;
+ private List grants;
private boolean allVersions;
private List groupIds;
-
- private List projects;
-
- public boolean getAllVersions() {
- return allVersions;
- }
-
- public void setAllVersions(boolean allVersions) {
- this.allVersions = allVersions;
- }
-
- public List getGroupIds() {
- return groupIds;
- }
-
- public void setGroupIds(List groupIds) {
- this.groupIds = groupIds;
- }
+ private Integer status;
+ private List organisations;
+ private Integer role;
+ private List collaborators;
+ private List datasetTemplates;
+ private boolean isPublic;
public Date getPeriodStart() {
return periodStart;
}
-
- public List getProjects() {
- return projects;
- }
-
- public void setProjects(List projects) {
- this.projects = projects;
- }
-
public void setPeriodStart(Date periodStart) {
this.periodStart = periodStart;
}
@@ -50,9 +31,70 @@ public class DataManagementPlanCriteria extends Criteria {
public Date getPeriodEnd() {
return periodEnd;
}
-
public void setPeriodEnd(Date periodEnd) {
this.periodEnd = periodEnd;
}
+ public List getGrants() {
+ return grants;
+ }
+ public void setGrants(List grants) {
+ this.grants = grants;
+ }
+
+ public boolean getAllVersions() {
+ return allVersions;
+ }
+ public void setAllVersions(boolean allVersions) {
+ this.allVersions = allVersions;
+ }
+
+ public List getGroupIds() {
+ return groupIds;
+ }
+ public void setGroupIds(List groupIds) {
+ this.groupIds = groupIds;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+
+ public List getOrganisations() {
+ return organisations;
+ }
+ public void setOrganisations(List organisations) {
+ this.organisations = organisations;
+ }
+
+ public Integer getRole() {
+ return role;
+ }
+ public void setRole(Integer role) {
+ this.role = role;
+ }
+
+ public List getCollaborators() {
+ return collaborators;
+ }
+ public void setCollaborators(List collaborators) {
+ this.collaborators = collaborators;
+ }
+
+ public List getDatasetTemplates() {
+ return datasetTemplates;
+ }
+ public void setDatasetTemplates(List datasetTemplates) {
+ this.datasetTemplates = datasetTemplates;
+ }
+
+ public boolean getIsPublic() {
+ return isPublic;
+ }
+ public void setIsPublic(boolean isPublic) {
+ this.isPublic = isPublic;
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanPublicCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanPublicCriteria.java
new file mode 100644
index 000000000..bd3d049bf
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanPublicCriteria.java
@@ -0,0 +1,42 @@
+package eu.eudat.data.dao.criteria;
+
+import eu.eudat.data.entities.DMP;
+import eu.eudat.types.grant.GrantStateType;
+
+import java.util.List;
+import java.util.UUID;
+
+public class DataManagementPlanPublicCriteria extends Criteria {
+ private GrantStateType grantStatus;
+ private List grants;
+ public List datasetProfile;
+ private List dmpOrganisations;
+
+ public GrantStateType getGrantStatus() {
+ return grantStatus;
+ }
+ public void setGrantStatus(GrantStateType grantStatus) {
+ this.grantStatus = grantStatus;
+ }
+
+ public List getGrants() {
+ return grants;
+ }
+ public void setGrants(List grants) {
+ this.grants = grants;
+ }
+
+ public List getDatasetProfile() {
+ return datasetProfile;
+ }
+ public void setDatasetProfile(List datasetProfile) {
+ this.datasetProfile = datasetProfile;
+ }
+
+ public List getDmpOrganisations() {
+ return dmpOrganisations;
+ }
+ public void setDmpOrganisations(List dmpOrganisations) {
+ this.dmpOrganisations = dmpOrganisations;
+ }
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java
index 2ffabff41..8dac2b30f 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetCriteria.java
@@ -1,6 +1,7 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.Dataset;
+import eu.eudat.elastic.entities.Tag;
import java.util.Date;
import java.util.List;
@@ -12,12 +13,18 @@ public class DatasetCriteria extends Criteria {
private Date periodStart;
private Date periodEnd;
private List dmpIds;
+ private List tags;
private boolean allVersions;
+ private UUID profileDatasetId;
+ private List organisations;
+ private Integer role;
+ private List grants;
+ private List collaborators;
+ private List datasetTemplates;
public boolean getAllVersions() {
return allVersions;
}
-
public void setAllVersions(boolean allVersions) {
this.allVersions = allVersions;
}
@@ -25,7 +32,6 @@ public class DatasetCriteria extends Criteria {
public Integer getStatus() {
return status;
}
-
public void setStatus(Integer status) {
this.status = status;
}
@@ -33,7 +39,6 @@ public class DatasetCriteria extends Criteria {
public Date getPeriodStart() {
return periodStart;
}
-
public void setPeriodStart(Date periodStart) {
this.periodStart = periodStart;
}
@@ -41,7 +46,6 @@ public class DatasetCriteria extends Criteria {
public Date getPeriodEnd() {
return periodEnd;
}
-
public void setPeriodEnd(Date periodEnd) {
this.periodEnd = periodEnd;
}
@@ -49,8 +53,56 @@ public class DatasetCriteria extends Criteria {
public List getDmpIds() {
return dmpIds;
}
-
public void setDmpIds(List dmpIds) {
this.dmpIds = dmpIds;
}
+
+ public List getTags() {
+ return tags;
+ }
+ public void setTags(List tags) {
+ this.tags = tags;
+ }
+
+ public UUID getProfileDatasetId() {
+ return profileDatasetId;
+ }
+ public void setProfileDatasetId(UUID profileDatasetId) {
+ this.profileDatasetId = profileDatasetId;
+ }
+
+ public List getOrganisations() {
+ return organisations;
+ }
+ public void setOrganisations(List organisations) {
+ this.organisations = organisations;
+ }
+
+ public Integer getRole() {
+ return role;
+ }
+ public void setRole(Integer role) {
+ this.role = role;
+ }
+
+ public List getGrants() {
+ return grants;
+ }
+ public void setGrants(List grants) {
+ this.grants = grants;
+ }
+
+ public List getCollaborators() {
+ return collaborators;
+ }
+ public void setCollaborators(List collaborators) {
+ this.collaborators = collaborators;
+ }
+
+ public List getDatasetTemplates() {
+ return datasetTemplates;
+ }
+ public void setDatasetTemplates(List datasetTemplates) {
+ this.datasetTemplates = datasetTemplates;
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetProfileCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetProfileCriteria.java
index 6c2624d29..0bf07564c 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetProfileCriteria.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetProfileCriteria.java
@@ -2,6 +2,54 @@ package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.DatasetProfile;
+import java.util.List;
+import java.util.UUID;
public class DatasetProfileCriteria extends Criteria {
+
+ public enum DatasetProfileFilter {
+ DMPs((short) 0), Datasets((short) 1);
+
+ private short value;
+ private DatasetProfileFilter(short value) {
+ this.value = value;
+ }
+ public short getValue() { return value; }
+
+ public static DatasetProfileFilter fromInteger(short value) {
+ switch (value) {
+ case 0:
+ return DMPs;
+ case 1:
+ return Datasets;
+ default:
+ throw new RuntimeException("Unsupported DatasetProfile filter");
+ }
+ }
+ }
+
+ private boolean allVersions;
+ private List groupIds;
+ private Short filter;
+ private UUID userId;
+
+ public boolean getAllVersions() { return allVersions; }
+ public void setAllVersions(boolean allVersions) { this.allVersions = allVersions; }
+
+ public List getGroupIds() { return groupIds; }
+ public void setGroupIds(List groupIds) { this.groupIds = groupIds; }
+
+ public Short getFilter() {
+ return filter;
+ }
+ public void setFilter(Short filter) {
+ this.filter = filter;
+ }
+
+ public UUID getUserId() {
+ return userId;
+ }
+ public void setUserId(UUID userId) {
+ this.userId = userId;
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetPublicCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetPublicCriteria.java
new file mode 100644
index 000000000..fd4934d7a
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DatasetPublicCriteria.java
@@ -0,0 +1,62 @@
+package eu.eudat.data.dao.criteria;
+
+import eu.eudat.data.entities.Dataset;
+import eu.eudat.elastic.entities.Tag;
+import eu.eudat.types.grant.GrantStateType;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Created by ikalyvas on 10/2/2018.
+ */
+public class DatasetPublicCriteria extends Criteria{
+ private GrantStateType grantStatus;
+ private List grants;
+ private List datasetProfile;
+ private List dmpOrganisations;
+ private List tags;
+ private List dmpIds;
+
+ public GrantStateType getGrantStatus() {
+ return grantStatus;
+ }
+ public void setGrantStatus(GrantStateType grantStatus) {
+ this.grantStatus = grantStatus;
+ }
+
+ public List getGrants() {
+ return grants;
+ }
+ public void setGrants(List grants) {
+ this.grants = grants;
+ }
+
+ public List getDatasetProfile() {
+ return datasetProfile;
+ }
+ public void setDatasetProfile(List datasetProfile) {
+ this.datasetProfile = datasetProfile;
+ }
+
+ public List getDmpOrganisations() {
+ return dmpOrganisations;
+ }
+ public void setDmpOrganisations(List dmpOrganisations) {
+ this.dmpOrganisations = dmpOrganisations;
+ }
+
+ public List getTags() {
+ return tags;
+ }
+ public void setTags(List tags) {
+ this.tags = tags;
+ }
+
+ public List getDmpIds() {
+ return dmpIds;
+ }
+ public void setDmpIds(List dmpIds) {
+ this.dmpIds = dmpIds;
+ }
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/FunderCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/FunderCriteria.java
new file mode 100644
index 000000000..c8c23038c
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/FunderCriteria.java
@@ -0,0 +1,14 @@
+package eu.eudat.data.dao.criteria;
+
+import eu.eudat.data.entities.Funder;
+
+public class FunderCriteria extends Criteria {
+ private String reference;
+
+ public String getReference() {
+ return reference;
+ }
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/GrantCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/GrantCriteria.java
new file mode 100644
index 000000000..a216b2264
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/GrantCriteria.java
@@ -0,0 +1,65 @@
+package eu.eudat.data.dao.criteria;
+
+import eu.eudat.data.entities.Grant;
+import eu.eudat.types.grant.GrantStateType;
+
+import java.util.Date;
+
+public class GrantCriteria extends Criteria {
+ private Date periodStart;
+ private Date periodEnd;
+ private String reference;
+ private Integer grantStateType;
+ private boolean isPublic;
+ private String funderId;
+ private String funderReference;
+
+ public Date getPeriodStart() {
+ return periodStart;
+ }
+ public void setPeriodStart(Date periodStart) {
+ this.periodStart = periodStart;
+ }
+
+ public Date getPeriodEnd() {
+ return periodEnd;
+ }
+ public void setPeriodEnd(Date periodEnd) {
+ this.periodEnd = periodEnd;
+ }
+
+ public String getReference() {
+ return reference;
+ }
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ public Integer getGrantStateType() {
+ return grantStateType;
+ }
+ public void setGrantStateType(Integer grantStateType) {
+ this.grantStateType = grantStateType;
+ }
+
+ public boolean isPublic() {
+ return isPublic;
+ }
+ public void setPublic(boolean aPublic) {
+ isPublic = aPublic;
+ }
+
+ public String getFunderId() {
+ return funderId;
+ }
+ public void setFunderId(String funderId) {
+ this.funderId = funderId;
+ }
+
+ public String getFunderReference() {
+ return funderReference;
+ }
+ public void setFunderReference(String funderReference) {
+ this.funderReference = funderReference;
+ }
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/LoginConfirmationEmailCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/LoginConfirmationEmailCriteria.java
new file mode 100644
index 000000000..4ec5be026
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/LoginConfirmationEmailCriteria.java
@@ -0,0 +1,6 @@
+package eu.eudat.data.dao.criteria;
+
+import eu.eudat.data.entities.LoginConfirmationEmail;
+
+public class LoginConfirmationEmailCriteria extends Criteria{
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java
index ab1890db4..5cc857a24 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java
@@ -3,4 +3,20 @@ package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.Organisation;
public class OrganisationCriteria extends Criteria {
+ private String labelLike;
+ private Boolean isPublic;
+
+ public String getLabelLike() {
+ return labelLike;
+ }
+ public void setLabelLike(String labelLike) {
+ this.labelLike = labelLike;
+ }
+
+ public Boolean getPublic() {
+ return isPublic;
+ }
+ public void setPublic(Boolean aPublic) {
+ isPublic = aPublic;
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/ProjectCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/ProjectCriteria.java
index aa2d835a0..1450c8661 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/ProjectCriteria.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/ProjectCriteria.java
@@ -2,34 +2,13 @@ package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.Project;
-import java.util.Date;
-
public class ProjectCriteria extends Criteria {
- private Date periodStart;
- private Date periodEnd;
- private String reference;
+ private String reference;
- public Date getPeriodStart() {
- return periodStart;
- }
-
- public void setPeriodStart(Date periodStart) {
- this.periodStart = periodStart;
- }
-
- public Date getPeriodEnd() {
- return periodEnd;
- }
-
- public void setPeriodEnd(Date periodEnd) {
- this.periodEnd = periodEnd;
- }
-
- public String getReference() {
- return reference;
- }
-
- public void setReference(String reference) {
- this.reference = reference;
- }
+ public String getReference() {
+ return reference;
+ }
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java
index 546a2f5f6..3d21d809e 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/UserInfoCriteria.java
@@ -8,11 +8,11 @@ import java.util.List;
public class UserInfoCriteria extends Criteria {
private String email;
private List appRoles;
+ private String collaboratorLike;
public List getAppRoles() {
return appRoles;
}
-
public void setAppRoles(List appRoles) {
this.appRoles = appRoles;
}
@@ -20,8 +20,14 @@ public class UserInfoCriteria extends Criteria {
public String getEmail() {
return email;
}
-
public void setEmail(String email) {
this.email = email;
}
+
+ public String getCollaboratorLike() {
+ return collaboratorLike;
+ }
+ public void setCollaboratorLike(String collaboratorLike) {
+ this.collaboratorLike = collaboratorLike;
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/databaselayer/context/DatabaseContext.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/databaselayer/context/DatabaseContext.java
index c0a92f01c..49f823d63 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/databaselayer/context/DatabaseContext.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/databaselayer/context/DatabaseContext.java
@@ -4,6 +4,7 @@ import eu.eudat.queryable.QueryableList;
import eu.eudat.queryable.jpa.hibernatequeryablelist.QueryableHibernateList;
import eu.eudat.queryable.queryableentity.DataEntity;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ContentDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ContentDaoImpl.java
index 7c68cb3ea..1d3f559d5 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ContentDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ContentDaoImpl.java
@@ -5,6 +5,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.Content;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.UUID;
@@ -27,6 +28,7 @@ public class ContentDaoImpl extends DatabaseAccess implements ContentDa
}
@Override
+ @Async
public CompletableFuture createOrUpdateAsync(Content item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java
index ff29a6b79..03cf68d74 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java
@@ -4,6 +4,7 @@ import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.dao.criteria.DataManagementPlanCriteria;
import eu.eudat.data.dao.criteria.DatasetWizardUserDmpCriteria;
import eu.eudat.data.entities.DMP;
+import eu.eudat.data.entities.UserDMP;
import eu.eudat.data.entities.UserInfo;
import eu.eudat.queryable.QueryableList;
@@ -15,6 +16,6 @@ public interface DMPDao extends DatabaseAccessLayer {
QueryableList getUserDmps(DatasetWizardUserDmpCriteria datasetWizardAutocompleteRequest, UserInfo userInfo);
- QueryableList getAuthenticated(QueryableList query, UserInfo principal);
+ QueryableList getAuthenticated(QueryableList query, UUID principalId);
}
\ No newline at end of file
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java
index f2b106fc9..9684373a5 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java
@@ -5,13 +5,16 @@ import eu.eudat.data.dao.criteria.DataManagementPlanCriteria;
import eu.eudat.data.dao.criteria.DatasetWizardUserDmpCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DMP;
+import eu.eudat.data.entities.UserDMP;
import eu.eudat.data.entities.UserInfo;
import eu.eudat.queryable.QueryableList;
import eu.eudat.queryable.types.FieldSelectionType;
import eu.eudat.queryable.types.SelectionField;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
+import javax.persistence.criteria.JoinType;
import java.util.Arrays;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@@ -29,23 +32,52 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao {
public QueryableList getWithCriteria(DataManagementPlanCriteria criteria) {
QueryableList query = getDatabaseService().getQueryable(DMP.getHints(), DMP.class);
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
- query.where((builder, root) -> builder.like(root.get("label"), "%" + criteria.getLike() + "%"));
+ query.where((builder, root) -> builder.or(
+ builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"),
+ builder.like(builder.upper(root.get("description")), "%" + criteria.getLike().toUpperCase() + "%")));
if (criteria.getPeriodEnd() != null)
query.where((builder, root) -> builder.lessThan(root.get("created"), criteria.getPeriodEnd()));
if (criteria.getPeriodStart() != null)
query.where((builder, root) -> builder.greaterThan(root.get("created"), criteria.getPeriodStart()));
- if (criteria.getProjects() != null && !criteria.getProjects().isEmpty())
- query.where(((builder, root) -> root.get("project").in(criteria.getProjects())));
+ if (criteria.getGrants() != null && !criteria.getGrants().isEmpty())
+ query.where(((builder, root) -> root.get("grant").in(criteria.getGrants())));
if (!criteria.getAllVersions())
- query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("version"), query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("groupId"), nestedRoot.get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "version")), String.class)));
+ query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("version"),
+ query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("groupId"),
+ nestedRoot.get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "version")), String.class)));
if (criteria.getGroupIds() != null && !criteria.getGroupIds().isEmpty())
query.where((builder, root) -> root.get("groupId").in(criteria.getGroupIds()));
+ if (criteria.getStatus() != null) {
+ if (criteria.getStatus() == DMP.DMPStatus.FINALISED.getValue()) {
+ query.where((builder, root) -> builder.and(builder.equal(root.get("status"), DMP.DMPStatus.FINALISED.getValue()), builder.notEqual(root.get("isPublic"), true)));
+ } else if (criteria.getStatus() == DMP.DMPStatus.ACTIVE.getValue()) {
+ query.where((builder, root) -> builder.equal(root.get("status"), DMP.DMPStatus.ACTIVE.getValue()));
+ }
+ }
+ if (criteria.getIsPublic())
+ query.where(((builder, root) -> builder.equal(root.get("isPublic"), true)));
+ if (criteria.getRole() != null) {
+ if (criteria.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())) {
+ query.where((builder, root) -> builder.equal(root.join("users", JoinType.LEFT).get("role"), UserDMP.UserDMPRoles.OWNER.getValue()));
+ } else if (criteria.getRole().equals(UserDMP.UserDMPRoles.USER.getValue())) {
+ query.where((builder, root) -> builder.equal(root.join("users", JoinType.LEFT).get("role"), UserDMP.UserDMPRoles.USER.getValue()));
+ }
+ }
+ if (criteria.getOrganisations() != null && !criteria.getOrganisations().isEmpty()) {
+ query.where((builder, root) -> root.join("organisations").get("reference").in(criteria.getOrganisations()));
+ }
+ if (criteria.getCollaborators() != null && !criteria.getCollaborators().isEmpty()) {
+ query.where((builder, root) -> root.join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators()));
+ }
+ if (criteria.getDatasetTemplates() != null && !criteria.getDatasetTemplates().isEmpty()) {
+ query.where(((builder, root) -> root.join("associatedDmps", JoinType.LEFT).get("id").in(criteria.getDatasetTemplates())));
+ }
query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue()));
return query;
}
- public QueryableList getAuthenticated(QueryableList query, UserInfo principal) {
- query.where((builder, root) -> builder.or(builder.equal(root.get("creator"), principal), builder.isMember(principal, root.get("users"))));
+ public QueryableList getAuthenticated(QueryableList query, UUID principal) {
+ query.where((builder, root) -> builder.equal(root.join("users", JoinType.LEFT).join("user").get("id"), principal));
return query;
}
@@ -78,6 +110,7 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao {
return this.getDatabaseService().getQueryable(DMP.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(DMP item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPProfileDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPProfileDaoImpl.java
index b1ee83a96..b5198d86d 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPProfileDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPProfileDaoImpl.java
@@ -6,6 +6,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DMPProfile;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.UUID;
@@ -22,6 +23,7 @@ public class DMPProfileDaoImpl extends DatabaseAccess implements DMP
super(databaseService);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(DMPProfile item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
@@ -59,7 +61,8 @@ public class DMPProfileDaoImpl extends DatabaseAccess implements DMP
public QueryableList getWithCriteria(DataManagementPlanProfileCriteria criteria) {
QueryableList query = getDatabaseService().getQueryable(DMPProfile.class);
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
- query.where((builder, root) -> builder.like(root.get("label"), "%" + criteria.getLike() + "%"));
+ query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"));
+ query.where(((builder, root) -> builder.notEqual(root.get("status"), DMPProfile.Status.DELETED.getValue())));
return query;
}
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DataRepositoryDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DataRepositoryDaoImpl.java
index 546d5a2d8..c74a997d6 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DataRepositoryDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DataRepositoryDaoImpl.java
@@ -6,6 +6,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DataRepository;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
@@ -38,6 +39,7 @@ public class DataRepositoryDaoImpl extends DatabaseAccess implem
}
@Override
+ @Async
public CompletableFuture createOrUpdateAsync(DataRepository item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDao.java
index a4d3bf709..b3e81ec03 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDao.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDao.java
@@ -14,4 +14,6 @@ public interface DatasetDao extends DatabaseAccessLayer {
QueryableList getAuthenticated(QueryableList query, UserInfo principal);
+ Dataset isPublicDataset(UUID id);
+
}
\ No newline at end of file
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java
index 1be6557ae..fec0ab7cb 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java
@@ -3,14 +3,17 @@ package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.criteria.DatasetCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
+import eu.eudat.data.entities.DMP;
import eu.eudat.data.entities.Dataset;
import eu.eudat.data.entities.UserInfo;
import eu.eudat.queryable.QueryableList;
import eu.eudat.queryable.types.FieldSelectionType;
import eu.eudat.queryable.types.SelectionField;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
+import javax.persistence.criteria.JoinType;
import java.util.Arrays;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@@ -19,17 +22,19 @@ import java.util.concurrent.CompletableFuture;
public class DatasetDaoImpl extends DatabaseAccess implements DatasetDao {
@Autowired
- public DatasetDaoImpl(DatabaseService databaseService) {
- super(databaseService);
- }
+ public DatasetDaoImpl(DatabaseService databaseService) { super(databaseService); }
@Override
public QueryableList getWithCriteria(DatasetCriteria criteria) {
QueryableList query = getDatabaseService().getQueryable(Dataset.getHints(), Dataset.class);
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
- query.where((builder, root) -> builder.like(root.get("label"), "%" + criteria.getLike() + "%"));
+ query.where((builder, root) -> builder.or(
+ builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"),
+ builder.like(builder.upper(root.get("description")), "%" + criteria.getLike().toUpperCase() + "%")));
if (criteria.getStatus() != null)
query.where((builder, root) -> builder.equal(root.get("status"), criteria.getStatus()));
+ if (criteria.getProfileDatasetId() != null)
+ query.where((builder, root) -> builder.equal(root.get("profile").get("id"), criteria.getProfileDatasetId()));
if (criteria.getPeriodEnd() != null)
query.where((builder, root) -> builder.lessThan(root.get("created"), criteria.getPeriodEnd()));
if (criteria.getPeriodStart() != null)
@@ -38,6 +43,18 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa
query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("dmp").get("version"), query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("dmp").get("groupId"), nestedRoot.get("dmp").get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class)));
if (criteria.getDmpIds() != null && !criteria.getDmpIds().isEmpty())
query.where((builder, root) -> root.get("dmp").get("id").in(criteria.getDmpIds()));
+ if (criteria.getRole() != null)
+ query.where((builder, root) -> builder.equal(root.join("dmp").join("users").get("role"), criteria.getRole()));
+ if (criteria.getOrganisations() != null && !criteria.getOrganisations().isEmpty())
+ query.where((builder, root) -> root.join("dmp").join("organisations").get("reference").in(criteria.getOrganisations()));
+ if (criteria.getGrants() != null && !criteria.getGrants().isEmpty())
+ query.where((builder, root) -> root.join("dmp").join("grant").get("id").in(criteria.getGrants()));
+ if (criteria.getCollaborators() != null && !criteria.getCollaborators().isEmpty())
+ query.where((builder, root) -> root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators()));
+ if (criteria.getDatasetTemplates() != null && !criteria.getDatasetTemplates().isEmpty())
+ query.where(((builder, root) -> root.get("profile").get("id").in(criteria.getDatasetTemplates())));
+ query.where(((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.DELETED.getValue())));
+ query.where(((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.CANCELED.getValue())));
return query;
}
@@ -48,18 +65,30 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa
@Override
public Dataset find(UUID id) {
- return getDatabaseService().getQueryable(Dataset.class).where((builder, root) -> builder.equal((root.get("id")), id)).getSingle();
+ return getDatabaseService().getQueryable(Dataset.class)
+ .where((builder, root) -> builder.and(builder.notEqual(root.get("status"),Dataset.Status.DELETED.getValue()), builder.notEqual(root.get("status"),Dataset.Status.CANCELED.getValue()), builder.equal((root.get("id")), id))).getSingle();
}
@Override
public Dataset find(UUID id, String hint) {
- return getDatabaseService().getQueryable(Dataset.getHints(), Dataset.class).withHint(hint).where((builder, root) -> builder.equal((root.get("id")), id)).getSingle();
+ return getDatabaseService().getQueryable(Dataset.getHints(), Dataset.class).withHint(hint)
+ .where((builder, root) -> builder.and(builder.notEqual(root.get("status"),Dataset.Status.DELETED.getValue()), builder.notEqual(root.get("status"),Dataset.Status.CANCELED.getValue()), builder.equal((root.get("id")), id))).getSingle();
+ }
+
+ @Override
+ public Dataset isPublicDataset(UUID id) {
+ QueryableList query = getDatabaseService().getQueryable(Dataset.getHints(), Dataset.class);
+ query.where(((builder, root) -> builder.equal(root.get("id"), id)));
+
+ return query.withHint("datasetListingModel").getSingle();
}
@Override
public QueryableList getAuthenticated(QueryableList query, UserInfo principal) {
- query.where((builder, root) -> builder.or(builder.equal(root.get("dmp").get("creator"), principal), builder.isMember(principal, root.get("dmp").get("users"))
- , builder.equal(root.get("isPublic"), true)));
+ if (principal.getId() == null) query.where((builder, root) -> builder.equal(root.get("isPublic"), true));
+ else {
+ query.where((builder, root) -> builder.or(builder.equal(root.get("dmp").get("creator"), principal), builder.equal(root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal.getId())));
+ }
return query;
}
@@ -73,6 +102,7 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa
return this.getDatabaseService().getQueryable(Dataset.class);
}
+ @Async
public CompletableFuture createOrUpdateAsync(Dataset item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetExternalDatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetExternalDatasetDaoImpl.java
index 25e1b09fa..ed76b6376 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetExternalDatasetDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetExternalDatasetDaoImpl.java
@@ -6,6 +6,7 @@ import eu.eudat.data.entities.DatasetExternalDataset;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
@@ -33,6 +34,7 @@ public class DatasetExternalDatasetDaoImpl extends DatabaseAccess builder.equal(root.get("id"), id)).getSingle();
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java
index a9bcfaa70..42a7f8082 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetProfileDaoImpl.java
@@ -5,9 +5,14 @@ import eu.eudat.data.dao.criteria.DatasetProfileCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.queryable.QueryableList;
+import eu.eudat.queryable.types.FieldSelectionType;
+import eu.eudat.queryable.types.SelectionField;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
+import javax.persistence.criteria.JoinType;
+import java.util.Arrays;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@@ -23,7 +28,31 @@ public class DatasetProfileDaoImpl extends DatabaseAccess implem
public QueryableList getWithCriteria(DatasetProfileCriteria criteria) {
QueryableList query = getDatabaseService().getQueryable(DatasetProfile.class);
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
- query.where((builder, root) -> builder.like(root.get("label"), "%" + criteria.getLike() + "%"));
+ query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"));
+ if (!criteria.getAllVersions())
+ query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("version"),
+ query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("groupId"),
+ nestedRoot.get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "version")), String.class)));
+ if (criteria.getGroupIds() != null && !criteria.getGroupIds().isEmpty())
+ query.where((builder, root) -> root.get("groupId").in(criteria.getGroupIds()));
+ if (criteria.getFilter() != null && criteria.getUserId() != null) {
+ if (criteria.getFilter().equals(DatasetProfileCriteria.DatasetProfileFilter.DMPs.getValue())) {
+ query.initSubQuery(UUID.class).where((builder, root) ->
+ builder.and(root.get("id").in(
+ query.subQuery((builder1, root1) -> builder1.equal(root1.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), criteria.getUserId()),
+ Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id")))),
+ builder.notEqual(root.get("id"), criteria.getUserId())));
+ //query.where(((builder, root) -> builder.equal(root.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), criteria.getUserId())));
+ }
+ if (criteria.getFilter().equals(DatasetProfileCriteria.DatasetProfileFilter.Datasets.getValue())) {
+ query.initSubQuery(UUID.class).where((builder, root) ->
+ builder.and(root.get("id").in(
+ query.subQuery((builder1, root1) -> builder1.equal(root1.join("dataset", JoinType.LEFT).join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), criteria.getUserId()),
+ Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id")))),
+ builder.notEqual(root.get("id"), criteria.getUserId())));
+ }
+ }
+ query.where(((builder, root) -> builder.notEqual(root.get("status"), DatasetProfile.Status.DELETED.getValue())));
return query;
}
@@ -52,6 +81,7 @@ public class DatasetProfileDaoImpl extends DatabaseAccess implem
return this.getDatabaseService().getQueryable(DatasetProfile.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(DatasetProfile item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetServiceDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetServiceDaoImpl.java
index 6ffcf1adf..fd40d37ae 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetServiceDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetServiceDaoImpl.java
@@ -7,6 +7,7 @@ import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DatasetService;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
@@ -28,6 +29,7 @@ public class DatasetServiceDaoImpl extends DatabaseAccess implem
return this.getDatabaseService().createOrUpdate(item, DatasetService.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(DatasetService item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ExternalDatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ExternalDatasetDaoImpl.java
index ee0242250..76b1ec4f7 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ExternalDatasetDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ExternalDatasetDaoImpl.java
@@ -6,6 +6,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.ExternalDataset;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
@@ -24,7 +25,7 @@ public class ExternalDatasetDaoImpl extends DatabaseAccess impl
public QueryableList getWithCriteria(ExternalDatasetCriteria criteria) {
QueryableList query = this.getDatabaseService().getQueryable(ExternalDataset.class);
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
- query.where((builder, root) -> builder.like(root.get("label"), "%" + criteria.getLike() + "%"));
+ query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"));
return query;
}
@@ -48,6 +49,7 @@ public class ExternalDatasetDaoImpl extends DatabaseAccess impl
return this.getDatabaseService().getQueryable(ExternalDataset.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(ExternalDataset item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDao.java
new file mode 100644
index 000000000..7c884a9e5
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDao.java
@@ -0,0 +1,16 @@
+package eu.eudat.data.dao.entities;
+
+import eu.eudat.data.dao.DatabaseAccessLayer;
+import eu.eudat.data.dao.criteria.FunderCriteria;
+import eu.eudat.data.entities.Funder;
+import eu.eudat.data.entities.UserInfo;
+import eu.eudat.queryable.QueryableList;
+
+import java.util.UUID;
+
+public interface FunderDao extends DatabaseAccessLayer {
+
+ QueryableList getWithCritetia(FunderCriteria criteria);
+
+ QueryableList getAuthenticated(QueryableList query, UserInfo principal);
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDaoImpl.java
new file mode 100644
index 000000000..8335f71e5
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/FunderDaoImpl.java
@@ -0,0 +1,70 @@
+package eu.eudat.data.dao.entities;
+
+import eu.eudat.data.dao.DatabaseAccess;
+import eu.eudat.data.dao.criteria.FunderCriteria;
+import eu.eudat.data.dao.databaselayer.service.DatabaseService;
+import eu.eudat.data.entities.Funder;
+import eu.eudat.data.entities.UserInfo;
+import eu.eudat.queryable.QueryableList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+
+@Component("funderDao")
+public class FunderDaoImpl extends DatabaseAccess implements FunderDao {
+
+ @Autowired
+ public FunderDaoImpl(DatabaseService databaseService) {
+ super(databaseService);
+ }
+
+ @Override
+ public QueryableList getWithCritetia(FunderCriteria criteria) {
+ QueryableList query = getDatabaseService().getQueryable(Funder.class);
+ if (criteria.getLike() != null && !criteria.getLike().isEmpty())
+ query.where((builder, root) ->
+ builder.or(builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"),
+ builder.or(builder.like(builder.upper(root.get("definition")), "%" + criteria.getLike().toUpperCase() + "%"))));
+ if (criteria.getReference() != null)
+ query.where((builder, root) -> builder.like(root.get("reference"), "%" + criteria.getReference() + "%"));
+ query.where((builder, root) -> builder.notEqual(root.get("status"), Funder.Status.DELETED.getValue()));
+ return query;
+ }
+
+ @Override
+ public QueryableList getAuthenticated(QueryableList query, UserInfo principal) {
+ return null;
+ }
+
+ @Override
+ public Funder createOrUpdate(Funder item) {
+ return this.getDatabaseService().createOrUpdate(item, Funder.class);
+ }
+
+ @Override
+ public CompletableFuture createOrUpdateAsync(Funder item) {
+ return null;
+ }
+
+ @Override
+ public Funder find(UUID id) {
+ return this.getDatabaseService().getQueryable(Funder.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
+ }
+
+ @Override
+ public Funder find(UUID id, String hint) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void delete(Funder item) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public QueryableList asQueryable() {
+ return this.getDatabaseService().getQueryable(Funder.class);
+ }
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDao.java
new file mode 100644
index 000000000..ef9316632
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDao.java
@@ -0,0 +1,17 @@
+package eu.eudat.data.dao.entities;
+
+import eu.eudat.data.dao.DatabaseAccessLayer;
+import eu.eudat.data.dao.criteria.GrantCriteria;
+import eu.eudat.data.entities.Grant;
+import eu.eudat.data.entities.UserInfo;
+import eu.eudat.queryable.QueryableList;
+
+import java.util.UUID;
+
+public interface GrantDao extends DatabaseAccessLayer {
+
+ QueryableList getWithCriteria(GrantCriteria criteria);
+
+ QueryableList getAuthenticated(QueryableList query, UserInfo principal);
+
+}
\ No newline at end of file
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java
new file mode 100644
index 000000000..47d22c064
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java
@@ -0,0 +1,93 @@
+package eu.eudat.data.dao.entities;
+
+import eu.eudat.data.dao.DatabaseAccess;
+import eu.eudat.data.dao.criteria.GrantCriteria;
+import eu.eudat.data.dao.databaselayer.service.DatabaseService;
+import eu.eudat.data.entities.DMP;
+import eu.eudat.data.entities.Grant;
+import eu.eudat.data.entities.UserInfo;
+import eu.eudat.queryable.QueryableList;
+import eu.eudat.types.grant.GrantStateType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import javax.persistence.criteria.JoinType;
+import java.util.Date;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+
+@Component("grantDao")
+public class GrantDaoImpl extends DatabaseAccess implements GrantDao {
+
+ @Autowired
+ public GrantDaoImpl(DatabaseService databaseService) {
+ super(databaseService);
+ }
+
+ @Override
+ public QueryableList getWithCriteria(GrantCriteria criteria) {
+ QueryableList query = getDatabaseService().getQueryable(Grant.class);
+ if (criteria.getLike() != null && !criteria.getLike().isEmpty())
+ query.where((builder, root) ->
+ builder.or(builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"),
+ builder.or(builder.like(builder.upper(root.get("description")), "%" + criteria.getLike().toUpperCase() + "%"))));
+ if (criteria.getPeriodEnd() != null)
+ query.where((builder, root) -> builder.lessThan(root.get("enddate"), criteria.getPeriodEnd()));
+ if (criteria.getPeriodStart() != null)
+ query.where((builder, root) -> builder.greaterThan(root.get("startdate"), criteria.getPeriodStart()));
+ if (criteria.getReference() != null)
+ query.where((builder, root) -> builder.like(root.get("reference"), "%" + criteria.getReference() + "%"));
+ if (criteria.getGrantStateType() != null) {
+ if (criteria.getGrantStateType().equals(GrantStateType.FINISHED.getValue()))
+ query.where((builder, root) -> builder.lessThan(root.get("enddate"), new Date()));
+ if (criteria.getGrantStateType().equals(GrantStateType.ONGOING.getValue()))
+ query.where((builder, root) ->
+ builder.or(builder.greaterThan(root.get("enddate"), new Date())
+ , builder.isNull(root.get("enddate"))));
+ }
+ if (criteria.isPublic()) {
+ query.where((builder, root) -> builder.equal(root.join("dmps").get("status"), DMP.DMPStatus.FINALISED.getValue())).distinct();
+ }
+ if (criteria.getFunderId() != null && !criteria.getFunderId().trim().isEmpty())
+ query.where((builder, root) -> builder.equal(root.get("funder").get("id"), UUID.fromString(criteria.getFunderId())));
+ query.where((builder, root) -> builder.notEqual(root.get("status"), Grant.Status.DELETED.getValue()));
+ return query;
+ }
+
+ @Override
+ public Grant createOrUpdate(Grant item) {
+ return getDatabaseService().createOrUpdate(item, Grant.class);
+ }
+
+ @Override
+ public Grant find(UUID id) {
+ return getDatabaseService().getQueryable(Grant.class).where((builder, root) -> builder.equal((root.get("id")), id)).getSingle();
+ }
+
+ @Override
+ public void delete(Grant item) {
+ this.getDatabaseService().delete(item);
+ }
+
+ @Override
+ public QueryableList asQueryable() {
+ return this.getDatabaseService().getQueryable(Grant.class);
+ }
+
+ public QueryableList getAuthenticated(QueryableList query, UserInfo principal) {
+ query.where((builder, root) -> builder.or(builder.equal(root.get("creationUser"), principal), builder.equal(root.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal.getId()))).distinct();
+ return query;
+ }
+
+ @Async
+ @Override
+ public CompletableFuture createOrUpdateAsync(Grant item) {
+ return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
+ }
+
+ @Override
+ public Grant find(UUID id, String hint) {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/InvitationDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/InvitationDaoImpl.java
index 7b9e66332..eba6d5669 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/InvitationDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/InvitationDaoImpl.java
@@ -6,6 +6,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.Invitation;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.UUID;
@@ -45,6 +46,7 @@ public class InvitationDaoImpl extends DatabaseAccess implements Inv
return this.getDatabaseService().getQueryable(Invitation.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(Invitation item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/LoginConfirmationEmailDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/LoginConfirmationEmailDao.java
new file mode 100644
index 000000000..71edce65e
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/LoginConfirmationEmailDao.java
@@ -0,0 +1,13 @@
+package eu.eudat.data.dao.entities;
+
+import eu.eudat.data.dao.DatabaseAccessLayer;
+import eu.eudat.data.dao.criteria.LoginConfirmationEmailCriteria;
+import eu.eudat.data.entities.LoginConfirmationEmail;
+import eu.eudat.queryable.QueryableList;
+
+import java.util.UUID;
+
+public interface LoginConfirmationEmailDao extends DatabaseAccessLayer {
+
+ QueryableList getWithCriteria(LoginConfirmationEmailCriteria criteria);
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/LoginConfirmationEmailDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/LoginConfirmationEmailDaoImpl.java
new file mode 100644
index 000000000..691c6b663
--- /dev/null
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/LoginConfirmationEmailDaoImpl.java
@@ -0,0 +1,56 @@
+package eu.eudat.data.dao.entities;
+
+import eu.eudat.data.dao.DatabaseAccess;
+import eu.eudat.data.dao.criteria.LoginConfirmationEmailCriteria;
+import eu.eudat.data.dao.databaselayer.service.DatabaseService;
+import eu.eudat.data.entities.LoginConfirmationEmail;
+import eu.eudat.queryable.QueryableList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+
+@Service("LoginConfirmationEmailDao")
+public class LoginConfirmationEmailDaoImpl extends DatabaseAccess implements LoginConfirmationEmailDao {
+
+ @Autowired
+ public LoginConfirmationEmailDaoImpl(DatabaseService databaseService) {
+ super(databaseService);
+ }
+
+ @Override
+ public QueryableList getWithCriteria(LoginConfirmationEmailCriteria criteria) {
+ return null;
+ }
+
+ @Override
+ public LoginConfirmationEmail createOrUpdate(LoginConfirmationEmail item) {
+ return this.getDatabaseService().createOrUpdate(item, LoginConfirmationEmail.class);
+ }
+
+ @Override
+ public CompletableFuture createOrUpdateAsync(LoginConfirmationEmail item) {
+ return null;
+ }
+
+ @Override
+ public LoginConfirmationEmail find(UUID id) {
+ return this.getDatabaseService().getQueryable(LoginConfirmationEmail.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
+ }
+
+ @Override
+ public LoginConfirmationEmail find(UUID id, String hint) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void delete(LoginConfirmationEmail item) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public QueryableList asQueryable() {
+ return this.getDatabaseService().getQueryable(LoginConfirmationEmail.class);
+ }
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDao.java
index 54d8e8470..900873ada 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDao.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDao.java
@@ -3,6 +3,7 @@ package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.dao.criteria.OrganisationCriteria;
import eu.eudat.data.entities.Organisation;
+import eu.eudat.data.entities.UserInfo;
import eu.eudat.queryable.QueryableList;
import java.util.UUID;
@@ -10,5 +11,6 @@ import java.util.UUID;
public interface OrganisationDao extends DatabaseAccessLayer {
QueryableList getWithCriteria(OrganisationCriteria criteria);
+ QueryableList getAuthenticated(QueryableList query, UserInfo principal);
}
\ No newline at end of file
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java
index 57a82ea8f..4240840f4 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java
@@ -3,11 +3,15 @@ package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.criteria.OrganisationCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
+import eu.eudat.data.entities.DMP;
import eu.eudat.data.entities.Organisation;
+import eu.eudat.data.entities.UserInfo;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
+import javax.persistence.criteria.JoinType;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@@ -24,6 +28,12 @@ public class OrganisationDaoImpl extends DatabaseAccess implements
QueryableList query = this.getDatabaseService().getQueryable(Organisation.class);
if (criteria.getLike() != null)
query.where((builder, root) -> builder.equal(root.get("reference"), criteria.getLike()));
+ if (criteria.getLabelLike() != null) {
+ query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLabelLike().toUpperCase() + "%"));
+ }
+ if (criteria.getPublic() != null && criteria.getPublic()) {
+ query.where((builder, root) -> builder.equal(root.join("dmps", JoinType.LEFT).get("status"), DMP.DMPStatus.FINALISED.getValue()));
+ }
return query;
}
@@ -47,11 +57,17 @@ public class OrganisationDaoImpl extends DatabaseAccess implements
return this.getDatabaseService().getQueryable(Organisation.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(Organisation item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
+ public QueryableList getAuthenticated(QueryableList query, UserInfo principal) {
+ query.where((builder, root) -> builder.equal(root.join("dmps").get("creator"), principal));
+ return query;
+ }
+
@Override
public Organisation find(UUID id, String hint) {
throw new UnsupportedOperationException();
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDao.java
index a9cadd97f..1c82fc0ed 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDao.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDao.java
@@ -10,8 +10,7 @@ import java.util.UUID;
public interface ProjectDao extends DatabaseAccessLayer {
- QueryableList getWithCriteria(ProjectCriteria criteria);
+ QueryableList getWithCritetia(ProjectCriteria criteria);
- QueryableList getAuthenticated(QueryableList query, UserInfo principal);
-
-}
\ No newline at end of file
+ QueryableList getAuthenticated(QueryableList query, UserInfo principal);
+}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java
index cbd98f97e..eac00713a 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java
@@ -6,68 +6,64 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.Project;
import eu.eudat.data.entities.UserInfo;
import eu.eudat.queryable.QueryableList;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
import javax.persistence.criteria.JoinType;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
-@Component("projectDao")
+@Service("projectDao")
public class ProjectDaoImpl extends DatabaseAccess implements ProjectDao {
- @Autowired
- public ProjectDaoImpl(DatabaseService databaseService) {
- super(databaseService);
- }
+ public ProjectDaoImpl(DatabaseService databaseService) {
+ super(databaseService);
+ }
- @Override
- public QueryableList getWithCriteria(ProjectCriteria criteria) {
- QueryableList query = getDatabaseService().getQueryable(Project.class);
- if (criteria.getLike() != null && !criteria.getLike().isEmpty())
- query.where((builder, root) -> builder.like(root.get("label"), "%" + criteria.getLike() + "%"));
- if (criteria.getPeriodEnd() != null)
- query.where((builder, root) -> builder.lessThan(root.get("enddate"), criteria.getPeriodEnd()));
- if (criteria.getPeriodStart() != null)
- query.where((builder, root) -> builder.greaterThan(root.get("startdate"), criteria.getPeriodStart()));
- if (criteria.getReference() != null)
- query.where((builder, root) -> builder.equal(root.get("reference"), criteria.getReference()));
- query.where((builder, root) -> builder.notEqual(root.get("status"), Project.Status.DELETED.getValue()));
- return query;
- }
+ @Override
+ public QueryableList getWithCritetia(ProjectCriteria criteria) {
+ QueryableList query = getDatabaseService().getQueryable(Project.class);
+ if (criteria.getLike() != null && !criteria.getLike().isEmpty())
+ query.where((builder, root) ->
+ builder.or(builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"),
+ builder.or(builder.like(builder.upper(root.get("description")), "%" + criteria.getLike().toUpperCase() + "%"))));
+ if (criteria.getReference() != null)
+ query.where((builder, root) -> builder.like(root.get("reference"), "%" + criteria.getReference() + "%"));
+ query.where((builder, root) -> builder.notEqual(root.get("status"), Project.Status.DELETED.getValue()));
+ return query;
+ }
- @Override
- public Project createOrUpdate(Project item) {
- return getDatabaseService().createOrUpdate(item, Project.class);
- }
+ public QueryableList getAuthenticated(QueryableList query, UserInfo principal) {
+ query.where((builder, root) -> builder.or(builder.equal(root.get("creationUser"), principal), builder.equal(root.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal.getId()))).distinct();
+ return query;
+ }
- @Override
- public Project find(UUID id) {
- return getDatabaseService().getQueryable(Project.class).where((builder, root) -> builder.equal((root.get("id")), id)).getSingle();
- }
+ @Override
+ public Project createOrUpdate(Project item) {
+ return this.getDatabaseService().createOrUpdate(item, Project.class);
+ }
- @Override
- public void delete(Project item) {
- this.getDatabaseService().delete(item);
- }
+ @Override
+ public CompletableFuture createOrUpdateAsync(Project item) {
+ return null;
+ }
- @Override
- public QueryableList asQueryable() {
- return this.getDatabaseService().getQueryable(Project.class);
- }
+ @Override
+ public Project find(UUID id) {
+ return this.getDatabaseService().getQueryable(Project.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
+ }
- public QueryableList getAuthenticated(QueryableList query, UserInfo principal) {
- query.where((builder, root) -> builder.or(builder.equal(root.get("creationUser"), principal), builder.isMember(principal, root.join("dmps", JoinType.LEFT).get("users")))).distinct();
- return query;
- }
+ @Override
+ public Project find(UUID id, String hint) {
+ throw new UnsupportedOperationException();
+ }
- @Override
- public CompletableFuture createOrUpdateAsync(Project item) {
- return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
- }
+ @Override
+ public void delete(Project item) {
+ throw new UnsupportedOperationException();
+ }
- @Override
- public Project find(UUID id, String hint) {
- throw new UnsupportedOperationException();
- }
+ @Override
+ public QueryableList asQueryable() {
+ return this.getDatabaseService().getQueryable(Project.class);
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/RegistryDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/RegistryDaoImpl.java
index f4bb048dc..c7ed94b75 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/RegistryDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/RegistryDaoImpl.java
@@ -6,6 +6,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.Registry;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
@@ -47,6 +48,7 @@ public class RegistryDaoImpl extends DatabaseAccess implements Registr
return this.getDatabaseService().getQueryable(Registry.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(Registry item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ResearcherDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ResearcherDaoImpl.java
index d9318903d..086adf820 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ResearcherDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ResearcherDaoImpl.java
@@ -6,6 +6,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.Researcher;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
@@ -21,11 +22,11 @@ public class ResearcherDaoImpl extends DatabaseAccess implements Res
@Override
public QueryableList getWithCriteria(ResearcherCriteria criteria) {
- QueryableList query = this.getDatabaseService().getQueryable(Researcher.class);
- if (criteria.getLike() != null)
- query.where((builder, root) -> builder.equal(root.get("reference"), criteria.getLike()));
- if (criteria.getName() != null)
- query.where((builder, root) -> builder.equal(root.get("label"), criteria.getName()));
+ QueryableList query = asQueryable();
+ if (criteria.getLike() != null && !criteria.getLike().isEmpty())
+ query.where((builder, root) ->builder.or(builder.like(builder.upper(root.get("reference")), "%" + criteria.getLike().toUpperCase() + "%")));
+ if (criteria.getName() != null && !criteria.getName().isEmpty())
+ query.where((builder, root) ->builder.or(builder.like(builder.upper(root.get("label")), "%" + criteria.getName().toUpperCase() + "%")));
return query;
}
@@ -49,6 +50,7 @@ public class ResearcherDaoImpl extends DatabaseAccess implements Res
return this.getDatabaseService().getQueryable(Researcher.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(Researcher item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ServiceDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ServiceDaoImpl.java
index cee85c95c..00406ab91 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ServiceDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ServiceDaoImpl.java
@@ -6,6 +6,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.Service;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
@@ -47,6 +48,7 @@ public class ServiceDaoImpl extends DatabaseAccess implements ServiceDa
return this.getDatabaseService().getQueryable(Service.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(Service item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDaoImpl.java
index 9f23d023f..eb99c65e3 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDaoImpl.java
@@ -5,6 +5,7 @@ import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.UserDMP;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
@@ -41,6 +42,7 @@ public class UserDmpDaoImpl extends DatabaseAccess implements UserDmpDa
return this.getDatabaseService().getQueryable(UserDMP.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(UserDMP item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java
index a6f3e7b8e..4abb033f5 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java
@@ -11,4 +11,5 @@ public interface UserInfoDao extends DatabaseAccessLayer {
QueryableList getWithCriteria(UserInfoCriteria criteria);
+ QueryableList getAuthenticated(QueryableList users, UUID principalId);
}
\ No newline at end of file
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java
index 7d601863c..60526bd6a 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java
@@ -5,59 +5,76 @@ import eu.eudat.data.dao.criteria.UserInfoCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.UserInfo;
import eu.eudat.queryable.QueryableList;
+import eu.eudat.queryable.types.FieldSelectionType;
+import eu.eudat.queryable.types.SelectionField;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
+import java.util.Arrays;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Component("userInfoDao")
public class UserInfoDaoImpl extends DatabaseAccess implements UserInfoDao {
- @Autowired
- public UserInfoDaoImpl(DatabaseService databaseService) {
- super(databaseService);
- }
+ @Autowired
+ public UserInfoDaoImpl(DatabaseService databaseService) {
+ super(databaseService);
+ }
- @Override
- public QueryableList getWithCriteria(UserInfoCriteria criteria) {
- QueryableList users = this.getDatabaseService().getQueryable(UserInfo.class);
- if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty())
- users.where((builder, root) -> root.join("userRoles").get("role").in(criteria.getAppRoles()));
- if (criteria.getLike() != null)
- users.where((builder, root) -> builder.or(builder.like(root.get("name"), "%" + criteria.getLike() + "%"), builder.like(root.get("email"), "%" + criteria.getLike() + "%")));
- if (criteria.getEmail() != null)
- users.where((builder, root) -> builder.equal(root.get("email"), criteria.getEmail()));
- return users;
- }
+ @Override
+ public QueryableList getWithCriteria(UserInfoCriteria criteria) {
+ QueryableList users = this.getDatabaseService().getQueryable(UserInfo.class);
+ if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty())
+ users.where((builder, root) -> root.join("userRoles").get("role").in(criteria.getAppRoles()));
+ if (criteria.getLike() != null)
+ users.where((builder, root) -> builder.or(builder.like(builder.upper(root.get("name")), "%" + criteria.getLike().toUpperCase() + "%"), builder.like(root.get("email"), "%" + criteria.getLike() + "%")));
+ if (criteria.getEmail() != null)
+ users.where((builder, root) -> builder.equal(root.get("email"), criteria.getEmail()));
+ if (criteria.getCollaboratorLike() != null)
+ users.where((builder, root) -> builder.or(builder.like(builder.upper(root.get("name")), "%" + criteria.getCollaboratorLike().toUpperCase() + "%"), builder.like(root.get("email"), "%" + criteria.getCollaboratorLike() + "%")));
+ return users;
+ }
- @Override
- public UserInfo createOrUpdate(UserInfo item) {
- return this.getDatabaseService().createOrUpdate(item, UserInfo.class);
- }
+ @Override
+ public QueryableList getAuthenticated(QueryableList users, UUID principalId) {
+ users.initSubQuery(UUID.class).where((builder, root) ->
+ builder.and(root.join("dmps").get("id").in(
+ users.subQuery((builder1, root1) -> builder1.equal(root1.get("id"), principalId),
+ Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmps:id")))),
+ builder.notEqual(root.get("id"), principalId)));
+ return users;
+ }
- @Override
- public UserInfo find(UUID id) {
- return this.getDatabaseService().getQueryable(UserInfo.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
- }
+ @Override
+ public UserInfo createOrUpdate(UserInfo item) {
+ return this.getDatabaseService().createOrUpdate(item, UserInfo.class);
+ }
- @Override
- public void delete(UserInfo item) {
- this.getDatabaseService().delete(item);
- }
+ @Override
+ public UserInfo find(UUID id) {
+ return this.getDatabaseService().getQueryable(UserInfo.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
+ }
- @Override
- public QueryableList asQueryable() {
- return this.getDatabaseService().getQueryable(UserInfo.class);
- }
+ @Override
+ public void delete(UserInfo item) {
+ this.getDatabaseService().delete(item);
+ }
- @Override
- public CompletableFuture createOrUpdateAsync(UserInfo item) {
- return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
- }
+ @Override
+ public QueryableList asQueryable() {
+ return this.getDatabaseService().getQueryable(UserInfo.class);
+ }
- @Override
- public UserInfo find(UUID id, String hint) {
- throw new UnsupportedOperationException();
- }
+ @Async
+ @Override
+ public CompletableFuture createOrUpdateAsync(UserInfo item) {
+ return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
+ }
+
+ @Override
+ public UserInfo find(UUID id, String hint) {
+ throw new UnsupportedOperationException();
+ }
}
\ No newline at end of file
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java
index c22a51747..96a1522c4 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java
@@ -7,6 +7,7 @@ import eu.eudat.data.entities.UserInfo;
import eu.eudat.data.entities.UserRole;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -57,6 +58,7 @@ public class UserRoleDaoImpl extends DatabaseAccess implements UserRol
return this.getDatabaseService().getQueryable(UserRole.class);
}
+ @Async
@Override
public CompletableFuture createOrUpdateAsync(UserRole item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/Content.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/Content.java
index 99217114a..cd3bb937e 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/Content.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/Content.java
@@ -1,9 +1,11 @@
package eu.eudat.data.entities;
+import eu.eudat.data.entities.helpers.EntityBinder;
import eu.eudat.queryable.queryableentity.DataEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
+import java.util.List;
import java.util.UUID;
/**
@@ -13,134 +15,141 @@ import java.util.UUID;
@Table(name = "\"Content\"")
public class Content implements DataEntity {
- public enum ParentType {
- PROJECT(0);
+ public enum ParentType {
+ GRANT(0);
- private int value;
+ private int value;
- private ParentType(int value) {
- this.value = value;
- }
+ private ParentType(int value) {
+ this.value = value;
+ }
- public int getValue() {
- return value;
- }
+ public int getValue() {
+ return value;
+ }
- public static ParentType fromInteger(int value) {
- switch (value) {
- case 0:
- return PROJECT;
- default:
- throw new RuntimeException("Unsupported Content Parent Type Status");
- }
- }
- }
+ public static ParentType fromInteger(int value) {
+ switch (value) {
+ case 0:
+ return GRANT;
+ default:
+ throw new RuntimeException("Unsupported Content Parent Type Status");
+ }
+ }
+ }
- public enum LocationType {
- EXTERNAL(0), INTERNAL(1);
+ public enum LocationType {
+ EXTERNAL(0), INTERNAL(1);
- private Integer value;
+ private Integer value;
- private LocationType(Integer value) {
- this.value = value;
- }
+ private LocationType(Integer value) {
+ this.value = value;
+ }
- public Integer getValue() {
- return value;
- }
+ public Integer getValue() {
+ return value;
+ }
- public static LocationType fromInteger(int value) {
- switch (value) {
- case 0:
- return EXTERNAL;
- case 1:
- return INTERNAL;
- default:
- throw new RuntimeException("Unsupported Content Location Type");
- }
- }
- }
+ public static LocationType fromInteger(int value) {
+ switch (value) {
+ case 0:
+ return EXTERNAL;
+ case 1:
+ return INTERNAL;
+ default:
+ throw new RuntimeException("Unsupported Content Location Type");
+ }
+ }
+ }
- @Id
- @GeneratedValue
- @GenericGenerator(name = "uuid2", strategy = "uuid2")
- @Column(name = "\"Id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
- private UUID id;
+ @Id
+ @GeneratedValue
+ @GenericGenerator(name = "uuid2", strategy = "uuid2")
+ @Column(name = "\"Id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
+ private UUID id;
- @Column(name = "\"Filename\"", nullable = false)
- private String label;
+ @Column(name = "\"Filename\"", nullable = false)
+ private String label;
- @Column(name = "\"Extension\"", nullable = false)
- private String extension;
+ @Column(name = "\"Extension\"", nullable = false)
+ private String extension;
- @Column(name = "\"ParentType\"", nullable = false)
- private Integer parentType;
+ @Column(name = "\"ParentType\"", nullable = false)
+ private Integer parentType;
- @Column(name = "\"Uri\"", nullable = false)
- private String uri;
+ @Column(name = "\"Uri\"", nullable = false)
+ private String uri;
- @Column(name = "\"LocationType\"", nullable = false)
- private Integer locationType;
+ @Column(name = "\"LocationType\"", nullable = false)
+ private Integer locationType;
- public UUID getId() {
- return id;
- }
+ public UUID getId() {
+ return id;
+ }
- public void setId(UUID id) {
- this.id = id;
- }
+ public void setId(UUID id) {
+ this.id = id;
+ }
- public String getLabel() {
- return label;
- }
+ public String getLabel() {
+ return label;
+ }
- public void setLabel(String label) {
- this.label = label;
- }
+ public void setLabel(String label) {
+ this.label = label;
+ }
- public String getExtension() {
- return extension;
- }
+ public String getExtension() {
+ return extension;
+ }
- public void setExtension(String extension) {
- this.extension = extension;
- }
+ public void setExtension(String extension) {
+ this.extension = extension;
+ }
- public Integer getParentType() {
- return parentType;
- }
+ public Integer getParentType() {
+ return parentType;
+ }
- public void setParentType(Integer parentType) {
- this.parentType = parentType;
- }
+ public void setParentType(Integer parentType) {
+ this.parentType = parentType;
+ }
- public String getUri() {
- return uri;
- }
+ public String getUri() {
+ return uri;
+ }
- public void setUri(String uri) {
- this.uri = uri;
- }
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
- public Integer getLocationType() {
- return locationType;
- }
+ public Integer getLocationType() {
+ return locationType;
+ }
- public void setLocationType(Integer locationType) {
- this.locationType = locationType;
- }
+ public void setLocationType(Integer locationType) {
+ this.locationType = locationType;
+ }
- @Override
- public void update(Content entity) {
- this.extension = entity.getExtension();
- this.label = entity.getLabel();
- this.locationType = entity.getLocationType();
- this.parentType = entity.getParentType();
- this.uri = entity.getUri();
- }
+ @Override
+ public void update(Content entity) {
+ this.extension = entity.getExtension();
+ this.label = entity.getLabel();
+ this.locationType = entity.getLocationType();
+ this.parentType = entity.getParentType();
+ this.uri = entity.getUri();
+ }
- @Override
- public UUID getKeys() {
- return this.id;
- }
+ @Override
+ public UUID getKeys() {
+ return this.id;
+ }
+
+ @Override
+ public Content buildFromTuple(List tuple, List fields, String base) {
+ String currentBase = base.isEmpty() ? "" : base + ".";
+ if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id");
+ return this;
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/Credential.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/Credential.java
index 91330c29e..7181abfb9 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/Credential.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/Credential.java
@@ -1,143 +1,157 @@
package eu.eudat.data.entities;
+import eu.eudat.data.converters.DateToUTCConverter;
+import eu.eudat.data.entities.helpers.EntityBinder;
import eu.eudat.queryable.queryableentity.DataEntity;
import javax.persistence.*;
import java.util.Date;
+import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "\"Credential\"")
@NamedEntityGraphs({
- @NamedEntityGraph(
- name = "credentialUserInfo",
- attributeNodes = {@NamedAttributeNode("userInfo")})
+ @NamedEntityGraph(
+ name = "credentialUserInfo",
+ attributeNodes = {@NamedAttributeNode("userInfo")})
})
-public class Credential implements DataEntity {
+public class Credential implements DataEntity {
- @Id
- @Column(name = "\"Id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
- private UUID id;
+ @Id
+ @Column(name = "\"Id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
+ private UUID id;
- @ManyToOne
- @JoinColumn(name = "\"UserId\"", nullable = false)
- private UserInfo userInfo;
+ @ManyToOne
+ @JoinColumn(name = "\"UserId\"", nullable = false)
+ private UserInfo userInfo;
- @Column(name = "\"Status\"", nullable = false)
- private Integer status;
+ @Column(name = "\"Status\"", nullable = false)
+ private Integer status;
- @Column(name = "\"Provider\"", nullable = false)
- private Integer provider;
- @Column(name = "\"Public\"", nullable = false)
- private String publicValue;
- @Column(name = "\"Secret\"", nullable = false)
- private String secret;
- @Column(name = "\"CreationTime\"", nullable = false)
- private Date creationTime;
- @Column(name = "\"LastUpdateTime\"", nullable = false)
- private Date lastUpdateTime;
+ @Column(name = "\"Provider\"", nullable = false)
+ private Integer provider;
+ @Column(name = "\"Public\"", nullable = false)
+ private String publicValue;
+ @Column(name = "\"Secret\"", nullable = false)
+ private String secret;
- @Column(name = "\"ExternalId\"", nullable = false)
- private String externalId;
+ @Column(name = "\"CreationTime\"", nullable = false)
+ @Convert(converter = DateToUTCConverter.class)
+ private Date creationTime;
- public UUID getId() {
- return id;
- }
+ @Column(name = "\"LastUpdateTime\"", nullable = false)
+ @Convert(converter = DateToUTCConverter.class)
+ private Date lastUpdateTime;
- public void setId(UUID id) {
- this.id = id;
- }
+ @Column(name = "\"ExternalId\"", nullable = false)
+ private String externalId;
- public UserInfo getUserInfo() {
- return userInfo;
- }
+ public UUID getId() {
+ return id;
+ }
- public void setUserInfo(UserInfo userInfo) {
- this.userInfo = userInfo;
- }
+ public void setId(UUID id) {
+ this.id = id;
+ }
- public Integer getStatus() {
- return status;
- }
+ public UserInfo getUserInfo() {
+ return userInfo;
+ }
- public void setStatus(Integer status) {
- this.status = status;
- }
+ public void setUserInfo(UserInfo userInfo) {
+ this.userInfo = userInfo;
+ }
- public Integer getProvider() {
- return provider;
- }
+ public Integer getStatus() {
+ return status;
+ }
- public void setProvider(Integer provider) {
- this.provider = provider;
- }
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
- public String getPublicValue() {
- return publicValue;
- }
+ public Integer getProvider() {
+ return provider;
+ }
- public void setPublicValue(String publicValue) {
- this.publicValue = publicValue;
- }
+ public void setProvider(Integer provider) {
+ this.provider = provider;
+ }
- public String getSecret() {
- return secret;
- }
+ public String getPublicValue() {
+ return publicValue;
+ }
- public void setSecret(String secret) {
- this.secret = secret;
- }
+ public void setPublicValue(String publicValue) {
+ this.publicValue = publicValue;
+ }
- public Date getCreationTime() {
- return creationTime;
- }
+ public String getSecret() {
+ return secret;
+ }
- public void setCreationTime(Date creationTime) {
- this.creationTime = creationTime;
- }
+ public void setSecret(String secret) {
+ this.secret = secret;
+ }
- public Date getLastUpdateTime() {
- return lastUpdateTime;
- }
+ public Date getCreationTime() {
+ return creationTime;
+ }
- public void setLastUpdateTime(Date lastUpdateTime) {
- this.lastUpdateTime = lastUpdateTime;
- }
+ public void setCreationTime(Date creationTime) {
+ this.creationTime = creationTime;
+ }
- public String getExternalId() {
- return externalId;
- }
+ public Date getLastUpdateTime() {
+ return lastUpdateTime;
+ }
- public void setExternalId(String externalId) {
- this.externalId = externalId;
- }
+ public void setLastUpdateTime(Date lastUpdateTime) {
+ this.lastUpdateTime = lastUpdateTime;
+ }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ public String getExternalId() {
+ return externalId;
+ }
- Credential that = (Credential) o;
+ public void setExternalId(String externalId) {
+ this.externalId = externalId;
+ }
- return provider.intValue() == that.provider.intValue();
- }
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
- @Override
- public int hashCode() {
- return provider.intValue();
- }
+ Credential that = (Credential) o;
- @Override
- public void update(Credential entity) {
- this.status = entity.status;
- this.publicValue = entity.getPublicValue();
- this.secret = entity.getSecret();
- this.lastUpdateTime = new Date();
- }
+ return provider.intValue() == that.provider.intValue();
+ }
- @Override
- public UUID getKeys() {
- return this.id;
- }
+ @Override
+ public int hashCode() {
+ return provider.intValue();
+ }
+
+ @Override
+ public void update(Credential entity) {
+ this.status = entity.status;
+ this.publicValue = entity.getPublicValue();
+ this.secret = entity.getSecret();
+ this.lastUpdateTime = new Date();
+ }
+
+ @Override
+ public UUID getKeys() {
+ return this.id;
+ }
+
+ @Override
+ public Credential buildFromTuple(List tuple, List fields, String base) {
+ String currentBase = base.isEmpty() ? "" : base + ".";
+ if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id");
+ return this;
+ }
}
diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java
index 8ccd7c8c6..58ecc4922 100644
--- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java
+++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java
@@ -1,12 +1,13 @@
package eu.eudat.data.entities;
+import eu.eudat.data.converters.DateToUTCConverter;
import eu.eudat.queryable.queryableentity.DataEntity;
import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Type;
import javax.persistence.*;
import java.util.*;
+import java.util.stream.Collectors;
@Entity
@@ -14,13 +15,16 @@ import java.util.*;
@NamedEntityGraphs({
@NamedEntityGraph(
name = "dataManagementPlanListingModel",
- attributeNodes = {@NamedAttributeNode("organisations"), @NamedAttributeNode("researchers"),
- @NamedAttributeNode("project"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile"), @NamedAttributeNode("dataset")}
+ attributeNodes = {@NamedAttributeNode("organisations"), @NamedAttributeNode("researchers"), @NamedAttributeNode("associatedDmps"),
+ @NamedAttributeNode("grant"), @NamedAttributeNode(value = "users", subgraph = "users"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile"), @NamedAttributeNode("dataset")},
+ subgraphs = {
+ @NamedSubgraph(name = "users", attributeNodes = {@NamedAttributeNode("user")}),
+ }
),
@NamedEntityGraph(
name = "fullyDetailed",
attributeNodes = {
- @NamedAttributeNode("project"), @NamedAttributeNode("profile"),
+ @NamedAttributeNode("grant"), @NamedAttributeNode("profile"),
@NamedAttributeNode("users"), @NamedAttributeNode("organisations"), @NamedAttributeNode("researchers")}),
@NamedEntityGraph(
name = "dmpRecentActivity",
@@ -30,7 +34,7 @@ import java.util.*;
public class DMP implements DataEntity {
public enum DMPStatus {
- ACTIVE((short) 0), DELETED((short) 1);
+ ACTIVE((short) 0), FINALISED((short) 1),DELETED((short) 99);
private short value;
@@ -47,6 +51,8 @@ public class DMP implements DataEntity {
case 0:
return ACTIVE;
case 1:
+ return FINALISED;
+ case 99:
return DELETED;
default:
throw new RuntimeException("Unsupported DMP Status");
@@ -80,13 +86,20 @@ public class DMP implements DataEntity {
@ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "\"Project\"")
- private Project project;
+ @JoinColumn(name = "\"Grant\"")
+ private Grant grant;
- @Type(type = "eu.eudat.configurations.typedefinition.XMLType")
+ /*@Type(type = "eu.eudat.configurations.typedefinition.XMLType")
@Column(name = "\"AssociatedDmps\"", columnDefinition = "xml", nullable = true)
- private String associatedDmps;
+ private String associatedDmps;*/
+ @OneToMany(fetch = FetchType.LAZY)
+ @JoinTable(name = "\"DMPDatasetProfile\"",
+ joinColumns = {@JoinColumn(name = "\"dmp\"", referencedColumnName = "\"ID\"")},
+ inverseJoinColumns = {@JoinColumn(name = "\"datasetprofile\"", referencedColumnName = "\"ID\"")}
+ )
+ private Set associatedDmps;
+
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "\"Profile\"")
@@ -114,12 +127,13 @@ public class DMP implements DataEntity {
private Set researchers;
- @OneToMany(fetch = FetchType.LAZY)
+ @OneToMany(mappedBy = "dmp", fetch = FetchType.LAZY)
+ /*@OneToMany(fetch = FetchType.LAZY)
@JoinTable(name = "\"UserDMP\"",
joinColumns = {@JoinColumn(name = "dmp", referencedColumnName = "\"ID\"")},
inverseJoinColumns = {@JoinColumn(name = "usr", referencedColumnName = "id")}
- )
- private Set users;
+ )*/
+ private Set users;
@Column(name = "\"Status\"", nullable = false)
@@ -132,79 +146,80 @@ public class DMP implements DataEntity {
private String dmpProperties;
@Column(name = "\"Created\"")
+ @Convert(converter = DateToUTCConverter.class)
private Date created = null;
@Column(name = "\"Modified\"")
+ @Convert(converter = DateToUTCConverter.class)
private Date modified = new Date();
-
@Column(name = "\"Description\"")
private String description;
+ @Column(name= "\"FinalizedAt\"")
+ @Convert(converter = DateToUTCConverter.class)
+ private Date finalizedAt;
+
+ @Column(name = "\"isPublic\"", nullable = false)
+ private boolean isPublic;
+
+ @Column(name= "\"PublishedAt\"")
+ @Convert(converter = DateToUTCConverter.class)
+ private Date publishedAt;
+
+ @Column(name = "\"DOI\"")
+ private String doi;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "\"Project\"")
+ private Project project;
+
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;
}
-
-
public void setStatus(Short status) {
this.status = status;
}
-
public Date getCreated() {
return created;
}
-
-
public void setCreated(Date created) {
this.created = created;
}
-
public Date getModified() {
return modified;
}
-
-
public void setModified(Date modified) {
this.modified = modified;
}
-
- public Set