package pt.estgp.estgweb.services.sigesimports;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.services.courses.CoursesService;
import pt.ipportalegre.siges.web.services.ArrayOfDisciplina;
import pt.ipportalegre.siges.web.services.Disciplina;
import pt.ipportalegre.siges.web.services.SiGesWEB;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import javax.xml.namespace.QName;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.net.URL;
import java.net.MalformedURLException;
/**
* @author Jorge Machado
*/
public class ImportCourseService
implements IService
{
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);
private CoursesService coursesService =
new CoursesService
();
public ILogMessages run
(1.5.0/docs/api/java/lang/String.html">String year
) throws ServiceException
{
DefaultLogMessages logMessages =
new DefaultLogMessages
();
try
{
logMessages.
addMessage(new DefaultLogMessage
("import.semestre.separated", LogMessageTypeEnum.
INFO,
"instituicao " + Globals.
SIGES_INSTITUTION_CODE));
HashMap
<String, Disciplina
> disciplinasMap =
new HashMap
<String, Disciplina
>();
HashMap
<String, Disciplina
> disciplinasMapS1 =
new HashMap
<String, Disciplina
>();
HashMap
<String, Disciplina
> disciplinasMapS2 =
new HashMap
<String, Disciplina
>();
HashMap
<String, Disciplina
> cursosMap =
new HashMap
<String, Disciplina
>();
/**
* Build Course Units Maps
*/
SiGesWEB service
;
try
{
service =
new SiGesWEB
(new 1.5.0/docs/api/java/net/URL.html">URL(Globals.
SIGES_WEBSERVICE_WSDL),
new 1.5.0/docs/api/javax/xml/namespace/QName.html">QName(Globals.
SIGES_WEBSERVICE_TARGET_NAMESPACE,
"SiGesWEB"));
}
catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e
)
{
logger.
fatal(e, e
);
logMessages.
addMessage(new DefaultLogMessage
("import.error",e.
toString(),
"erro na configuracao do WEB Service", LogMessageTypeEnum.
INFO));
return logMessages
;
}
importUnitsSemestre
(service,
"S1", year, disciplinasMap, disciplinasMapS1, cursosMap, logMessages
);
importUnitsSemestre
(service,
"S2", year, disciplinasMap, disciplinasMapS2, cursosMap, logMessages
);
/**
* Import Courses
*/
logMessages.
addMessage(new DefaultLogMessage
("import.semestre.updating.courses", LogMessageTypeEnum.
INFO));
logger.
info("updating courses");
Set
<Map.
Entry<String, Disciplina
>> set2 = cursosMap.
entrySet();
for (1.5.0/docs/api/java/util/Map.html">Map.
Entry<String, Disciplina
> entry : set2
)
{
Disciplina d = entry.
getValue();
CourseView c = coursesService.
loadCourseByCode("" + d.
getCodigoCurso().
intValue(),
false);
// Course c = DaoFactory.getCourseDaoImpl().findCourseByCode("" + d.getCodigoCurso());
if (c ==
null)
{
c =
new CourseView
();
// DaoFactory.getCourseDaoImpl().save(c);
}
c.
setName(d.
getNomeCurso());
1.5.0/docs/api/java/lang/String.html">String grauBaco = ConfigProperties.
getProperty("siges.degree."+d.
getGrauCurso());
c.
setDegree(grauBaco
);
c.
setCode("" + d.
getCodigoCurso().
intValue());
c.
setImportYear(year
);
c.
setInstitutionalCode("" + d.
getCodigoInstituicao().
intValue());
coursesService.
submitCourse(c,
null,
null,0,
null,
null);
}
/**
* Update Course Units
*/
updateCourseUnits
(disciplinasMapS1,
"S1",logMessages,year
);
updateCourseUnits
(disciplinasMapS2,
"S2",logMessages,year
);
}
catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e
)
{
logger.
error(e,e
);
logMessages.
addMessage(new DefaultLogMessage
("import.error",e.
toString(),
"see log for details", LogMessageTypeEnum.
ERROR));
}
logger.
info("terminating course import");
logMessages.
addMessage(new DefaultLogMessage
("import.course.terminating", LogMessageTypeEnum.
INFO));
return logMessages
;
}
private void importUnitsSemestre
(SiGesWEB service,
1.5.0/docs/api/java/lang/String.html">String semestre,
1.5.0/docs/api/java/lang/String.html">String year,
HashMap
<String, Disciplina
> disciplinasMap,
HashMap
<String, Disciplina
> disciplinasMapSemestre,
HashMap
<String, Disciplina
> cursosMap,
DefaultLogMessages logMessages
)
{
logMessages.
addMessage(new DefaultLogMessage
("import.semestre.course.units." + semestre, LogMessageTypeEnum.
INFO));
logger.
info("importing " + semestre +
" course units");
ArrayOfDisciplina arrayOfDisciplina = service.
getSiGesWEBSoap().
getDisciplinasDaInstituicaoSemestre(Globals.
SIGES_INSTITUTION_CODE, year, semestre
);
List
<Disciplina
> disciplinas = arrayOfDisciplina.
getDisciplina();
for (Disciplina d : disciplinas
)
{
if (disciplinasMap.
get(d.
getCodigo().
intValue() +
":" + d.
getCodigoCurso() +
":" + semestre
) !=
null)
{
logMessages.
addMessage(new DefaultLogMessage
("import.semestre.repeated." + semestre,
"unit: " + d.
getCodigo().
intValue(),
"", LogMessageTypeEnum.
WARNING));
logger.
warn("repeated unit in " + semestre +
":" + d.
getCodigo().
intValue());
}
disciplinasMap.
put(d.
getCodigo().
intValue() +
":" + d.
getCodigoCurso() +
":" + semestre, d
);
disciplinasMapSemestre.
put(d.
getCodigo().
intValue() +
":" + d.
getCodigoCurso() +
":" + semestre, d
);
cursosMap.
put(d.
getCodigoCurso().
intValue()+
":"+year, d
);
}
}
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
)
{
logMessages.
addMessage(new DefaultLogMessage
("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.
INFO));
logger.
info("updating " + semestre +
" course units");
Set
<Map.
Entry<String, Disciplina
>> set = disciplinasMapS.
entrySet();
for (1.5.0/docs/api/java/util/Map.html">Map.
Entry<String, Disciplina
> entry : set
)
{
Disciplina d = entry.
getValue();
CourseUnit c = DaoFactory.
getCourseUnitDaoImpl().
loadBySigesCodeUnique("" + d.
getCodigo(),
"" + d.
getCodigoCurso(), semestre, year
);
if (c ==
null)
{
c = DomainObjectFactory.
createCourseUnitImpl();
DaoFactory.
getCourseUnitDaoImpl().
save(c
);DaoFactory.
getCourseUnitDaoImpl().
save(c
);
}
c.
setName(d.
getNome());
c.
setInstitutionCode("" + Globals.
SIGES_INSTITUTION_CODE);
c.
setCode("" + d.
getCodigo().
intValue());
c.
setCourseCode("" + d.
getCodigoCurso());
c.
setCourseName("" + d.
getNomeCurso());
c.
setSemestre(semestre
);
c.
setImportYear(year
);
Course course = DaoFactory.
getCourseDaoImpl().
findCourseByCode(c.
getCourseCode());
c.
setCourse(course
);
}
}
public static void main
(1.5.0/docs/api/java/lang/String.html">String[] args
) throws ServiceException
{
AbstractDao.
getCurrentSession().
beginTransaction();
new ImportCourseService
().
run(DatesUtils.
getImportYear());
AbstractDao.
getCurrentSession().
getTransaction().
commit();
}
}