Project

General

Profile

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

    
3
import eu.dnetlib.goldoa.domain.*;
4

    
5
import org.apache.commons.codec.digest.DigestUtils;
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.hibernate.Criteria;
9
import org.hibernate.criterion.ProjectionList;
10
import org.hibernate.criterion.Projections;
11
import org.hibernate.criterion.Restrictions;
12
import org.hibernate.transform.AliasToBeanResultTransformer;
13
import org.hibernate.transform.Transformers;
14
import org.springframework.stereotype.Repository;
15

    
16
import javax.persistence.Query;
17
import java.sql.Timestamp;
18
import java.util.ArrayList;
19
import java.util.List;
20

    
21
/**
22
 * Created by antleb on 3/13/15.
23
 */
24
@Repository
25
public class UserDAO extends AbstractDao<String, User> {
26
    private Log log = LogFactory.getLog(UserDAO.class);
27

    
28
    /**
29
     * Returns the person with the given id. Objects of different type are placeholders containing only their id.
30
     * Objects representing relations are fully initialized, with placeholders for other main entities.
31
     *
32
     * @param userId
33
     * @return
34
     */
35
    public User getUserById(String userId) {
36
        return (User) createEntityCriteria().add(Restrictions.eq("id", userId)).list().get(0);
37
    }
38

    
39
    /**
40
     * Returns the person with the given email. Objects of different type are placeholders containing only their id.
41
     * Objects representing relations are fully initialized, with placeholders for other main entities.
42
     *
43
     * @param email
44
     * @return
45
     */
46
    @SuppressWarnings("unchecked")
47
    public User getUserByEmail(String email) {
48
        List<User> users = createEntityCriteria().add(Restrictions.eq("email", email)).list();
49
        if (users.size() == 0)
50
            return null;
51
        User u = users.get(0);
52
        return u;
53
    }
54

    
55
    @SuppressWarnings("unchecked")
56
    public List<Role> getUserRoles(String email) {
57
        Criteria cr = getSession().createCriteria(UserRole.class);
58
        return cr.add(Restrictions.eq("pk.user",email))
59
                .setResultTransformer( Transformers.aliasToBean(Role.class)).list();
60
    }
61

    
62
    public void saveToken(final String email, final String token, final int tokenTTL) {
63
        AccountAction acc_action = new AccountAction();
64
        acc_action.setUser(getUserByEmail(email));
65
        acc_action.setType("activation");
66
        acc_action.setToken(token);
67
        acc_action.setDate(new Timestamp(System.currentTimeMillis()));
68
        acc_action.setExpires(new Timestamp(System.currentTimeMillis() + 1000L * 60L * 60L * 24L * tokenTTL));
69
        getSession().persist(acc_action);
70
    }
71

    
72
    public boolean verifyLogin(String email, String password) {
73

    
74
        List users = createEntityCriteria().add(Restrictions.eq("email", email))
75
        		.add(Restrictions.eq("password", DigestUtils.md5Hex(password))).list();
76

    
77
        if (users.size() != 0)
78
            return true;
79
        return false;
80
    }
81

    
82
    @SuppressWarnings("unchecked")
83
    public boolean verifyToken(final String email, final String token) {
84
        Criteria cr = getSession().createCriteria(AccountAction.class);
85
        List<AccountAction> ac = cr.add(Restrictions.eq("email", email))
86
                .add(Restrictions.eq("token", token)).list();
87
        if (ac.size() > 0)
88
            return true;
89
        return false;
90
    }
91

    
92
    public void activateUser(final String email) {
93
        User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
94
        user.setActive(true);
95
        getSession().update(user);
96
    }
97

    
98
    public void deleteToken(final String email, final String token) {
99
        Criteria cr = getSession().createCriteria(AccountAction.class);
100
        AccountAction ac = (AccountAction) cr.add(Restrictions.eq("email", email))
101
                .add(Restrictions.eq("token", token))
102
                .add(Restrictions.eq("type", "activation")).list().get(0);
103
        getSession().delete(ac);
104
    }
105

    
106
    @SuppressWarnings("unchecked")
107
    public boolean updatePassword(final String newPassword, final String email) {
108
        List<User> rs = createEntityCriteria().add(Restrictions.eq("email", email)).list();
109
        if (rs.get(0) != null) {
110
            User user = rs.get(0);
111
            user.setPassword(DigestUtils.md5Hex(newPassword));
112
            User user_merged = (User) getSession().merge(user);
113
            return true;
114
        }
115
        return false;
116

    
117
    }
118

    
119
    @SuppressWarnings("unchecked")
120
    public List<Role> getRoles() {
121
        ProjectionList projList = Projections.projectionList();
122
        projList.add(Projections.distinct(Projections.projectionList()
123
                .add(Projections.property("id"), "id")))
124
                .add(Projections.property("role"),"role");
125

    
126
        Criteria cr = getSession().createCriteria(Role.class).setProjection(projList)
127
                        .setResultTransformer(Transformers.aliasToBean(Role.class));
128
        return (List<Role>)cr.list();
129
    }
130

    
131
    @SuppressWarnings("unchecked")
132
    public void saveUser(final User user) {
133
        User u = getUserByEmail(user.getEmail());
134
        if (u != null) {
135
            if(u.getPublisher() != null && u.getPublisher() == user.getPublisher())
136
                user.setPublisher(u.getPublisher());
137
            if(user.getPassword() == null)
138
                user.setPassword(u.getPassword());
139
            if (user.getPassword() != null && !user.getPassword().equals(u.getPassword()))
140
                user.setPassword(DigestUtils.md5Hex(user.getPassword()));
141
            if(u.isActive())
142
                user.setActive(true);
143
            User user_merged = (User) getSession().merge(user);
144
        }else
145
            persist(user);
146
    }
147

    
148
    @SuppressWarnings("unchecked")
149
    public List<User> getUsersByRole(String role_id) {
150
        return  createEntityCriteria()
151
                .createAlias("roles" , "r")
152
                .add(Restrictions.eq("r.pk.role.id",role_id))
153
                .list();
154
    }
155

    
156
    public List<User> getModerators() {
157
        return getUsersByRole("moderator");
158
    }
159

    
160
    public List<User> getAccountingOfficers() {
161
        return getUsersByRole("accounting");
162
    }
163

    
164
    public Role getRole(final String roleId) {
165
        Criteria cr = getSession().createCriteria(Role.class);
166
        cr.add(Restrictions.eq("id", roleId));
167
        return (Role)cr.list().get(0);
168
    }
169

    
170
    public void deactivateUser(String email) {
171
        User user = (User) createEntityCriteria().add(Restrictions.eq("email", email)).list().get(0);
172
        user.setActive(false);
173
        User user_merged = (User) getSession().merge(user);
174
    }
175

    
176
    public void acceptUserRole(String email, String roleId) {
177
        User user = getUserByEmail(email);
178
        for (UserRole ur : user.getRoles()) {
179
            if (ur.getPk().getRole().getId().equals(roleId)) {
180
                ur.setApproved(true);
181
                getSession().update(user);
182
            }
183
        }
184
    }
185

    
186
    public void rejectUserRole(String email, String roleId) {
187
        User user = getUserByEmail(email);
188
        UserRole ur = null;
189
        for (UserRole u : user.getRoles()) {
190
            if (u.getPk().getRole().getId().equals(roleId))
191
                ur = u;
192
        }
193
        user.getRoles().remove(ur);
194
        getSession().update(user);
195
        getSession().delete(ur);
196
    }
197

    
198

    
199
    @SuppressWarnings("unchecked")
200
    public List<User> getUsers() {
201
        return createEntityCriteria().list();
202
    }
203
}
(12-12/12)