Project

General

Profile

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