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