package pt.estgp.estgweb.services.sigesimports;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.utils.Globals;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitSummary;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
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.utils.DatesUtils;
import pt.ipportalegre.siges.web.services.ArrayOfAula;
import pt.ipportalegre.siges.web.services.Aula;
import pt.ipportalegre.siges.web.services.SiGesWEB;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import javax.xml.namespace.QName;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
/**
* @author Jorge Machado
* @date 11/May/2008
* @time 12:51:32
* @see pt.estgp.estgweb
*/
public class ImportSumaries
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(ImportSumaries.
class);
private static final int MAX_COMMIT =
100;
private List
<Long
> newSummaries =
new ArrayList
<Long
>();
public ILogMessages run
(1.5.0/docs/api/java/lang/String.html">String year
) throws ServiceException
{
DefaultLogMessages logMessages =
new DefaultLogMessages
();
logMessages.
addMessage(new DefaultLogMessage
("import.summaries", LogMessageTypeEnum.
INFO,
"instituicao " + DaoFactory.
getConfigurationDaoImpl().
getSigesInstitutionCode()));
logger.
info("starting summaries import");
try
{
AbstractDao.
getCurrentSession().
beginTransaction();
1.5.0/docs/api/java/lang/String.html">String WSDL = DaoFactory.
getConfigurationDaoImpl().
getSigesWebServicesWsdl();
SiGesWEB service
;
try
{
service =
new SiGesWEB
(new 1.5.0/docs/api/java/net/URL.html">URL(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
)
{
logMessages.
addMessage(new DefaultLogMessage
("import.error",e.
toString(),
"erro na configuracao do WEB Service", LogMessageTypeEnum.
INFO));
logger.
fatal(e, e
);
return logMessages
;
}
int i =
0;
List
<Long
> cUs = DaoFactory.
getCourseUnitDaoImpl().
loadIds(year,DatesUtils.
getSemestre());
for(1.5.0/docs/api/java/lang/Long.html">Long cId: cUs
)
{
if (i++
> MAX_COMMIT
)
{
i =
0;
AbstractDao.
getCurrentSession().
getTransaction().
commit();
AbstractDao.
getCurrentSession().
beginTransaction();
}
CourseUnit c = DaoFactory.
getCourseUnitDaoImpl().
load(cId
);
logMessages.
addMessage(new DefaultLogMessage
("import.info",
"",
"Importing Summaries to CourseUnit: " + c.
getCode() +
": course: " + c.
getCourse().
getCode(), LogMessageTypeEnum.
INFO));
logger.
info("Importing Summaries to CourseUnit: " + c.
getName() +
" (" + c.
getCode() +
") course " + c.
getCourse().
getName() +
" (" + c.
getCourse().
getCode() +
")");
int tries =
3;
ArrayOfAula arrayOfAulas =
null;
while(tries
> 0)
{
//comentario de teste
try
{
arrayOfAulas = service.
getSiGesWEBSoap().
getAulas(new 1.5.0/docs/api/java/math/BigDecimal.html">BigDecimal(DaoFactory.
getConfigurationDaoImpl().
getSigesInstitutionCode()), year,c.
getCode(),DatesUtils.
getSemestre(),
null);
break;
}
catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable t
)
{
if(tries-- ==
0)
{
logger.
error("Giving up of courseUnit:" + cId +
" ( " + c.
getName() +
" ) ",t
);
break;
}
logger.
error("WebService Fail, trying " + tries +
" times sleeping a while");
1.5.0/docs/api/java/lang/Thread.html">Thread.
sleep(5000
);
}
}
if(arrayOfAulas
!=
null && arrayOfAulas.
getAula() !=
null)
{
HashMap
<String, CourseUnitSummary
> map =
new HashMap
<String, CourseUnitSummary
>();
if(c.
getSummaries() !=
null && c.
getSummaries().
size() > 0
)
for(CourseUnitSummary s: c.
getSummaries())
map.
put(s.
getCodigoAula() +
":" + s.
getCodigoSumario(),s
);
else
c.
setSummaries(new HashSet
<CourseUnitSummary
>());
for(Aula aula: arrayOfAulas.
getAula())
{
CourseUnitSummary s = map.
get(aula.
getSumNumeroAula() +
":" + aula.
getCodigoSumario());
if(s ==
null)
{
s = DomainObjectFactory.
createCourseUnitSummaryImpl();
s.
setCourseUnit(c
);
c.
getSummaries().
add(s
);
DaoFactory.
getCourseUnitSummaryDaoImpl().
save(s
);
newSummaries.
add(s.
getId());
}
s.
setCodigoSumario(""+aula.
getCodigoSumario().
intValue());
s.
setCodigoAula(""+aula.
getSumNumeroAula().
intValue());
s.
setNumeroAula(aula.
getSumNumeroAula().
intValue());
s.
setDataAula(aula.
getData().
toGregorianCalendar().
getTime());
s.
setTipoAula(aula.
getSumTipoAula());
s.
setCodigoSalaAula("" + aula.
getAulaCodigoSalaAula().
intValue());
s.
setAlunosPresentes(aula.
getSumNumeroAlunos().
intValue());
s.
setTitulo(aula.
getSumTitulo());
s.
setDescricao(aula.
getSumDescricao());
s.
setcEstado(""+aula.
getSumCdEstado().
intValue());
s.
setNumeroHoras("" + aula.
getNumeroCelulas().
intValue());
}
}
else
logger.
error("Summaries come null in unit:" + c.
getCode());
}
sendEmail
(null);
AbstractDao.
getCurrentSession().
getTransaction().
commit();
}
catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e
)
{
logger.
error(e, e
);
AbstractDao.
getCurrentSession().
getTransaction().
rollback();
logMessages.
addMessage(new DefaultLogMessage
("import.error", e.
toString(),
"see log for details", LogMessageTypeEnum.
ERROR));
throw new ServiceException
(e.
toString(), e
);
}
logMessages.
addMessage(new DefaultLogMessage
("import.summaries.terminating", LogMessageTypeEnum.
INFO));
logger.
info("terminating summaries import");
return logMessages
;
}
public static SendEmailService sendEmailService =
new SendEmailService
();
private void sendEmail
(UserSession userSession
)
{
if(Globals.
EMAIL_SUMMARIES && newSummaries.
size() > 0
)
{
for(long id: newSummaries
)
{
CourseUnitSummary summary = DaoFactory.
getCourseUnitSummaryDaoImpl().
load(id
);
List
<String
> emails = DaoFactory.
getCourseUnitSummaryDaoImpl().
getStudentsEmails(summary.
getId());
if(emails ==
null)
logger.
warn("No students emails in unit: code:" + summary.
getCourseUnit().
getCode() +
" " + summary.
getCourseUnit().
getName());
EMAILJob emailJob =
new EMAILJob
(sendEmailService.
getSummaryEmail(emails,summary,summary.
getCourseUnit(), LangEnum.
PORTUGUESE));
JobScheduleService.
getInstance().
scheduleNow(emailJob,
"New Summary EMAIL from: " + summary.
getCourseUnit().
getName() +
" aula: " +summary.
getNumeroAula() ,userSession
);
}
}
}
/**
* Testar por aqui poi requer Super Role e assim e' autmatico
*
*
* @param args of main
* @throws pt.estgp.estgweb.services.expceptions.ServiceException on error
*/
public static void main
(1.5.0/docs/api/java/lang/String.html">String[] args
) throws ServiceException
{
1.5.0/docs/api/java/lang/String.html">String year = DaoFactory.
getConfigurationDaoImpl().
getImportsDefaultImportYearCreateTransaction();
if(args
!=
null && args.
length > 0
)
year = args
[0
];
new ImportSumaries
().
run(year
);
}
}