Project

General

Profile

1 35343 antonis.le
package eu.dnetlib.goldoa.service.dao;
2
3 46366 panagiotis
import eu.dnetlib.goldoa.domain.*;
4 45011 panagiotis
5 45040 panagiotis
import org.apache.commons.codec.digest.DigestUtils;
6 46390 panagiotis
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8 45028 panagiotis
import org.hibernate.Criteria;
9 46366 panagiotis
import org.hibernate.criterion.ProjectionList;
10
import org.hibernate.criterion.Projections;
11 45011 panagiotis
import org.hibernate.criterion.Restrictions;
12 46303 panagiotis
import org.hibernate.transform.AliasToBeanResultTransformer;
13
import org.hibernate.transform.Transformers;
14 45074 panagiotis
import org.springframework.stereotype.Repository;
15 35343 antonis.le
import java.sql.Timestamp;
16
import java.util.ArrayList;
17
import java.util.List;
18
19
/**
20
 * Created by antleb on 3/13/15.
21
 */
22 45074 panagiotis
@Repository
23 45489 panagiotis
public class UserDAO extends AbstractDao<String, User> {
24 46390 panagiotis
    private Log log = LogFactory.getLog(UserDAO.class);
25
26 45489 panagiotis
    /**
27
     * Returns the person with the given id. Objects of different type are placeholders containing only their id.
28
     * Objects representing relations are fully initialized, with placeholders for other main entities.
29
     *
30
     * @param userId
31
     * @return
32
     */
33
    public User getUserById(String userId) {
34
        return (User) createEntityCriteria().add(Restrictions.eq("id", userId)).list().get(0);
35
    }
36 35686 antonis.le
37 45489 panagiotis
    /**
38
     * Returns the person with the given email. Objects of different type are placeholders containing only their id.
39
     * Objects representing relations are fully initialized, with placeholders for other main entities.
40
     *
41
     * @param email
42
     * @return
43
     */
44
    @SuppressWarnings("unchecked")
45
    public User getUserByEmail(String email) {
46
        List<User> users = createEntityCriteria().add(Restrictions.eq("email", email)).list();
47
        if (users.size() == 0)
48
            return null;
49 46366 panagiotis
        User u = users.get(0);
50
        return u;
51 45489 panagiotis
    }
52 35343 antonis.le
53 46366 panagiotis
    @SuppressWarnings("unchecked")
54
    public List<Role> getUserRoles(String email) {
55
        Criteria cr = getSession().createCriteria(UserRole.class);
56
        return cr.add(Restrictions.eq("pk.user",email))
57
                .setResultTransformer( Transformers.aliasToBean(Role.class)).list();
58
    }
59
60 45489 panagiotis
    public void saveToken(final String email, final String token, final int tokenTTL) {
61
        AccountAction acc_action = new AccountAction();
62
        acc_action.setUser(getUserByEmail(email));
63
        acc_action.setType("activation");
64
        acc_action.setToken(token);
65
        acc_action.setDate(new Timestamp(System.currentTimeMillis()));
66
        acc_action.setExpires(new Timestamp(System.currentTimeMillis() + 1000L * 60L * 60L * 24L * tokenTTL));
67
        getSession().persist(acc_action);
68
    }
69 35343 antonis.le
70 45489 panagiotis
    public boolean verifyLogin(String email, String password) {
71 35343 antonis.le
72 45688 panagiotis
        List users = createEntityCriteria().add(Restrictions.eq("email", email))
73
        		.add(Restrictions.eq("password", DigestUtils.md5Hex(password))).list();
74
75 45489 panagiotis
        if (users.size() != 0)
76
            return true;
77
        return false;
78
    }
79 35343 antonis.le
80 45489 panagiotis
    @SuppressWarnings("unchecked")
81
    public boolean verifyToken(final String email, final String token) {
82
        Criteria cr = getSession().createCriteria(AccountAction.class);
83
        List<AccountAction> ac = cr.add(Restrictions.eq("email", email))
84
                .add(Restrictions.eq("token", token)).list();
85
        if (ac.size() > 0)
86
            return true;
87
        return false;
88
    }
89 35343 antonis.le
90 45489 panagiotis
    public void activateUser(final String email) {
91
        User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
92
        user.setActive(true);
93
        getSession().update(user);
94
    }
95 35343 antonis.le
96 45489 panagiotis
    public void deleteToken(final String email, final String token) {
97
        Criteria cr = getSession().createCriteria(AccountAction.class);
98
        AccountAction ac = (AccountAction) cr.add(Restrictions.eq("email", email))
99
                .add(Restrictions.eq("token", token))
100
                .add(Restrictions.eq("type", "activation")).list().get(0);
101
        getSession().delete(ac);
102
    }
103 35343 antonis.le
104 45489 panagiotis
    @SuppressWarnings("unchecked")
105
    public boolean updatePassword(final String newPassword, final String email) {
106
        List<User> rs = createEntityCriteria().add(Restrictions.eq("email", email)).list();
107
        if (rs.get(0) != null) {
108
            User user = rs.get(0);
109
            user.setPassword(DigestUtils.md5Hex(newPassword));
110 46479 panagiotis
            User user_merged = (User) getSession().merge(user);
111 45489 panagiotis
            return true;
112
        }
113
        return false;
114 35343 antonis.le
115 45489 panagiotis
    }
116 35343 antonis.le
117 45489 panagiotis
    @SuppressWarnings("unchecked")
118
    public List<Role> getRoles() {
119 46366 panagiotis
        ProjectionList projList = Projections.projectionList();
120
        projList.add(Projections.distinct(Projections.projectionList()
121
                .add(Projections.property("id"), "id")))
122
                .add(Projections.property("role"),"role");
123
124
        Criteria cr = getSession().createCriteria(Role.class).setProjection(projList)
125
                        .setResultTransformer(Transformers.aliasToBean(Role.class));
126 46303 panagiotis
        return (List<Role>)cr.list();
127 45489 panagiotis
    }
128
129 46303 panagiotis
    @SuppressWarnings("unchecked")
130 45489 panagiotis
    public void saveUser(final User user) {
131 46303 panagiotis
        User u = getUserByEmail(user.getEmail());
132
        if (u != null) {
133 46705 panagiotis
            if(u.getPublisher() != null)
134
                user.setPublisher(u.getPublisher());
135
            if(user.getPassword() == null)
136
                user.setPassword(u.getPassword());
137
            if (user.getPassword() != null && !user.getPassword().equals(u.getPassword()))
138 46303 panagiotis
                user.setPassword(DigestUtils.md5Hex(user.getPassword()));
139 46705 panagiotis
            if(u.isActive())
140 46390 panagiotis
                user.setActive(true);
141
            User user_merged = (User) getSession().merge(user);
142 46366 panagiotis
        }else
143
            persist(user);
144 45489 panagiotis
    }
145
146
    //TODO MOVE TO PROJECT DAO
147 45206 panagiotis
	/*public void removeProjectCoordinators(final String email) {
148 45040 panagiotis
		Criteria cr = getSession().createCriteria(ProjectCoordinator.class);
149
		ProjectCoordinator pc = (ProjectCoordinator) cr.add(Restrictions.eq("email",email)).list().get(0);
150
		getSession().delete(pc);
151 45206 panagiotis
	}*/
152 35343 antonis.le
153 45206 panagiotis
	/*public void saveProjectCoordinators(final String email, final List<ProjectCoordinator> projectCoordinators) {
154 45040 panagiotis
		User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
155 45085 panagiotis
		user.setProjectCoordinators(projectCoordinators);
156
		persist(user);
157 45206 panagiotis
	}*/
158 35343 antonis.le
159
160 45438 panagiotis
161
	/*public void saveAffiliations(final User user, final List<Affiliation> affiliations) {
162 45085 panagiotis
		user.setAffiliations(affiliations);
163
		persist(user);
164 45206 panagiotis
	}*/
165 35343 antonis.le
166 35686 antonis.le
167 45489 panagiotis
    @SuppressWarnings("unchecked")
168
    public List<User> getUsersByRole(String role_id) {
169 45403 panagiotis
170 45489 panagiotis
        Criteria cr = getSession().createCriteria(Role.class);
171
        Role role = (Role) cr.add(Restrictions.eq("id", role_id)).list().get(0);
172
        cr = getSession().createCriteria(UserRole.class);
173 45403 panagiotis
174 45489 panagiotis
        List<UserRole> rs = cr.add(Restrictions.eq("approved", true))
175
                .add(Restrictions.eq("pk.role", role)).list();
176 45438 panagiotis
177
178 45489 panagiotis
        List<User> users = new ArrayList<>();
179
        for (UserRole ur : rs)
180
            users.add(ur.getPk().getUser());
181
        return users;
182
    }
183 35749 antonis.le
184 45489 panagiotis
    public List<User> getModerators() {
185
        return getUsersByRole("moderator");
186
    }
187 36834 stefania.m
188 45489 panagiotis
    public List<User> getAccountingOfficers() {
189
        return getUsersByRole("accounting");
190
    }
191 36025 antonis.le
192 45489 panagiotis
    public Role getRole(final String roleId) {
193
        Criteria cr = getSession().createCriteria(Role.class);
194 46303 panagiotis
        cr.add(Restrictions.eq("id", roleId))
195
                .setResultTransformer( new AliasToBeanResultTransformer(Role.class));
196
        return (Role)cr.list().get(0);
197 45489 panagiotis
    }
198 36025 antonis.le
199 45489 panagiotis
    public void deactivateUser(String email) {
200
        User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
201
        user.setActive(false);
202 46476 panagiotis
        User user_merged = (User) getSession().merge(user);
203 45489 panagiotis
    }
204 45438 panagiotis
205 45489 panagiotis
    public void acceptUserRole(String email, String roleId) {
206 45688 panagiotis
        Criteria cr = getSession().createCriteria(UserRole.class);
207
        User user = getUserByEmail(email);
208
209 46476 panagiotis
        for (UserRole ur : user.getRoles()) {
210 46479 panagiotis
            if (ur.getPk().getRole().getId().equals(roleId)) {
211 46476 panagiotis
                ur.setApproved(true);
212 46479 panagiotis
                getSession().update(user);
213 46476 panagiotis
            }
214
        }
215 45489 panagiotis
    }
216 45438 panagiotis
217 45489 panagiotis
    public void rejectUserRole(String email, String roleId) {
218
        User user = getUserByEmail(email);
219 46479 panagiotis
        for (UserRole ur : user.getRoles()) {
220
            if (ur.getPk().getRole().getId().equals(roleId)) {
221 46476 panagiotis
                user.getRoles().remove(ur);
222 46479 panagiotis
                getSession().update(user);
223 46476 panagiotis
            }
224
        }
225 45489 panagiotis
    }
226 36025 antonis.le
227 45688 panagiotis
228 45489 panagiotis
    @SuppressWarnings("unchecked")
229
    public List<User> getUsers() {
230
        return createEntityCriteria().list();
231
    }
232
}