Subversion Repositories bacoAlunos

Rev

Rev 1296 | 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;
6
import pt.estgp.estgweb.domain.Course;
7
import pt.estgp.estgweb.domain.CourseUnit;
1277 jmachado 8
import pt.estgp.estgweb.domain.CourseUnitImpl;
165 jmachado 9
import pt.estgp.estgweb.domain.DomainObjectFactory;
995 jmachado 10
import pt.estgp.estgweb.domain.dao.DaoFactory;
214 jmachado 11
import pt.estgp.estgweb.domain.views.CourseView;
995 jmachado 12
import pt.estgp.estgweb.services.courses.CoursesService;
13
import pt.estgp.estgweb.services.email.SendEmailService;
165 jmachado 14
import pt.estgp.estgweb.services.expceptions.ServiceException;
995 jmachado 15
import pt.estgp.estgweb.services.jobs.ServiceJob;
165 jmachado 16
import pt.estgp.estgweb.services.logresults.ILogMessages;
17
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
18
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
19
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
1296 jmachado 20
import pt.estgp.estgweb.services.sigesimports.oracle.dao.DisciplinaDao;
21
import pt.estgp.estgweb.services.sigesimports.oracle.dao.connection.ConnectionManager;
22
import pt.estgp.estgweb.services.sigesimports.oracle.domain.Disciplina;
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;
165 jmachado 44
    public ILogMessages run(1.5.0/docs/api/java/lang/String.html">String year) throws ServiceException
110 susana 45
    {
995 jmachado 46
        1.5.0/docs/api/java/lang/String.html">String msgS = "STARTING COURSES IMPORT SERVICE FOR YEAR: " + year;
47
        serviceLogInfo(msgS);
48
        logger.info(msgS);
110 susana 49
 
995 jmachado 50
        newUnits = 0;
51
        newCourses = 0;
1277 jmachado 52
        unitsRepeated = 0;
1296 jmachado 53
        unitsAtualizadas = 0;
995 jmachado 54
 
165 jmachado 55
        DefaultLogMessages logMessages = new DefaultLogMessages();
56
        try
110 susana 57
        {
1017 jmachado 58
            logMessages.addMessage(new DefaultLogMessage("import.semestre.separated", LogMessageTypeEnum.INFO, "instituicao " + DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode()));
995 jmachado 59
            serviceLogInfo(logMessages.getLastMessage());
110 susana 60
 
165 jmachado 61
            HashMap<String, Disciplina> disciplinasMap = new HashMap<String, Disciplina>();
62
            HashMap<String, Disciplina> disciplinasMapS1 = new HashMap<String, Disciplina>();
63
            HashMap<String, Disciplina> disciplinasMapS2 = new HashMap<String, Disciplina>();
727 jmachado 64
            HashMap<String, Disciplina> disciplinasMapA = new HashMap<String, Disciplina>();
1040 jmachado 65
            HashMap<String, Disciplina> disciplinasMapT1 = new HashMap<String, Disciplina>();
66
            HashMap<String, Disciplina> disciplinasMapT2 = new HashMap<String, Disciplina>();
67
            HashMap<String, Disciplina> disciplinasMapT3 = new HashMap<String, Disciplina>();
68
            HashMap<String, Disciplina> disciplinasMapT4 = new HashMap<String, Disciplina>();
345 jmachado 69
            HashMap<String, Disciplina> cursosMap = new HashMap<String, Disciplina>();
163 jmachado 70
 
165 jmachado 71
            /**
72
             * Build Course Units Maps
73
             */
1296 jmachado 74
            /*SiGesWEB service;
1017 jmachado 75
            String WSDL = DaoFactory.getConfigurationDaoImpl().getSigesWebServicesWsdl();
165 jmachado 76
            try
77
            {
1017 jmachado 78
                serviceLogInfo("STARTING WEB SERVICE AT " + WSDL);
79
                service = new SiGesWEB(new URL(WSDL), new QName(Globals.SIGES_WEBSERVICE_TARGET_NAMESPACE, "SiGesWEB"));
165 jmachado 80
            }
81
            catch (MalformedURLException e)
82
            {
83
                logger.fatal(e, e);
84
                logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(),"erro na configuracao do WEB Service", LogMessageTypeEnum.INFO));
995 jmachado 85
                serviceLogError(logMessages.getLastMessage(), e);
165 jmachado 86
                return logMessages;
87
            }
1296 jmachado 88
            */
89
            DisciplinaDao service = DisciplinaDao.getInstance();
90
            1.5.0/docs/api/java/sql/Connection.html">Connection conn = ConnectionManager.openConnection();
163 jmachado 91
 
1296 jmachado 92
            importUnitsSemestre(service,conn, "S1", year, disciplinasMap, disciplinasMapS1, cursosMap, logMessages);
93
            importUnitsSemestre(service,conn, "S2", year, disciplinasMap, disciplinasMapS2, cursosMap, logMessages);
94
            importUnitsSemestre(service,conn, "A", year, disciplinasMap, disciplinasMapA, cursosMap, logMessages);
95
            importUnitsSemestre(service,conn, "T1", year, disciplinasMap, disciplinasMapT1, cursosMap, logMessages);
96
            importUnitsSemestre(service,conn, "T2", year, disciplinasMap, disciplinasMapT2, cursosMap, logMessages);
97
            importUnitsSemestre(service,conn, "T3", year, disciplinasMap, disciplinasMapT3, cursosMap, logMessages);
98
            importUnitsSemestre(service,conn, "T4", year, disciplinasMap, disciplinasMapT4, cursosMap, logMessages);
1115 jmachado 99
 
165 jmachado 100
            /**
101
             * Import Courses
102
             */
103
            logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.courses", LogMessageTypeEnum.INFO));
995 jmachado 104
            serviceLogInfo("updating courses");
165 jmachado 105
            logger.info("updating courses");
345 jmachado 106
            Set<Map.Entry<String, Disciplina>> set2 = cursosMap.entrySet();
107
            for (1.5.0/docs/api/java/util/Map.html">Map.Entry<String, Disciplina> entry : set2)
165 jmachado 108
            {
109
                Disciplina d = entry.getValue();
214 jmachado 110
                CourseView c = coursesService.loadCourseByCode("" + d.getCodigoCurso().intValue(),false);
111
 
112
//                Course c = DaoFactory.getCourseDaoImpl().findCourseByCode("" + d.getCodigoCurso());
219 jmachado 113
                if (c == null)
114
                {
115
                    c = new CourseView();
995 jmachado 116
                    newCourses++;
117
                    serviceLogInfo("New Course Found: (" +  d.getCodigoCurso() + ") " + d.getNomeCurso());
214 jmachado 118
//                    DaoFactory.getCourseDaoImpl().save(c);
219 jmachado 119
                }
165 jmachado 120
                c.setName(d.getNomeCurso());
1189 jmachado 121
                if(d.getGrauCurso() == null || d.getGrauCurso().trim().length() == 0)
122
                    d.setGrauCurso("unknown");
409 jmachado 123
                1.5.0/docs/api/java/lang/String.html">String grauBaco = ConfigProperties.getProperty("siges.degree."+d.getGrauCurso());
1189 jmachado 124
 
125
                c.setDegree(grauBaco);
165 jmachado 126
                c.setCode("" + d.getCodigoCurso().intValue());
206 jmachado 127
                c.setImportYear(year);
165 jmachado 128
                c.setInstitutionalCode("" + d.getCodigoInstituicao().intValue());
214 jmachado 129
                coursesService.submitCourse(c,null,null,0,null,null);
165 jmachado 130
            }
163 jmachado 131
 
165 jmachado 132
            /**
133
             * Update Course Units
134
             */
1296 jmachado 135
            updateCourseUnits(disciplinasMapS1, "S1",logMessages,year,service,conn);
136
            updateCourseUnits(disciplinasMapS2, "S2",logMessages,year,service,conn);
137
            updateCourseUnits(disciplinasMapA, "A",logMessages,year,service,conn);
138
            updateCourseUnits(disciplinasMapT1, "T1",logMessages,year,service,conn);
139
            updateCourseUnits(disciplinasMapT2, "T2",logMessages,year,service,conn);
140
            updateCourseUnits(disciplinasMapT3, "T3",logMessages,year,service,conn);
141
            updateCourseUnits(disciplinasMapT4, "T4",logMessages,year,service,conn);
995 jmachado 142
 
1296 jmachado 143
            conn.close();
144
 
995 jmachado 145
            serviceLogInfo("######################################");
146
            serviceLogInfo("######################################");
147
            serviceLogInfo("#Courses Imported:" + cursosMap.size());
148
            serviceLogInfo("#Units Imported S1:" + disciplinasMapS1.size());
149
            serviceLogInfo("#Units Imported S2:" + disciplinasMapS2.size());
150
            serviceLogInfo("#Units Imported A:" + disciplinasMapA.size());
1040 jmachado 151
            serviceLogInfo("#Units Imported T1:" + disciplinasMapT1.size());
152
            serviceLogInfo("#Units Imported T2:" + disciplinasMapT2.size());
153
            serviceLogInfo("#Units Imported T3:" + disciplinasMapT3.size());
154
            serviceLogInfo("#Units Imported T4:" + disciplinasMapT4.size());
995 jmachado 155
            serviceLogInfo("#New Courses Found:" + newCourses);
156
            serviceLogInfo("#New Units Found:" + newUnits);
1296 jmachado 157
            serviceLogInfo("#Regular Updated Units:" + unitsAtualizadas);
158
            serviceLogInfo("#Unidades Repetidas (A mesma para o conjunto (Codigo,Curso,Ano,Semestre)):" + unitsRepeated);
995 jmachado 159
 
1025 jmachado 160
            logger.info("######################################");
161
            logger.info("######################################");
162
            logger.info("#Courses Imported:" + cursosMap.size());
163
            logger.info("#Units Imported S1:" + disciplinasMapS1.size());
164
            logger.info("#Units Imported S2:" + disciplinasMapS2.size());
165
            logger.info("#Units Imported A:" + disciplinasMapA.size());
1040 jmachado 166
            logger.info("#Units Imported T1:" + disciplinasMapT1.size());
167
            logger.info("#Units Imported T2:" + disciplinasMapT2.size());
168
            logger.info("#Units Imported T3:" + disciplinasMapT3.size());
169
            logger.info("#Units Imported T4:" + disciplinasMapT4.size());
1025 jmachado 170
            logger.info("#New Courses Found:" + newCourses);
171
            logger.info("#New Units Found:" + newUnits);
1296 jmachado 172
            logger.info("#Regular Updated Units:" + unitsAtualizadas);
173
            logger.info("#Unidades Repetidas (A mesma para o conjunto (Codigo,Curso,Ano,Semestre)):" + unitsRepeated);
995 jmachado 174
 
1025 jmachado 175
 
110 susana 176
        }
165 jmachado 177
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
110 susana 178
        {
358 jmachado 179
            logger.error(e,e);
180
            logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
995 jmachado 181
            serviceLogError(logMessages.getLastMessage(), e);
863 jmachado 182
            1.5.0/docs/api/java/lang/String.html">String cause = e.getCause() == null ? "" : e.getCause().toString();
1000 jmachado 183
            sendNotificationAdmin("Erro na importacao de sumarios",cause);
110 susana 184
        }
358 jmachado 185
        logger.info("terminating course import");
995 jmachado 186
        serviceLogInfo("terminating course import");
165 jmachado 187
        logMessages.addMessage(new DefaultLogMessage("import.course.terminating", LogMessageTypeEnum.INFO));
995 jmachado 188
        setProgress(100);
165 jmachado 189
        return logMessages;
190
    }
110 susana 191
 
1000 jmachado 192
    /**
193
     * Envio de Notificação aos operadores do CI
194
     * @param subject
195
     * @param cause
196
     */
197
    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)
198
    {
199
 
1024 jmachado 200
 
1000 jmachado 201
        List<String> emails = ConfigProperties.getListValues("admin.email");
202
        for(1.5.0/docs/api/java/lang/String.html">String email:emails)
203
        {
204
            serviceLogWarn(">>>>>>>>ENVIANDO NOTIFICACAO A ADMINISTRACAO: " + email);
205
            logger.warn(">>>>>>>>ENVIANDO NOTIFICACAO A ADMINISTRACAO: " + email);
206
        }
207
        List<String> arguments = new ArrayList<String>();
208
        arguments.add(cause.replace("\n","<br/>"));
209
        Email email = new Email(subject,emails,Globals.SYSTEM_EMAIL_BOX,"messageToAdmin_pt.txt",arguments);
1029 jmachado 210
        email.setHtml(true);
1000 jmachado 211
        try {
212
            new SendEmailService().sendEmail(email);
213
        } catch (ServiceException e) {
214
            e.printStackTrace();
215
        }
216
 
217
    }
218
 
1296 jmachado 219
    private void importUnitsSemestre(DisciplinaDao service,
220
                                     1.5.0/docs/api/java/sql/Connection.html">Connection conn,
165 jmachado 221
                                     1.5.0/docs/api/java/lang/String.html">String semestre,
222
                                     1.5.0/docs/api/java/lang/String.html">String year,
223
                                     HashMap<String, Disciplina> disciplinasMap,
224
                                     HashMap<String, Disciplina> disciplinasMapSemestre,
345 jmachado 225
                                     HashMap<String, Disciplina> cursosMap,
1296 jmachado 226
                                     DefaultLogMessages logMessages) throws 1.5.0/docs/api/java/sql/SQLException.html">SQLException {
1115 jmachado 227
 
228
 
165 jmachado 229
        logMessages.addMessage(new DefaultLogMessage("import.semestre.course.units." + semestre, LogMessageTypeEnum.INFO));
995 jmachado 230
        serviceLogInfo("importing " + semestre + " course units");
165 jmachado 231
        logger.info("importing " + semestre + " course units");
1296 jmachado 232
        List<Disciplina> disciplinas = service.loadDisciplinas(DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode(), year, semestre,conn);
233
 
165 jmachado 234
        for (Disciplina d : disciplinas)
110 susana 235
        {
1115 jmachado 236
            if (disciplinasMap.get(getDisciplinaUniqueRef(d)) != null)
165 jmachado 237
            {
238
                logMessages.addMessage(new DefaultLogMessage("import.semestre.repeated." + semestre, "unit: " + d.getCodigo().intValue(), "", LogMessageTypeEnum.WARNING));
995 jmachado 239
                serviceLogWarn("repeated unit in " + semestre + ":" + d.getCodigo().intValue());
165 jmachado 240
                logger.warn("repeated unit in " + semestre + ":" + d.getCodigo().intValue());
241
            }
1115 jmachado 242
            disciplinasMap.put(getDisciplinaUniqueRef(d), d);
243
            disciplinasMapSemestre.put(getDisciplinaUniqueRef(d), d);
345 jmachado 244
            cursosMap.put(d.getCodigoCurso().intValue()+":"+year, d);
110 susana 245
        }
165 jmachado 246
    }
163 jmachado 247
 
1115 jmachado 248
    private 1.5.0/docs/api/java/lang/String.html">String getDisciplinaUniqueRef(Disciplina d)
165 jmachado 249
    {
1296 jmachado 250
        return d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + d.getCdDuracao(); // + ":" + d.getCdTurma();
1115 jmachado 251
    }
252
 
1141 jmachado 253
    public static final int SIGES_CODIGO_TIPO_DISCIPLINA_EXTRA_CURRICULAR = ConfigProperties.getIntProperty("siges.codigo.tipo.disciplina.extra.curricular");
1296 jmachado 254
    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,DisciplinaDao service,1.5.0/docs/api/java/sql/Connection.html">Connection conn)
1115 jmachado 255
    {
165 jmachado 256
        logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.INFO));
1115 jmachado 257
 
1141 jmachado 258
 
165 jmachado 259
        logger.info("updating " + semestre + " course units");
995 jmachado 260
        serviceLogInfo("updating " + semestre + " course units");
165 jmachado 261
        Set<Map.Entry<String, Disciplina>> set = disciplinasMapS.entrySet();
163 jmachado 262
        for (1.5.0/docs/api/java/util/Map.html">Map.Entry<String, Disciplina> entry : set)
263
        {
264
            Disciplina d = entry.getValue();
1141 jmachado 265
            //TIPO 6 é uma EXTRA CURRICULAR
1296 jmachado 266
            if(ImportStudentsService.isCursoFicticio(d.getCodigoCurso()))
1115 jmachado 267
            {
1296 jmachado 268
                logMessages.addMessage(new DefaultLogMessage("import.error","Ignorando disciplina com codigo de curso ficticio - codigo: " + d.getCodigoCurso(), " see log for details", LogMessageTypeEnum.WARNING));
1115 jmachado 269
                logger.warn(logMessages.getLastMessage());
270
                serviceLogWarn(logMessages.getLastMessage());
271
 
272
                continue;
273
            }
1277 jmachado 274
            //CourseUnit c = null;
275
            List<CourseUnit> cus = null;
276
 
277
            cus= DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + d.getCodigo(), "" + d.getCodigoCurso(), semestre, year);
278
            if(cus != null && cus.size() > 1 )
750 jmachado 279
            {
1277 jmachado 280
                unitsRepeated++;
1278 jmachado 281
                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 282
                logger.fatal(logMessages.getLastMessage());
283
                serviceLogWarn(logMessages.getLastMessage());
750 jmachado 284
            }
1296 jmachado 285
            else if(cus != null && cus.size() == 1)
286
            {
287
                unitsAtualizadas++;
288
                1.5.0/docs/api/java/lang/String.html">String msg = "Regular unit update: " + "(" + d.getCodigo() + ") curso: " + d.getCodigoCurso() + " " + semestre + " " + year;
289
                logger.info(msg);
290
                serviceLogInfo(msg);
291
            }
1115 jmachado 292
 
1277 jmachado 293
 
294
            if (cus == null || cus.size() == 0)
225 jmachado 295
            {
1277 jmachado 296
                CourseUnitImpl c = DomainObjectFactory.createCourseUnitImpl();
726 jmachado 297
                DaoFactory.getCourseUnitDaoImpl().save(c);
1230 jmachado 298
                logMessages.addMessage(new DefaultLogMessage("import.error", "New Unit Found: (" +  d.getCodigo() + ") " + d.getNome() + " - curso (" + d.getNomeCurso() + ") " + d.getNomeCurso() + " turma(" + d.getCdTurma() + ")", "see log for details", LogMessageTypeEnum.INFO));
1115 jmachado 299
                logger.info(logMessages.getLastMessage());
300
                serviceLogInfo(logMessages.getLastMessage());
995 jmachado 301
                newUnits++;
1277 jmachado 302
                cus = new ArrayList<CourseUnit>();
303
                cus.add(c);
225 jmachado 304
            }
1115 jmachado 305
            //NOVO
306
 
1277 jmachado 307
            for(CourseUnit c: cus)
308
            {
309
                //todo deixa de atualizar c.setCdTurma("" + d.getCdTurma());
310
                c.setName(d.getNome());
311
                c.setInstitutionCode("" + DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode());
312
                c.setCode("" + d.getCodigo().intValue());
313
                c.setCourseCode("" + d.getCodigoCurso());
314
                c.setCourseName("" + d.getNomeCurso());
315
                c.setSemestre(semestre);
316
                c.setImportYear(year);
317
                Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(c.getCourseCode());
318
                c.setCourse(course);
319
            }
163 jmachado 320
        }
110 susana 321
    }
322
 
995 jmachado 323
 
324
    @1.5.0/docs/api/java/lang/Override.html">Override
1070 jmachado 325
    protected ILogMessages runJobServiceTask() throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable {
995 jmachado 326
 
1070 jmachado 327
        1.5.0/docs/api/java/lang/String.html">String importYear = getParametersMap().get(JOB_importYear_KEY).getObject();
328
        ILogMessages messages = run(importYear);
329
        return messages;
995 jmachado 330
 
331
    }
332
 
333
 
163 jmachado 334
    public static void main(1.5.0/docs/api/java/lang/String.html">String[] args) throws ServiceException
335
    {
1123 jmachado 336
        1.5.0/docs/api/java/lang/String.html">String year = DaoFactory.getConfigurationDaoImpl().getImportsDefaultImportYearCreateTransaction();
491 jmachado 337
        if(args != null && args.length > 0)
338
            year = args[0];
119 fvelez 339
        AbstractDao.getCurrentSession().beginTransaction();
491 jmachado 340
        new ImportCourseService().run(year);
1123 jmachado 341
        AbstractDao.getCurrentSession().getTransaction().commit();
110 susana 342
    }
343
 
344
 
345
}