Subversion Repositories bacoAlunos

Rev

Rev 1704 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 fvelez 1
package pt.estgp.estgweb.domain.dao.impl;
2
 
3
import jomm.dao.DaoException;
395 jmachado 4
import jomm.utils.DesUtils;
344 jmachado 5
import org.apache.log4j.Logger;
113 fvelez 6
import org.hibernate.Criteria;
344 jmachado 7
import org.hibernate.HibernateException;
1585 jmachado 8
import org.hibernate.Query;
113 fvelez 9
import org.hibernate.criterion.Criterion;
186 fvelez 10
import org.hibernate.criterion.Order;
1496 jmachado 11
import pt.estgp.estgweb.domain.Teacher;
1 fvelez 12
import pt.estgp.estgweb.domain.User;
215 jmachado 13
import pt.estgp.estgweb.domain.dao.DaoUtils;
14
import pt.estgp.estgweb.services.common.SearchTypeEnum;
1414 jmachado 15
import pt.estgp.estgweb.utils.RoleManager;
1 fvelez 16
 
344 jmachado 17
import java.io.Serializable;
1136 jmachado 18
import java.util.ArrayList;
344 jmachado 19
import java.util.Date;
1200 jmachado 20
import java.util.Iterator;
344 jmachado 21
import java.util.List;
22
 
684 jmachado 23
import static org.hibernate.criterion.Restrictions.*;
24
 
1 fvelez 25
/**
26
 * @author Jorge Machado
27
 * @date 28/Fev/2008
28
 * @time 2:51:06
29
 * @see pt.estgp.estgweb.domain.dao.impl
30
 */
215 jmachado 31
public class UserDaoImpl extends UserDao
1 fvelez 32
{
179 fvelez 33
 
34
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(UserDaoImpl.class);
35
 
1 fvelez 36
    public static UserDaoImpl getInstance()
37
    {
38
        if (myInstance == null)
39
            myInstance = new UserDaoImpl();
40
        return (UserDaoImpl) myInstance;
41
    }
42
 
43
    /**
44
     * Used by the base DAO classes but here for your modification Load object
45
     * matching the given key and return it.
46
     *
47
     * @param username to load
48
     * @return a user
49
     */
50
    public final User loadByUsername(1.5.0/docs/api/java/lang/String.html">String username)
51
    {
52
        try
53
        {
54
            5+0%2Fdocs%2Fapi+List">List list =
55
                    createCriteria()
344 jmachado 56
                            .add(eq("username", username))
1 fvelez 57
                            .setMaxResults(1)
58
                            .list();
59
 
344 jmachado 60
            if (list.size() == 0)
1 fvelez 61
                return null;
62
            return (User) list.get(0);
63
        }
64
        catch (HibernateException e)
65
        {
66
            throw new DaoException(e);
67
        }
68
    }
344 jmachado 69
 
1 fvelez 70
    /**
71
     * Used by the base DAO classes but here for your modification Load object
72
     * matching the given key and return it.
73
     *
74
     * @param email to load
75
     * @return a user
76
     */
77
    public final User loadByEmail(1.5.0/docs/api/java/lang/String.html">String email)
78
    {
79
        try
80
        {
81
            return (User) createCriteria()
344 jmachado 82
                    .add(eq("email", email))
1 fvelez 83
                    .uniqueResult();
84
        }
85
        catch (HibernateException e)
86
        {
87
            throw new DaoException(e);
88
        }
89
    }
90
 
113 fvelez 91
    /**
44 fvelez 92
     * Used by the base DAO classes but here for your modification Load object
93
     * matching the given key and return it.
94
     *
95
     * @param ID to load
96
     * @return a user
97
     */
113 fvelez 98
    public final User loadByID(1.5.0/docs/api/java/lang/String.html">String ID)
38 fvelez 99
    {
100
        try
101
        {
102
            return (User) createCriteria()
1616 jmachado 103
                    .add(eq("id", 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(ID)))
38 fvelez 104
                    .uniqueResult();
105
        }
106
        catch (HibernateException e)
107
        {
108
            throw new DaoException(e);
109
        }
110
    }
111
 
1 fvelez 112
    /**
113
     * Used by the base DAO classes but here for your modification Load object
114
     * matching the given key and return it.
115
     *
116
     * @param username to load
117
     * @param password to load
118
     * @return a user
119
     */
120
    public final User loadByUsernameAndPassword(1.5.0/docs/api/java/lang/String.html">String username, 1.5.0/docs/api/java/lang/String.html">String password)
121
    {
122
        try
123
        {
124
            return (User) createCriteria()
344 jmachado 125
                    .add(eq("username", username))
395 jmachado 126
                    .add(or(
127
                            eq("password", jomm.utils.BytesUtils.getDigestMD5Hex(password)),
128
                            eq("pop3password",DesUtils.getInstance().encrypt(password))
129
                           )
130
                        )
1 fvelez 131
                    .uniqueResult();
132
        }
133
        catch (HibernateException e)
134
        {
135
            throw new DaoException(e);
136
        }
137
    }
138
 
1704 jmachado 139
    public final User loadByUsernameAndChaveAppsMoveis(1.5.0/docs/api/java/lang/String.html">String username, 1.5.0/docs/api/java/lang/String.html">String chaveAppsMoveis)
140
    {
141
        try
142
        {
143
            List<User> users = createCriteria()
144
                    .add(eq("username", username))
145
                    .add(eq("chaveAppsMoveis", chaveAppsMoveis))
146
                    .list();
147
            if(users.size() == 1)
148
            {
149
                return users.get(0);
150
            }
151
            else if(users.size() > 1)
152
            {
153
                logger.fatal("Atencao existe mais de um user com username: " + username);
154
            }
155
            return null;
156
        }
157
        catch (HibernateException e)
158
        {
159
            throw new DaoException(e);
160
        }
161
    }
162
 
1414 jmachado 163
    public List<User> loadRoleUsers(1.5.0/docs/api/java/lang/String.html">String role, int maxResults, int firstResult)
164
    {
165
        Criteria c = createCriteria()
166
                .add(like("roles","%" + role + RoleManager.ROLE_SEPARATOR +"%"))
167
                .addOrder(Order.asc("name"))
168
                .setMaxResults(maxResults)
169
                .setFirstResult(firstResult);
170
        return c.list();
171
    }
172
 
344 jmachado 173
    public List<User> loadRoleUsers(1.5.0/docs/api/java/lang/String.html">String role)
215 jmachado 174
    {
1136 jmachado 175
        if(role == null || role.trim().length() == 0)
176
            return new ArrayList<User>();
1200 jmachado 177
        List<User> users = createCriteria().add(like("roles", "%" + role + "%")).addOrder(Order.asc("name")).list();
178
        Iterator<User> iter = users.iterator();
179
        while(iter.hasNext())
180
        {
181
            User u = iter.next();
182
            if(!u.hasRole(role))
183
                iter.remove();
184
        }
1201 jmachado 185
        return users;
215 jmachado 186
    }
187
 
1496 jmachado 188
    public List<Teacher> loadRoleTeachers(1.5.0/docs/api/java/lang/String.html">String role)
189
    {
190
        if(role == null || role.trim().length() == 0)
191
            return new ArrayList<Teacher>();
192
        List<Teacher> users = createCriteria(Teacher.class).add(like("roles", "%" + role + ",%")).addOrder(Order.asc("name")).list();
193
        return users;
194
    }
195
 
196
 
197
 
387 jmachado 198
    public List<User> loadRoleAreaUsers(1.5.0/docs/api/java/lang/String.html">String role, 1.5.0/docs/api/java/lang/String.html">String area)
199
    {
200
        Criteria c = createCriteria().add(like("roles", "%" + role + "%")).addOrder(Order.asc("name"));
201
        if(area != null && area.trim().length() > 0)
202
           c.add(eq("mainArea",area));
1202 jmachado 203
        List<User> users = c.list();
204
        Iterator<User> iter = users.iterator();
205
        while(iter.hasNext())
206
        {
207
            User u = iter.next();
208
            if(!u.hasRole(role))
209
                iter.remove();
210
        }
211
        return users;
387 jmachado 212
    }
213
 
344 jmachado 214
    public List<User> findUsers(1.5.0/docs/api/java/lang/String.html">String textToSearch)
113 fvelez 215
    {
344 jmachado 216
        return findUsers(textToSearch, null);
179 fvelez 217
    }
218
 
1524 jmachado 219
    public List<User> findUsersFromClassUserAndTeacherOnly()
220
    {
221
        return createCriteria().add(or(eq("class","UserImpl"),eq("class","TeacherImpl"))).list();
222
    }
223
 
344 jmachado 224
    public List<User> findUsers(1.5.0/docs/api/java/lang/String.html">String textToSearch, 1.5.0/docs/api/java/lang/String.html">String typeToSearch)
179 fvelez 225
    {
344 jmachado 226
        Criteria criteria;
227
        if (typeToSearch != null && typeToSearch.trim().length() != 0)
179 fvelez 228
            try
229
            {
230
                criteria = createCriteria(1.5.0/docs/api/java/lang/Class.html">Class.forName(typeToSearch));
231
            }
232
            catch (1.5.0/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException e)
233
            {
344 jmachado 234
                logger.error(e, e);
235
                return null;
179 fvelez 236
            }
237
        else
344 jmachado 238
            criteria = createCriteria();
721 jmachado 239
        Criterion textSearch = DaoUtils.createSearchQuery(textToSearch, SearchTypeEnum.AllWords, "name", "username");
373 jmachado 240
        Criterion text2Search = DaoUtils.createSearchQuery(textToSearch, SearchTypeEnum.AllWords, "email");
720 jmachado 241
        Criterion fields = or(textSearch, text2Search);
721 jmachado 242
        try{
243
            1.5.0/docs/api/java/lang/Integer.html">Integer siges = 1.5.0/docs/api/java/lang/Integer.html">Integer.parseInt(textToSearch);
244
            fields = or(fields,eq("sigesCode",siges));
245
        }catch(1.5.0/docs/api/java/lang/Exception.html">Exception e){}
246
 
247
 
344 jmachado 248
        return criteria.add(fields)
249
                .addOrder(Order.desc("name"))
250
                .list();
113 fvelez 251
    }
252
 
253
 
45 fvelez 254
    public 1.5.0/docs/api/java/io/Serializable.html">Serializable save(User obj)
255
    {
344 jmachado 256
        try
257
        {
45 fvelez 258
            obj.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
259
            return super.save(obj);
260
        }
344 jmachado 261
        catch (HibernateException e)
262
        {
45 fvelez 263
            throw new DaoException(e);
264
        }
265
 
266
    }
267
 
215 jmachado 268
    public int countUsers(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
269
    {
344 jmachado 270
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "name", "username");
215 jmachado 271
        return createCriteria()
272
                .add(c)
273
                .list().size();
274
    }
275
 
276
 
277
    public List<User> search(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxResults, int page)
278
    {
279
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "name", "username");
280
        Criteria criteria = createCriteria();
281
        criteria.add(c)
282
                .addOrder(Order.asc("name"))
283
                .setMaxResults(maxResults)
284
                .setFirstResult(page * maxResults);
285
        return criteria.list();
286
    }
381 jmachado 287
 
288
    public List<User> findByEmail(1.5.0/docs/api/java/lang/String.html">String email)
289
    {
290
        return createCriteria().add(or(or(or(eq("email",email),eq("outEmail",email)),eq("gmail",email)),eq("msn",email))).list();
291
    }
411 jmachado 292
 
1312 jmachado 293
    public User loadByUsernameOrSigesCode(int sigesCode)
411 jmachado 294
    {
295
        return (User) createCriteria().add(or(eq("sigesCode",sigesCode),eq("username","a" + sigesCode))).uniqueResult();
296
    }
1312 jmachado 297
 
298
    public User loadBySigesCode(int sigesCode)
299
    {
300
        return (User) createCriteria().add(eq("sigesCode", sigesCode)).uniqueResult();
301
    }
302
 
1585 jmachado 303
    public List<User> loadBySigesCodeUsernameEmailsBiSiges(1.5.0/docs/api/java/lang/String.html">String identifier)
304
    {
1850 jmachado 305
        1.5.0/docs/api/java/lang/Integer.html">Integer sigesCode = null;
306
        try{ sigesCode = 1.5.0/docs/api/java/lang/Integer.html">Integer.parseInt(identifier); }catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e){}
1585 jmachado 307
        1.5.0/docs/api/javax/management/Query.html">Query q = getCurrentSession().createQuery(
308
                "select u from u in class " + User.class.getName() + " " +
309
                "where " +
310
                "u.username = :identifier or " +
311
                "u.bi = :identifier or " +
312
                "u.email = :identifier or " +
313
                "u.outEmail = :identifier or " +
1850 jmachado 314
                "u.preferrefEmail = :identifier " +
315
                (sigesCode != null ? " or u.sigesCode = :sigesCode ":"")
316
                );
1585 jmachado 317
        q.setString("identifier",identifier);
1850 jmachado 318
        if(sigesCode != null)
319
            q.setInteger("sigesCode", sigesCode);
1585 jmachado 320
 
321
        return q.list();
322
    }
323
 
1317 jmachado 324
    public List<User> loadByCertificate(1.5.0/docs/api/java/lang/String.html">String certificate)
325
    {
326
        return  createCriteria()
327
                .add(eq("authenticationCertificate", certificate))
328
                .add(gt("authenticationCertificateExpire",new 5+0%2Fdocs%2Fapi+Date">Date()))
329
                .list();
330
    }
331
 
684 jmachado 332
 
333
 // Duarte Santos
671 jmachado 334
    public List<User> loadRolesUsers(List<String> roles)
335
    {
1136 jmachado 336
        if(roles == null || roles.size() == 0)
337
            return new ArrayList<User>();
671 jmachado 338
        Criteria criteria = createCriteria();
339
        Criterion co = null;
340
        for (1.5.0/docs/api/java/lang/String.html">String role : roles)
341
        {
1136 jmachado 342
            if(role.trim().length() == 0)
343
                continue;
671 jmachado 344
            Criterion cor = like("roles", "%" + role + "%");
345
            if (co == null)
346
                co = cor;
347
            else
348
                co = or(co, cor);
349
        }
350
        criteria.add(co);
1202 jmachado 351
        List<User> users = criteria.list();
352
        Iterator<User> iter = users.iterator();
353
        while(iter.hasNext())
354
        {
355
            boolean hasIt = false;
356
            User u = iter.next();
357
            for(1.5.0/docs/api/java/lang/String.html">String role: roles)
358
            {
359
                if(u.hasRole(role))
360
                {
361
                    hasIt = true;
362
                    break;
363
                }
364
            }
365
            if(!hasIt)
366
                iter.remove();
367
        }
368
        return users;
671 jmachado 369
    }
1 fvelez 370
}