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.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(value = "projectDAO")
17
public class ProjectDAO extends AbstractDao<String,Project>{
18

    
19
	private int expirationOk ;
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.ilike("acronym",term, MatchMode.ANYWHERE));
45
		d.add(Restrictions.ilike("title",term, MatchMode.ANYWHERE));
46
		d.add(Restrictions.ilike("grant",term, MatchMode.ANYWHERE));
47

    
48
        return createEntityCriteria().add(d).list();
49
	}
50

    
51
	public Project getProject(String projectId) {
52
	    return (Project) createEntityCriteria().add(Restrictions.eq("id",projectId)).list().get(0);
53
	}
54

    
55

    
56
	@SuppressWarnings("unchecked")
57
	public List<Project> getEligibleProjectsForOrganization(String organizationId) {
58
		Date referenceDate = new Date();
59
		Calendar c = Calendar.getInstance();
60
		c.setTime(referenceDate);
61
		c.add(Calendar.MONTH, - expirationOk);
62
		ProjectionList projList = Projections.projectionList();
63
		projList.add(Projections.groupProperty("id"),"id");
64
		projList.add(Projections.groupProperty("acronym"),"acronym");
65
		projList.add(Projections.groupProperty("title"),"title");
66
		projList.add(Projections.groupProperty("funder"),"funder");
67
		projList.add(Projections.groupProperty("fundingstream"),"fundingstream");
68
		projList.add(Projections.groupProperty("scientificarea"),"scientificarea");
69
		projList.add(Projections.groupProperty("call"),"call");
70
		projList.add(Projections.groupProperty("grant"),"grant");
71
		projList.add(Projections.groupProperty("startdate"),"startdate");
72
		projList.add(Projections.groupProperty("enddate"),"enddate");
73
		projList.add(Projections.groupProperty("sc39"),"sc39");
74
		projList.add(Projections.groupProperty("url"),"url");
75
		projList.add(Projections.groupProperty("source"),"source");
76

    
77
		return createEntityCriteria().createAlias("organizations","o")
78
				.add(Restrictions.eq("o.id",organizationId))
79
				.add(Restrictions.lt("enddate",new Date()))
80
				.add(Restrictions.gt("enddate",c.getTime()))
81
				.setProjection(projList)
82
				.setResultTransformer( Transformers.aliasToBean(Project.class))
83
				.list();
84
	}
85

    
86
	@SuppressWarnings("unchecked")
87
	public List<Project> getFutureEligibleProjectsForOrganization(String organizationId) {
88

    
89
		ProjectionList projList = Projections.projectionList();
90
		projList.add(Projections.groupProperty("id"),"id");
91
		projList.add(Projections.groupProperty("acronym"),"acronym");
92
		projList.add(Projections.groupProperty("title"),"title");
93
		projList.add(Projections.groupProperty("funder"),"funder");
94
		projList.add(Projections.groupProperty("fundingstream"),"fundingstream");
95
		projList.add(Projections.groupProperty("scientificarea"),"scientificarea");
96
		projList.add(Projections.groupProperty("call"),"call");
97
		projList.add(Projections.groupProperty("grant"),"grant");
98
		projList.add(Projections.groupProperty("startdate"),"startdate");
99
		projList.add(Projections.groupProperty("enddate"),"enddate");
100
		projList.add(Projections.groupProperty("sc39"),"sc39");
101
		projList.add(Projections.groupProperty("url"),"url");
102
		projList.add(Projections.groupProperty("source"),"source");
103

    
104
		return createEntityCriteria().createAlias("organizations", "o")
105
				.add(Restrictions.eq("o.id", organizationId))
106
				.add(Restrictions.gt("enddate", new Date()))
107
				.setProjection(projList)
108
				.setResultTransformer(Transformers.aliasToBean(Project.class))
109
				.list();
110

    
111
	}
112

    
113
	public int getExpirationOk() {
114
		return expirationOk;
115
	}
116

    
117
	public void setExpirationOk(int expirationOk) {
118
		this.expirationOk = expirationOk;
119
	}
120
}
(8-8/12)