Project

General

Profile

1

    
2
package eu.dnetlib.goldoa.service.dao;
3

    
4
import eu.dnetlib.goldoa.domain.*;
5
import org.hibernate.Criteria;
6
import org.hibernate.criterion.Restrictions;
7
import org.springframework.beans.factory.annotation.Autowired;
8
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
9
import org.springframework.jdbc.core.JdbcTemplate;
10
import org.springframework.jdbc.core.PreparedStatementSetter;
11
import org.springframework.jdbc.core.RowMapper;
12
import org.springframework.stereotype.Repository;
13

    
14
import javax.sql.DataSource;
15
import java.sql.PreparedStatement;
16
import java.sql.ResultSet;
17
import java.sql.SQLException;
18
import java.sql.Types;
19
import java.util.ArrayList;
20
import java.util.Arrays;
21
import java.util.List;
22

    
23

    
24
/**
25
 * Created by antleb on 3/13/15.
26
 */
27
@Repository
28
public class OrganizationDAO extends AbstractDao<String, Organization>{
29

    
30
	private static final String SEARCH_ORGANIZATIONS = "select id, name from organisation where lower(name) like lower(?)";
31
	private static final String GET_ORGANIZATION = "select o.id, name, shortname, array_agg(distinct budget) as budgets from organisation o left join organization_budget ob on ob.organization=o.id where o.id = ? group by o.id, name, shortname";
32
	private static final String GET_AFFILIATED_WITH_USER = "select o.id, name, shortname, array_agg(distinct budget) as budgets \n" +
33
			"from organisation o \n" +
34
			"left join organization_budget ob on ob.organization=o.id \n" +
35
			"join affiliation a on a.organization=o.id\n" +
36
			"where a.person=?\n" +
37
			"group by o.id, name, shortname";
38

    
39
	private final String INSERT_ORGANIZATION = "insert into organisation (name, shortname, source, id) values (?,?,?,?)";
40
	private final String UPDATE_ORGANIZATION = "update organisation set name=?, shortname=?, source=? where id=?";
41

    
42
	private final String INSERT_ORGANIZATION_BUDGET = "insert into organization_budget (organization, budget) values (?, ?)";
43

    
44
	public Organization getOrganization(String id) {
45
        return (Organization) createEntityCriteria().add(Restrictions.ilike("id", id)).list().get(0);
46
	}
47

    
48
	public List<Object> search(String term) {
49

    
50
		return createEntityCriteria().add(Restrictions.
51
				like("name","%" + term.toLowerCase() + "%").ignoreCase()).list();
52

    
53
	    /*List<Vocabulary> voc = new ArrayList<>();
54
	    for(Organization org : orgs)
55
	        voc.add(new Vocabulary(org.getId(),org.getName(),org));
56
	    return voc;*/
57
	}
58

    
59
	public Organization saveOrganization(Organization organization) {
60
	    persist(organization);
61
		return organization;
62
	}
63

    
64
	public void insertOrganization(final Organization organization) {
65
		saveOrganization(organization);
66
	}
67

    
68
	public void insertOrganizationBudgets(final Organization organization) {
69
		/*new JdbcTemplate(dataSource).batchUpdate(INSERT_ORGANIZATION_BUDGET, new BatchPreparedStatementSetter() {
70
			@Override
71
			public void setValues(PreparedStatement ps, int i) throws SQLException {
72
				ps.setString(1, organization.getId());
73
				ps.setString(2, organization.getBudgets().get(i).getId());
74
			}
75

    
76
			@Override
77
			public int getBatchSize() {
78
				return organization.getBudgets() != null ? organization.getBudgets().size() : 0;
79
			}
80
		});*/
81
	}
82

    
83
	public List<Organization> getAffiliatedWithUser(String email) {
84
	    Criteria cr = getSession().createCriteria(User.class);
85
        User user = (User) cr.add(Restrictions.eq("email",email)).list().get(0);
86

    
87
        List<Affiliation> afs = user.getAffiliations();
88
        List<Organization> orgs = new ArrayList<>();
89
        for(Affiliation af : afs)
90
            orgs.add(af.getOrganization());
91
        return orgs;
92
	}
93

    
94
	public void deleteOrganizationBudgets(Organization organization) {
95
		organization.setBudgets(null);
96
		saveOrganization(organization);
97
	}
98
}
99

    
(7-7/12)