Subversion Repositories bacoAlunos

Rev

Rev 376 | Rev 457 | 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
    }
163 jmachado 179
 
376 jmachado 180
    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)
181
    {
182
        Criteria c = createCriteria();
183
        if(courseId > 0)
184
            c.add(eq("course.id", courseId));
185
        if(semestre != null && semestre.length() > 0)
186
            c.add(eq("semestre", semestre));
187
        if(year != null  && year.length() > 0)
188
            c.add(eq("importYear", year));
189
        if(withTeacher && !withNoTeacher)
190
        {
191
            c.createAlias("teachers", "th");
192
            c.add(isNotNull("th.id"));
193
        }
194
        else if(!withTeacher && withNoTeacher)
195
        {
196
            c.createAlias("teachers", "th", JoinFragment.LEFT_OUTER_JOIN);
197
            c.add(isNull("th.id"));
198
        }
199
        return c.list();
200
    }
163 jmachado 201
 
376 jmachado 202
 
205 jmachado 203
    public int countCourseUnits(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
204
    {
371 jmachado 205
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name");
205 jmachado 206
        return createCriteria().add(c).list().size();
207
    }
163 jmachado 208
 
205 jmachado 209
    public List<CourseUnit> search(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
210
    {
211
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name");
212
        Criteria criteria = createCriteria();
213
        criteria.add(c)
214
                .addOrder(Order.asc("name"))
215
                .setMaxResults(maxUnits)
216
                .setFirstResult(page * maxUnits);
217
        return criteria.list();
218
    }
202 jmachado 219
 
206 jmachado 220
    public int countCourseUnitsActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
221
    {
371 jmachado 222
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name");
206 jmachado 223
        return createCriteria()
224
                .add(c)
225
                .add(eq("importYear", DatesUtils.getImportYear()))
226
                .list().size();
227
    }
228
 
229
    public List<CourseUnit> searchActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
230
    {
231
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name");
232
        Criteria criteria = createCriteria();
233
        criteria.add(c)
234
                .add(eq("importYear", DatesUtils.getImportYear()))
235
                .addOrder(Order.asc("name"))
236
                .setMaxResults(maxUnits)
237
                .setFirstResult(page * maxUnits);
238
        return criteria.list();
239
    }
240
 
205 jmachado 241
    public List<CourseUnit> loadMissingObjectives(long teacherId)
242
    {
243
        //todo falta a projeccao do teacher id
244
        return createCriteria()
206 jmachado 245
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 246
                .add((or(isNull("objectives"), eq("objectives", ""))))
205 jmachado 247
                .createAlias("teachers", "th")
371 jmachado 248
                .add(eq("semestre", DatesUtils.getSemestre()))
249
                .add(eq("th.id", teacherId))
205 jmachado 250
                .list();
251
    }
252
 
214 jmachado 253
    public List<CourseUnit> loadMissingPrograms(long teacherId)
254
    {
255
        //todo falta a projeccao do teacher id
256
        return createCriteria()
257
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 258
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 259
                .createAlias("teachers", "th")
371 jmachado 260
                .add(eq("semestre", DatesUtils.getSemestre()))
261
                .add(eq("th.id", teacherId))
214 jmachado 262
                .list();
263
    }
264
 
343 jmachado 265
    public List<CourseUnit> loadMissingObjectivesOrPrograms(long teacherId)
266
    {
267
        //todo falta a projeccao do teacher id
371 jmachado 268
        Criteria c = createCriteria()
343 jmachado 269
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 270
                .add(or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", ""))));
271
 
272
        DatesUtils.SemestreModerate semestreModerate = DatesUtils.getSemestreModerate();
273
        if (semestreModerate == DatesUtils.SemestreModerate.S1)
274
            c.add(eq("semestre", "S1"));
275
        else if (semestreModerate == DatesUtils.SemestreModerate.S2)
276
            c.add(eq("semestre", "S2"));
277
        else
278
            c.add(or(eq("semestre", "S1"), eq("semestre", "S2")));
279
 
280
        return c.createAlias("teachers", "th")
281
                .add(eq("th.id", teacherId))
343 jmachado 282
                .list();
283
    }
214 jmachado 284
 
343 jmachado 285
 
214 jmachado 286
    public List<CourseUnit> loadMissingObjectivesGivenCourse(long courseId)
287
    {
288
        return createCriteria()
289
                .createAlias("course", "c")
371 jmachado 290
                .add(eq("c.id", courseId))
214 jmachado 291
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 292
                .add(eq("semestre", DatesUtils.getSemestre()))
293
                .add((or(isNull("objectives"), eq("objectives", ""))))
214 jmachado 294
                .list();
295
    }
296
 
297
    public List<CourseUnit> loadMissingProgramGivenCourse(long courseId)
298
    {
299
        return createCriteria()
300
                .createAlias("course", "c")
371 jmachado 301
                .add(eq("c.id", courseId))
214 jmachado 302
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 303
                .add(eq("semestre", DatesUtils.getSemestre()))
304
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 305
                .list();
306
    }
307
 
219 jmachado 308
    public List<CourseUnit> loadMissingObjectivesOrProgramGivenCourse(long courseId)
214 jmachado 309
    {
310
        return createCriteria()
311
                .createAlias("course", "c")
371 jmachado 312
                .add(eq("c.id", courseId))
214 jmachado 313
                .add(eq("importYear", DatesUtils.getImportYear()))
371 jmachado 314
                .add(eq("semestre", DatesUtils.getSemestre()))
315
                .add((or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", "")))))
214 jmachado 316
                .list();
317
    }
205 jmachado 318
 
343 jmachado 319
    public int countMissingProgramGivenCourse(long courseId)
320
    {
321
        return loadMissingProgramGivenCourse(courseId).size();
322
    }
205 jmachado 323
 
324
 
110 susana 325
}