Project

General

Profile

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

    
3
import eu.dnetlib.goldoa.domain.AccountAction;
4
import eu.dnetlib.goldoa.domain.Affiliation;
5
import eu.dnetlib.goldoa.domain.Budget;
6
import eu.dnetlib.goldoa.domain.Organization;
7
import eu.dnetlib.goldoa.domain.UserRole;
8
import eu.dnetlib.goldoa.domain.UserRolePK;
9
import eu.dnetlib.goldoa.domain.Project;
10
import eu.dnetlib.goldoa.domain.ProjectCoordinator;
11
import eu.dnetlib.goldoa.domain.Publisher;
12
import eu.dnetlib.goldoa.domain.Role;
13
import eu.dnetlib.goldoa.domain.User;
14
import eu.dnetlib.goldoa.service.UserManagerImpl;
15

    
16
import org.apache.commons.codec.digest.DigestUtils;
17
import org.hibernate.Criteria;
18
import org.hibernate.Query;
19
import org.hibernate.criterion.Order;
20
import org.hibernate.criterion.Restrictions;
21
import org.springframework.beans.factory.annotation.Autowired;
22
/*import org.springframework.jdbc.core.BatchPreparedStatementSetter;
23
import org.springframework.jdbc.core.JdbcTemplate;
24
import org.springframework.jdbc.core.PreparedStatementSetter;
25
import org.springframework.jdbc.core.RowMapper;*/
26
import org.springframework.stereotype.Repository;
27
import org.springframework.transaction.annotation.Transactional;
28

    
29
import javax.sql.DataSource;
30
import java.sql.PreparedStatement;
31
import java.sql.ResultSet;
32
import java.sql.SQLException;
33
import java.sql.Timestamp;
34
import java.sql.Types;
35
import java.util.ArrayList;
36
import java.util.Date;
37
import java.util.List;
38

    
39
/**
40
 * Created by antleb on 3/13/15.
41
 */
42
@Repository
43
public class UserDAO extends AbstractDao<String, User>{
44
	/**
45
	 * Returns the person with the given id. Objects of different type are placeholders containing only their id.
46
	 * Objects representing relations are fully initialized, with placeholders for other main entities.
47
	 *
48
	 * @param userId
49
	 * @return
50
	 */
51
	public User getUserById(String userId) {
52
		return (User) createEntityCriteria().add(Restrictions.ilike("id", userId)).list().get(0);
53
	}
54

    
55
	/**
56
	 * Returns the person with the given email. Objects of different type are placeholders containing only their id.
57
	 * Objects representing relations are fully initialized, with placeholders for other main entities.
58
	 *
59
	 * @param email
60
	 * @return
61
	 */
62
	@SuppressWarnings("unchecked")
63
	public User getUserByEmail(String email) {
64
		List<User> users = createEntityCriteria().add(Restrictions.eq("email", email)).list();
65
		if(users.size() == 0)
66
			return null;
67
		return (User) users.get(0);
68
	}
69

    
70
	public void saveToken(final String email, final String token, final int tokenTTL) {
71
		AccountAction acc_action = new AccountAction();
72
		acc_action.setUser(getUserByEmail(email));
73
		acc_action.setType("activation");
74
		acc_action.setToken(token);
75
		acc_action.setDate(new Timestamp(System.currentTimeMillis()));
76
		acc_action.setExpires(new Timestamp(System.currentTimeMillis() + 1000L * 60L * 60L * 24L * tokenTTL));
77
		getSession().persist(acc_action);
78
	}
79

    
80
	public boolean verifyLogin(String email, String password) {
81
		List users = createEntityCriteria().add(Restrictions.eq("email", email)).list();
82
		//		.add(Restrictions.eq("password", DigestUtils.md5Hex(password))).list();
83
		
84
		if(users.size() != 0)
85
			return true;
86
		return false;
87
	}
88

    
89
	@SuppressWarnings("unchecked")
90
	public boolean verifyToken(final String email, final String token) {
91
		Criteria cr = getSession().createCriteria(AccountAction.class);
92
		List<AccountAction> ac = cr.add(Restrictions.eq("email", email))
93
				.add(Restrictions.eq("token", token)).list();
94
		if(ac.size() > 0)
95
			return true;
96
		return false;		
97
	}
98

    
99
	public void activateUser(final String email) {		
100
		User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
101
		user.setActive(true);
102
		getSession().update(user);
103
	}
104

    
105
	public void deleteToken(final String email, final String token) {		
106
		Criteria cr = getSession().createCriteria(AccountAction.class);
107
		AccountAction ac = (AccountAction) cr.add(Restrictions.eq("email", email))
108
				.add(Restrictions.eq("token", token))
109
				.add(Restrictions.eq("type", "activation")).list().get(0);
110
		getSession().delete(ac);
111
	}
112

    
113
	@SuppressWarnings("unchecked")
114
	public boolean updatePassword(final String newPassword, final String email) {
115
		List<User> rs = createEntityCriteria().add(Restrictions.eq("email", email)).list();
116
		if(rs.get(0) != null){
117
			User user = rs.get(0);
118
			user.setPassword(DigestUtils.md5Hex(newPassword));
119
			getSession().update(user);
120
			return true;
121
		}
122
		return false;
123
		
124
	}
125

    
126
	@SuppressWarnings("unchecked")
127
	public List<Role> getRoles() {		
128
		Criteria cr = getSession().createCriteria(Role.class);
129
		return cr.list();
130
	}
131

    
132
	public void saveUser(final User user) {
133
		for(UserRole ur : user.getRoles()){
134
			Role r = ur.getPk().getRole();
135
			getSession().persist(r);
136

    
137
		}
138
		persist(user);
139
	}
140

    
141
	/*public void deleteAffiliations(final String email) {
142
		Criteria cr = getSession().createCriteria(Affiliation.class);
143
		Affiliation af = (Affiliation) cr.add(Restrictions.eq("email",email)).list().get(0);
144
		getSession().delete(af);
145
	}*/
146

    
147
	/*public void deletePersonRoles(final String email) {
148
		Criteria cr = getSession().createCriteria(Affiliation.class);
149
		UserRole ur = (UserRole) cr.add(Restrictions.eq("email",email)).list().get(0);
150
		getSession().delete(ur);
151
	}*/
152

    
153
	//TODO MOVE TO PROJECT DAO
154
	/*public void removeProjectCoordinators(final String email) {
155
		Criteria cr = getSession().createCriteria(ProjectCoordinator.class);
156
		ProjectCoordinator pc = (ProjectCoordinator) cr.add(Restrictions.eq("email",email)).list().get(0);
157
		getSession().delete(pc);
158
	}*/
159

    
160
	/*public void saveProjectCoordinators(final String email, final List<ProjectCoordinator> projectCoordinators) {
161
		User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
162
		user.setProjectCoordinators(projectCoordinators);
163
		persist(user);
164
	}*/
165

    
166
	/*public void saveUserRoles(final String email, final List<Role> roles) {
167
		User user = getUserByEmail(email);
168
		user.setRole(roles);
169
		persist(user);
170
	}*/
171
/*
172

    
173
	public void saveAffiliations(final User user, final List<Affiliation> affiliations) {
174
		user.setAffiliations(affiliations);
175
		persist(user);
176
	}*/
177

    
178

    
179
	@SuppressWarnings("unchecked")
180
	public List<User> getUsersByRole(String role_id) {
181

    
182
		Criteria cr = getSession().createCriteria(Role.class);
183
		Role role = (Role) cr.add(Restrictions.eq("id",role_id)).list().get(0);
184

    
185
		cr = getSession().createCriteria(UserRole.class);
186

    
187
		List<UserRole> rs = cr.add(Restrictions.eq("approved", true))
188
				.add(Restrictions.eq("pk.role", role)).list();
189
		List<User> users = new ArrayList<>();
190
		for(int i=0;i<users.size();i++)
191
			users.add(rs.get(i).getPk().getUser());
192
		return users;
193
	}
194
	
195
	public List<User> getModerators() {	
196
		return getUsersByRole("moderator");
197
	}
198

    
199
	public List<User> getAccountingOfficers() {
200
		return getUsersByRole("accounting");
201
	}
202

    
203
	public Role getRole(final String roleId) {
204
		Criteria cr = getSession().createCriteria(Role.class);
205
		cr.add(Restrictions.eq("id", roleId));
206
		return (Role) cr.list().get(0);
207
	}
208

    
209
	public void deactivateUser(String email) {
210
		User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
211
		user.setActive(false);
212
		getSession().update(user);
213
	}
214

    
215
	public void acceptUserRole(String email, String role_id) {
216
		Criteria cr = getSession().createCriteria(UserRole.class);
217
		User user = getUserByEmail(email);
218
		Role role = getRole(role_id);
219
		UserRole ur = (UserRole) cr.add(Restrictions.eq("pk.user", user))
220
				.add(Restrictions.eq("pk.role", role)).list().get(0);
221

    
222
		ur.setApproved(true);
223
		getSession().update(ur);
224
	}
225

    
226
	public void rejectUserRole(String email, String roleId) {
227
		Criteria cr = getSession().createCriteria(UserRole.class);
228
		UserRole ur = (UserRole) cr.add(Restrictions.eq("pk.email", email))
229
				.add(Restrictions.eq("pk.role_id", roleId)).list().get(0);
230
		getSession().delete(ur);
231
	}
232

    
233
	@SuppressWarnings("unchecked")
234
	public List<User> getUsers() {
235
		return createEntityCriteria().list();
236
	}
237

    
238
	private User readPerson(ResultSet rs) throws SQLException {
239
		return null;
240
//		Person person = new Person();
241
//
242
//		person.setId(rs.getString("id"));
243
//		person.setEmail(rs.getString("email"));
244
//		person.setName(rs.getString("firstname"));
245
//		person.setLastname(rs.getString("lastname"));
246
//		person.setInitials(rs.getString("initials"));
247
//		person.setTelephone(rs.getString("telephone"));
248
//		person.setActive(rs.getBoolean("active"));
249
//		person.setOrcidId(rs.getString("orcidid"));
250
//		person.setPassword(rs.getString("password"));
251
//		person.setSource(rs.getString("source"));
252
//		person.setPublisher(new Publisher(rs.getString("publisher")));
253
//
254
//		person.setCoordinatedProjects(new ArrayList<Project>());
255
//		for (String projectId : (String[]) rs.getArray("projects").getArray()) {
256
//			person.getCoordinatedProjects().add(new Project(projectId));
257
//		}
258
//
259
//		person.setAffiliations(new ArrayList<Affiliation>());
260
//		for (String affString : (String[]) rs.getArray("affiliations").getArray()) {
261
//			if (affString != null) {
262
//				String[] parts = affString.split("\\|\\|");
263
//				String org = parts[0];
264
//				String dep = parts[1];
265
//				Date start = parts[2] == "0" ? null : new Date(Long.parseLong(parts[2]));
266
//				Date end = parts[3] == "0" ? null : new Date(Long.parseLong(parts[3]));
267
//
268
//				Affiliation affiliation = new Affiliation();
269
//
270
//				affiliation.setPerson(person);
271
//				affiliation.setOrganization(new Organization(org));
272
//				affiliation.setDepartment(dep);
273
//				affiliation.setStart(start);
274
//				affiliation.setEnd(end);
275
//
276
//				person.getAffiliations().add(affiliation);
277
//			}
278
//		}
279
//
280
//		person.setRoles(new ArrayList<PersonRole>());
281
//		for (String rString : (String[]) rs.getArray("roles").getArray()) {
282
//			if (rString != null) {
283
//				String[] parts = rString.split("\\|\\|");
284
//				String role = parts[0];
285
//				boolean approved = Boolean.parseBoolean(parts[1]);
286
//
287
//				person.getRoles().add(new PersonRole(person, getRole(role), approved));
288
//			}
289
//		}
290
//
291
//		return person;
292
	}
293
}
(11-11/11)