Subversion Repositories bacoAlunos

Rev

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

Rev Author Line No. Line
110 susana 1
package pt.estgp.estgweb.domain.dao.impl;
2
 
748 jmachado 3
import org.apache.log4j.Logger;
205 jmachado 4
import org.hibernate.Criteria;
358 jmachado 5
import org.hibernate.Query;
748 jmachado 6
import org.hibernate.criterion.Criterion;
7
import org.hibernate.criterion.Order;
376 jmachado 8
import org.hibernate.sql.JoinFragment;
748 jmachado 9
import pt.estgp.estgweb.domain.CourseUnit;
10
import pt.estgp.estgweb.domain.CourseUnitImpl;
751 jmachado 11
import pt.estgp.estgweb.domain.Teacher;
748 jmachado 12
import pt.estgp.estgweb.domain.dao.DaoUtils;
13
import pt.estgp.estgweb.services.common.SearchTypeEnum;
14
import pt.estgp.estgweb.utils.DatesUtils;
116 jmachado 15
 
125 fvelez 16
import java.util.List;
17
 
748 jmachado 18
import static org.hibernate.criterion.Restrictions.*;
19
 
110 susana 20
/**
21
 * @author Jorge Machado
22
 * @date 28/Fev/2008
23
 * @time 2:51:06
24
 * @see pt.estgp.estgweb.domain.dao.impl
25
 */
26
public class CourseUnitDaoImpl extends CourseUnitDao
27
{
28
 
219 jmachado 29
    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(CourseUnitDaoImpl.class);
110 susana 30
 
751 jmachado 31
 
202 jmachado 32
    private CourseUnitDaoImpl()
33
    {
110 susana 34
    }
35
 
36
    public static CourseUnitDaoImpl getInstance()
37
    {
38
        if (myInstance == null)
39
            myInstance = new CourseUnitDaoImpl();
40
        return (CourseUnitDaoImpl) myInstance;
41
    }
42
 
125 fvelez 43
    public List<CourseUnit> loadBySigesCode(1.5.0/docs/api/java/lang/String.html">String sigesCode)
116 jmachado 44
    {
202 jmachado 45
        return createCriteria().add(eq("code", sigesCode)).list();
116 jmachado 46
    }
202 jmachado 47
 
214 jmachado 48
    public List<CourseUnit> loadByCourse(long course, 1.5.0/docs/api/java/lang/String.html">String importYear)
49
    {
371 jmachado 50
        return createCriteria().add(eq("importYear", importYear)).add(eq("course.id", course)).list();
214 jmachado 51
    }
52
 
371 jmachado 53
    public List<CourseUnit> load(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semestre)
358 jmachado 54
    {
371 jmachado 55
        return createCriteria().add(eq("importYear", importYear)).add(eq("semestre", semestre)).list();
358 jmachado 56
    }
57
 
767 jmachado 58
 
59
 
371 jmachado 60
    public List<Long> loadIds(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semestre)
358 jmachado 61
    {
371 jmachado 62
        1.5.0/docs/api/javax/management/Query.html">Query q = createQuery("select c.id from c in class " + CourseUnit.class.getName() + " where c.importYear = ? and c.semestre = ?");
63
        q.setString(0, importYear);
64
        q.setString(1, semestre);
358 jmachado 65
        return q.list();
66
    }
67
 
218 jmachado 68
    public List<CourseUnit> loadSubscribedImportYearUnits(long studentId, 1.5.0/docs/api/java/lang/String.html">String importYear)
69
    {
371 jmachado 70
        return createCriteria().add(eq("importYear", importYear))
71
                .createAlias("students", "st")
255 jmachado 72
                .add(eq("st.id", studentId)).addOrder(Order.asc("name")).list();
218 jmachado 73
    }
420 jmachado 74
    public List<CourseUnit> loadSubscribedImportYearSemestreUnits(long studentId, 1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semestre)
75
    {
76
        Criteria c  =createCriteria()
77
                .add(eq("importYear", importYear))
78
                .createAlias("students", "st")
79
                .add(eq("st.id", studentId));
80
        if(semestre != null)
81
            c.add(eq("semestre", semestre));
82
        return c.addOrder(Order.asc("name")).list();
83
    }
255 jmachado 84
 
85
    public List<CourseUnit> loadSubscribedOtherImportYearUnits(long studentId, 1.5.0/docs/api/java/lang/String.html">String importYear)
86
    {
371 jmachado 87
        return createCriteria().add(not(eq("importYear", importYear)))
88
                .createAlias("students", "st")
255 jmachado 89
                .add(eq("st.id", studentId)).addOrder(Order.asc("name")).list();
90
    }
343 jmachado 91
 
253 jmachado 92
    public List<CourseUnitImpl> loadTeachedImportYearUnits(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear)
218 jmachado 93
    {
371 jmachado 94
        return createCriteria().add(eq("importYear", importYear))
95
                .createAlias("teachers", "st")
255 jmachado 96
                .add(eq("st.id", teacherId)).addOrder(Order.asc("importYear")).addOrder(Order.asc("name")).list();
218 jmachado 97
    }
98
 
420 jmachado 99
    public List<CourseUnit> loadTeachedImportYearSemestreUnits(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semestre)
100
    {
101
        Criteria c  =createCriteria()
102
                .add(eq("importYear", importYear))
103
                .createAlias("teachers", "st")
104
                .add(eq("st.id", teacherId))
105
                .add(eq("st.id", teacherId));
106
        if(semestre != null)
107
            c.add(eq("semestre", semestre));
108
        return c.addOrder(Order.asc("name")).list();
109
    }
110
 
111
 
112
 
163 jmachado 113
    public CourseUnit loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode)
114
    {
202 jmachado 115
        return (CourseUnit) createCriteria().add(eq("code", sigesCode)).uniqueResult();
163 jmachado 116
    }
116 jmachado 117
 
202 jmachado 118
    public CourseUnit loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode)
119
    {
120
        return (CourseUnit) createCriteria().add(eq("code", sigesCode)).add(eq("courseCode", courseCode)).uniqueResult();
121
    }
163 jmachado 122
 
228 jmachado 123
    public CourseUnit loadBySigesCodeUniqueSubscribed(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String year, 1.5.0/docs/api/java/lang/String.html">String courseCode, long studentId, 1.5.0/docs/api/java/lang/String.html">String semestre)
219 jmachado 124
    {
371 jmachado 125
        List<CourseUnit> cus = createCriteria()
219 jmachado 126
                .add(eq("code", sigesCode))
228 jmachado 127
                .add(eq("importYear", year))
219 jmachado 128
                .add(eq("courseCode", courseCode))
228 jmachado 129
                .add(eq("semestre", semestre))
371 jmachado 130
                .createAlias("students", "st")
131
                .add(eq("st.id", studentId))
219 jmachado 132
                .list();
371 jmachado 133
        if (cus.size() > 1)
219 jmachado 134
        {
135
            CourseUnit cu1 = cus.get(0);
136
            CourseUnit cu2 = cus.get(1);
371 jmachado 137
            if (cus.size() > 2)
219 jmachado 138
            {
139
                logger.error("CourseUnit in more than two places in a course:" + cu1.getCode());
140
            }
141
            else
142
            {
371 jmachado 143
                if (cu1.getSemestre().equals("S1"))
219 jmachado 144
                {
371 jmachado 145
                    if (cu2.getSemestre().equals("S1"))
219 jmachado 146
                        logger.error("CourseUnit in more than two places in a semestre:" + cu1.getCode());
147
                    else
148
                    {
149
                        return cu2;
150
                    }
151
                }
152
                else
153
                {
371 jmachado 154
                    if (cu2.getSemestre().equals("S2"))
219 jmachado 155
                        logger.error("CourseUnit in more than two places in a semestre:" + cu1.getCode());
156
                    else
157
                    {
158
                        return cu1;
159
                    }
160
                }
161
            }
162
        }
371 jmachado 163
        else if (cus.size() == 1)
219 jmachado 164
            return cus.get(0);
165
 
166
        return null;
167
    }
168
 
751 jmachado 169
 
170
    public void consistCourseUnitCourseCodes(1.5.0/docs/api/java/lang/String.html">String importYear)
171
    {
172
           List<CourseUnit> courseUnit =  createCriteria()
173
                        .add(eq("importYear", importYear)).list();
174
        for(CourseUnit cu: courseUnit)
175
        {
176
            if(cu.getCourse() != null)
177
            {
178
                if(cu.getCourseCode() == null || (cu.getCourseCode() != null && !cu.getCourseCode().equals(cu.getCourse().getCode())))
179
                {
180
                    1.5.0/docs/api/java/lang/System.html">System.out.println("Course code wrong: " + cu.getId() + " - " + cu.getName() + " old CourseCode " + cu.getCourseCode() + " now:" + cu.getCourse().getCode() );
181
                }
182
 
183
                if(cu.getCourseName() == null || (cu.getCourseName() != null && !cu.getCourseName().equals(cu.getCourse().getName())))
184
                {
185
                    1.5.0/docs/api/java/lang/System.html">System.out.println("Course name wrong: " + cu.getId() + " - " + cu.getName() + " old CourseCode " + cu.getCourseName() + " now:" + cu.getCourse().getName() );
186
                }
187
                cu.setCourseCode(cu.getCourse().getCode());
188
                cu.setCourseName(cu.getCourse().getName());
189
            }
190
            else
191
            {
192
                cu.setCourseCode("");
193
                cu.setCourseName("");
194
            }
195
        }
196
    }
197
 
198
 
748 jmachado 199
    //TODO Na actualização de uma cadeira para o curso de TESTE mudar o coursecode para o o coursecode desse curso para nao deixar os dados duplicados e mal
200
    //se nao a carregar unidades vai buscar a errada
225 jmachado 201
    public CourseUnit loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year)
202 jmachado 202
    {
225 jmachado 203
        return (CourseUnit)
204
                createCriteria()
205
                        .add(eq("code", sigesCode))
206
                        .add(eq("courseCode", courseCode))
207
                        .add(eq("semestre", semestre))
208
                        .add(eq("importYear", year))
209
                        .uniqueResult();
202 jmachado 210
    }
767 jmachado 211
 
212
     public List<CourseUnit> loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String year)
213
    {
214
        return createCriteria()
215
                .add(eq("code", sigesCode))
216
                .add(eq("courseCode", courseCode))
217
                .add(eq("importYear", year))
218
                .addOrder(Order.desc("id"))
219
                .list();        
220
    }
221
 
457 jmachado 222
    public List<CourseUnit> loadBySigesCodes(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode)
223
    {
224
        return (List<CourseUnit>) createCriteria()
225
                .add(eq("code", sigesCode))
226
                .add(eq("courseCode", courseCode))
227
                .addOrder(Order.desc("importYear"))
228
                .list();
229
    }
163 jmachado 230
 
376 jmachado 231
    public List<CourseUnit> loadCourseUnits(long courseId, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year, boolean withTeacher, boolean withNoTeacher)
232
    {
233
        Criteria c = createCriteria();
234
        if(courseId > 0)
235
            c.add(eq("course.id", courseId));
236
        if(semestre != null && semestre.length() > 0)
237
            c.add(eq("semestre", semestre));
238
        if(year != null  && year.length() > 0)
239
            c.add(eq("importYear", year));
240
        if(withTeacher && !withNoTeacher)
241
        {
242
            c.createAlias("teachers", "th");
243
            c.add(isNotNull("th.id"));
244
        }
245
        else if(!withTeacher && withNoTeacher)
246
        {
247
            c.createAlias("teachers", "th", JoinFragment.LEFT_OUTER_JOIN);
248
            c.add(isNull("th.id"));
249
        }
250
        return c.list();
251
    }
163 jmachado 252
 
376 jmachado 253
 
205 jmachado 254
    public int countCourseUnits(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
255
    {
749 jmachado 256
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name","code");
205 jmachado 257
        return createCriteria().add(c).list().size();
258
    }
163 jmachado 259
 
205 jmachado 260
    public List<CourseUnit> search(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
261
    {
748 jmachado 262
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name","code");
205 jmachado 263
        Criteria criteria = createCriteria();
264
        criteria.add(c)
265
                .addOrder(Order.asc("name"))
266
                .setMaxResults(maxUnits)
267
                .setFirstResult(page * maxUnits);
268
        return criteria.list();
269
    }
202 jmachado 270
 
206 jmachado 271
    public int countCourseUnitsActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
272
    {
371 jmachado 273
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name");
206 jmachado 274
        return createCriteria()
275
                .add(c)
276
                .add(eq("importYear", DatesUtils.getImportYear()))
277
                .list().size();
278
    }
279
 
280
    public List<CourseUnit> searchActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
281
    {
282
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name");
283
        Criteria criteria = createCriteria();
284
        criteria.add(c)
285
                .add(eq("importYear", DatesUtils.getImportYear()))
286
                .addOrder(Order.asc("name"))
287
                .setMaxResults(maxUnits)
288
                .setFirstResult(page * maxUnits);
289
        return criteria.list();
290
    }
291
 
205 jmachado 292
    public List<CourseUnit> loadMissingObjectives(long teacherId)
293
    {
294
        //todo falta a projeccao do teacher id
295
        return createCriteria()
206 jmachado 296
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 297
                .add((or(isNull("objectives"), eq("objectives", ""))))
205 jmachado 298
                .createAlias("teachers", "th")
371 jmachado 299
                .add(eq("semestre", DatesUtils.getSemestre()))
300
                .add(eq("th.id", teacherId))
205 jmachado 301
                .list();
302
    }
303
 
214 jmachado 304
    public List<CourseUnit> loadMissingPrograms(long teacherId)
305
    {
306
        //todo falta a projeccao do teacher id
307
        return createCriteria()
308
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 309
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 310
                .createAlias("teachers", "th")
371 jmachado 311
                .add(eq("semestre", DatesUtils.getSemestre()))
312
                .add(eq("th.id", teacherId))
214 jmachado 313
                .list();
314
    }
315
 
343 jmachado 316
    public List<CourseUnit> loadMissingObjectivesOrPrograms(long teacherId)
317
    {
318
        //todo falta a projeccao do teacher id
371 jmachado 319
        Criteria c = createCriteria()
343 jmachado 320
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 321
                .add(or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", ""))));
322
 
323
        DatesUtils.SemestreModerate semestreModerate = DatesUtils.getSemestreModerate();
324
        if (semestreModerate == DatesUtils.SemestreModerate.S1)
325
            c.add(eq("semestre", "S1"));
326
        else if (semestreModerate == DatesUtils.SemestreModerate.S2)
327
            c.add(eq("semestre", "S2"));
328
        else
329
            c.add(or(eq("semestre", "S1"), eq("semestre", "S2")));
330
 
331
        return c.createAlias("teachers", "th")
332
                .add(eq("th.id", teacherId))
343 jmachado 333
                .list();
334
    }
214 jmachado 335
 
343 jmachado 336
 
214 jmachado 337
    public List<CourseUnit> loadMissingObjectivesGivenCourse(long courseId)
338
    {
339
        return createCriteria()
340
                .createAlias("course", "c")
371 jmachado 341
                .add(eq("c.id", courseId))
214 jmachado 342
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 343
                .add(eq("semestre", DatesUtils.getSemestre()))
344
                .add((or(isNull("objectives"), eq("objectives", ""))))
214 jmachado 345
                .list();
346
    }
347
 
348
    public List<CourseUnit> loadMissingProgramGivenCourse(long courseId)
349
    {
350
        return createCriteria()
351
                .createAlias("course", "c")
371 jmachado 352
                .add(eq("c.id", courseId))
214 jmachado 353
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 354
                .add(eq("semestre", DatesUtils.getSemestre()))
355
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 356
                .list();
357
    }
358
 
509 jmachado 359
    public List<CourseUnit> loadMissingProgramValidateGivenCourse(long courseId)
360
    {
361
        return createCriteria()
362
                .createAlias("course", "c")
363
                .add(eq("c.id", courseId))
364
                .add(eq("importYear", DatesUtils.getImportYear()))
365
                .add(eq("semestre", DatesUtils.getSemestre()))
366
                .add((and(isNotNull("programStreamId"), not(eq("programStreamId", "")))))
367
                .add((eq("validProgram", false)))
368
                .list();
369
    }
370
 
219 jmachado 371
    public List<CourseUnit> loadMissingObjectivesOrProgramGivenCourse(long courseId)
214 jmachado 372
    {
373
        return createCriteria()
374
                .createAlias("course", "c")
371 jmachado 375
                .add(eq("c.id", courseId))
214 jmachado 376
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 377
                .add(eq("semestre", DatesUtils.getSemestre()))
378
                .add((or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", "")))))
214 jmachado 379
                .list();
380
    }
205 jmachado 381
 
343 jmachado 382
    public int countMissingProgramGivenCourse(long courseId)
383
    {
384
        return loadMissingProgramGivenCourse(courseId).size();
385
    }
205 jmachado 386
 
509 jmachado 387
    public int countMissingProgramValidateCourse(long courseId)
388
    {
389
        return loadMissingProgramValidateGivenCourse(courseId).size();
390
    }
751 jmachado 391
 
392
 
393
    public List<String> getTeachersEmails(long unit) {
394
        1.5.0/docs/api/javax/management/Query.html">Query q = createQuery("select e.email from "
395
                + Teacher.class.getName() + " e join e.teachedUnits as unit "
396
                + " where "
397
                + " unit.id = ? "
398
 
399
        );
400
        q.setLong(0,unit);
401
        return q.list();
402
    }
110 susana 403
}