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.math.BigInteger;
18
import java.sql.Timestamp;
19
import java.util.ArrayList;
20
import java.util.List;
21

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

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

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

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

    
63
    public void saveToken(final String email, final String token, final int tokenTTL) {
64
        AccountAction acc_action = new AccountAction();
65
        acc_action.setUser(getUserByEmail(email));
66
        acc_action.setType("activation");
67
        acc_action.setToken(token);
68
        acc_action.setDate(new Timestamp(System.currentTimeMillis()));
69
        acc_action.setExpires(new Timestamp(System.currentTimeMillis() + 1000L * 60L * 60L * 24L * tokenTTL));
70
        BigInteger id = (BigInteger) getSession().createSQLQuery("select nextval('account_action_seq') as id").list().get(0);
71
        acc_action.setId(id);
72
        getSession().persist(acc_action);
73
    }
74

    
75
    public boolean verifyLogin(String email, String password) {
76

    
77
        List users = createEntityCriteria().add(Restrictions.eq("email", email))
78
        		.add(Restrictions.eq("password", DigestUtils.md5Hex(password))).list();
79

    
80
        if (users.size() != 0)
81
            return true;
82
        return false;
83
    }
84

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

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

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

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

    
120
    }
121

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

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

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

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

    
159
    public List<User> getModerators() {
160
        return getUsersByRole("moderator");
161
    }
162

    
163
    public List<User> getAccountingOfficers() {
164
        return getUsersByRole("accounting");
165
    }
166

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

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

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

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

    
201

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