1
|
package eu.dnetlib.goldoa.service.dao;
|
2
|
|
3
|
import eu.dnetlib.goldoa.domain.Project;
|
4
|
import org.hibernate.criterion.*;
|
5
|
import org.hibernate.transform.Transformers;
|
6
|
import org.springframework.beans.factory.annotation.Value;
|
7
|
import org.springframework.stereotype.Repository;
|
8
|
|
9
|
import java.util.ArrayList;
|
10
|
import java.util.Calendar;
|
11
|
import java.util.Date;
|
12
|
import java.util.List;
|
13
|
|
14
|
/*
|
15
|
* Created by antleb on 3/13/15.
|
16
|
*/
|
17
|
@Repository(value = "projectDAO")
|
18
|
public class ProjectDAO extends AbstractDao<String,Project>{
|
19
|
|
20
|
@Value("${goldoa.eligibility.project.expiration.limit}")
|
21
|
private int expirationOk ;
|
22
|
|
23
|
private final String GET_PROJECTS_FOR_ORGANIZATION =
|
24
|
"select id, acronym, title, funder, fundingstream, scientificarea, call, \"grant\", startdate, enddate, sc39, url, " +
|
25
|
"source, array_agg(distinct pc.coordinator) as coordinators, array_agg(distinct po.organization) as organizations\n" +
|
26
|
"from project p\n" +
|
27
|
"left join project_organization po on po.project=p.id\n" +
|
28
|
"left join project_coordinator pc on pc.project=p.id\n" +
|
29
|
"where po.organization=? and p.enddate > now() - (? || ' months')::interval and p.enddate < now() \n" +
|
30
|
"group by id, acronym, title, funder, fundingstream, scientificarea, call, \"grant\", startdate, enddate, sc39, url, source";
|
31
|
private final String GET_FUTURE_PROJECTS_FOR_ORGANIZATION =
|
32
|
"select id, acronym, title, funder, fundingstream, scientificarea, call, \"grant\", startdate, enddate, sc39, url, source, array_agg(distinct pc.coordinator) as coordinators, array_agg(distinct po.organization) as organizations\n" +
|
33
|
"from project p\n" +
|
34
|
"left join project_organization po on po.project=p.id\n" +
|
35
|
"left join project_coordinator pc on pc.project=p.id\n" +
|
36
|
"where po.organization=? and p.enddate > now() \n" +
|
37
|
"group by id, acronym, title, funder, fundingstream, scientificarea, call, \"grant\", startdate, enddate, sc39, url, source";
|
38
|
|
39
|
public List<Project> getProjectsCoordinatedBy(String personId) {
|
40
|
return new ArrayList<Project>();
|
41
|
}
|
42
|
|
43
|
@SuppressWarnings("unchecked")
|
44
|
public List<Object> search(String term) {
|
45
|
Disjunction d = Restrictions.disjunction();
|
46
|
d.add(Restrictions.ilike("acronym",term, MatchMode.ANYWHERE));
|
47
|
d.add(Restrictions.ilike("title",term, MatchMode.ANYWHERE));
|
48
|
d.add(Restrictions.ilike("grant",term, MatchMode.ANYWHERE));
|
49
|
|
50
|
return createEntityCriteria().add(d).list();
|
51
|
}
|
52
|
|
53
|
public Project getProject(String projectId) {
|
54
|
return (Project) createEntityCriteria().add(Restrictions.eq("id",projectId)).list().get(0);
|
55
|
}
|
56
|
|
57
|
|
58
|
@SuppressWarnings("unchecked")
|
59
|
public List<Project> getEligibleProjectsForOrganization(String organizationId) {
|
60
|
Date referenceDate = new Date();
|
61
|
Calendar c = Calendar.getInstance();
|
62
|
c.setTime(referenceDate);
|
63
|
c.add(Calendar.MONTH, - expirationOk);
|
64
|
ProjectionList projList = Projections.projectionList();
|
65
|
projList.add(Projections.groupProperty("id"),"id");
|
66
|
projList.add(Projections.groupProperty("acronym"),"acronym");
|
67
|
projList.add(Projections.groupProperty("title"),"title");
|
68
|
projList.add(Projections.groupProperty("funder"),"funder");
|
69
|
projList.add(Projections.groupProperty("fundingstream"),"fundingstream");
|
70
|
projList.add(Projections.groupProperty("scientificarea"),"scientificarea");
|
71
|
projList.add(Projections.groupProperty("call"),"call");
|
72
|
projList.add(Projections.groupProperty("grant"),"grant");
|
73
|
projList.add(Projections.groupProperty("startdate"),"startdate");
|
74
|
projList.add(Projections.groupProperty("enddate"),"enddate");
|
75
|
projList.add(Projections.groupProperty("sc39"),"sc39");
|
76
|
projList.add(Projections.groupProperty("url"),"url");
|
77
|
projList.add(Projections.groupProperty("source"),"source");
|
78
|
|
79
|
return createEntityCriteria().createAlias("organizations","o")
|
80
|
.add(Restrictions.eq("o.id",organizationId))
|
81
|
.add(Restrictions.lt("enddate",new Date()))
|
82
|
.add(Restrictions.gt("enddate",c.getTime()))
|
83
|
.setProjection(projList)
|
84
|
.setResultTransformer( Transformers.aliasToBean(Project.class))
|
85
|
.list();
|
86
|
}
|
87
|
|
88
|
@SuppressWarnings("unchecked")
|
89
|
public List<Project> getFutureEligibleProjectsForOrganization(String organizationId) {
|
90
|
|
91
|
ProjectionList projList = Projections.projectionList();
|
92
|
projList.add(Projections.groupProperty("id"),"id");
|
93
|
projList.add(Projections.groupProperty("acronym"),"acronym");
|
94
|
projList.add(Projections.groupProperty("title"),"title");
|
95
|
projList.add(Projections.groupProperty("funder"),"funder");
|
96
|
projList.add(Projections.groupProperty("fundingstream"),"fundingstream");
|
97
|
projList.add(Projections.groupProperty("scientificarea"),"scientificarea");
|
98
|
projList.add(Projections.groupProperty("call"),"call");
|
99
|
projList.add(Projections.groupProperty("grant"),"grant");
|
100
|
projList.add(Projections.groupProperty("startdate"),"startdate");
|
101
|
projList.add(Projections.groupProperty("enddate"),"enddate");
|
102
|
projList.add(Projections.groupProperty("sc39"),"sc39");
|
103
|
projList.add(Projections.groupProperty("url"),"url");
|
104
|
projList.add(Projections.groupProperty("source"),"source");
|
105
|
|
106
|
return createEntityCriteria().createAlias("organizations", "o")
|
107
|
.add(Restrictions.eq("o.id", organizationId))
|
108
|
.add(Restrictions.gt("enddate", new Date()))
|
109
|
.setProjection(projList)
|
110
|
.setResultTransformer(Transformers.aliasToBean(Project.class))
|
111
|
.list();
|
112
|
|
113
|
}
|
114
|
|
115
|
public int getExpirationOk() {
|
116
|
return expirationOk;
|
117
|
}
|
118
|
|
119
|
public void setExpirationOk(int expirationOk) {
|
120
|
this.expirationOk = expirationOk;
|
121
|
}
|
122
|
}
|