Subversion Repositories bacoAlunos

Rev

Rev 420 | Rev 509 | 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
 
116 jmachado 3
import pt.estgp.estgweb.domain.CourseUnit;
205 jmachado 4
import pt.estgp.estgweb.domain.Blog;
206 jmachado 5
import pt.estgp.estgweb.domain.TeacherImpl;
253 jmachado 6
import pt.estgp.estgweb.domain.CourseUnitImpl;
205 jmachado 7
import pt.estgp.estgweb.domain.dao.DaoUtils;
8
import pt.estgp.estgweb.services.common.SearchTypeEnum;
206 jmachado 9
import pt.estgp.estgweb.utils.DatesUtils;
219 jmachado 10
import pt.estgp.estgweb.Globals;
116 jmachado 11
import static org.hibernate.criterion.Restrictions.*;
420 jmachado 12
import static org.hibernate.criterion.Restrictions.eq;
205 jmachado 13
import org.hibernate.criterion.Criterion;
14
import org.hibernate.criterion.Order;
15
import org.hibernate.Criteria;
358 jmachado 16
import org.hibernate.Query;
376 jmachado 17
import org.hibernate.sql.JoinFragment;
219 jmachado 18
import org.apache.log4j.Logger;
116 jmachado 19
 
125 fvelez 20
import java.util.List;
21
import java.util.Set;
22
 
110 susana 23
/**
24
 * @author Jorge Machado
25
 * @date 28/Fev/2008
26
 * @time 2:51:06
27
 * @see pt.estgp.estgweb.domain.dao.impl
28
 */
29
public class CourseUnitDaoImpl extends CourseUnitDao
30
{
31
 
219 jmachado 32
    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 33
 
202 jmachado 34
    private CourseUnitDaoImpl()
35
    {
110 susana 36
    }
37
 
38
    public static CourseUnitDaoImpl getInstance()
39
    {
40
        if (myInstance == null)
41
            myInstance = new CourseUnitDaoImpl();
42
        return (CourseUnitDaoImpl) myInstance;
43
    }
44
 
125 fvelez 45
    public List<CourseUnit> loadBySigesCode(1.5.0/docs/api/java/lang/String.html">String sigesCode)
116 jmachado 46
    {
202 jmachado 47
        return createCriteria().add(eq("code", sigesCode)).list();
116 jmachado 48
    }
202 jmachado 49
 
214 jmachado 50
    public List<CourseUnit> loadByCourse(long course, 1.5.0/docs/api/java/lang/String.html">String importYear)
51
    {
371 jmachado 52
        return createCriteria().add(eq("importYear", importYear)).add(eq("course.id", course)).list();
214 jmachado 53
    }
54
 
371 jmachado 55
    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 56
    {
371 jmachado 57
        return createCriteria().add(eq("importYear", importYear)).add(eq("semestre", semestre)).list();
358 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
 
225 jmachado 169
    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 170
    {
225 jmachado 171
        return (CourseUnit)
172
                createCriteria()
173
                        .add(eq("code", sigesCode))
174
                        .add(eq("courseCode", courseCode))
175
                        .add(eq("semestre", semestre))
176
                        .add(eq("importYear", year))
177
                        .uniqueResult();
202 jmachado 178
    }
457 jmachado 179
    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)
180
    {
181
        return (List<CourseUnit>) createCriteria()
182
                .add(eq("code", sigesCode))
183
                .add(eq("courseCode", courseCode))
184
                .addOrder(Order.desc("importYear"))
185
                .list();
186
    }
163 jmachado 187
 
457 jmachado 188
 
189
 
376 jmachado 190
    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)
191
    {
192
        Criteria c = createCriteria();
193
        if(courseId > 0)
194
            c.add(eq("course.id", courseId));
195
        if(semestre != null && semestre.length() > 0)
196
            c.add(eq("semestre", semestre));
197
        if(year != null  && year.length() > 0)
198
            c.add(eq("importYear", year));
199
        if(withTeacher && !withNoTeacher)
200
        {
201
            c.createAlias("teachers", "th");
202
            c.add(isNotNull("th.id"));
203
        }
204
        else if(!withTeacher && withNoTeacher)
205
        {
206
            c.createAlias("teachers", "th", JoinFragment.LEFT_OUTER_JOIN);
207
            c.add(isNull("th.id"));
208
        }
209
        return c.list();
210
    }
163 jmachado 211
 
376 jmachado 212
 
205 jmachado 213
    public int countCourseUnits(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
214
    {
371 jmachado 215
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name");
205 jmachado 216
        return createCriteria().add(c).list().size();
217
    }
163 jmachado 218
 
205 jmachado 219
    public List<CourseUnit> search(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
220
    {
221
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name");
222
        Criteria criteria = createCriteria();
223
        criteria.add(c)
224
                .addOrder(Order.asc("name"))
225
                .setMaxResults(maxUnits)
226
                .setFirstResult(page * maxUnits);
227
        return criteria.list();
228
    }
202 jmachado 229
 
206 jmachado 230
    public int countCourseUnitsActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
231
    {
371 jmachado 232
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name");
206 jmachado 233
        return createCriteria()
234
                .add(c)
235
                .add(eq("importYear", DatesUtils.getImportYear()))
236
                .list().size();
237
    }
238
 
239
    public List<CourseUnit> searchActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
240
    {
241
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name");
242
        Criteria criteria = createCriteria();
243
        criteria.add(c)
244
                .add(eq("importYear", DatesUtils.getImportYear()))
245
                .addOrder(Order.asc("name"))
246
                .setMaxResults(maxUnits)
247
                .setFirstResult(page * maxUnits);
248
        return criteria.list();
249
    }
250
 
205 jmachado 251
    public List<CourseUnit> loadMissingObjectives(long teacherId)
252
    {
253
        //todo falta a projeccao do teacher id
254
        return createCriteria()
206 jmachado 255
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 256
                .add((or(isNull("objectives"), eq("objectives", ""))))
205 jmachado 257
                .createAlias("teachers", "th")
371 jmachado 258
                .add(eq("semestre", DatesUtils.getSemestre()))
259
                .add(eq("th.id", teacherId))
205 jmachado 260
                .list();
261
    }
262
 
214 jmachado 263
    public List<CourseUnit> loadMissingPrograms(long teacherId)
264
    {
265
        //todo falta a projeccao do teacher id
266
        return createCriteria()
267
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 268
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 269
                .createAlias("teachers", "th")
371 jmachado 270
                .add(eq("semestre", DatesUtils.getSemestre()))
271
                .add(eq("th.id", teacherId))
214 jmachado 272
                .list();
273
    }
274
 
343 jmachado 275
    public List<CourseUnit> loadMissingObjectivesOrPrograms(long teacherId)
276
    {
277
        //todo falta a projeccao do teacher id
371 jmachado 278
        Criteria c = createCriteria()
343 jmachado 279
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 280
                .add(or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", ""))));
281
 
282
        DatesUtils.SemestreModerate semestreModerate = DatesUtils.getSemestreModerate();
283
        if (semestreModerate == DatesUtils.SemestreModerate.S1)
284
            c.add(eq("semestre", "S1"));
285
        else if (semestreModerate == DatesUtils.SemestreModerate.S2)
286
            c.add(eq("semestre", "S2"));
287
        else
288
            c.add(or(eq("semestre", "S1"), eq("semestre", "S2")));
289
 
290
        return c.createAlias("teachers", "th")
291
                .add(eq("th.id", teacherId))
343 jmachado 292
                .list();
293
    }
214 jmachado 294
 
343 jmachado 295
 
214 jmachado 296
    public List<CourseUnit> loadMissingObjectivesGivenCourse(long courseId)
297
    {
298
        return createCriteria()
299
                .createAlias("course", "c")
371 jmachado 300
                .add(eq("c.id", courseId))
214 jmachado 301
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 302
                .add(eq("semestre", DatesUtils.getSemestre()))
303
                .add((or(isNull("objectives"), eq("objectives", ""))))
214 jmachado 304
                .list();
305
    }
306
 
307
    public List<CourseUnit> loadMissingProgramGivenCourse(long courseId)
308
    {
309
        return createCriteria()
310
                .createAlias("course", "c")
371 jmachado 311
                .add(eq("c.id", courseId))
214 jmachado 312
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 313
                .add(eq("semestre", DatesUtils.getSemestre()))
314
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 315
                .list();
316
    }
317
 
219 jmachado 318
    public List<CourseUnit> loadMissingObjectivesOrProgramGivenCourse(long courseId)
214 jmachado 319
    {
320
        return createCriteria()
321
                .createAlias("course", "c")
371 jmachado 322
                .add(eq("c.id", courseId))
214 jmachado 323
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 324
                .add(eq("semestre", DatesUtils.getSemestre()))
325
                .add((or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", "")))))
214 jmachado 326
                .list();
327
    }
205 jmachado 328
 
343 jmachado 329
    public int countMissingProgramGivenCourse(long courseId)
330
    {
331
        return loadMissingProgramGivenCourse(courseId).size();
332
    }
205 jmachado 333
 
334
 
110 susana 335
}