Project

General

Profile

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
}
(8-8/12)