Rev 1626 | Rev 1637 | 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.services.sigesimports; |
2 | |||
165 | jmachado | 3 | import jomm.dao.impl.AbstractDao; |
4 | import org.apache.log4j.Logger; |
||
5 | import pt.estgp.estgweb.Globals; |
||
1312 | jmachado | 6 | import pt.estgp.estgweb.domain.*; |
995 | jmachado | 7 | import pt.estgp.estgweb.domain.dao.DaoFactory; |
214 | jmachado | 8 | import pt.estgp.estgweb.domain.views.CourseView; |
995 | jmachado | 9 | import pt.estgp.estgweb.services.courses.CoursesService; |
10 | import pt.estgp.estgweb.services.email.SendEmailService; |
||
165 | jmachado | 11 | import pt.estgp.estgweb.services.expceptions.ServiceException; |
995 | jmachado | 12 | import pt.estgp.estgweb.services.jobs.ServiceJob; |
165 | jmachado | 13 | import pt.estgp.estgweb.services.logresults.ILogMessages; |
14 | import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum; |
||
15 | import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage; |
||
16 | import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages; |
||
1296 | jmachado | 17 | import pt.estgp.estgweb.services.sigesimports.oracle.dao.DisciplinaDao; |
18 | import pt.estgp.estgweb.services.sigesimports.oracle.dao.connection.ConnectionManager; |
||
19 | import pt.estgp.estgweb.services.sigesimports.oracle.domain.Disciplina; |
||
1312 | jmachado | 20 | import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasHorario; |
21 | import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasSumario; |
||
1422 | jmachado | 22 | import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasTurma; |
995 | jmachado | 23 | import pt.estgp.estgweb.utils.ConfigProperties; |
863 | jmachado | 24 | import pt.estgp.estgweb.utils.Email; |
110 | susana | 25 | import pt.utl.ist.berserk.logic.serviceManager.IService; |
26 | |||
1296 | jmachado | 27 | import java.sql.Connection; |
28 | import java.sql.SQLException; |
||
863 | jmachado | 29 | import java.util.*; |
110 | susana | 30 | |
31 | /** |
||
32 | * @author Jorge Machado |
||
33 | */ |
||
995 | jmachado | 34 | public class ImportCourseService extends ServiceJob implements IService |
163 | jmachado | 35 | { |
110 | susana | 36 | 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(ImportCourseService.class); |
37 | |||
214 | jmachado | 38 | private CoursesService coursesService = new CoursesService(); |
39 | |||
995 | jmachado | 40 | int newUnits = 0; |
41 | int newCourses = 0; |
||
1277 | jmachado | 42 | int unitsRepeated = 0; |
1296 | jmachado | 43 | int unitsAtualizadas = 0; |
1312 | jmachado | 44 | int turmasSeparadasComInconsistencias = 0; |
45 | int turmasSeparadasTratadasOk = 0; |
||
46 | int erroGraveAObterTipologias = 0; |
||
47 | static Map<String,Boolean> courseYearTurmasPolicy = new HashMap<String, Boolean>(); |
||
48 | |||
49 | public static void resetCourseYearTurmaPolicy() |
||
110 | susana | 50 | { |
1312 | jmachado | 51 | courseYearTurmasPolicy.clear(); |
52 | } |
||
53 | |||
54 | public ILogMessages run(1.5.0/docs/api/java/lang/String.html">String year,int institutionCode) throws ServiceException |
||
55 | { |
||
56 | 1.5.0/docs/api/java/lang/String.html">String msgS = "STARTING COURSES IMPORT SERVICE FOR YEAR: " + year + " " + institutionCode; |
||
995 | jmachado | 57 | serviceLogInfo(msgS); |
58 | logger.info(msgS); |
||
110 | susana | 59 | |
995 | jmachado | 60 | newUnits = 0; |
61 | newCourses = 0; |
||
1277 | jmachado | 62 | unitsRepeated = 0; |
1296 | jmachado | 63 | unitsAtualizadas = 0; |
1312 | jmachado | 64 | turmasSeparadasComInconsistencias = 0; |
65 | turmasSeparadasTratadasOk = 0; |
||
66 | erroGraveAObterTipologias=0; |
||
67 | resetCourseYearTurmaPolicy(); |
||
995 | jmachado | 68 | |
165 | jmachado | 69 | DefaultLogMessages logMessages = new DefaultLogMessages(); |
70 | try |
||
110 | susana | 71 | { |
1312 | jmachado | 72 | logMessages.addMessage(new DefaultLogMessage("import.semestre.separated", LogMessageTypeEnum.INFO, "instituicao " + institutionCode)); |
995 | jmachado | 73 | serviceLogInfo(logMessages.getLastMessage()); |
110 | susana | 74 | |
165 | jmachado | 75 | HashMap<String, Disciplina> disciplinasMap = new HashMap<String, Disciplina>(); |
76 | HashMap<String, Disciplina> disciplinasMapS1 = new HashMap<String, Disciplina>(); |
||
77 | HashMap<String, Disciplina> disciplinasMapS2 = new HashMap<String, Disciplina>(); |
||
727 | jmachado | 78 | HashMap<String, Disciplina> disciplinasMapA = new HashMap<String, Disciplina>(); |
1040 | jmachado | 79 | HashMap<String, Disciplina> disciplinasMapT1 = new HashMap<String, Disciplina>(); |
80 | HashMap<String, Disciplina> disciplinasMapT2 = new HashMap<String, Disciplina>(); |
||
81 | HashMap<String, Disciplina> disciplinasMapT3 = new HashMap<String, Disciplina>(); |
||
82 | HashMap<String, Disciplina> disciplinasMapT4 = new HashMap<String, Disciplina>(); |
||
345 | jmachado | 83 | HashMap<String, Disciplina> cursosMap = new HashMap<String, Disciplina>(); |
163 | jmachado | 84 | |
165 | jmachado | 85 | /** |
86 | * Build Course Units Maps |
||
87 | */ |
||
1296 | jmachado | 88 | /*SiGesWEB service; |
1017 | jmachado | 89 | String WSDL = DaoFactory.getConfigurationDaoImpl().getSigesWebServicesWsdl(); |
165 | jmachado | 90 | try |
91 | { |
||
1017 | jmachado | 92 | serviceLogInfo("STARTING WEB SERVICE AT " + WSDL); |
93 | service = new SiGesWEB(new URL(WSDL), new QName(Globals.SIGES_WEBSERVICE_TARGET_NAMESPACE, "SiGesWEB")); |
||
165 | jmachado | 94 | } |
95 | catch (MalformedURLException e) |
||
96 | { |
||
97 | logger.fatal(e, e); |
||
98 | logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(),"erro na configuracao do WEB Service", LogMessageTypeEnum.INFO)); |
||
995 | jmachado | 99 | serviceLogError(logMessages.getLastMessage(), e); |
165 | jmachado | 100 | return logMessages; |
101 | } |
||
1296 | jmachado | 102 | */ |
103 | DisciplinaDao service = DisciplinaDao.getInstance(); |
||
104 | 1.5.0/docs/api/java/sql/Connection.html">Connection conn = ConnectionManager.openConnection(); |
||
163 | jmachado | 105 | |
1312 | jmachado | 106 | importUnitsSemestre(service,conn, "S1", year,institutionCode, disciplinasMap, disciplinasMapS1, cursosMap, logMessages); |
107 | importUnitsSemestre(service,conn, "S2", year,institutionCode, disciplinasMap, disciplinasMapS2, cursosMap, logMessages); |
||
108 | importUnitsSemestre(service,conn, "A", year,institutionCode, disciplinasMap, disciplinasMapA, cursosMap, logMessages); |
||
109 | importUnitsSemestre(service,conn, "T1", year,institutionCode, disciplinasMap, disciplinasMapT1, cursosMap, logMessages); |
||
110 | importUnitsSemestre(service,conn, "T2", year,institutionCode, disciplinasMap, disciplinasMapT2, cursosMap, logMessages); |
||
111 | importUnitsSemestre(service,conn, "T3", year,institutionCode, disciplinasMap, disciplinasMapT3, cursosMap, logMessages); |
||
112 | importUnitsSemestre(service,conn, "T4", year,institutionCode, disciplinasMap, disciplinasMapT4, cursosMap, logMessages); |
||
1115 | jmachado | 113 | |
165 | jmachado | 114 | /** |
115 | * Import Courses |
||
116 | */ |
||
117 | logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.courses", LogMessageTypeEnum.INFO)); |
||
995 | jmachado | 118 | serviceLogInfo("updating courses"); |
165 | jmachado | 119 | logger.info("updating courses"); |
345 | jmachado | 120 | Set<Map.Entry<String, Disciplina>> set2 = cursosMap.entrySet(); |
121 | for (1.5.0/docs/api/java/util/Map.html">Map.Entry<String, Disciplina> entry : set2) |
||
165 | jmachado | 122 | { |
123 | Disciplina d = entry.getValue(); |
||
214 | jmachado | 124 | CourseView c = coursesService.loadCourseByCode("" + d.getCodigoCurso().intValue(),false); |
125 | |||
126 | // Course c = DaoFactory.getCourseDaoImpl().findCourseByCode("" + d.getCodigoCurso()); |
||
219 | jmachado | 127 | if (c == null) |
128 | { |
||
129 | c = new CourseView(); |
||
995 | jmachado | 130 | newCourses++; |
131 | serviceLogInfo("New Course Found: (" + d.getCodigoCurso() + ") " + d.getNomeCurso()); |
||
214 | jmachado | 132 | // DaoFactory.getCourseDaoImpl().save(c); |
219 | jmachado | 133 | } |
165 | jmachado | 134 | c.setName(d.getNomeCurso()); |
1189 | jmachado | 135 | if(d.getGrauCurso() == null || d.getGrauCurso().trim().length() == 0) |
136 | d.setGrauCurso("unknown"); |
||
409 | jmachado | 137 | 1.5.0/docs/api/java/lang/String.html">String grauBaco = ConfigProperties.getProperty("siges.degree."+d.getGrauCurso()); |
1189 | jmachado | 138 | |
139 | c.setDegree(grauBaco); |
||
165 | jmachado | 140 | c.setCode("" + d.getCodigoCurso().intValue()); |
206 | jmachado | 141 | c.setImportYear(year); |
165 | jmachado | 142 | c.setInstitutionalCode("" + d.getCodigoInstituicao().intValue()); |
214 | jmachado | 143 | coursesService.submitCourse(c,null,null,0,null,null); |
165 | jmachado | 144 | } |
163 | jmachado | 145 | |
165 | jmachado | 146 | /** |
147 | * Update Course Units |
||
148 | */ |
||
1312 | jmachado | 149 | updateCourseUnits(disciplinasMapS1, "S1",logMessages,year,institutionCode,service,conn); |
150 | updateCourseUnits(disciplinasMapS2, "S2",logMessages,year,institutionCode,service,conn); |
||
151 | updateCourseUnits(disciplinasMapA, "A",logMessages,year,institutionCode,service,conn); |
||
152 | updateCourseUnits(disciplinasMapT1, "T1",logMessages,year,institutionCode,service,conn); |
||
153 | updateCourseUnits(disciplinasMapT2, "T2",logMessages,year,institutionCode,service,conn); |
||
154 | updateCourseUnits(disciplinasMapT3, "T3",logMessages,year,institutionCode,service,conn); |
||
155 | updateCourseUnits(disciplinasMapT4, "T4",logMessages,year,institutionCode,service,conn); |
||
995 | jmachado | 156 | |
1296 | jmachado | 157 | conn.close(); |
158 | |||
995 | jmachado | 159 | serviceLogInfo("######################################"); |
160 | serviceLogInfo("######################################"); |
||
161 | serviceLogInfo("#Courses Imported:" + cursosMap.size()); |
||
162 | serviceLogInfo("#Units Imported S1:" + disciplinasMapS1.size()); |
||
163 | serviceLogInfo("#Units Imported S2:" + disciplinasMapS2.size()); |
||
164 | serviceLogInfo("#Units Imported A:" + disciplinasMapA.size()); |
||
1040 | jmachado | 165 | serviceLogInfo("#Units Imported T1:" + disciplinasMapT1.size()); |
166 | serviceLogInfo("#Units Imported T2:" + disciplinasMapT2.size()); |
||
167 | serviceLogInfo("#Units Imported T3:" + disciplinasMapT3.size()); |
||
168 | serviceLogInfo("#Units Imported T4:" + disciplinasMapT4.size()); |
||
995 | jmachado | 169 | serviceLogInfo("#New Courses Found:" + newCourses); |
170 | serviceLogInfo("#New Units Found:" + newUnits); |
||
1296 | jmachado | 171 | serviceLogInfo("#Regular Updated Units:" + unitsAtualizadas); |
172 | serviceLogInfo("#Unidades Repetidas (A mesma para o conjunto (Codigo,Curso,Ano,Semestre)):" + unitsRepeated); |
||
1312 | jmachado | 173 | serviceLogInfo("#Turmas Separadas Tratadas com sucesso:" + turmasSeparadasTratadasOk); |
174 | if(turmasSeparadasComInconsistencias > 0) |
||
175 | { |
||
176 | serviceLogInfo("!!!CHECK IN LOG######Units with Courses with Turmas Separadas with problems:" + turmasSeparadasComInconsistencias); |
||
177 | } |
||
178 | if(erroGraveAObterTipologias > 0) |
||
179 | { |
||
180 | serviceLogInfo("!!!Na trasnformacao do JSON em class nas tipologias:" + erroGraveAObterTipologias); |
||
181 | } |
||
995 | jmachado | 182 | |
1025 | jmachado | 183 | logger.info("######################################"); |
184 | logger.info("######################################"); |
||
185 | logger.info("#Courses Imported:" + cursosMap.size()); |
||
186 | logger.info("#Units Imported S1:" + disciplinasMapS1.size()); |
||
187 | logger.info("#Units Imported S2:" + disciplinasMapS2.size()); |
||
188 | logger.info("#Units Imported A:" + disciplinasMapA.size()); |
||
1040 | jmachado | 189 | logger.info("#Units Imported T1:" + disciplinasMapT1.size()); |
190 | logger.info("#Units Imported T2:" + disciplinasMapT2.size()); |
||
191 | logger.info("#Units Imported T3:" + disciplinasMapT3.size()); |
||
192 | logger.info("#Units Imported T4:" + disciplinasMapT4.size()); |
||
1025 | jmachado | 193 | logger.info("#New Courses Found:" + newCourses); |
194 | logger.info("#New Units Found:" + newUnits); |
||
1296 | jmachado | 195 | logger.info("#Regular Updated Units:" + unitsAtualizadas); |
196 | logger.info("#Unidades Repetidas (A mesma para o conjunto (Codigo,Curso,Ano,Semestre)):" + unitsRepeated); |
||
1312 | jmachado | 197 | logger.info("#Turmas Separadas Tratadas com sucesso:" + turmasSeparadasTratadasOk); |
198 | if(turmasSeparadasComInconsistencias > 0) |
||
199 | { |
||
200 | logger.info("!!!CHECK IN LOG######Units with Courses with Turmas Separadas with problems:" + turmasSeparadasComInconsistencias); |
||
201 | } |
||
202 | if(erroGraveAObterTipologias > 0) |
||
203 | { |
||
204 | logger.info("!!!Na trasnformacao do JSON em class nas tipologias:" + erroGraveAObterTipologias); |
||
205 | } |
||
995 | jmachado | 206 | |
1025 | jmachado | 207 | |
110 | susana | 208 | } |
165 | jmachado | 209 | catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e) |
110 | susana | 210 | { |
358 | jmachado | 211 | logger.error(e,e); |
212 | logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR)); |
||
995 | jmachado | 213 | serviceLogError(logMessages.getLastMessage(), e); |
863 | jmachado | 214 | 1.5.0/docs/api/java/lang/String.html">String cause = e.getCause() == null ? "" : e.getCause().toString(); |
1000 | jmachado | 215 | sendNotificationAdmin("Erro na importacao de sumarios",cause); |
110 | susana | 216 | } |
358 | jmachado | 217 | logger.info("terminating course import"); |
995 | jmachado | 218 | serviceLogInfo("terminating course import"); |
165 | jmachado | 219 | logMessages.addMessage(new DefaultLogMessage("import.course.terminating", LogMessageTypeEnum.INFO)); |
995 | jmachado | 220 | setProgress(100); |
165 | jmachado | 221 | return logMessages; |
222 | } |
||
110 | susana | 223 | |
1000 | jmachado | 224 | /** |
225 | * Envio de Notificação aos operadores do CI |
||
226 | * @param subject |
||
227 | * @param cause |
||
228 | */ |
||
229 | private void sendNotificationAdmin(1.5.0/docs/api/java/lang/String.html">String subject, 1.5.0/docs/api/java/lang/String.html">String cause) |
||
230 | { |
||
231 | |||
1024 | jmachado | 232 | |
1000 | jmachado | 233 | List<String> emails = ConfigProperties.getListValues("admin.email"); |
234 | for(1.5.0/docs/api/java/lang/String.html">String email:emails) |
||
235 | { |
||
236 | serviceLogWarn(">>>>>>>>ENVIANDO NOTIFICACAO A ADMINISTRACAO: " + email); |
||
237 | logger.warn(">>>>>>>>ENVIANDO NOTIFICACAO A ADMINISTRACAO: " + email); |
||
238 | } |
||
239 | List<String> arguments = new ArrayList<String>(); |
||
240 | arguments.add(cause.replace("\n","<br/>")); |
||
241 | Email email = new Email(subject,emails,Globals.SYSTEM_EMAIL_BOX,"messageToAdmin_pt.txt",arguments); |
||
1029 | jmachado | 242 | email.setHtml(true); |
1000 | jmachado | 243 | try { |
244 | new SendEmailService().sendEmail(email); |
||
245 | } catch (ServiceException e) { |
||
246 | e.printStackTrace(); |
||
247 | } |
||
248 | |||
249 | } |
||
250 | |||
1312 | jmachado | 251 | |
252 | |||
253 | /** |
||
254 | * This method loads turmas separated policy from CourseYear |
||
255 | * uses the cache courseYearTurmasPolicy |
||
256 | * @param codigoDoCurso |
||
257 | * @param year |
||
258 | * @param logMessages |
||
259 | * @return |
||
260 | */ |
||
1415 | jmachado | 261 | public static boolean loadCourseYearTurmasPolicy(int codigoDoCurso,1.5.0/docs/api/java/lang/String.html">String year,DefaultLogMessages logMessages,ServiceJob service) { |
1558 | jmachado | 262 | return loadCourseYearTurmasPolicy("" + codigoDoCurso,year,logMessages,service); |
263 | } |
||
264 | public static boolean loadCourseYearTurmasPolicy(1.5.0/docs/api/java/lang/String.html">String codigoDoCurso,1.5.0/docs/api/java/lang/String.html">String year,DefaultLogMessages logMessages,ServiceJob service) { |
||
1312 | jmachado | 265 | |
266 | 1.5.0/docs/api/java/lang/Boolean.html">Boolean turmasSeparated = courseYearTurmasPolicy.get(codigoDoCurso + "-" + year); |
||
267 | if(turmasSeparated != null) |
||
268 | return turmasSeparated; |
||
269 | |||
270 | List<CourseYear> courseYears = DaoFactory.getCourseYearDaoImpl().findCourseYear(""+codigoDoCurso,year); |
||
271 | if(courseYears == null || courseYears.size() == 0) |
||
272 | { |
||
273 | checkOrCreateCourseYear(logMessages, year, "" + codigoDoCurso, service); |
||
274 | courseYears = DaoFactory.getCourseYearDaoImpl().findCourseYear(""+codigoDoCurso,year); |
||
275 | } |
||
276 | if(courseYears != null && courseYears.size() > 0) |
||
277 | { |
||
278 | CourseYear cY = courseYears.get(0); |
||
279 | courseYearTurmasPolicy.put(codigoDoCurso + "-" + year,cY.isSeparatedTurmas()); |
||
280 | return cY.isSeparatedTurmas(); |
||
281 | } |
||
282 | return false; |
||
283 | } |
||
284 | |||
1296 | jmachado | 285 | private void importUnitsSemestre(DisciplinaDao service, |
286 | 1.5.0/docs/api/java/sql/Connection.html">Connection conn, |
||
165 | jmachado | 287 | 1.5.0/docs/api/java/lang/String.html">String semestre, |
288 | 1.5.0/docs/api/java/lang/String.html">String year, |
||
1312 | jmachado | 289 | int institutionCode, |
165 | jmachado | 290 | HashMap<String, Disciplina> disciplinasMap, |
291 | HashMap<String, Disciplina> disciplinasMapSemestre, |
||
345 | jmachado | 292 | HashMap<String, Disciplina> cursosMap, |
1296 | jmachado | 293 | DefaultLogMessages logMessages) throws 1.5.0/docs/api/java/sql/SQLException.html">SQLException { |
1115 | jmachado | 294 | |
295 | |||
165 | jmachado | 296 | logMessages.addMessage(new DefaultLogMessage("import.semestre.course.units." + semestre, LogMessageTypeEnum.INFO)); |
995 | jmachado | 297 | serviceLogInfo("importing " + semestre + " course units"); |
165 | jmachado | 298 | logger.info("importing " + semestre + " course units"); |
1312 | jmachado | 299 | List<Disciplina> disciplinas = service.loadDisciplinas(institutionCode, year, semestre,conn); |
1296 | jmachado | 300 | |
165 | jmachado | 301 | for (Disciplina d : disciplinas) |
110 | susana | 302 | { |
1312 | jmachado | 303 | if(ImportStudentsService.isCursoFicticio(d.getCodigoCurso())) |
304 | continue; |
||
305 | |||
306 | boolean turmasSeparatedPolicy = loadCourseYearTurmasPolicy(d.getCodigoCurso(),year,logMessages,this); |
||
307 | Disciplina inCache = disciplinasMap.get(getDisciplinaUniqueRef(d,year,logMessages)); |
||
308 | |||
309 | if (inCache != null |
||
1338 | jmachado | 310 | // && !turmasSeparatedPolicy // Com politica de turmas separadas no curso a repeticao NÃO é normal |
311 | //A disciplina em cache significa que já foi importada da lista do SIGES uma disciplina |
||
312 | //com o mesmo código unico |
||
313 | //No caso dos cursos normais onde se encontram varias turmas é normal aparecerem aqui repetições |
||
314 | // nesses casos apenas uma vai para o Mapa, o que acontece é que precisamos de uma entrada por turma |
||
315 | //para os casos dos cursos de turmas separadas |
||
1312 | jmachado | 316 | ) |
165 | jmachado | 317 | { |
1312 | jmachado | 318 | logMessages.addMessage(new DefaultLogMessage("import.semestre." + semestre, LogMessageTypeEnum.INFO,"Other turma for a unit in " + semestre + ":" + d.getCodigo().intValue() + " -> " + d.getCdTurma())); |
319 | serviceLogInfo("Other turma for a unit in " + semestre + ":" + d.getCodigo().intValue() + " -> " + d.getCdTurma()); |
||
320 | logger.info("Other turma for unit in " + semestre + ":" + d.getCodigo().intValue() + " -> " + d.getCdTurma()); |
||
165 | jmachado | 321 | } |
1312 | jmachado | 322 | |
323 | //se houver mais que uma ocorrencia de turmas na disciplina sobrepoe, nao importa se forem de turmas juntas |
||
324 | //So vai ser criada uma de qualquer maneira e a turma nao é usada neste caso. Apenas depois na imortação de alunos |
||
325 | //para escolher a turma |
||
326 | disciplinasMap.put(getDisciplinaUniqueRef(d,year,logMessages), d); |
||
327 | disciplinasMapSemestre.put(getDisciplinaUniqueRef(d, year, logMessages), d); |
||
328 | //para o caso do serviço ser chamado para varios anos |
||
345 | jmachado | 329 | cursosMap.put(d.getCodigoCurso().intValue()+":"+year, d); |
110 | susana | 330 | } |
165 | jmachado | 331 | } |
163 | jmachado | 332 | |
1312 | jmachado | 333 | private 1.5.0/docs/api/java/lang/String.html">String getDisciplinaUniqueRef(Disciplina d,1.5.0/docs/api/java/lang/String.html">String year,DefaultLogMessages logMessages) |
165 | jmachado | 334 | { |
1312 | jmachado | 335 | boolean turmasSeparatedPolicy = loadCourseYearTurmasPolicy(d.getCodigoCurso(),year,logMessages,this); |
336 | if(turmasSeparatedPolicy) |
||
337 | return d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + d.getCdDuracao() + ":" + d.getCdTurma(); |
||
338 | else |
||
339 | return d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + d.getCdDuracao(); |
||
1115 | jmachado | 340 | } |
341 | |||
1141 | jmachado | 342 | public static final int SIGES_CODIGO_TIPO_DISCIPLINA_EXTRA_CURRICULAR = ConfigProperties.getIntProperty("siges.codigo.tipo.disciplina.extra.curricular"); |
1312 | jmachado | 343 | private void updateCourseUnits(HashMap<String, Disciplina> disciplinasMapS, 1.5.0/docs/api/java/lang/String.html">String semestre, DefaultLogMessages logMessages, 1.5.0/docs/api/java/lang/String.html">String year,int institutionCode, DisciplinaDao service,1.5.0/docs/api/java/sql/Connection.html">Connection conn) |
1115 | jmachado | 344 | { |
165 | jmachado | 345 | logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.INFO)); |
1115 | jmachado | 346 | |
1141 | jmachado | 347 | |
165 | jmachado | 348 | logger.info("updating " + semestre + " course units"); |
995 | jmachado | 349 | serviceLogInfo("updating " + semestre + " course units"); |
165 | jmachado | 350 | Set<Map.Entry<String, Disciplina>> set = disciplinasMapS.entrySet(); |
163 | jmachado | 351 | for (1.5.0/docs/api/java/util/Map.html">Map.Entry<String, Disciplina> entry : set) |
352 | { |
||
353 | Disciplina d = entry.getValue(); |
||
1141 | jmachado | 354 | //TIPO 6 é uma EXTRA CURRICULAR |
1296 | jmachado | 355 | if(ImportStudentsService.isCursoFicticio(d.getCodigoCurso())) |
1115 | jmachado | 356 | { |
1296 | jmachado | 357 | logMessages.addMessage(new DefaultLogMessage("import.error","Ignorando disciplina com codigo de curso ficticio - codigo: " + d.getCodigoCurso(), " see log for details", LogMessageTypeEnum.WARNING)); |
1115 | jmachado | 358 | logger.warn(logMessages.getLastMessage()); |
359 | serviceLogWarn(logMessages.getLastMessage()); |
||
360 | |||
361 | continue; |
||
362 | } |
||
1277 | jmachado | 363 | //CourseUnit c = null; |
364 | List<CourseUnit> cus = null; |
||
365 | |||
1312 | jmachado | 366 | cus = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + d.getCodigo(), "" + d.getCodigoCurso(), semestre, year); |
367 | |||
368 | //NOVO NOVO NOVO |
||
369 | //Politica de separação de turmas em unidades independentes neste curso |
||
370 | boolean separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(d.getCodigoCurso(),year,logMessages,this); |
||
371 | //NOVO NOVO NOVO |
||
372 | if(separateTurmas) |
||
373 | { |
||
374 | /***logging*****/ |
||
375 | logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.INFO,"Unidade de curso com turmas separadas encontrada siges: " + d.getCodigo() + " para curso:" + d.getCodigoCurso() + " turma:" + d.getCdTurma())); |
||
376 | logger.info(logMessages.getLastMessage()); |
||
377 | serviceLogInfo(logMessages.getLastMessage()); |
||
378 | /** |
||
379 | * Este metodo aplicado apenas a cursos de turma separada |
||
380 | * vai retirar da lista de cus todas as que não tenham a turma em questão no campo cdTurma |
||
381 | * Caso haja inconsistencias ete metodo informa no LOG e tenta corrigir a situação |
||
382 | * O objectivo do metodo e econtrar a undade da turma em causa que obtemos |
||
383 | * da disciplina |
||
384 | * Relembrar que as disciplinas sao colocadas no mapa segundo o seu tipo |
||
385 | * se forem de turmasSeparada é colocada uma por turma, portanto |
||
386 | * vao vir para aqui as multiplas todas com as varias turmas |
||
387 | * e assim vamos filtrar todas as que vem na lista que nao sao da turma |
||
388 | * em tratamento neste momento, ou dar a turma a uma no caso de |
||
389 | * haver alguma sem turma, se nao houver nenhuma o metodo limpa todas |
||
390 | * e seguidamente vamos ter de a criar |
||
391 | */ |
||
392 | consistirUnidadesEmCursosTurmasSeparadas(semestre, logMessages, d, cus); |
||
393 | }//NOVO NOVO NOVO |
||
394 | |||
395 | |||
396 | |||
397 | |||
1277 | jmachado | 398 | if(cus != null && cus.size() > 1 ) |
750 | jmachado | 399 | { |
1277 | jmachado | 400 | unitsRepeated++; |
1278 | jmachado | 401 | logMessages.addMessage(new DefaultLogMessage("import.warning","Unidade Repetida: (" + d.getCodigo() + ") curso: " + d.getCodigoCurso() + " " + semestre + " " + year, "see log for details, vai atualizar as duas", LogMessageTypeEnum.WARNING)); |
1115 | jmachado | 402 | logger.fatal(logMessages.getLastMessage()); |
403 | serviceLogWarn(logMessages.getLastMessage()); |
||
750 | jmachado | 404 | } |
1296 | jmachado | 405 | else if(cus != null && cus.size() == 1) |
406 | { |
||
407 | unitsAtualizadas++; |
||
408 | 1.5.0/docs/api/java/lang/String.html">String msg = "Regular unit update: " + "(" + d.getCodigo() + ") curso: " + d.getCodigoCurso() + " " + semestre + " " + year; |
||
409 | logger.info(msg); |
||
410 | serviceLogInfo(msg); |
||
411 | } |
||
1115 | jmachado | 412 | |
1277 | jmachado | 413 | |
414 | if (cus == null || cus.size() == 0) |
||
225 | jmachado | 415 | { |
1277 | jmachado | 416 | CourseUnitImpl c = DomainObjectFactory.createCourseUnitImpl(); |
1312 | jmachado | 417 | if(separateTurmas) |
418 | c.setCdTurma(d.getCdTurma()); |
||
419 | else |
||
420 | c.setCdTurma(""); |
||
726 | jmachado | 421 | DaoFactory.getCourseUnitDaoImpl().save(c); |
1626 | jmachado | 422 | logMessages.addMessage(new DefaultLogMessage("import.warning", "New Unit Found: (" + d.getCodigo() + ") " + d.getNome() + " - curso (" + d.getNomeCurso() + ") " + d.getNomeCurso() + " turma(" + d.getCdTurma() + ")", "see log for details", LogMessageTypeEnum.INFO)); |
1115 | jmachado | 423 | logger.info(logMessages.getLastMessage()); |
424 | serviceLogInfo(logMessages.getLastMessage()); |
||
995 | jmachado | 425 | newUnits++; |
1277 | jmachado | 426 | cus = new ArrayList<CourseUnit>(); |
427 | cus.add(c); |
||
225 | jmachado | 428 | } |
1115 | jmachado | 429 | //NOVO |
430 | |||
1277 | jmachado | 431 | for(CourseUnit c: cus) |
432 | { |
||
1312 | jmachado | 433 | |
434 | if(separateTurmas) |
||
435 | c.setCdTurma(d.getCdTurma()); |
||
436 | else |
||
437 | c.setCdTurma(""); |
||
1277 | jmachado | 438 | c.setName(d.getNome()); |
1400 | jmachado | 439 | c.setInstitutionCode("" + d.getCodigoInstituicao());//MUDADO AQUI |
1277 | jmachado | 440 | c.setCode("" + d.getCodigo().intValue()); |
441 | c.setCourseCode("" + d.getCodigoCurso()); |
||
442 | c.setCourseName("" + d.getNomeCurso()); |
||
443 | c.setSemestre(semestre); |
||
444 | c.setImportYear(year); |
||
445 | Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(c.getCourseCode()); |
||
446 | c.setCourse(course); |
||
1312 | jmachado | 447 | checkOrCreateCourseYear(logMessages, year, c.getCourseCode(), this); |
1313 | jmachado | 448 | //Obter as tipologias de sumarios e aulas e colocar na unidade |
449 | fillTipologias(d, (CourseUnitImpl) c); |
||
1626 | jmachado | 450 | c.setLastImportDate(new 5+0%2Fdocs%2Fapi+Date">Date()); |
1313 | jmachado | 451 | } |
452 | } |
||
453 | } |
||
1312 | jmachado | 454 | |
1313 | jmachado | 455 | private void fillTipologias(Disciplina d, CourseUnitImpl c) { |
456 | try { |
||
1626 | jmachado | 457 | CourseUnitImpl.Tipologias tipologiasAntes = c.getTipologiasClass(); |
458 | |||
459 | //novo |
||
460 | /*CourseUnitImpl.Tipologias t = c.getTipologiasClass(); |
||
1313 | jmachado | 461 | if(t == null) |
1626 | jmachado | 462 | t = new CourseUnitImpl.Tipologias();*/ |
463 | CourseUnitImpl.Tipologias t = new CourseUnitImpl.Tipologias(); |
||
1627 | jmachado | 464 | t.setTipologiasMarcadas(tipologiasAntes.getTipologiasMarcadas()); |
465 | t.setTipologiasExtraAdicionadas(tipologiasAntes.getTipologiasExtraAdicionadas()); |
||
466 | t.setTipologiasUsadas(tipologiasAntes.getTipologiasUsadas()); |
||
1315 | jmachado | 467 | |
1422 | jmachado | 468 | t.setTipologiasTdocTurma(new ArrayList<CourseUnitImpl.Tipologia>()); |
469 | for(TipologiasTurma.TipologiaTurma tipologiaTurma : d.getTipologiasTdocTurma().getTipologias()) |
||
470 | { |
||
471 | CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
||
1623 | jmachado | 472 | tipoSum.setOcorrencias(null); |
1422 | jmachado | 473 | tipoSum.setDsTipologia("Aulas"); |
474 | tipoSum.setCdTurma(tipologiaTurma.getCdTurma()); |
||
475 | tipoSum.setCdDocente("" + tipologiaTurma.getCdDocente()); |
||
476 | tipoSum.setCdTipologia("1"); |
||
477 | tipoSum.setTdocturma(true); |
||
478 | t.getTipologiasTdocTurma().add(tipoSum); |
||
479 | } |
||
1315 | jmachado | 480 | t.setTipologiasSumarios(new ArrayList<CourseUnitImpl.Tipologia>()); |
1313 | jmachado | 481 | for(TipologiasSumario.TipologiaSumario tipologiaSumario : d.getTipologiasSumario().getTipologias()) |
482 | { |
||
483 | CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
||
484 | tipoSum.setOcorrencias(tipologiaSumario.getNumeroOcorrencias()); |
||
485 | tipoSum.setDsTipologia(ConfigProperties.getProperty("netpa.tipo.aula." + tipologiaSumario.getCdTipoAula())); |
||
486 | tipoSum.setCdTurma(tipologiaSumario.getCdTurma()); |
||
487 | tipoSum.setCdDocente("" + tipologiaSumario.getCdDocente()); |
||
488 | tipoSum.setCdTipologia(""+tipologiaSumario.getCdTipoAula()); |
||
489 | t.getTipologiasSumarios().add(tipoSum); |
||
490 | } |
||
1315 | jmachado | 491 | t.setTipologiasHorarioReferencia(new ArrayList<CourseUnitImpl.Tipologia>()); |
1313 | jmachado | 492 | for(TipologiasHorario.TipologiaHorario tipologiaHorario : d.getTipologiasHorario().getTipologias()) |
493 | { |
||
494 | CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
||
495 | 1.5.0/docs/api/java/lang/String.html">String codigoCorrespondenteTipoAula = |
||
496 | ConfigProperties.getProperty("netpa.code.ocup." + tipologiaHorario.getCdTipoOcupacao() + ".tipo.aula"); |
||
497 | if(codigoCorrespondenteTipoAula != null && codigoCorrespondenteTipoAula.length() > 0) |
||
498 | { |
||
499 | tipoSum.setOcorrencias(null); |
||
500 | tipoSum.setDsTipologia(ConfigProperties.getProperty("netpa.tipo.aula." + codigoCorrespondenteTipoAula)); |
||
501 | tipoSum.setCdTipologia("" + codigoCorrespondenteTipoAula); |
||
502 | tipoSum.setCdTurma(tipologiaHorario.getCdTurma()); |
||
503 | tipoSum.setCdDocente("" + tipologiaHorario.getCdDocente()); |
||
504 | t.getTipologiasHorarioReferencia().add(tipoSum); |
||
1312 | jmachado | 505 | } |
1313 | jmachado | 506 | else |
507 | { |
||
508 | 1.5.0/docs/api/java/lang/System.html">System.out.println("Tipologia: cd tipo ocup ignorado:" + tipologiaHorario.getCdTipoOcupacao()); |
||
509 | } |
||
1312 | jmachado | 510 | |
1277 | jmachado | 511 | } |
1338 | jmachado | 512 | for(TipologiasSumario.TipologiaSumario tipologiaHorarioTrabalho : d.getTipologiasHorarioTrabalho().getTipologias()) |
513 | { |
||
514 | CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
||
515 | 1.5.0/docs/api/java/lang/String.html">String codigoCorrespondenteTipoAula = |
||
516 | ConfigProperties.getProperty("netpa.code.ocup." + tipologiaHorarioTrabalho.getCdTipoAula() + ".tipo.aula"); |
||
517 | if(codigoCorrespondenteTipoAula != null && codigoCorrespondenteTipoAula.length() > 0) |
||
518 | { |
||
519 | tipoSum.setOcorrencias(null); |
||
520 | tipoSum.setDsTipologia(ConfigProperties.getProperty("netpa.tipo.aula." + codigoCorrespondenteTipoAula)); |
||
521 | tipoSum.setCdTipologia("" + codigoCorrespondenteTipoAula); |
||
522 | tipoSum.setCdTurma(tipologiaHorarioTrabalho.getCdTurma()); |
||
523 | tipoSum.setCdDocente("" + tipologiaHorarioTrabalho.getCdDocente()); |
||
524 | if(!t.getTipologiasHorarioReferencia().contains(tipoSum)) |
||
525 | t.getTipologiasHorarioReferencia().add(tipoSum); |
||
526 | } |
||
527 | else |
||
528 | { |
||
529 | 1.5.0/docs/api/java/lang/System.html">System.out.println("Tipologia: cd tipo ocup ignorado:" + tipologiaHorarioTrabalho.getCdTipoAula()); |
||
530 | } |
||
531 | |||
532 | } |
||
1626 | jmachado | 533 | /* |
534 | * Consiste as exluidas todas das velhas para as novas |
||
535 | */ |
||
1627 | jmachado | 536 | ArrayList<CourseUnitImpl.Tipologia> mergedTipologiasAntigas = tipologiasAntes.obtainTipologiasSimples(c); |
537 | consistirExcludesTipologiasNovaseAntigas(t.getTipologiasTdocTurma(),mergedTipologiasAntigas); |
||
538 | consistirExcludesTipologiasNovaseAntigas(t.getTipologiasSumarios(), mergedTipologiasAntigas); |
||
539 | consistirExcludesTipologiasNovaseAntigas(t.getTipologiasHorarioReferencia(), mergedTipologiasAntigas); |
||
1626 | jmachado | 540 | if(c.getId() == 938) |
541 | 1.5.0/docs/api/java/lang/System.html">System.out.println(); |
||
1313 | jmachado | 542 | c.setTipologiasClass(t); |
543 | } catch (1.5.0/docs/api/java/lang/Exception.html">Exception e) { |
||
544 | logger.error(e, e); |
||
545 | erroGraveAObterTipologias++; |
||
163 | jmachado | 546 | } |
110 | susana | 547 | } |
548 | |||
1626 | jmachado | 549 | /** |
550 | * Copia a propriedade de Exclusão para as Novas |
||
551 | * @param tNovas |
||
552 | * @param tVelhas |
||
553 | */ |
||
1627 | jmachado | 554 | private void consistirExcludesTipologiasNovaseAntigas(ArrayList<CourseUnitImpl.Tipologia> tNovas,ArrayList<CourseUnitImpl.Tipologia> tVelhas) |
1626 | jmachado | 555 | { |
556 | if(tNovas != null && tVelhas!=null) |
||
557 | { |
||
558 | for(CourseUnitImpl.Tipologia tipoTdocTurmaNova: tNovas) |
||
559 | { |
||
560 | for(CourseUnitImpl.Tipologia tipoTdocTurmaVelha: tVelhas) |
||
561 | { |
||
562 | if(tipoTdocTurmaNova.equals(tipoTdocTurmaVelha)) |
||
563 | { |
||
564 | tipoTdocTurmaNova.setExclude(tipoTdocTurmaVelha.isExclude()); |
||
565 | } |
||
566 | } |
||
567 | } |
||
568 | } |
||
569 | } |
||
570 | |||
1312 | jmachado | 571 | private void consistirUnidadesEmCursosTurmasSeparadas(1.5.0/docs/api/java/lang/String.html">String semestre, DefaultLogMessages logMessages, Disciplina d, List<CourseUnit> cus) { |
572 | Iterator<CourseUnit> iterUnits = cus.iterator(); |
||
573 | //Retira todas as unidades com código de turma preenchido e diferente |
||
574 | //sobram apenas cadeiras com o NOSSO código de TURMA ou cadeiras sem codigo de turma NENHUM |
||
575 | while(iterUnits.hasNext()) |
||
576 | { |
||
577 | CourseUnit cu = iterUnits.next(); |
||
578 | if(cu.getCdTurma() != null && cu.getCdTurma().trim().length() > 0 && !cu.getCdTurma().trim().equals(d.getCdTurma().trim())) |
||
579 | { |
||
580 | iterUnits.remove(); |
||
581 | } |
||
582 | } |
||
583 | if(cus.size() == 0) |
||
584 | { |
||
585 | /***logging*****/ |
||
586 | logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.INFO,"Sem unidade para a turma separada: " + d.getCdTurma())); |
||
587 | logger.info(logMessages.getLastMessage()); |
||
588 | serviceLogInfo(logMessages.getLastMessage()); |
||
589 | //turma ainda nao existe vai ser criada |
||
590 | turmasSeparadasTratadasOk++; |
||
591 | /***logging*****/ |
||
592 | } |
||
593 | else if(cus.size() == 1 && (cus.get(0).getCdTurma() == null || cus.get(0).getCdTurma().trim().length() == 0)) |
||
594 | { |
||
595 | /***logging*****/ |
||
596 | logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.INFO,"Ja existe unidade mas sem turma vai ser alocada à a turma separada: " + d.getCdTurma())); |
||
597 | logger.info(logMessages.getLastMessage()); |
||
598 | serviceLogInfo(logMessages.getLastMessage()); |
||
599 | //Ja existia nao tinha codigo de turma vamos colocar no lugar do codigo unico |
||
600 | //que so serve para este controlo |
||
601 | turmasSeparadasTratadasOk++; |
||
602 | /****logging*****/ |
||
995 | jmachado | 603 | |
1312 | jmachado | 604 | cus.get(0).setCdTurma(d.getCdTurma()); |
605 | } |
||
606 | else if(cus.size() == 1 && cus.get(0).getCdTurma() != null && cus.get(0).getCdTurma().trim().equals(d.getCdTurma().trim())) |
||
607 | { |
||
608 | /***logging*****/ |
||
609 | logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.INFO,"Encontrada a unidade para a turma separada: " + d.getCdTurma())); |
||
610 | logger.info(logMessages.getLastMessage()); |
||
611 | serviceLogInfo(logMessages.getLastMessage()); |
||
612 | turmasSeparadasTratadasOk++; |
||
613 | //ok e' a turma certa nao se faz mais nada |
||
614 | } |
||
615 | else if(cus.size() > 1) |
||
616 | { |
||
617 | turmasSeparadasComInconsistencias++; |
||
618 | /*****logging*******/ |
||
619 | logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.ERROR,"Problema grave nas importações de unidades com turmas separadas para o codigo siges " + d.getCodigo() + ", mais que uma unidade sem turma ou com varias turmas iguais com o mesmo codigo siges, vamos tentar corrigir e reportar de seguida")); |
||
620 | logger.error(logMessages.getLastMessage()); |
||
621 | serviceLogError(logMessages.getLastMessage()); |
||
622 | //Isto e' um problema muito grave, nao devera acontecer haver mais que uma unidade |
||
623 | //repetida e ainda por cima com mais que um código de turma igual ou nosso ou a vazio |
||
624 | //vamos remover todos os vazio, se não sobrar nenhum metemos a nossa turma num deles |
||
625 | //se encontrarmos o nosso usamo-lo, se for mais que um usamos um e colocamos as turmas nos outros a vazio |
||
626 | Iterator<CourseUnit> iter = cus.iterator(); |
||
627 | CourseUnit last = null; |
||
628 | while(iter.hasNext()) |
||
629 | { |
||
630 | last = iter.next(); |
||
631 | if(last.getCdTurma()==null || last.getCdTurma().trim().length() == 0) |
||
632 | { |
||
633 | logMessages.addMessage(new DefaultLogMessage("import.units" + semestre, LogMessageTypeEnum.INFO,"removendo unidade da lista com turma vazia baco id:" + last.getId())); |
||
634 | logger.info(logMessages.getLastMessage()); |
||
635 | serviceLogInfo(logMessages.getLastMessage()); |
||
636 | iter.remove(); |
||
637 | } |
||
638 | } |
||
639 | |||
640 | if(cus.size() > 0) |
||
641 | { |
||
642 | logMessages.addMessage(new DefaultLogMessage("import.units" + semestre, LogMessageTypeEnum.INFO,"Sobraram unidades com o nosso código de turma:" + d.getCdTurma() + " vamos remover todas excepto a primeira")); |
||
643 | logger.info(logMessages.getLastMessage()); |
||
644 | serviceLogInfo(logMessages.getLastMessage()); |
||
645 | //vamos deixar apenas uma com a nossa turma |
||
646 | while(cus.size() > 1) |
||
647 | { |
||
648 | logMessages.addMessage(new DefaultLogMessage("import.units" + semestre, LogMessageTypeEnum.INFO,"removendo baco id:" + cus.get(1).getId() + " e colocando a turma a vazio ")); |
||
649 | logger.info(logMessages.getLastMessage()); |
||
650 | serviceLogInfo(logMessages.getLastMessage()); |
||
651 | cus.get(1).setCdTurma(""); |
||
652 | cus.remove(1); |
||
653 | } |
||
654 | } |
||
655 | else if(cus.size() == 0) |
||
656 | { |
||
657 | logMessages.addMessage(new DefaultLogMessage("import.units" + semestre, LogMessageTypeEnum.INFO,"ficamos sem unidades para usar, nenhuma tinha a nossa turma " + d.getCdTurma() + ", vamos usar a ultima com baco id:" + last.getId() + " e colocando a turma a " + d.getCdTurma())); |
||
658 | logger.info(logMessages.getLastMessage()); |
||
659 | serviceLogInfo(logMessages.getLastMessage()); |
||
660 | cus.add(last); |
||
661 | last.setCdTurma(d.getCdTurma()); |
||
662 | } |
||
663 | } |
||
664 | } |
||
665 | |||
666 | /** |
||
667 | * This method finds or create a courseYear for a courseUnit |
||
668 | * @param logMessages |
||
669 | * @param year |
||
670 | * @param c |
||
671 | * @param course |
||
672 | * @return |
||
673 | */ |
||
674 | private static Map<String,Boolean> courseYearServiceCache = new HashMap<String, Boolean>(); |
||
675 | protected static void checkOrCreateCourseYear(DefaultLogMessages logMessages, 1.5.0/docs/api/java/lang/String.html">String year, 1.5.0/docs/api/java/lang/String.html">String code, ServiceJob service) { |
||
676 | if(courseYearServiceCache.get(code + "-" + year) != null) |
||
677 | { |
||
678 | return; |
||
679 | } |
||
680 | List<CourseYear> cYs = DaoFactory.getCourseYearDaoImpl().findCourseYear(code,year); |
||
681 | CourseYear cY; |
||
682 | if(cYs == null || cYs.size() == 0) |
||
683 | { |
||
684 | |||
685 | Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code); |
||
686 | if(course == null) |
||
687 | return; //does not exist yet |
||
688 | /*****logging******/ |
||
689 | logMessages.addMessage(new DefaultLogMessage("import.ok", "Creating new CourseYear course(" + code + ") year" + year + ")", "see log for details", LogMessageTypeEnum.INFO)); |
||
690 | logger.info(logMessages.getLastMessage()); |
||
691 | service.serviceLogInfo(logMessages.getLastMessage()); |
||
692 | /*****logging******/ |
||
693 | if(course.getCourseYears() == null) |
||
694 | course.setCourseYears(new HashSet<CourseYear>()); |
||
695 | cY = DomainObjectFactory.createCourseYearImpl(); |
||
696 | cY.setImportYear(year); |
||
697 | cY.setSeparatedTurmas(false); |
||
698 | DaoFactory.getCourseYearDaoImpl().save(cY); |
||
699 | course.getCourseYears().add(cY); //adiciona só de um lado |
||
700 | } |
||
701 | else if(cYs.size() > 1) |
||
702 | { |
||
703 | /*****logging******/ |
||
704 | logMessages.addMessage(new DefaultLogMessage("import.error", "CourseYear more than one ocurrence course(" + code + ") year" + year + ")", "see log for details", LogMessageTypeEnum.ERROR)); |
||
705 | logger.error(logMessages.getLastMessage()); |
||
706 | service.serviceLogError(logMessages.getLastMessage()); |
||
707 | /*****logging******/ |
||
708 | //Never happen while year are created only here |
||
709 | } |
||
710 | courseYearServiceCache.put(code + "-" + year,true); |
||
711 | } |
||
712 | |||
713 | |||
995 | jmachado | 714 | @1.5.0/docs/api/java/lang/Override.html">Override |
1070 | jmachado | 715 | protected ILogMessages runJobServiceTask() throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable { |
995 | jmachado | 716 | |
1070 | jmachado | 717 | 1.5.0/docs/api/java/lang/String.html">String importYear = getParametersMap().get(JOB_importYear_KEY).getObject(); |
1312 | jmachado | 718 | 1.5.0/docs/api/java/lang/String.html">String institutionCode = getParametersMap().get(JOB_institution_KEY).getObject(); |
719 | ILogMessages messages = run(importYear,1.5.0/docs/api/java/lang/Integer.html">Integer.parseInt(institutionCode)); |
||
1070 | jmachado | 720 | return messages; |
995 | jmachado | 721 | |
722 | } |
||
723 | |||
724 | |||
163 | jmachado | 725 | public static void main(1.5.0/docs/api/java/lang/String.html">String[] args) throws ServiceException |
726 | { |
||
1123 | jmachado | 727 | 1.5.0/docs/api/java/lang/String.html">String year = DaoFactory.getConfigurationDaoImpl().getImportsDefaultImportYearCreateTransaction(); |
1341 | jmachado | 728 | int institutionCode = 3;// DaoFactory.getConfigurationDaoImpl().getInstitutionCodeCreateTransaction(); |
491 | jmachado | 729 | if(args != null && args.length > 0) |
730 | year = args[0]; |
||
1312 | jmachado | 731 | if(args != null && args.length > 1) |
732 | institutionCode = 1.5.0/docs/api/java/lang/Integer.html">Integer.parseInt(args[1]); |
||
119 | fvelez | 733 | AbstractDao.getCurrentSession().beginTransaction(); |
1312 | jmachado | 734 | new ImportCourseService().run(year,institutionCode); |
1123 | jmachado | 735 | AbstractDao.getCurrentSession().getTransaction().commit(); |
110 | susana | 736 | } |
737 | |||
738 | |||
739 | } |