Subversion Repositories bacoAlunos

Rev

Rev 748 | Rev 751 | 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;
11
import pt.estgp.estgweb.domain.dao.DaoUtils;
12
import pt.estgp.estgweb.services.common.SearchTypeEnum;
13
import pt.estgp.estgweb.utils.DatesUtils;
116 jmachado 14
 
125 fvelez 15
import java.util.List;
16
 
748 jmachado 17
import static org.hibernate.criterion.Restrictions.*;
18
 
110 susana 19
/**
20
 * @author Jorge Machado
21
 * @date 28/Fev/2008
22
 * @time 2:51:06
23
 * @see pt.estgp.estgweb.domain.dao.impl
24
 */
25
public class CourseUnitDaoImpl extends CourseUnitDao
26
{
27
 
219 jmachado 28
    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 29
 
202 jmachado 30
    private CourseUnitDaoImpl()
31
    {
110 susana 32
    }
33
 
34
    public static CourseUnitDaoImpl getInstance()
35
    {
36
        if (myInstance == null)
37
            myInstance = new CourseUnitDaoImpl();
38
        return (CourseUnitDaoImpl) myInstance;
39
    }
40
 
125 fvelez 41
    public List<CourseUnit> loadBySigesCode(1.5.0/docs/api/java/lang/String.html">String sigesCode)
116 jmachado 42
    {
202 jmachado 43
        return createCriteria().add(eq("code", sigesCode)).list();
116 jmachado 44
    }
202 jmachado 45
 
214 jmachado 46
    public List<CourseUnit> loadByCourse(long course, 1.5.0/docs/api/java/lang/String.html">String importYear)
47
    {
371 jmachado 48
        return createCriteria().add(eq("importYear", importYear)).add(eq("course.id", course)).list();
214 jmachado 49
    }
50
 
371 jmachado 51
    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 52
    {
371 jmachado 53
        return createCriteria().add(eq("importYear", importYear)).add(eq("semestre", semestre)).list();
358 jmachado 54
    }
55
 
371 jmachado 56
    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 57
    {
371 jmachado 58
        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 = ?");
59
        q.setString(0, importYear);
60
        q.setString(1, semestre);
358 jmachado 61
        return q.list();
62
    }
63
 
218 jmachado 64
    public List<CourseUnit> loadSubscribedImportYearUnits(long studentId, 1.5.0/docs/api/java/lang/String.html">String importYear)
65
    {
371 jmachado 66
        return createCriteria().add(eq("importYear", importYear))
67
                .createAlias("students", "st")
255 jmachado 68
                .add(eq("st.id", studentId)).addOrder(Order.asc("name")).list();
218 jmachado 69
    }
420 jmachado 70
    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)
71
    {
72
        Criteria c  =createCriteria()
73
                .add(eq("importYear", importYear))
74
                .createAlias("students", "st")
75
                .add(eq("st.id", studentId));
76
        if(semestre != null)
77
            c.add(eq("semestre", semestre));
78
        return c.addOrder(Order.asc("name")).list();
79
    }
255 jmachado 80
 
81
    public List<CourseUnit> loadSubscribedOtherImportYearUnits(long studentId, 1.5.0/docs/api/java/lang/String.html">String importYear)
82
    {
371 jmachado 83
        return createCriteria().add(not(eq("importYear", importYear)))
84
                .createAlias("students", "st")
255 jmachado 85
                .add(eq("st.id", studentId)).addOrder(Order.asc("name")).list();
86
    }
343 jmachado 87
 
253 jmachado 88
    public List<CourseUnitImpl> loadTeachedImportYearUnits(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear)
218 jmachado 89
    {
371 jmachado 90
        return createCriteria().add(eq("importYear", importYear))
91
                .createAlias("teachers", "st")
255 jmachado 92
                .add(eq("st.id", teacherId)).addOrder(Order.asc("importYear")).addOrder(Order.asc("name")).list();
218 jmachado 93
    }
94
 
420 jmachado 95
    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)
96
    {
97
        Criteria c  =createCriteria()
98
                .add(eq("importYear", importYear))
99
                .createAlias("teachers", "st")
100
                .add(eq("st.id", teacherId))
101
                .add(eq("st.id", teacherId));
102
        if(semestre != null)
103
            c.add(eq("semestre", semestre));
104
        return c.addOrder(Order.asc("name")).list();
105
    }
106
 
107
 
108
 
163 jmachado 109
    public CourseUnit loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode)
110
    {
202 jmachado 111
        return (CourseUnit) createCriteria().add(eq("code", sigesCode)).uniqueResult();
163 jmachado 112
    }
116 jmachado 113
 
202 jmachado 114
    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)
115
    {
116
        return (CourseUnit) createCriteria().add(eq("code", sigesCode)).add(eq("courseCode", courseCode)).uniqueResult();
117
    }
163 jmachado 118
 
228 jmachado 119
    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 120
    {
371 jmachado 121
        List<CourseUnit> cus = createCriteria()
219 jmachado 122
                .add(eq("code", sigesCode))
228 jmachado 123
                .add(eq("importYear", year))
219 jmachado 124
                .add(eq("courseCode", courseCode))
228 jmachado 125
                .add(eq("semestre", semestre))
371 jmachado 126
                .createAlias("students", "st")
127
                .add(eq("st.id", studentId))
219 jmachado 128
                .list();
371 jmachado 129
        if (cus.size() > 1)
219 jmachado 130
        {
131
            CourseUnit cu1 = cus.get(0);
132
            CourseUnit cu2 = cus.get(1);
371 jmachado 133
            if (cus.size() > 2)
219 jmachado 134
            {
135
                logger.error("CourseUnit in more than two places in a course:" + cu1.getCode());
136
            }
137
            else
138
            {
371 jmachado 139
                if (cu1.getSemestre().equals("S1"))
219 jmachado 140
                {
371 jmachado 141
                    if (cu2.getSemestre().equals("S1"))
219 jmachado 142
                        logger.error("CourseUnit in more than two places in a semestre:" + cu1.getCode());
143
                    else
144
                    {
145
                        return cu2;
146
                    }
147
                }
148
                else
149
                {
371 jmachado 150
                    if (cu2.getSemestre().equals("S2"))
219 jmachado 151
                        logger.error("CourseUnit in more than two places in a semestre:" + cu1.getCode());
152
                    else
153
                    {
154
                        return cu1;
155
                    }
156
                }
157
            }
158
        }
371 jmachado 159
        else if (cus.size() == 1)
219 jmachado 160
            return cus.get(0);
161
 
162
        return null;
163
    }
164
 
748 jmachado 165
    //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
166
    //se nao a carregar unidades vai buscar a errada
225 jmachado 167
    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 168
    {
225 jmachado 169
        return (CourseUnit)
170
                createCriteria()
171
                        .add(eq("code", sigesCode))
172
                        .add(eq("courseCode", courseCode))
173
                        .add(eq("semestre", semestre))
174
                        .add(eq("importYear", year))
175
                        .uniqueResult();
202 jmachado 176
    }
457 jmachado 177
    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)
178
    {
179
        return (List<CourseUnit>) createCriteria()
180
                .add(eq("code", sigesCode))
181
                .add(eq("courseCode", courseCode))
182
                .addOrder(Order.desc("importYear"))
183
                .list();
184
    }
163 jmachado 185
 
376 jmachado 186
    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)
187
    {
188
        Criteria c = createCriteria();
189
        if(courseId > 0)
190
            c.add(eq("course.id", courseId));
191
        if(semestre != null && semestre.length() > 0)
192
            c.add(eq("semestre", semestre));
193
        if(year != null  && year.length() > 0)
194
            c.add(eq("importYear", year));
195
        if(withTeacher && !withNoTeacher)
196
        {
197
            c.createAlias("teachers", "th");
198
            c.add(isNotNull("th.id"));
199
        }
200
        else if(!withTeacher && withNoTeacher)
201
        {
202
            c.createAlias("teachers", "th", JoinFragment.LEFT_OUTER_JOIN);
203
            c.add(isNull("th.id"));
204
        }
205
        return c.list();
206
    }
163 jmachado 207
 
376 jmachado 208
 
205 jmachado 209
    public int countCourseUnits(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
210
    {
749 jmachado 211
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name","code");
205 jmachado 212
        return createCriteria().add(c).list().size();
213
    }
163 jmachado 214
 
205 jmachado 215
    public List<CourseUnit> search(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
216
    {
748 jmachado 217
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name","code");
205 jmachado 218
        Criteria criteria = createCriteria();
219
        criteria.add(c)
220
                .addOrder(Order.asc("name"))
221
                .setMaxResults(maxUnits)
222
                .setFirstResult(page * maxUnits);
223
        return criteria.list();
224
    }
202 jmachado 225
 
206 jmachado 226
    public int countCourseUnitsActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
227
    {
371 jmachado 228
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name");
206 jmachado 229
        return createCriteria()
230
                .add(c)
231
                .add(eq("importYear", DatesUtils.getImportYear()))
232
                .list().size();
233
    }
234
 
235
    public List<CourseUnit> searchActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
236
    {
237
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name");
238
        Criteria criteria = createCriteria();
239
        criteria.add(c)
240
                .add(eq("importYear", DatesUtils.getImportYear()))
241
                .addOrder(Order.asc("name"))
242
                .setMaxResults(maxUnits)
243
                .setFirstResult(page * maxUnits);
244
        return criteria.list();
245
    }
246
 
205 jmachado 247
    public List<CourseUnit> loadMissingObjectives(long teacherId)
248
    {
249
        //todo falta a projeccao do teacher id
250
        return createCriteria()
206 jmachado 251
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 252
                .add((or(isNull("objectives"), eq("objectives", ""))))
205 jmachado 253
                .createAlias("teachers", "th")
371 jmachado 254
                .add(eq("semestre", DatesUtils.getSemestre()))
255
                .add(eq("th.id", teacherId))
205 jmachado 256
                .list();
257
    }
258
 
214 jmachado 259
    public List<CourseUnit> loadMissingPrograms(long teacherId)
260
    {
261
        //todo falta a projeccao do teacher id
262
        return createCriteria()
263
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 264
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 265
                .createAlias("teachers", "th")
371 jmachado 266
                .add(eq("semestre", DatesUtils.getSemestre()))
267
                .add(eq("th.id", teacherId))
214 jmachado 268
                .list();
269
    }
270
 
343 jmachado 271
    public List<CourseUnit> loadMissingObjectivesOrPrograms(long teacherId)
272
    {
273
        //todo falta a projeccao do teacher id
371 jmachado 274
        Criteria c = createCriteria()
343 jmachado 275
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 276
                .add(or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", ""))));
277
 
278
        DatesUtils.SemestreModerate semestreModerate = DatesUtils.getSemestreModerate();
279
        if (semestreModerate == DatesUtils.SemestreModerate.S1)
280
            c.add(eq("semestre", "S1"));
281
        else if (semestreModerate == DatesUtils.SemestreModerate.S2)
282
            c.add(eq("semestre", "S2"));
283
        else
284
            c.add(or(eq("semestre", "S1"), eq("semestre", "S2")));
285
 
286
        return c.createAlias("teachers", "th")
287
                .add(eq("th.id", teacherId))
343 jmachado 288
                .list();
289
    }
214 jmachado 290
 
343 jmachado 291
 
214 jmachado 292
    public List<CourseUnit> loadMissingObjectivesGivenCourse(long courseId)
293
    {
294
        return createCriteria()
295
                .createAlias("course", "c")
371 jmachado 296
                .add(eq("c.id", courseId))
214 jmachado 297
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 298
                .add(eq("semestre", DatesUtils.getSemestre()))
299
                .add((or(isNull("objectives"), eq("objectives", ""))))
214 jmachado 300
                .list();
301
    }
302
 
303
    public List<CourseUnit> loadMissingProgramGivenCourse(long courseId)
304
    {
305
        return createCriteria()
306
                .createAlias("course", "c")
371 jmachado 307
                .add(eq("c.id", courseId))
214 jmachado 308
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 309
                .add(eq("semestre", DatesUtils.getSemestre()))
310
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 311
                .list();
312
    }
313
 
509 jmachado 314
    public List<CourseUnit> loadMissingProgramValidateGivenCourse(long courseId)
315
    {
316
        return createCriteria()
317
                .createAlias("course", "c")
318
                .add(eq("c.id", courseId))
319
                .add(eq("importYear", DatesUtils.getImportYear()))
320
                .add(eq("semestre", DatesUtils.getSemestre()))
321
                .add((and(isNotNull("programStreamId"), not(eq("programStreamId", "")))))
322
                .add((eq("validProgram", false)))
323
                .list();
324
    }
325
 
219 jmachado 326
    public List<CourseUnit> loadMissingObjectivesOrProgramGivenCourse(long courseId)
214 jmachado 327
    {
328
        return createCriteria()
329
                .createAlias("course", "c")
371 jmachado 330
                .add(eq("c.id", courseId))
214 jmachado 331
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 332
                .add(eq("semestre", DatesUtils.getSemestre()))
333
                .add((or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", "")))))
214 jmachado 334
                .list();
335
    }
205 jmachado 336
 
343 jmachado 337
    public int countMissingProgramGivenCourse(long courseId)
338
    {
339
        return loadMissingProgramGivenCourse(courseId).size();
340
    }
205 jmachado 341
 
509 jmachado 342
    public int countMissingProgramValidateCourse(long courseId)
343
    {
344
        return loadMissingProgramValidateGivenCourse(courseId).size();
345
    }
110 susana 346
}