/impl/importRoutines.xml |
---|
60,10 → 60,31 |
<!-- PONTUAIS --> |
<target name="agendarImportacoes"> |
<java classname="pt.estgp.estgweb.services.jobs.JobScheduleService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"> |
</java> |
</target> |
<target name="grades"> |
<java classname="pt.estgp.estgweb.services.sigesimports.ImportGradesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"> |
<arg value="201415"/> |
<arg value="200809"/> |
</java> |
<java classname="pt.estgp.estgweb.services.sigesimports.ImportGradesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"> |
<arg value="200910"/> |
</java> |
<java classname="pt.estgp.estgweb.services.sigesimports.ImportGradesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"> |
<arg value="201011"/> |
</java> |
<java classname="pt.estgp.estgweb.services.sigesimports.ImportGradesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"> |
<arg value="201112"/> |
</java> |
<java classname="pt.estgp.estgweb.services.sigesimports.ImportGradesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"> |
<arg value="201213"/> |
</java> |
<java classname="pt.estgp.estgweb.services.sigesimports.ImportGradesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"> |
<arg value="201314"/> |
</java> |
</target> |
<target name="setAreas"> |
/impl/conf/language/MessageResources.properties |
---|
502,14 → 502,59 |
directories.saved=Operação salva com sucesso |
##TAREFAS AGENDADAS |
configuration.jobtasks=Tarefas Executadas |
configuration.tasks=Tarefas Agendadas |
configuration.task=Tarefa Agendada |
configuration.taskLog=Log de Tarefa |
configuration.task.weekly=Semanalmente |
configuration.task.monthly=Mensalmente |
configuration.task.dally=Diariamente |
configuration.task.hour=Hora |
configuration.task.minute=Minuto |
configuration.task.second=Segundo |
configuration.task.weekday=Dia da semana |
configuration.task.monthday=Dia do Mês |
configuration.task.now=Agendar para correr agora |
configuration.task.records=Registos de Tarefas Agendadas |
configuration.task.log=Ficheiro de Registo |
configuration.task.progress=Progresso |
configuration.task.PENDING=Hora |
configuration.task.STARTED=Iniciada |
configuration.task.FINISHED=Terminada |
configuration.task.FAILED=Falhada |
configuration.task.UNKNOWN_ERROR=Terminada com erro desconhecido |
targetService.pt.estgp.estgweb.services.sigesimports.ImportTeachersService=Importação de Professores |
targetService.pt.estgp.estgweb.services.sigesimports.ImportStudentsService=Importação de Alunos |
targetService.pt.estgp.estgweb.services.sigesimports.ImportSumariesJson=Importação de Sumários |
targetService.pt.estgp.estgweb.services.sigesimports.ImportGradesService=Importação de Notas |
targetService.pt.estgp.estgweb.services.sigesimports.ImportCourseService=Importação de Cursos |
targetService.pt.estgp.estgweb.services.sigesimports.SincronizeLastYearCourseUnitProgramsService=Clonagem de Fichas Curriculares |
weekday.Mon=Segundas |
weekday.Tue=Terças |
weekday.Wed=Quartas |
weekday.Thu=Quintas |
weekday.Fri=Sextas |
weekday.Sat=Sabados |
weekday.Sun=Domingos |
monthday.day=ao dia |
weekday.day=às |
day.time=às |
job.status.PENDING=Pendente |
job.status.STARTED=Iniciado |
job.status.FINISHED=Terminado |
job.status.FINISHED_ERRORS=Terminado com Erros |
job.status.FINISHED_WARNINGS=Terminado com Avisos |
job.status.FAILED=Falhado |
job.status.UNKNOWN_ERROR=Erro Desconhecido |
531,3 → 576,21 |
/impl/conf/WEB-INF/struts/struts-configuration.xml |
---|
8,6 → 8,7 |
<form-beans> |
<form-bean type="pt.estgp.estgweb.web.form.configuration.ConfigurationGradesForm" name="ConfigurationGradesForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.configuration.DirectoriesForm" name="DirectoriesForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.configuration.SchedulleTasksForm" name="SchedulleTasksForm"/> |
</form-beans> |
<global-exceptions> |
53,5 → 54,24 |
</action> |
<action path="/user/configurationSchedulleTasks" forward="page.configuration.tasks"/> |
<action path="/user/configurationJobTasks" forward="page.configuration.jobtasks"/> |
<action path="/user/configurationTasks" |
type="pt.estgp.estgweb.web.controllers.configuration.SchedulerTasksController" |
name="SchedulleTasksForm" |
scope="request" |
parameter="dispatch" |
validate="false" |
input="page.separators.serviceZone"> |
<forward name="save" path="page.separators.serviceZone"/> |
<forward name="jobtasks" path="page.configuration.jobtasks"/> |
<forward name="tasks" path="page.configuration.tasks"/> |
<forward name="task" path="page.configuration.task"/> |
<forward name="taskLog" path="page.configuration.taskLog"/> |
<forward name="taskLogfromjobtasks" path="page.configuration.taskLog.from.jobtasks"/> |
</action> |
</action-mappings> |
</struts-config> |
/impl/conf/WEB-INF/struts/tiles-configuration.xml |
---|
24,5 → 24,36 |
<put name="topnav" value="/user/serviceZone/topnavConfigurationDirectory.jsp"/> |
<put name="body" value="/admin/configuration/directory.jsp"/> |
</definition> |
<definition name="page.configuration.tasks" extends="page.separators.serviceZone"> |
<put name="title" value="Tarefas Agendadas"/> |
<put name="topnav" value="/user/serviceZone/topnavConfigurationTasks.jsp"/> |
<put name="body" value="/admin/configuration/tasks.jsp"/> |
</definition> |
<definition name="page.configuration.jobtasks" extends="page.separators.serviceZone"> |
<put name="title" value="Registo de Tarefas Executadas"/> |
<put name="topnav" value="/user/serviceZone/topnavConfigurationJobTasks.jsp"/> |
<put name="body" value="/admin/configuration/jobTasks.jsp"/> |
</definition> |
<definition name="page.configuration.task" extends="page.separators.serviceZone"> |
<put name="title" value="Tarefa Agendada"/> |
<put name="topnav" value="/user/serviceZone/topnavConfigurationTask.jsp"/> |
<put name="body" value="/admin/configuration/task.jsp"/> |
</definition> |
<definition name="page.configuration.taskLog" extends="page.separators.serviceZone"> |
<put name="title" value="Tarefa Agendada"/> |
<put name="topnav" value="/user/serviceZone/topnavConfigurationTaskLog.jsp"/> |
<put name="body" value="/admin/configuration/taskLog.jsp"/> |
</definition> |
<definition name="page.configuration.taskLog.from.jobtasks" extends="page.separators.serviceZone"> |
<put name="title" value="Tarefa Agendada"/> |
<put name="topnav" value="/user/serviceZone/topnavConfigurationTaskLogFromJobTasks.jsp"/> |
<put name="body" value="/admin/configuration/taskLog.jsp"/> |
</definition> |
</tiles-definitions> |
/impl/conf/WEB-INF/web.xml |
---|
244,8 → 244,20 |
<servlet-class>pt.estgp.estgweb.web.ajaxapis.ServicosImpressao</servlet-class> |
</servlet> |
<servlet> |
<servlet-name>logServiceStream</servlet-name> |
<servlet-class>pt.estgp.estgweb.web.LogsServiceStream</servlet-class> |
</servlet> |
<servlet> |
<servlet-name>schedullerTasksJson</servlet-name> |
<servlet-class>pt.estgp.estgweb.web.controllers.configuration.SchedullerTasksJson</servlet-class> |
</servlet> |
<!--MAPPINGS--> |
<!--SOAP Tutorial--> |
313,6 → 325,10 |
<url-pattern>/repositoryStreamVersion/*</url-pattern> |
</servlet-mapping> |
<servlet-mapping> |
<servlet-name>logServiceStream</servlet-name> |
<url-pattern>/logServiceStream/*</url-pattern> |
</servlet-mapping> |
<servlet-mapping> |
<servlet-name>ftpProxyStream</servlet-name> |
<url-pattern>/ftpProxyStream/*</url-pattern> |
</servlet-mapping> |
333,7 → 349,12 |
<url-pattern>/user/ajaxapis/ServicosImpressao</url-pattern> |
</servlet-mapping> |
<servlet-mapping> |
<servlet-name>schedullerTasksJson</servlet-name> |
<url-pattern>/admin/schedullerTasksJson</url-pattern> |
</servlet-mapping> |
<!--START FILES--> |
<welcome-file-list> |
<welcome-file>index.jsp</welcome-file> |
/impl/conf/app.properties |
---|
10,6 → 10,7 |
user.session.timeout.minutes=60 |
site.url=@site.url@ |
#USAR APENAS ESTES DOIS EMAILS NAO DA PARA MAIS |
admin.email=ci@estgp.pt |
admin.email.2=jmachado@estgp.pt |
126,6 → 127,8 |
server.ionline.start.path= |
ionline.pass=baco |
ionline.user=Baco_web |
ionline.use.default.credentials.to.updates.and.deletes=false |
ionline.use.default.credentials.to.read=false |
##ESTA CONFIGURACAO ESTA FUNCIONAL |
## Ver nos Ficheiros FtpService metodo run |
## Ver LayoutController |
137,14 → 140,12 |
## Todos o sistema de ficheiros tem codigo espalhado das classes FTPServer e FTPClient |
## Para se conseguir isolar o sistema deste código tem de se fazer um nivel de abstracao |
## e remover todos o código de FTPServer e FTPClient |
ionline.use.default.credentials.to.updates.and.deletes=false |
ionline.use.default.credentials.to.read=false |
server.grupos=ftp://w2.estgp.pt |
server.grupos.start.path=/grupos |
grupos.pass=ftppublic |
grupos.user=ftppublic |
grupos.use.default.credentials.to.read=true |
grupos.use.default.credentials.to.updates.and.deletes=false |
/impl/conf/directories/topMenus.xsl |
---|
New file |
0,0 → 1,60 |
<?xml version="1.0" encoding="UTF-8"?> |
<xsl:stylesheet xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" xmlns:d="http://www.estgp.pt/baco/directory/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > |
<xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes" /> |
<xsl:param name="contextPath">/baco</xsl:param> |
<xsl:template match="/"> |
<table id="menuTop" cellpadding="0" cellspacing="0"> |
<tr> |
<td> |
<ul id="menu_dropdown" class="menubar"> |
<xsl:apply-templates select="/d:directory/d:leaf" mode="root"/> |
</ul> |
</td> |
</tr> |
</table> |
</xsl:template> |
<xsl:template match="d:leaf" mode="root"> |
<li class="submenu"> |
<a> |
<xsl:attribute name="href"> |
<xsl:choose> |
<xsl:when test="@url and @absolute='true'"> |
<xsl:value-of select="@url"/> |
</xsl:when> |
<xsl:when test="@url and @absolute='false'"> |
<xsl:value-of select="$contextPath"/><xsl:value-of select="@url"/> |
</xsl:when> |
<xsl:otherwise>#</xsl:otherwise> |
</xsl:choose> |
</xsl:attribute> |
<xsl:value-of select="@label"/> |
</a> |
<xsl:if test="./d:leaf"> |
<div class="shadow"> |
<ul class="menu"> |
<xsl:for-each select="./d:leaf"> |
<li> |
<a> |
<xsl:attribute name="href"> |
<xsl:choose> |
<xsl:when test="@url and @absolute='true'"> |
<xsl:value-of select="@url"/> |
</xsl:when> |
<xsl:when test="@url and @absolute='false'"> |
<xsl:value-of select="$contextPath"/><xsl:value-of select="@url"/> |
</xsl:when> |
<xsl:otherwise>#</xsl:otherwise> |
</xsl:choose> |
</xsl:attribute> |
<xsl:value-of select="@label"/> |
</a> |
</li> |
</xsl:for-each> |
</ul> |
</div> |
</xsl:if> |
</li> |
</xsl:template> |
</xsl:stylesheet> |
/impl/conf/directories/utils.xsl |
---|
31,8 → 31,11 |
<xsl:attribute name="href"> |
<xsl:choose> |
<xsl:when test="string(@absolute)='true'"> |
<xsl:value-of select="@url"/> |
</xsl:when> |
<xsl:value-of select="@url"/> |
</xsl:when> |
<xsl:when test="@proxy='local'"> |
<xsl:value-of select="$contextPath"/><xsl:value-of select="@url"/> |
</xsl:when> |
<xsl:when test="@idPrefixSize"><xsl:value-of select="$dirStartPath"/><xsl:apply-templates select=".." mode="linkParent"/>/<xsl:value-of select="substring(@id,@idPrefixSize+1)"/></xsl:when> |
<xsl:when test="@remoteExtensionRoot='true'"><xsl:value-of select="$dirStartPath"/><xsl:apply-templates select=".." mode="linkParent"/>/<xsl:value-of select="@id"/></xsl:when> |
<xsl:otherwise><xsl:value-of select="$dirStartPath"/><xsl:apply-templates select=".." mode="linkParent"/>/<xsl:value-of select="@id"/><xsl:value-of select="@url"/></xsl:otherwise> |
/impl/conf/directories/topMenus.xml |
---|
23,13 → 23,13 |
</leaf> |
<leaf node="true" label="Ensino" id="ensino"> |
<leaf node="false" id="lecenciaturas" label="Licenciaturas" absolute="false" url="/courses?type=L" proxy="local"/> |
<leaf node="false" id="mestrados" label="Mestrados" absolute="false" url="/courses?type=M" proxy="local"/> |
<leaf node="false" id="accurtadur" label="Acções de Formação de Curta Duração" absolute="false" url="/courses?type=C" proxy="local"/> |
<leaf node="false" id="cet" label="CET" absolute="false" url="/courses?type=E" proxy="local"/> |
<leaf node="false" id="favanc" label="Formações Avançadas" absolute="false" url="/courses?type=A" proxy="local"/> |
<leaf node="false" id="pgrad" label="Pós Graduação" absolute="false" url="/courses?type=P" proxy="local"/> |
<leaf node="false" id="tesp" label="TeSP" absolute="false" url="/courses?type=T" proxy="local"/> |
<leaf node="false" id="lecenciaturas" label="Licenciaturas" absolute="false" url="/courses.do?type=L" proxy="local"/> |
<leaf node="false" id="mestrados" label="Mestrados" absolute="false" url="/courses.do?type=M" proxy="local"/> |
<leaf node="false" id="accurtadur" label="Acções de Formação de Curta Duração" absolute="false" url="/courses.do?type=C" proxy="local"/> |
<leaf node="false" id="cet" label="CET" absolute="false" url="/courses.do?type=E" proxy="local"/> |
<leaf node="false" id="favanc" label="Formações Avançadas" absolute="false" url="/courses.do?type=A" proxy="local"/> |
<leaf node="false" id="pgrad" label="Pós Graduação" absolute="false" url="/courses.do?type=P" proxy="local"/> |
<leaf node="false" id="tesp" label="TeSP" absolute="false" url="/courses.do?type=T" proxy="local"/> |
</leaf> |
<leaf node="true" label="I&D" id="ied"> |
/impl/conf/berserk/sd.xml |
---|
895,6 → 895,18 |
</service> |
<service> |
<name>LoadCourseUnitInEvaluationBySigesCodes</name> |
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitsBySigesCodesService</implementationClass> |
<description>Load course old units</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>loadUnitInEvaluation</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
</filterChains> |
</service> |
<service> |
<name>LoadCourseUnitsBySigesCodesSemestreLastYear</name> |
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitsBySigesCodesService</implementationClass> |
<description>Load a unique unit by sigescode, semestre and course code</description> |
2137,6 → 2149,32 |
</filterChains> |
</service> |
<service> |
<name>LoadJobServiceTask</name> |
<implementationClass>pt.estgp.estgweb.services.jobs.JobServiceInterfaces</implementationClass> |
<description>Save a Directory Object</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>loadJobServiceTask</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>LoadJobServiceTaskScheduler</name> |
<implementationClass>pt.estgp.estgweb.services.jobs.JobServiceInterfaces</implementationClass> |
<description>Save a Directory Object</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>loadJobServiceTaskScheduler</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
</serviceDefinitions> |
/impl/src/java/jomm/dao/impl/AbstractDao.java |
---|
13,9 → 13,7 |
import pt.estgp.estgweb.domain.DomainSerializableObject; |
import java.io.Serializable; |
import java.util.Collection; |
import java.util.Date; |
import java.util.List; |
import java.util.*; |
import static org.hibernate.criterion.Restrictions.eq; |
258,6 → 256,8 |
} |
} |
/** |
* Returns results as a page. |
* <p/> |
903,4 → 903,38 |
return criteria; |
} |
/** |
* return deleted objects |
* @param incompleteList |
* @param persistentList |
* @param comparator |
* @return |
*/ |
public List<CLAZZ> deleteMissing(Collection<CLAZZ> incompleteList, Collection<CLAZZ> persistentList,Comparator<CLAZZ> comparator) |
{ |
List<CLAZZ> deletedObjects = new ArrayList<CLAZZ>(); |
//Remover apagados |
Iterator<CLAZZ> iterPersistentObjects = persistentList.iterator(); |
while(iterPersistentObjects.hasNext()) |
{ |
CLAZZ persisitentObj = iterPersistentObjects.next(); |
boolean found = false; |
for(CLAZZ incompleteListObj: incompleteList) |
{ |
if(comparator.compare(incompleteListObj,persisitentObj)==0) |
{ |
found = true; |
break; |
} |
} |
if(!found) |
{ |
iterPersistentObjects.remove(); |
deletedObjects.add(persisitentObj); |
delete(persisitentObj); |
} |
} |
return deletedObjects; |
} |
} |
/impl/src/java/pt/estgp/estgweb/utils/StringsUtils.java |
---|
25,6 → 25,21 |
return roles; |
} |
public static String getSerialLongs(List<Long> longs, String separator) |
{ |
if (longs == null) |
return null; |
String roles = null; |
for (Long role : longs) |
{ |
if (roles == null) |
roles = "" + role; |
else |
roles += separator + role; |
} |
return roles; |
} |
public static List<String> getStringsFromSerial(String stringsSerial, String separator) |
{ |
if (stringsSerial == null) |
38,6 → 53,19 |
return l; |
} |
public static List<Long> getLongsFromSerial(String stringsSerial, String separator) |
{ |
if (stringsSerial == null) |
return null; |
String[] roles = stringsSerial.split(separator); |
List<Long> l = new ArrayList<Long>(); |
for (String role : roles) |
{ |
l.add(Long.parseLong(role)); |
} |
return l; |
} |
//TODO ARRANJAR ISTO |
public static String getNormalizedName(String nome) |
{ |
/impl/src/java/pt/estgp/estgweb/utils/DynamicArrayList.java |
---|
New file |
0,0 → 1,70 |
package pt.estgp.estgweb.utils; |
import java.util.ArrayList; |
/** |
* Created by jorgemachado on 16/11/15. |
*/ |
public class DynamicArrayList<E> extends ArrayList<E> |
{ |
Class referenceClass; |
public DynamicArrayList(Class clazz) |
{ |
this.referenceClass = clazz; |
} |
@Override |
public E get(int i) { |
if(i >= size()) |
{ |
while(i >= size()) |
{ |
try { |
super.add((E)referenceClass.newInstance()); |
} catch (InstantiationException e) { |
e.printStackTrace(); |
} catch (IllegalAccessException e) { |
e.printStackTrace(); |
} |
} |
} |
return super.get(i); |
} |
@Override |
public void add(int i, E obj) { |
if(i >= size()) |
{ |
while(i >= size()) |
{ |
try { |
super.add((E)referenceClass.newInstance()); |
} catch (InstantiationException e) { |
e.printStackTrace(); |
} catch (IllegalAccessException e) { |
e.printStackTrace(); |
} |
} |
} |
super.add(i,obj); |
} |
@Override |
public E set(int i, E obj) { |
if(i >= size()) |
{ |
while(i >= size()) |
{ |
try { |
super.add((E)referenceClass.newInstance()); |
} catch (InstantiationException e) { |
e.printStackTrace(); |
} catch (IllegalAccessException e) { |
e.printStackTrace(); |
} |
} |
} |
return super.set(i,obj); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/courseunits/courseunitsummaries.fo.xsl |
---|
88,7 → 88,7 |
<fo:table-row> |
<fo:table-cell padding-top="3pt"> |
<fo:block > |
Revisto a <xsl:value-of select="//updateDate"/> por <xsl:value-of select="$revisor"/> / Página <fo:page-number/> |
Atualizado a <xsl:value-of select="//updateDate"/> / Página <fo:page-number/> |
</fo:block> |
<fo:block font-size="5pt"> |
ESTG.SA.xxxx.1 |
114,6 → 114,7 |
<xsl:template match="/courseUnit"> |
<fo:table table-layout="fixed" border="0px solid black" margin="0.5em" font-size="8.5pt"> |
<xsl:call-template name="gen_cols"/> |
<fo:table-body text-align="left"> |
226,7 → 227,7 |
</fo:table-row> |
<xsl:if test="//summary"> |
<xsl:if test="//summary[./numeroAula != '-1']"> |
<fo:table-row background-color="#FFF" color="#000" padding="0"> |
<fo:table-cell padding="0" number-columns-spanned="2" border-right="1px solid gray" border-bottom="1px solid gray" display-align="center" > |
242,68 → 243,70 |
<fo:table-body> |
<xsl:for-each select="//summary"> |
<xsl:for-each select="//summary[./numeroAula != '-1']"> |
<xsl:sort select="dataAula" case-order="lower-first"/> |
<fo:table-row> |
<fo:table-cell border-bottom="0.5px solid gray"> |
<fo:block font-size="8pt"> |
<xsl:value-of select="./dataAula"/> |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="0.5px solid gray" > |
<fo:block font-size="8pt" > |
Aula <xsl:value-of select="./numeroAula"/> |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="0.5px solid gray" > |
<fo:block font-size="8pt"> |
<xsl:value-of select="./tipoAula"/> |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="0.5px solid gray"> |
<fo:block font-size="8pt"> |
<xsl:value-of select="./numeroHoras"/> Horas |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="0.5px solid gray" > |
<fo:block font-size="8pt"> |
<xsl:value-of select="./alunosPresentes"/> Alunos |
</fo:block> |
</fo:table-cell> |
</fo:table-row> |
<fo:table-row> |
<fo:table-cell border-bottom="0.5px solid gray"> |
<fo:block font-size="8pt"> |
<xsl:value-of select="./dataAula"/> |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="0.5px solid gray" > |
<fo:block font-size="8pt" > |
Aula <xsl:value-of select="./numeroAula"/> |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="0.5px solid gray" > |
<fo:block font-size="8pt"> |
<xsl:value-of select="./tipoAula"/> |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="0.5px solid gray"> |
<fo:block font-size="8pt"> |
<xsl:value-of select="./numeroHoras"/> Horas |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="0.5px solid gray" > |
<fo:block font-size="8pt"> |
<xsl:value-of select="./alunosPresentes"/> Alunos |
</fo:block> |
</fo:table-cell> |
<fo:table-row> |
<fo:table-cell border-bottom="0.5px solid gray"> |
<fo:block font-size="8pt"> |
Titulo |
</fo:block> |
</fo:table-cell> |
<fo:table-cell number-columns-spanned="4" border-bottom="0.5px solid gray"> |
<fo:block font-size="8pt"> |
<xsl:value-of select="./titulo"/> |
</fo:block> |
</fo:table-cell> |
</fo:table-row> |
</fo:table-row> |
<fo:table-row> |
<fo:table-cell border-bottom="1px solid gray" > |
<fo:block font-size="8pt"> |
Descrição |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="1px solid gray" number-columns-spanned="4"> |
<fo:block font-size="8pt"> |
<xsl:value-of select="./descricao"/> |
</fo:block> |
</fo:table-cell> |
</fo:table-row> |
<fo:table-row> |
<fo:table-cell border-bottom="0.5px solid gray"> |
<fo:block font-size="8pt"> |
Titulo |
</fo:block> |
</fo:table-cell> |
<fo:table-cell number-columns-spanned="4" border-bottom="0.5px solid gray"> |
<fo:block font-size="8pt"> |
<xsl:value-of select="./titulo"/> |
</fo:block> |
</fo:table-cell> |
</fo:table-row> |
<fo:table-row height='20px'> |
<fo:table-cell number-columns-spanned="5" > |
<fo:block ></fo:block> |
</fo:table-cell> |
</fo:table-row> |
<fo:table-row> |
<fo:table-cell border-bottom="1px solid gray" > |
<fo:block font-size="8pt"> |
Descrição |
</fo:block> |
</fo:table-cell> |
<fo:table-cell border-bottom="1px solid gray" number-columns-spanned="4"> |
<fo:block font-size="8pt"> |
<xsl:value-of select="./descricao"/> |
</fo:block> |
</fo:table-cell> |
</fo:table-row> |
<fo:table-row height='20px'> |
<fo:table-cell number-columns-spanned="5" > |
<fo:block ></fo:block> |
</fo:table-cell> |
</fo:table-row> |
</xsl:for-each> |
</fo:table-body> |
</fo:table> |
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadCourseUnitsBySigesCodesService.java |
---|
1,19 → 1,15 |
package pt.estgp.estgweb.services.courseunits; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.CourseUnit; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.views.CourseUnitSummaryView; |
import pt.estgp.estgweb.domain.views.AnnouncementView; |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.RepositoryFile; |
import pt.estgp.estgweb.domain.CourseUnitSummary; |
import pt.estgp.estgweb.domain.CourseUnit; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import org.apache.log4j.Logger; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.ArrayList; |
import java.util.List; |
import java.util.ArrayList; |
/** |
* @author Jorge Machado |
40,6 → 36,16 |
return courseUnitViews; |
} |
public CourseUnitView loadUnitInEvaluation(String code, String courseCode, UserSession userSession) throws ServiceException { |
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().loadUnitInEvaluationBySigesCodes(code, courseCode); |
if(c == null) |
return null; |
return new CourseUnitView(c); |
} |
public CourseUnitView loadLastYear(String code, String courseCode, String semestre, UserSession userSession) throws ServiceException { |
if(semestre.equals("S3")) |
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadSubscribedUnitsCurrentYearService.java |
---|
5,6 → 5,7 |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.ArrayList; |
import java.util.List; |
/** |
18,6 → 19,7 |
{ |
Student t = DaoFactory.getStudentDaoImpl().load(studentId); |
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadSubscribedImportYearUnits(studentId, DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()); |
units = new ArrayList<CourseUnit>(units); |
for(CourseUnit c: units) |
{ |
c.getName(); |
30,6 → 32,7 |
{ |
Student t = DaoFactory.getStudentDaoImpl().load(studentId); |
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadSubscribedImportYearUnits(studentId, year); |
units = new ArrayList<CourseUnit>(units); |
for(CourseUnit c: units) |
{ |
c.getName(); |
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportGradesService.java |
---|
38,7 → 38,7 |
private static final Logger logger = Logger.getLogger(ImportGradesService.class); |
private static final int MAX_COMMIT = 100; |
private static final int MAX_COMMIT = 20; |
private HashMap<Long,List<Long>> newGrades = new HashMap<Long,List<Long>>(); |
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java |
---|
38,7 → 38,7 |
{ |
private static final Logger logger = Logger.getLogger(ImportStudentsService.class); |
private static final int MAX_COMMIT = 100; |
private static final int MAX_COMMIT = 20; |
int studentsMerged = 0; |
int studentsNew = 0; |
101,9 → 101,8 |
if (i++ > MAX_COMMIT) |
{ |
i = 0; |
setProgress((int) (((float)alunosFound)/((float)codigos.size())*100.0f)); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
setProgress((int) (((float) alunosFound) / ((float) codigos.size()) * 100.0f)); |
commitPartially(); |
} |
Aluno alunoSiges = service.getSiGesWEBSoap().getAlunoInscrito(c, new BigDecimal(DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode()), year); |
233,6 → 232,8 |
return logMessages; |
} |
/** |
* Envio de Notificação aos operadores do CI |
* @param subject |
485,10 → 486,11 |
public static final String JOB_importYear_KEY = "JOB_importYear_KEY"; |
@Override |
protected void runJobServiceTask() throws Throwable { |
protected ILogMessages runJobServiceTask() throws Throwable { |
String importYear = (String) getParametersMap().get(JOB_importYear_KEY).getObject(); |
run(importYear); |
String importYear = getParametersMap().get(JOB_importYear_KEY).getObject(); |
ILogMessages messages = run(importYear); |
return messages; |
} |
/impl/src/java/pt/estgp/estgweb/services/sigesimports/SincronizeLastYearCourseUnitProgramsService.java |
---|
80,8 → 80,10 |
serviceLogInfo(logMessages.getLastMessage()); |
int i = 0; |
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadYear(year); |
for (CourseUnit cu: units) |
List<Long> units = DaoFactory.getCourseUnitDaoImpl().loadIds(year); |
//List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadYear(year); |
for (Long cuId: units) |
// for (CourseUnit cu: units) |
{ |
SaveCourseUnitProgram service = new SaveCourseUnitProgram(); |
92,10 → 94,9 |
{ |
i = 0; |
setProgress((int) (((float)foundTotal)/((float)units.size())*100.0f)); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
serviceLogInfo("Commiting database"); |
commitPartially(); |
} |
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(cuId); |
if(cu.getCourseUnitProgram() == null || !cloneOnlyNews) |
{ |
183,6 → 184,7 |
//cu.setValidProgram(true); |
} |
setProgress(100); |
logger.info("######################################"); |
serviceLogInfo("######################################"); |
logger.info("######################################"); |
263,7 → 265,6 |
logger.info("terminating programs sincronization"); |
serviceLogInfo("terminating programs sincronization"); |
logMessages.addMessage(new DefaultLogMessage("courseunitprograms.sincronization.terminating", LogMessageTypeEnum.INFO)); |
setProgress(100); |
return logMessages; |
} |
399,13 → 400,16 |
* @throws Throwable |
*/ |
@Override |
protected void runJobServiceTask() throws Throwable |
protected ILogMessages runJobServiceTask() throws Throwable |
{ |
String importYear = (String) getParametersMap().get(JOB_importYear_KEY).getObject(); |
Boolean cloneOnlyNews = (Boolean) getParametersMap().get(JOB_cloneOnlyNews_KEY).getObject(); |
Boolean generateAllPdfs = (Boolean) getParametersMap().get(JOB_generateAllPdfs_KEY).getObject(); |
Boolean validate = (Boolean) getParametersMap().get(JOB_validate_KEY).getObject(); |
run(importYear,cloneOnlyNews,generateAllPdfs,validate); |
String importYear = getParametersMap().get(JOB_importYear_KEY).getObject(); |
String cloneOnlyNewsStr = getParametersMap().get(JOB_cloneOnlyNews_KEY).getObject(); |
String generateAllPdfsStr = getParametersMap().get(JOB_generateAllPdfs_KEY).getObject(); |
String validateStr = getParametersMap().get(JOB_validate_KEY).getObject(); |
boolean cloneOnlyNews = cloneOnlyNewsStr != null && Boolean.parseBoolean(cloneOnlyNewsStr); |
boolean generateAllPdfs = generateAllPdfsStr != null && Boolean.parseBoolean(generateAllPdfsStr); |
boolean validate = validateStr != null && Boolean.parseBoolean(validateStr); |
return run(importYear,cloneOnlyNews,generateAllPdfs,validate); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java |
---|
40,7 → 40,7 |
private static final Logger logger = Logger.getLogger(ImportTeachersService.class); |
private static final int MAX_COMMIT = 100; |
private static final int MAX_COMMIT = 20; |
//int studentsMerged = 0; |
int teachersNew = 0; |
103,8 → 103,7 |
{ |
i = 0; |
setProgress((int) (((float)teachersFound)/((float)codigos.size())*100.0f)); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
commitPartially(); |
} |
572,11 → 571,10 |
} |
@Override |
protected void runJobServiceTask() throws Throwable { |
protected ILogMessages runJobServiceTask() throws Throwable { |
String importYear = (String) getParametersMap().get(JOB_importYear_KEY).getObject(); |
run(importYear); |
String importYear = getParametersMap().get(JOB_importYear_KEY).getObject(); |
return run(importYear); |
} |
public static final String JOB_importYear_KEY = "JOB_importYear_KEY"; |
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java |
---|
271,10 → 271,11 |
public static final String JOB_importYear_KEY = "JOB_importYear_KEY"; |
@Override |
protected void runJobServiceTask() throws Throwable { |
protected ILogMessages runJobServiceTask() throws Throwable { |
String importYear = (String) getParametersMap().get(JOB_importYear_KEY).getObject(); |
run(importYear); |
String importYear = getParametersMap().get(JOB_importYear_KEY).getObject(); |
ILogMessages messages = run(importYear); |
return messages; |
} |
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportSumariesJson.java |
---|
79,6 → 79,7 |
int countUnits = 0; |
int countUnitsOk = 0; |
int countUnitsZeroSummaries = 0; |
int countUnitsZeroValidSummaries = 0; |
List<String> unitsZeroSummaries = new ArrayList<String>(); |
List<String> unitsFailed = new ArrayList<String>(); |
115,9 → 116,7 |
{ |
i = 0; |
setProgress((int) (((float)countUnits)/((float)cUs.size())*100.0f)); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
serviceLogInfo("Commiting database"); |
commitPartially(); |
} |
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().load(cId); |
nowCode = c.getCode(); |
163,6 → 162,7 |
JSONObject summariesJson = new JSONObject(); |
JSONArray summaries = new JSONArray(); |
summariesJson.put("summary",summaries); |
int summariesValid = 0; |
for(Aula aula: arrayOfAulas.getAula()) |
{ |
188,12 → 188,23 |
s.setNumeroHoras("" + aula.getNumeroCelulas().intValue()); |
summaries.put(s.getJson()); |
courseUnitSummaries.add(s); |
if(s.getNumeroAula() > 0) |
summariesValid++; |
} |
if(courseUnitSummaries.size() == 0) |
{ |
countUnitsZeroSummaries++; |
unitsZeroSummaries.add(c.getCode()); |
logger.info("ZERO SUMARIES unit:" + c.getCode() + " course: " + c.getCourseCode()); |
serviceLogInfo("ZERO SUMARIES unit:" + c.getCode() + " course: " + c.getCourseCode()); |
} |
else if(summariesValid == 0) |
{ |
countUnitsZeroValidSummaries++; |
unitsZeroSummaries.add(c.getCode()); |
logger.info("ZERO VALID SUMARIES unit:" + c.getCode() + " course: " + c.getCourseCode()); |
serviceLogInfo("ZERO VALID SUMARIES unit:" + c.getCode() + " course: " + c.getCourseCode()); |
} |
else |
{ |
countUnitsOk++; |
249,6 → 260,7 |
serviceLogInfo("UNITS FAILED: " + (countUnits - countUnitsZeroSummaries - countUnitsOk)); |
serviceLogInfo("UNITS IMPORT OK: " + countUnitsOk); |
serviceLogInfo("UNITS ZERO SUMARIES: " + countUnitsZeroSummaries); |
serviceLogInfo("UNITS ZERO VALID SUMARIES: " + countUnitsZeroValidSummaries); |
serviceLogInfo("#######################################"); |
logger.info("#######################################"); |
257,6 → 269,7 |
logger.info("UNITS FAILED: " + (countUnits - countUnitsZeroSummaries - countUnitsOk)); |
logger.info("UNITS IMPORT OK: " + countUnitsOk); |
logger.info("UNITS ZERO SUMARIES: " + countUnitsZeroSummaries); |
logger.info("UNITS ZERO VALID SUMARIES: " + countUnitsZeroValidSummaries); |
logger.info("#######################################"); |
return logMessages; |
} |
386,14 → 399,15 |
public static final String JOB_sendEmail_KEY = "JOB_sendEmail_KEY"; |
@Override |
protected void runJobServiceTask() throws Throwable { |
protected ILogMessages runJobServiceTask() throws Throwable { |
String importYear = (String) getParametersMap().get(JOB_importYear_KEY).getObject(); |
String semestre = (String) getParametersMap().get(JOB_semestre_KEY).getObject(); |
Boolean sendIonline = (Boolean) getParametersMap().get(JOB_sendIonline_KEY).getObject(); |
Boolean sendEmail = (Boolean) getParametersMap().get(JOB_sendEmail_KEY).getObject(); |
run(importYear,semestre,sendIonline,sendEmail); |
String importYear = getParametersMap().get(JOB_importYear_KEY).getObject(); |
String semestre = getParametersMap().get(JOB_semestre_KEY).getObject(); |
String sendIonlineStr = getParametersMap().get(JOB_sendIonline_KEY).getObject(); |
String sendEmailStr = getParametersMap().get(JOB_sendEmail_KEY).getObject(); |
boolean sendIonline = sendIonlineStr != null && Boolean.parseBoolean(sendIonlineStr); |
boolean sendEmail = sendEmailStr != null && Boolean.parseBoolean(sendEmailStr); |
return run(importYear,semestre,sendIonline,sendEmail); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/ftpservices/FtpService.java |
---|
69,13 → 69,13 |
{ |
} |
else if(passwordCode != null) |
else |
{ |
logger.info("using saved password"); |
password = DesUtils.getInstance().decrypt(passwordCode); |
//System.out.println("SAVEDPASS:" + password); |
} |
else if(userSession.getUser().getPop3password() != null && userSession.getUser().getPop3password().length() > 0) |
/*else if(userSession.getUser().getPop3password() != null && userSession.getUser().getPop3password().length() > 0) |
{ |
logger.info("trying pop 3 password"); |
password = DesUtils.getInstance().decrypt(userSession.getUser().getPop3password()); |
84,7 → 84,7 |
{ |
logger.info("trying last used login password"); |
password = DesUtils.getInstance().decrypt(userSession.getUser().getPassword()); |
} |
}*/ |
username = ftpRequestForm.getUsername(); |
if(username == null || username.trim().length() == 0) |
username = userSession.getUsername(); |
/impl/src/java/pt/estgp/estgweb/services/jobs/JobServiceInterfaces.java |
---|
New file |
0,0 → 1,38 |
package pt.estgp.estgweb.services.jobs; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.JobServiceTaskImpl; |
import pt.estgp.estgweb.domain.JobServiceTaskSchedulerImpl; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
/** |
* Created by jorgemachado on 02/11/15. |
* |
* Todos os serviços podem correr em BackGround através da chamada ao JobRunner |
* desde que implementem esta interface |
*/ |
public class JobServiceInterfaces implements IService |
{ |
/*Class regular log*/ |
private static final Logger logger = Logger.getLogger("JobServiceTaskLog"); |
public JobServiceTaskSchedulerImpl loadJobServiceTaskScheduler(Long id, UserSession sess) |
{ |
JobServiceTaskSchedulerImpl job = (JobServiceTaskSchedulerImpl) DaoFactory.getJobServiceTaskSchedulerDaoImpl().get(id); |
if(job.getLastJobServiceTask() != null) |
job.getLastJobServiceTask().getId(); |
return job; |
} |
public JobServiceTaskImpl loadJobServiceTask(Long id, UserSession sess) |
{ |
JobServiceTaskImpl job = (JobServiceTaskImpl) DaoFactory.getJobServiceTaskDaoImpl().get(id); |
return job; |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/jobs/JobScheduleService.java |
---|
106,6 → 106,9 |
public static void main(String[] args) throws SQLException |
{ |
AbstractDao.getCurrentSession().beginTransaction(); |
scheduleImportSummaries(); |
scheduleImportTeachers(); |
scheduleImportCourses(); |
scheduleImportStudents(); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
} |
130,10 → 133,10 |
param2.setDescription("desc2"); |
param3.setDescription("desc3"); |
param4.setDescription("desc4"); |
param1.setObject(new Boolean(false)); |
param2.setObject(new Boolean(true)); |
param1.setObject("false"); |
param2.setObject("true"); |
param3.setObject("201415"); |
param4.setObject(new Boolean(true)); |
param4.setObject("true"); |
Set<JobServiceTaskSchedulerParameter> params = new HashSet<JobServiceTaskSchedulerParameter>(); |
params.add(param1); |
params.add(param2); |
142,7 → 145,7 |
jobServiceTaskScheduler.setServiceTaskSchedulerParameters(params); |
jobServiceTaskScheduler.setDaily(true); |
jobServiceTaskScheduler.setMonthday(GregorianCalendar.NOVEMBER); |
jobServiceTaskScheduler.setMonthday(1); |
jobServiceTaskScheduler.setWeekday(GregorianCalendar.MONDAY); |
jobServiceTaskScheduler.setHour(01); |
jobServiceTaskScheduler.setMinute(0); |
181,10 → 184,10 |
param2.setDescription("desc2"); |
param3.setDescription("desc3"); |
param4.setDescription("desc4"); |
param1.setObject("201415"); |
param1.setObject("201516"); |
param2.setObject("S1"); |
param3.setObject(new Boolean(false)); |
param4.setObject(new Boolean(false)); |
param3.setObject("false"); |
param4.setObject("true"); |
Set<JobServiceTaskSchedulerParameter> params = new HashSet<JobServiceTaskSchedulerParameter>(); |
params.add(param1); |
params.add(param2); |
193,9 → 196,11 |
jobServiceTaskScheduler.setServiceTaskSchedulerParameters(params); |
jobServiceTaskScheduler.setDaily(true); |
jobServiceTaskScheduler.setMonthday(GregorianCalendar.NOVEMBER); |
jobServiceTaskScheduler.setWeekly(false); |
jobServiceTaskScheduler.setMonthly(false); |
jobServiceTaskScheduler.setMonthday(1); |
jobServiceTaskScheduler.setWeekday(GregorianCalendar.MONDAY); |
jobServiceTaskScheduler.setHour(01); |
jobServiceTaskScheduler.setHour(05); |
jobServiceTaskScheduler.setMinute(0); |
jobServiceTaskScheduler.setSecond(0); |
jobServiceTaskScheduler.setTargetService(ImportSumariesJson.class.getName()); |
207,7 → 212,7 |
} |
}; |
sess.setUser(u); |
jobServiceTaskScheduler.setDescription("TESTE Sumaries"); |
jobServiceTaskScheduler.setDescription("Sumarios"); |
new JobScheduleService().createOrUpdateScheduleServiceTask(jobServiceTaskScheduler,sess); |
} |
226,7 → 231,8 |
jobServiceTaskScheduler.setServiceTaskSchedulerParameters(params); |
jobServiceTaskScheduler.setDaily(true); |
jobServiceTaskScheduler.setMonthday(GregorianCalendar.NOVEMBER); |
jobServiceTaskScheduler.setMonthly(false); |
jobServiceTaskScheduler.setMonthday(1); |
jobServiceTaskScheduler.setWeekday(GregorianCalendar.MONDAY); |
jobServiceTaskScheduler.setHour(01); |
jobServiceTaskScheduler.setMinute(0); |
240,7 → 246,7 |
} |
}; |
sess.setUser(u); |
jobServiceTaskScheduler.setDescription("TESTE Courses"); |
jobServiceTaskScheduler.setDescription("Cursos"); |
new JobScheduleService().createOrUpdateScheduleServiceTask(jobServiceTaskScheduler,sess); |
} |
261,9 → 267,11 |
jobServiceTaskScheduler.setServiceTaskSchedulerParameters(params); |
jobServiceTaskScheduler.setDaily(true); |
jobServiceTaskScheduler.setMonthly(false); |
jobServiceTaskScheduler.setWeekly(false); |
jobServiceTaskScheduler.setMonthday(GregorianCalendar.NOVEMBER); |
jobServiceTaskScheduler.setWeekday(GregorianCalendar.MONDAY); |
jobServiceTaskScheduler.setHour(01); |
jobServiceTaskScheduler.setHour(03); |
jobServiceTaskScheduler.setMinute(0); |
jobServiceTaskScheduler.setSecond(0); |
jobServiceTaskScheduler.setTargetService(ImportStudentsService.class.getName()); |
275,7 → 283,7 |
} |
}; |
sess.setUser(u); |
jobServiceTaskScheduler.setDescription("TESTE Students"); |
jobServiceTaskScheduler.setDescription("Estudantes"); |
new JobScheduleService().createOrUpdateScheduleServiceTask(jobServiceTaskScheduler,sess); |
} |
294,9 → 302,11 |
jobServiceTaskScheduler.setServiceTaskSchedulerParameters(params); |
jobServiceTaskScheduler.setDaily(true); |
jobServiceTaskScheduler.setWeekly(false); |
jobServiceTaskScheduler.setMonthly(false); |
jobServiceTaskScheduler.setMonthday(GregorianCalendar.NOVEMBER); |
jobServiceTaskScheduler.setWeekday(GregorianCalendar.MONDAY); |
jobServiceTaskScheduler.setHour(01); |
jobServiceTaskScheduler.setHour(02); |
jobServiceTaskScheduler.setMinute(0); |
jobServiceTaskScheduler.setSecond(0); |
jobServiceTaskScheduler.setTargetService(ImportTeachersService.class.getName()); |
308,7 → 318,7 |
} |
}; |
sess.setUser(u); |
jobServiceTaskScheduler.setDescription("TESTE Teachers"); |
jobServiceTaskScheduler.setDescription("Professores"); |
new JobScheduleService().createOrUpdateScheduleServiceTask(jobServiceTaskScheduler,sess); |
} |
/impl/src/java/pt/estgp/estgweb/services/jobs/ServiceJob.java |
---|
1,5 → 1,6 |
package pt.estgp.estgweb.services.jobs; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.FileAppender; |
import org.apache.log4j.Logger; |
import org.apache.log4j.PatternLayout; |
7,6 → 8,7 |
import pt.estgp.estgweb.domain.JobServiceTask; |
import pt.estgp.estgweb.domain.JobServiceTaskImpl; |
import pt.estgp.estgweb.domain.JobServiceTaskParameter; |
import pt.estgp.estgweb.services.logresults.ILogMessages; |
import java.io.IOException; |
import java.util.*; |
97,10 → 99,16 |
jobServiceTask.setStatusEnum(JobServiceTaskImpl.JobStatus.STARTED); |
jobServiceTask.setServiceStartDate(new Date()); |
jobServiceTask.setServiceLastUpdateDate(new Date()); |
commitPartially(); |
try { |
//call the implementation of service this will update serviceLog and progress |
runJobServiceTask(); |
jobServiceTask.setStatusEnum(JobServiceTaskImpl.JobStatus.FINISHED); |
ILogMessages messages = runJobServiceTask(); |
if(messages.hasErrors()) |
jobServiceTask.setStatusEnum(JobServiceTaskImpl.JobStatus.FINISHED_ERRORS); |
else if(messages.hasWarnings()) |
jobServiceTask.setStatusEnum(JobServiceTaskImpl.JobStatus.FINISHED_WARNINGS); |
else |
jobServiceTask.setStatusEnum(JobServiceTaskImpl.JobStatus.FINISHED); |
jobServiceTask.setServiceLastUpdateDate(new Date()); |
jobServiceTask.setServiceFinishDate(new Date()); |
serviceLog.info("FINISHING SERVICE"); |
125,5 → 133,11 |
public void serviceLogFatal(String str, Throwable e){ if(jobServiceTask != null) serviceLog.fatal(str,e);} |
//Implemented in SubService to run the Job |
protected abstract void runJobServiceTask() throws Throwable; |
protected abstract ILogMessages runJobServiceTask() throws Throwable; |
protected void commitPartially() { |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
AbstractDao.getCurrentSession().update(jobServiceTask); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/jobs/JobDeamon.java |
---|
109,9 → 109,7 |
{ |
logger.info("Schedulling one job " + schedule.getTargetService() + " to run"); |
JobServiceTaskImpl jobServiceTask = DomainObjectFactory.createJobServiceTaskImpl(); |
DaoFactory.getJobServiceTaskDaoImpl().save(jobServiceTask); |
jobServiceTask.setStartDate(new Date()); |
DaoFactory.getJobServiceTaskDaoImpl().flush(); |
jobServiceTask.setTargetService(schedule.getTargetService()); |
jobServiceTask.setCreatedBy(schedule.getCreatedBy()); |
jobServiceTask.setExecuted(false); |
122,6 → 120,8 |
jobServiceTask.setRequestStop(false); |
jobServiceTask.setOwner(schedule.getCreatedBy()); |
jobServiceTask.setJobHandler(new SerializableNullJobHandler()); |
DaoFactory.getJobServiceTaskDaoImpl().save(jobServiceTask); |
schedule.setLastJobServiceTask(jobServiceTask); |
try { |
String filePath = Class.forName(schedule.getTargetService()).getSimpleName() + "-" + DatesUtils.getFormatedFileSystem(new Date()); |
jobServiceTask.setLogFilePath( filePath + ".log"); |
140,10 → 140,10 |
paramJob.setJobServiceTask(jobServiceTask); |
DaoFactory.getJobServiceTaskParameterDaoImpl().save(paramJob); |
} |
DaoFactory.getJobServiceTaskParameterDaoImpl().flush(); |
jobServiceTask.setServiceTaskParameters(paramsJob); |
DaoFactory.getJobServiceTaskDaoImpl().saveOrUpdate(jobServiceTask); |
//DaoFactory.getJobServiceTaskDaoImpl().saveOrUpdate(jobServiceTask); |
//a last schedule date e a hora a que foi marcado para correr a ultima vez |
//a partir do momento que e' agendado o trabalho ele vai correr portanto |
//e' esta a hora que se considera para a corrida |
/impl/src/java/pt/estgp/estgweb/services/logresults/impl/DefaultLogMessages.java |
---|
3,6 → 3,7 |
import pt.estgp.estgweb.domain.CourseUnitSummary; |
import pt.estgp.estgweb.services.logresults.ILogMessages; |
import pt.estgp.estgweb.services.logresults.ILogMessage; |
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum; |
import java.util.List; |
import java.util.ArrayList; |
40,6 → 41,26 |
return summaries; |
} |
@Override |
public boolean hasErrors() { |
if(logMessages == null) |
return false; |
for(ILogMessage m:logMessages) |
if(m.getType() == LogMessageTypeEnum.ERROR || m.getType() == LogMessageTypeEnum.FATAL) |
return true; |
return false; |
} |
@Override |
public boolean hasWarnings() { |
if(logMessages == null) |
return false; |
for(ILogMessage m:logMessages) |
if(m.getType() == LogMessageTypeEnum.WARNING) |
return true; |
return false; |
} |
public void setSummaries(List<CourseUnitSummary> summaries) { |
this.summaries = summaries; |
} |
/impl/src/java/pt/estgp/estgweb/services/logresults/ILogMessages.java |
---|
13,4 → 13,6 |
{ |
public List<ILogMessage> getLogMessages(); |
List<CourseUnitSummary> getSummaries(); |
public boolean hasErrors(); |
public boolean hasWarnings(); |
} |
/impl/src/java/pt/estgp/estgweb/services/directories/xsd/DynamicArrayList.java |
---|
File deleted |
/impl/src/java/pt/estgp/estgweb/services/directories/xsd/DirectoryImpl.java |
---|
1,5 → 1,7 |
package pt.estgp.estgweb.services.directories.xsd; |
import pt.estgp.estgweb.utils.DynamicArrayList; |
/** |
* Created by jorgemachado on 16/11/15. |
*/ |
/impl/src/java/pt/estgp/estgweb/services/directories/xsd/RightsTImpl.java |
---|
1,5 → 1,7 |
package pt.estgp.estgweb.services.directories.xsd; |
import pt.estgp.estgweb.utils.DynamicArrayList; |
/** |
* Created by jorgemachado on 16/11/15. |
*/ |
/impl/src/java/pt/estgp/estgweb/services/directories/xsd/GroupsDeclarationTImpl.java |
---|
1,5 → 1,7 |
package pt.estgp.estgweb.services.directories.xsd; |
import pt.estgp.estgweb.utils.DynamicArrayList; |
/** |
* Created by jorgemachado on 16/11/15. |
*/ |
/impl/src/java/pt/estgp/estgweb/services/directories/xsd/LeafTImpl.java |
---|
1,5 → 1,7 |
package pt.estgp.estgweb.services.directories.xsd; |
import pt.estgp.estgweb.utils.DynamicArrayList; |
import java.util.Iterator; |
import java.util.List; |
43,7 → 45,7 |
public static LeafT removeLeaf(LeafT l,String id) |
{ |
return removeLeafT(l.getLeaf(),id); |
return removeLeafT(l.getLeaf(), id); |
} |
public static LeafT findLeaf(LeafT l,String id) |
{ |
/impl/src/java/pt/estgp/estgweb/domain/StudentImpl.java |
---|
190,10 → 190,10 |
Object[] args = new Object[]{getId(),year}; |
cuYear = (List<CourseUnit>) sm.execute(null, "LoadSubscribedUnitsGivenYear", args, names); |
for(CourseUnit c: cuYear) |
{ |
cuYear.add(c); |
} |
if(cuYear != null) |
subscribedUnitsYear.put(year,cuYear); |
else |
subscribedUnitsYear.put(year,new ArrayList<CourseUnit>()); |
} |
catch (Throwable e) |
{ |
/impl/src/java/pt/estgp/estgweb/domain/views/JobServiceTaskSchedulerView.java |
---|
New file |
0,0 → 1,130 |
package pt.estgp.estgweb.domain.views; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.JobServiceTaskScheduler; |
import pt.estgp.estgweb.domain.JobServiceTaskSchedulerImpl; |
import pt.estgp.estgweb.domain.JobServiceTaskSchedulerParameter; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.utils.DynamicArrayList; |
import java.io.Serializable; |
import java.util.ArrayList; |
import java.util.Comparator; |
import java.util.Date; |
import java.util.List; |
/** |
* @author Jorge Machado |
* @date 2/Mar/2008 |
* @time 19:34:49 |
* @see pt.estgp.estgweb.domain.views |
*/ |
public class JobServiceTaskSchedulerView extends DomainObjectView |
{ |
private static Logger logger = Logger.getLogger(JobServiceTaskSchedulerView.class); |
JobServiceTaskSchedulerImpl jobServiceTaskScheduler; |
List<JobServiceTaskSchedulerParameter> parameters; |
@Override |
public Class getReferenceClass() { |
return JobServiceTaskScheduler.class; |
} |
@Override |
public Serializable getSerializable() |
{ |
return jobServiceTaskScheduler.getId(); |
} |
public JobServiceTaskSchedulerView() |
{ |
} |
public JobServiceTaskSchedulerView(JobServiceTaskSchedulerImpl jobServiceTaskScheduler) |
{ |
super(jobServiceTaskScheduler); |
init(jobServiceTaskScheduler); |
} |
public void init(JobServiceTaskSchedulerImpl jobServiceTaskScheduler) |
{ |
parameters = new ArrayList<JobServiceTaskSchedulerParameter>(); |
if(jobServiceTaskScheduler.getServiceTaskSchedulerParameters() != null) |
{ |
parameters.addAll(jobServiceTaskScheduler.getServiceTaskSchedulerParameters()); |
} |
} |
public void persistViewInObject(JobServiceTaskScheduler jobServiceTaskScheduler) |
{ |
jobServiceTaskScheduler.setDescription(this.jobServiceTaskScheduler.getDescription()); |
jobServiceTaskScheduler.setTargetService(this.jobServiceTaskScheduler.getTargetService()); |
jobServiceTaskScheduler.setWeekly(this.jobServiceTaskScheduler.isWeekly()); |
jobServiceTaskScheduler.setWeekday(this.jobServiceTaskScheduler.getWeekday()); |
jobServiceTaskScheduler.setDaily(this.jobServiceTaskScheduler.isDaily()); |
jobServiceTaskScheduler.setHour(this.jobServiceTaskScheduler.getHour()); |
jobServiceTaskScheduler.setMinute(this.jobServiceTaskScheduler.getMinute()); |
jobServiceTaskScheduler.setSecond(this.jobServiceTaskScheduler.getSecond()); |
jobServiceTaskScheduler.setMonthly(this.jobServiceTaskScheduler.isMonthly()); |
jobServiceTaskScheduler.setMonthday(this.jobServiceTaskScheduler.getMonthday()); |
jobServiceTaskScheduler.setNow(this.jobServiceTaskScheduler.isNow()); |
//Remover apagados |
List<JobServiceTaskSchedulerParameter> deleted = DaoFactory.getJobServiceTaskSchedulerParameterDaoImpl() |
.deleteMissing( |
this.parameters, |
jobServiceTaskScheduler.getServiceTaskSchedulerParameters(), |
new Comparator<JobServiceTaskSchedulerParameter>() |
{ |
@Override |
public int compare(JobServiceTaskSchedulerParameter j1, JobServiceTaskSchedulerParameter j2) { |
return (int) (j1.getId() - j2.getId()); |
} |
}); |
for(JobServiceTaskSchedulerParameter d: deleted) |
d.setJobServiceTaskScheduler(null); |
for(JobServiceTaskSchedulerParameter newParam: parameters) |
{ |
if(newParam.getId() <= 0) |
{ |
newParam.setJobServiceTaskScheduler(jobServiceTaskScheduler); |
jobServiceTaskScheduler.getServiceTaskSchedulerParameters().add(newParam); |
newParam.setSaveDate(new Date()); |
DaoFactory.getJobServiceTaskSchedulerParameterDaoImpl().save(newParam); |
} |
else |
{ |
JobServiceTaskSchedulerParameter persistentParam = DaoFactory.getJobServiceTaskSchedulerParameterDaoImpl().load(newParam.getId()); |
persistentParam.setDescription(newParam.getDescription()); |
persistentParam.setName(newParam.getName()); |
persistentParam.setObject(newParam.getObject()); |
} |
} |
} |
public JobServiceTaskSchedulerImpl getJobServiceTaskScheduler() { |
return jobServiceTaskScheduler; |
} |
public void setJobServiceTaskScheduler(JobServiceTaskSchedulerImpl jobServiceTaskScheduler) { |
this.jobServiceTaskScheduler = jobServiceTaskScheduler; |
} |
public List<JobServiceTaskSchedulerParameter> getParameters() { |
if(parameters == null) |
parameters = new DynamicArrayList<JobServiceTaskSchedulerParameter>(JobServiceTaskSchedulerParameter.class); |
return parameters; |
} |
public void setParameters(List<JobServiceTaskSchedulerParameter> parameters) { |
this.parameters = parameters; |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java |
---|
25,6 → 25,7 |
LoadCourseUnitAnnouncements loadCourseUnitAnnouncements = new LoadCourseUnitAnnouncements(); |
private long id; |
private String name; |
private String code; |
55,6 → 56,7 |
private String evaluationStreamId; |
private boolean validProgram; |
private UserView validatorUser; |
private boolean teacherCompleteEvaluation = false; |
private boolean validEvaluation = false; |
private int programSize; |
private String extension; |
65,6 → 67,10 |
private CourseView courseView; |
private String interfaceImportYear = null; |
private boolean evaluationOpenByAdmin = false; |
public Class getReferenceClass() |
{ |
return CourseUnitImpl.class; |
115,6 → 121,9 |
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog, boolean validatorUser) |
{ |
this.interfaceImportYear = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear(); |
this.pathIntranet = courseUnit.getPathIntranet(); |
this.normalizedName = courseUnit.getNormalizedName(); |
this.courseUnit = courseUnit; |
126,6 → 135,7 |
this.courseCode = courseUnit.getCourseCode(); |
this.summariesJson = courseUnit.getSummariesJson(); |
this.sumariosPathFileIntranet = ((CourseUnitImpl)courseUnit).getSummariosPathFileIntranet(); |
this.evaluationOpenByAdmin = courseUnit.isEvaluationOpenByAdmin(); //nao tem persistencia propria tem de ser feito num serviço |
// this.objectives = courseUnit.getObjectives(); DEPRECATED |
if(courseUnit.getCourseUnitProgram() !=null && courseUnit.getCourseUnitProgram().getCourseUnitProgramPart2() != null) |
148,6 → 158,7 |
{ |
evaluationStreamId = courseUnit.getEvaluationStreamId(); |
validEvaluation = courseUnit.getCourseUnitEvaluation().isClosed(); |
teacherCompleteEvaluation = courseUnit.getCourseUnitEvaluation().isTeacherComplete(); |
} |
// if(courseUnit.getBlog() != null) |
193,6 → 204,9 |
return evaluationStreamId; |
} |
public boolean isTeacherCompleteEvaluation() { |
return teacherCompleteEvaluation; |
} |
public String getSumariosPathFileIntranet() { |
return sumariosPathFileIntranet; |
504,11 → 518,13 |
CourseUnitSummaryView view = new CourseUnitSummaryView(sum); |
summariesFromJson.add(view); |
} |
else |
else if(importYear.equals(interfaceImportYear)) |
//so verifica atrasados para unidades do ano corrente a titulo informativo |
{ |
CourseUnitSummaryView view = new CourseUnitSummaryView(sum); |
if(view.getNumber() < 0 && view.getOriginalDate().getTime() < System.currentTimeMillis()) |
if(view.getNumber() < 0 && view.getOriginalDate().getTime() + 48*60*60*1000 < System.currentTimeMillis()) |
{ |
//System.out.println(view.getNumber() + " " + view.getDate() + " " + view.getOriginalDate()); |
lateSummaries++; |
lateSummariesDates.add(view.getDate()); |
642,6 → 658,15 |
return summaries; |
} |
public boolean isEvaluationOpenByAdmin() { |
return evaluationOpenByAdmin; |
} |
public void setEvaluationOpenByAdmin(boolean evaluationOpenByAdmin) { |
this.evaluationOpenByAdmin = evaluationOpenByAdmin; |
} |
public String getTeachersSnipet() |
{ |
String sep = ""; |
/impl/src/java/pt/estgp/estgweb/domain/JobServiceTaskImpl.java |
---|
43,6 → 43,8 |
PENDING, |
STARTED, |
FINISHED, |
FINISHED_ERRORS, |
FINISHED_WARNINGS, |
FAILED, |
UNKNOWN_ERROR; |
56,6 → 58,10 |
return STARTED; |
if(status.equals(FINISHED.name())) |
return FINISHED; |
if(status.equals(FINISHED_ERRORS.name())) |
return FINISHED_ERRORS; |
if(status.equals(FINISHED_WARNINGS.name())) |
return FINISHED_WARNINGS; |
if(status.equals(FAILED.name())) |
return FAILED; |
return UNKNOWN_ERROR; |
74,4 → 80,21 |
setStatus(statusEnum.name()); |
} |
public String getServiceLastUpdateDateFormated() { |
if(getServiceLastUpdateDate() == null) |
return ""; |
return pt.estgp.estgweb.web.utils.DatesUtils.getStringFromDateWithMinutesAndSeconds(getServiceLastUpdateDate()); |
} |
public String getServiceFinishDateFormated() { |
if(getServiceFinishDate() == null) |
return ""; |
return pt.estgp.estgweb.web.utils.DatesUtils.getStringFromDateWithMinutesAndSeconds(getServiceFinishDate()); |
} |
public String getServiceStartDateFormated() { |
if(getServiceStartDate() == null) |
return ""; |
return pt.estgp.estgweb.web.utils.DatesUtils.getStringFromDateWithMinutesAndSeconds(getServiceStartDate()); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/JobServiceTaskDaoImpl.java |
---|
1,5 → 1,9 |
package pt.estgp.estgweb.domain.dao.impl; |
import org.hibernate.criterion.Order; |
import java.util.List; |
/** |
* @author Jorge Machado |
* @date 28/Fev/2008 |
15,7 → 19,12 |
return (JobServiceTaskDaoImpl) myInstance; |
} |
public List<JobServiceTaskDaoImpl> findLastNJobTasks(int max) |
{ |
return createCriteria().addOrder(Order.desc("serviceStartDate")).setMaxResults(max).list(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/ConfigurationDaoImpl.java |
---|
2,6 → 2,7 |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.utils.StringsUtils; |
import java.util.Date; |
import java.util.List; |
121,6 → 122,24 |
return load().getCourseUnitEvaluationActiveYear(); |
} |
public List<String> getCourseUnitEvaluationActiveDegrees() |
{ |
String degrees = load().getCourseUnitEvaluationActiveDegrees(); |
if(degrees == null || degrees.trim().length() == 0) |
return null; |
List<String> degreesList = StringsUtils.getStringsFromSerial(degrees,";"); |
return degreesList; |
} |
public List<Long> getCourseUnitEvaluationActiveCourseIds() |
{ |
String courseIds = load().getCourseUnitEvaluationActiveCourseIds(); |
if(courseIds == null || courseIds.trim().length() == 0) |
return null; |
List<Long> courseIdsListLongs = StringsUtils.getLongsFromSerial(courseIds,";"); |
return courseIdsListLongs; |
} |
public String getCourseUnitEvaluationActiveYearCreateTransaction() |
{ |
getCurrentSession().beginTransaction(); |
129,12 → 148,40 |
return activeYear; |
} |
public List<String> getCourseUnitEvaluationActiveDegreesCreateTransaction() |
{ |
getCurrentSession().beginTransaction(); |
List<String> activeDegrees = getCourseUnitEvaluationActiveDegrees(); |
getCurrentSession().getTransaction().commit(); |
return activeDegrees; |
} |
public List<Long> getCourseUnitEvaluationActiveCourseIdsCreateTransaction() |
{ |
getCurrentSession().beginTransaction(); |
List<Long> activeCourseIds = getCourseUnitEvaluationActiveCourseIds(); |
getCurrentSession().getTransaction().commit(); |
return activeCourseIds; |
} |
public void updateCourseUnitEvaluationActiveYear(String activeYear) |
{ |
Configuration config = load(); |
config.setCourseUnitEvaluationActiveYear(activeYear); |
} |
public void updateCourseUnitEvaluationActiveDegrees(List<String> activeDegrees) |
{ |
Configuration config = load(); |
config.setCourseUnitEvaluationActiveDegrees(StringsUtils.getSerialStrings(activeDegrees,";")); |
} |
public void updateCourseUnitEvaluationActiveCourseIds(List<Long> activeCourseIds) |
{ |
Configuration config = load(); |
config.setCourseUnitEvaluationActiveCourseIds(StringsUtils.getSerialLongs(activeCourseIds,";")); |
} |
public void updateCourseUnitEvaluationActiveYearCreateTransaction(String activeYear) |
{ |
getCurrentSession().beginTransaction(); |
142,8 → 189,69 |
getCurrentSession().getTransaction().commit(); |
} |
public void updateCourseUnitEvaluationActiveDegreesCreateTransaction(List<String> activeDegrees) |
{ |
getCurrentSession().beginTransaction(); |
updateCourseUnitEvaluationActiveDegrees(activeDegrees); |
getCurrentSession().getTransaction().commit(); |
} |
public void updateCourseUnitEvaluationActiveCourseIdsCreateTransaction(List<Long> activeCourseIds) |
{ |
getCurrentSession().beginTransaction(); |
updateCourseUnitEvaluationActiveCourseIds(activeCourseIds); |
getCurrentSession().getTransaction().commit(); |
} |
/** |
* Return if the course id or the degree together with import year is active |
* or if the unit is specially opened for edition |
* @param courseUnitId |
* @return |
*/ |
public boolean isCourseUniEvaluationActivePeriodInTransaction(long courseUnitId) |
{ |
getCurrentSession().beginTransaction(); |
String activeYear = getCourseUnitEvaluationActiveYear(); |
List<String> activeDegrees = getCourseUnitEvaluationActiveDegrees(); |
List<Long> activeCourseIds = getCourseUnitEvaluationActiveCourseIds(); |
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId); |
boolean isActiveYear = activeYear != null && cu.getImportYear().equals(activeYear); |
boolean isActiveDegree = activeDegrees!=null && activeDegrees.contains(cu.getCourse().getDegree()); |
boolean isActiveCourseId = activeCourseIds!=null && activeCourseIds.contains(cu.getCourse().getId()); |
boolean activePeriod = |
cu.isEvaluationOpenByAdmin() || |
(isActiveYear && (isActiveCourseId || isActiveDegree)); |
getCurrentSession().getTransaction().commit(); |
return activePeriod; |
} |
/** |
* Return if the course or the degree ant import year is active |
* @param courseUnitId |
* @return |
*/ |
public boolean isCourseUniEvaluationRegularActivePeriodInTransaction(long courseUnitId) |
{ |
getCurrentSession().beginTransaction(); |
String activeYear = getCourseUnitEvaluationActiveYear(); |
List<String> activeDegrees = getCourseUnitEvaluationActiveDegrees(); |
List<Long> activeCourseIds = getCourseUnitEvaluationActiveCourseIds(); |
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId); |
boolean isActiveYear = activeYear != null && cu.getImportYear().equals(activeYear); |
boolean isActiveDegree = activeDegrees!=null && activeDegrees.contains(cu.getCourse().getDegree()); |
boolean isActiveCourseId = activeCourseIds!=null && activeCourseIds.contains(cu.getCourse().getId()); |
boolean activePeriod = (isActiveYear && (isActiveCourseId || isActiveDegree)); |
getCurrentSession().getTransaction().commit(); |
return activePeriod; |
} |
public String getSigesWebServicesWsdl() |
{ |
return load().getSigesWebServicesWsdl(); |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java |
---|
80,16 → 80,19 |
public List<CourseUnit> loadSubscribedImportYearUnits(long studentId, String importYear) |
{ |
return createCriteria().add(eq("importYear", importYear)) |
return createCriteria() |
.createAlias("students", "st") |
.add(eq("st.id", studentId)).addOrder(Order.asc("name")).list(); |
.add(eq("st.id", studentId)) |
.add(eq("importYear", importYear)) |
.addOrder(Order.asc("name")) |
.list(); |
} |
public List<CourseUnit> loadSubscribedImportYearSemestreUnits(long studentId, String importYear, String semestre) |
{ |
Criteria c =createCriteria() |
.add(eq("importYear", importYear)) |
.createAlias("students", "st") |
.add(eq("st.id", studentId)); |
.createAlias("students", "st") |
.add(eq("st.id", studentId)) |
.add(eq("importYear", importYear)); |
if(semestre != null) |
c.add(eq("semestre", semestre)); |
return c.addOrder(Order.asc("name")).list(); |
265,6 → 268,61 |
.list(); |
} |
/** |
* Metodo usado para carregar unidades de anos anteriores que possam estar em edição |
* para mostrar na página da unidade |
* |
* Este metodo nao serve para mais nada, nao é usado nas Tarefas da Home |
* @param sigesCode |
* @param courseCode |
* @return |
*/ |
public CourseUnit loadUnitInEvaluationBySigesCodes(String sigesCode, String courseCode) |
{ |
String activeImportYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
Criterion crtDegrees = getCourseUnitActiveDegreeCourseIdsCriterion(activeImportYear); |
if(crtDegrees == null) |
{ |
//Nao ha graus nem cursos portanto o ano não interessa |
//o ano deve ser usado para abrir graus ou cursos senao nao |
//abre nada |
crtDegrees = eq("evaluationOpenByAdmin",true); |
} |
else |
{ |
crtDegrees = and(eq("importYear", activeImportYear),crtDegrees); |
crtDegrees = or(eq("evaluationOpenByAdmin",true),crtDegrees); |
} |
List<CourseUnit> cus = (List<CourseUnit>) createCriteria() |
.createAlias("course","c") |
.createAlias("courseUnitEvaluation","ce") |
.add(eq("code", sigesCode)) |
.add(eq("courseCode", courseCode)) |
.add(crtDegrees) |
.add(eq("ce.closed",false)) |
.list(); |
List<CourseUnit> cusNull = (List<CourseUnit>) createCriteria() |
.createAlias("course","c") |
.add(eq("code", sigesCode)) |
.add(eq("courseCode", courseCode)) |
.add(crtDegrees) |
.add(isNull("courseUnitEvaluation")) |
.list(); |
cus.addAll(cusNull); |
if(cus != null && cus.size() > 1) |
{ |
logger.warn("Mais do que uma unidade do mesmo codigo em avaliacao curricular, e suposto haver apenas uma, verificar logica aplicacional"); |
} |
else if(cus != null && cus.size() > 0) |
{ |
return cus.get(0); |
} |
return null; |
} |
public List<CourseUnit> loadCourseUnits(long courseId, String semestre, String year, boolean withTeacher, boolean withNoTeacher) |
{ |
Criteria c = createCriteria(); |
491,9 → 549,6 |
public List<CourseMissingValidationEvaluation> loadMissingEvaluationValidate(UserSession userSession) |
{ |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
if(activeYear == null) |
return new ArrayList<CourseMissingValidationEvaluation>(); |
List<CourseMissingValidationEvaluation> result = new ArrayList<CourseMissingValidationEvaluation>(); |
List<Course> courses = DaoFactory.getCourseDaoImpl().findAll(); |
for(Course course: courses) |
518,49 → 573,97 |
public List<CourseUnit> loadMissingEvaluationValidateGivenCourse(long courseId) |
{ |
if(DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear()==null) |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear); |
if(degreesCrit == null) |
return new ArrayList<CourseUnit>(); |
return createCriteria() |
.createAlias("course", "c") |
.createAlias("courseUnitEvaluation", "ce") |
.add(eq("c.id", courseId)) |
.add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear())) |
//.add(ge("importYear", "201415"))//FirstYear where there was configurations |
.add(eq("importYear", activeYear)) |
.add(degreesCrit) |
.add((eq("ce.closed", false))) |
.add((eq("ce.teacherComplete", true))) |
.list(); |
} |
/** |
* Devolve um criteio OR para todos os cursos de grau pertencente à lista de graus |
* ou pertencete à lista de cursoIds |
* @return |
*/ |
private Criterion getCourseUnitActiveDegreeCourseIdsCriterion(String activeYear) |
{ |
List<String> activeDegrees = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveDegrees(); |
List<Long> activeCourseIds = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveCourseIds(); |
boolean activeDegreesOff = activeDegrees == null || activeDegrees.size() == 0; |
boolean activeCourseIdsOff = activeCourseIds == null || activeCourseIds.size() == 0; |
if(activeYear == null || (activeDegreesOff && activeCourseIdsOff)) |
return null; |
Criterion crit = null; |
if(activeDegrees != null) |
for(String degree: activeDegrees) |
{ |
if(crit == null) |
crit = eq("c.degree",degree); |
else |
crit = or(crit,eq("c.degree",degree)); |
} |
if(activeCourseIds != null) |
for(Long courseId: activeCourseIds) |
{ |
if(crit == null) |
crit = eq("c.id",courseId); |
else |
crit = or(crit,eq("c.id",courseId)); |
} |
return crit; |
} |
public List<CourseUnit> loadTeacherUnitsMissingEvaluation(UserSession userSession) |
{ |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
if(activeYear == null) |
Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear); |
if(degreesCrit == null) |
return new ArrayList<CourseUnit>(); |
List<CourseUnit> nulls = |
createCriteria() |
.createAlias("teachers","t") |
.add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear())) |
.createAlias("course", "c") |
.createAlias("teachers", "t") |
.add(eq("importYear", activeYear)) |
//.add(not(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))) |
//.add(ge("importYear", "201415" )) |
//.add(isNull("courseUnitEvaluation")) |
//todo novo testar |
.add(eq("t.id", userSession.getUser().getId())) |
.add(degreesCrit) |
.add(isNull("courseUnitEvaluation")) |
.list(); |
List<CourseUnit> teacherCompleteFalse = |
createCriteria() |
.createAlias("course", "c") |
.createAlias("courseUnitEvaluation", "ce") |
.createAlias("teachers","t") |
.add(eq("t.id", userSession.getUser().getId())) |
.add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear())) |
.add(eq("importYear", activeYear)) |
//.add(not(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))) |
//.add(ge("importYear", "201415" )) |
//.add(isNull("courseUnitEvaluation")) |
//todo novo testar |
.add(eq("ce.teacherComplete",false)) |
.add(degreesCrit) |
.add(eq("ce.teacherComplete", false)) |
.list(); |
teacherCompleteFalse.addAll(nulls); |
return teacherCompleteFalse; |
569,9 → 672,6 |
public List<CourseMissingValidationEvaluation> loadMissingEvaluation(UserSession userSession) |
{ |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
if(activeYear == null) |
return new ArrayList<CourseMissingValidationEvaluation>(); |
List<CourseMissingValidationEvaluation> result = new ArrayList<CourseMissingValidationEvaluation>(); |
List<Course> courses = DaoFactory.getCourseDaoImpl().findAll(); |
for(Course course: courses) |
593,18 → 693,19 |
public List<CourseUnit> loadMissingEvaluation(long courseId) |
{ |
if(DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear()==null) |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear); |
if(degreesCrit == null) |
return new ArrayList<CourseUnit>(); |
List<CourseUnit> nulls = |
createCriteria() |
.createAlias("course", "c") |
.add(eq("c.id", courseId)) |
.add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear())) |
//.add(not(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))) |
//.add(ge("importYear", "201415" )) |
//.add(isNull("courseUnitEvaluation")) |
//todo novo testar |
.add(eq("importYear", activeYear)) |
.add(degreesCrit) |
.add(isNull("courseUnitEvaluation")) |
.list(); |
613,11 → 714,8 |
.createAlias("course", "c") |
.createAlias("courseUnitEvaluation", "ce") |
.add(eq("c.id", courseId)) |
.add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear())) |
//.add(not(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))) |
//.add(ge("importYear", "201415" )) |
//.add(isNull("courseUnitEvaluation")) |
//todo novo testar |
.add(degreesCrit) |
.add(eq("importYear", activeYear)) |
.add(eq("ce.teacherComplete", false)) |
.list(); |
teacherCompleteFalse.addAll(nulls); |
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java |
---|
345,4 → 345,7 |
} |
/impl/src/java/pt/estgp/estgweb/domain/JobServiceTaskSchedulerImpl.java |
---|
16,4 → 16,41 |
public Serializable getSerializable() { |
return getId(); |
} |
public String getWeekDayMsgKey() |
{ |
String dayOfTheWeek = ""; |
int i = getWeekday(); |
if(i == 2){ |
dayOfTheWeek = "Mon"; |
} else if (i==3){ |
dayOfTheWeek = "Tue"; |
} else if (i==4){ |
dayOfTheWeek = "Wed"; |
} else if (i==5){ |
dayOfTheWeek = "Thu"; |
} else if (i==6){ |
dayOfTheWeek = "Fri"; |
} else if (i==7){ |
dayOfTheWeek = "Sat"; |
} else if (i==1){ |
dayOfTheWeek = "Sun"; |
} |
return dayOfTheWeek; |
} |
public String getTypeMsgKey() |
{ |
if(isDaily()) |
return "dally"; |
else if(isMonthly()) |
return "monthly"; |
else if(isWeekly()) |
return "weekly"; |
else if(isNow()) |
return "now"; |
else |
return "unknown"; |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/LogsServiceStream.java |
---|
New file |
0,0 → 1,120 |
package pt.estgp.estgweb.web; |
import jomm.utils.StreamsUtils; |
import org.apache.log4j.Logger; |
import org.json.JSONArray; |
import org.json.JSONException; |
import org.json.JSONObject; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServlet; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import java.io.*; |
/** |
* @author Fabio |
* @date 4/Abr/2008 |
* @time 11:03:00 |
* @see pt.estgp.estgweb.web |
*/ |
public class LogsServiceStream extends HttpServlet |
{ |
private static final Logger logger = Logger.getLogger(LogsServiceStream.class); |
public void doGet(HttpServletRequest request, HttpServletResponse response) |
throws ServletException, IOException |
{ |
String logRequired = request.getPathInfo(); |
logRequired = logRequired.substring(1); |
String logFile = pt.estgp.estgweb.Globals.JOB_SERVICES_LOG_DIR + java.io.File.separator + logRequired; |
java.io.File f = new java.io.File(logFile); |
if(!f.exists()) |
{ |
response.sendError(404); |
return; |
} |
String line = request.getParameter("l"); |
if(line != null) |
{ |
processJson(f,line,request,response); |
return; |
} |
try |
{ |
response.setContentType("text/plain"); |
OutputStream out = response.getOutputStream(); |
response.setContentLength((int) f.length()); |
StreamsUtils.inputStream2OutputStream(new FileInputStream(f),out); |
out.flush(); |
out.close(); |
} |
catch (Throwable e1) |
{ |
logger.error(e1 ); |
response.sendError(404); |
} |
} |
private void processJson(File f, String line, HttpServletRequest request, HttpServletResponse response) throws IOException { |
int l = Integer.parseInt(line); |
response.setContentType("application/json"); |
JSONObject obj = new JSONObject(); |
JSONArray lines = new JSONArray(); |
try { |
obj.put("lines",lines); |
obj.put("ok","ok"); |
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f),"UTF-8")); |
String readedLine; |
int i; |
boolean endReached = false; |
for(i = 0; i < l;i++) |
{ |
if(reader.readLine() == null) |
{ |
endReached = true; |
break; |
} |
} |
if(!endReached) |
{ |
while((readedLine = reader.readLine())!=null) |
{ |
lines.put(readedLine); |
} |
} |
String toWrite = obj.toString(); |
response.setCharacterEncoding("ISO-8859-1"); |
response.setContentLength(toWrite.length()); |
response.getOutputStream().print(toWrite); |
} |
catch (FileNotFoundException e) |
{ |
logger.error(e,e); |
response.sendError(500); |
} catch (JSONException e) { |
logger.error(e,e); |
response.sendError(500); |
} |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/utils/DatesUtils.java |
---|
1,13 → 1,12 |
package pt.estgp.estgweb.web.utils; |
import jomm.utils.MyCalendar; |
import org.apache.log4j.Logger; |
import java.text.SimpleDateFormat; |
import java.util.Calendar; |
import java.util.Date; |
import java.util.Calendar; |
import java.text.SimpleDateFormat; |
import org.apache.log4j.Logger; |
/** |
* @author Jorge Machado |
* @date 6/Mar/2008 |
19,6 → 18,7 |
private static final Logger logger = Logger.getLogger(DatesUtils.class); |
private static SimpleDateFormat hourMinute = new SimpleDateFormat("HH:mm"); |
private static SimpleDateFormat minutesSecondsDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); |
private static SimpleDateFormat filenameDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); |
private static SimpleDateFormat userViewDateFormat = new SimpleDateFormat("yyyy/MM/dd"); |
64,4 → 64,9 |
return null; |
} |
} |
public String getTimeHHMM(Date d) |
{ |
return hourMinute.format(d); |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/form/configuration/SchedulleTasksForm.java |
---|
New file |
0,0 → 1,55 |
package pt.estgp.estgweb.web.form.configuration; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.JobServiceTaskImpl; |
import pt.estgp.estgweb.domain.JobServiceTaskSchedulerImpl; |
import pt.estgp.estgweb.web.form.ApplicationForm; |
/** |
* @author Jorge Machado |
* @date 25/Jun/2008 |
* @see pt.estgp.estgweb.web.form.courses |
*/ |
public class SchedulleTasksForm extends ApplicationForm |
{ |
private JobServiceTaskSchedulerImpl jobScheduller; |
private JobServiceTaskImpl jobServiceTask; |
private Long id; |
public SchedulleTasksForm() |
{ |
} |
public JobServiceTaskSchedulerImpl getDirectory() |
{ |
if(jobScheduller == null) |
jobScheduller = DomainObjectFactory.createJobServiceTaskSchedulerImpl(); |
return jobScheduller; |
} |
public void setJobScheduller(JobServiceTaskSchedulerImpl jobScheduller) { |
this.jobScheduller = jobScheduller; |
} |
public Long getId() { |
return id; |
} |
public void setId(Long id) { |
this.id = id; |
} |
public JobServiceTaskImpl getJobServiceTask() |
{ |
return jobServiceTask; |
} |
public void setJobServiceTask(JobServiceTaskImpl jobServiceTask) { |
this.jobServiceTask = jobServiceTask; |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/controllers/configuration/SchedulerTasksController.java |
---|
New file |
0,0 → 1,378 |
package pt.estgp.estgweb.web.controllers.configuration; |
import org.apache.log4j.Logger; |
import org.apache.struts.action.ActionForm; |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMapping; |
import pt.estgp.estgweb.domain.JobServiceTaskImpl; |
import pt.estgp.estgweb.domain.JobServiceTaskSchedulerImpl; |
import pt.estgp.estgweb.services.directories.xsd.*; |
import pt.estgp.estgweb.web.UserSessionProxy; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.form.configuration.DirectoriesForm; |
import pt.estgp.estgweb.web.form.configuration.SchedulleTasksForm; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import java.util.Iterator; |
/** |
* @author Jorge Machado |
* @date 26/Fev/2008 |
* @time 18:01:54 |
* @see pt.estgp.estgweb.web |
*/ |
public class SchedulerTasksController extends ApplicationDispatchController |
{ |
private static final Logger logger = Logger.getLogger(SchedulerTasksController.class); |
public ActionForward load(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("ci")) |
{ |
return mapping.findForward("error401"); |
} |
SchedulleTasksForm sf = (SchedulleTasksForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{sf.getId()}; |
try |
{ |
JobServiceTaskSchedulerImpl d = (JobServiceTaskSchedulerImpl) sm.execute(RequestUtils.getRequester(request, response), "LoadJobServiceTaskScheduler", args, names); |
sf.setJobScheduller(d); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
throw e; |
} |
return mapping.findForward("task"); |
} |
public ActionForward loadLog(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("ci")) |
{ |
return mapping.findForward("error401"); |
} |
SchedulleTasksForm sf = (SchedulleTasksForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{sf.getId()}; |
try |
{ |
JobServiceTaskImpl j = (JobServiceTaskImpl) sm.execute(RequestUtils.getRequester(request, response), "LoadJobServiceTask", args, names); |
sf.setJobServiceTask(j); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
throw e; |
} |
if(request.getParameter("from")!=null) |
return mapping.findForward("taskLogfrom" + request.getParameter("from")); |
else |
return mapping.findForward("taskLog"); |
} |
public ActionForward addLeaf(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
String idParent = df.getId(); |
LeafT leaf = LeafTImpl.findLeaf(df.getDirectory(), idParent); |
if(leaf == null) |
{ |
addError(request,"directories.leaf.not.found",idParent); |
return mapping.findForward("directories"); |
} |
addMessage(request,"directories.add.leaf",idParent); |
leaf.getLeaf().add(new LeafTImpl()); |
return mapping.findForward("directory"); |
} |
public ActionForward refresh(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
addMessage(request, "directories.refresh"); |
return mapping.findForward("directory"); |
} |
public ActionForward save(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable { |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{df.getDirectory()}; |
try { |
sm.execute(RequestUtils.getRequester(request, response), "SaveDirectoryService", args, names); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
throw e; |
} |
addMessage(request, "directories.saved"); |
return mapping.findForward("directories"); |
} |
public ActionForward cancel(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
addMessage(request, "directories.canceled"); |
return mapping.findForward("directories"); |
} |
public ActionForward removeLeaf(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
String idParent = df.getId(); |
LeafT leaf = LeafTImpl.removeLeaf(df.getDirectory(), idParent); |
if(leaf == null) |
{ |
addError(request,"directories.leaf.not.found",idParent); |
return mapping.findForward("directories"); |
} |
addMessage(request, "directories.removed.leaf", idParent); |
leaf.getLeaf().add(new LeafTImpl()); |
return mapping.findForward("directory"); |
} |
public ActionForward addRight(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
String idParent = df.getId(); |
LeafT leaf = LeafTImpl.findLeaf(df.getDirectory(), idParent); |
if(leaf == null) |
{ |
addError(request,"directories.leaf.not.found",idParent); |
return mapping.findForward("directories"); |
} |
leaf.getRights().getRight().add(new RightImpl()); |
addMessage(request, "directories.add.right", idParent); |
return mapping.findForward("directory"); |
} |
public ActionForward removeRight(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
String idParent = df.getId(); |
LeafT leaf = LeafTImpl.findLeaf(df.getDirectory(), idParent); |
if(leaf == null) |
{ |
addError(request,"directories.leaf.not.found",idParent); |
return mapping.findForward("directories"); |
} |
Iterator<RightsT.Right> iter = leaf.getRights().getRight().iterator(); |
while(iter.hasNext()) |
{ |
RightsT.Right r =iter.next(); |
if(r.getName().equals(df.getRname()) && r.getTarget().equals(df.getRtarget()) && df.getRtype().equals(r.getType())) |
{ |
iter.remove(); |
} |
} |
addMessage(request, "directories.remove.right", df.getRname(),df.getRtarget(),df.getRtype()); |
return mapping.findForward("directory"); |
} |
public ActionForward addDirRight(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
String idParent = df.getId(); |
df.getDirectory().getRights().getRight().add(new RightImpl()); |
addMessage(request, "directories.add.right"); |
return mapping.findForward("directory"); |
} |
public ActionForward removeDirRight(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
Iterator<RightsT.Right> iter = df.getDirectory().getRights().getRight().iterator(); |
while(iter.hasNext()) |
{ |
RightsT.Right r =iter.next(); |
if(r.getName().equals(df.getRname()) && r.getTarget().equals(df.getRtarget()) && df.getRtype().equals(r.getType())) |
{ |
iter.remove(); |
} |
} |
addMessage(request, "directories.remove.right", df.getRname(),df.getRtarget(),df.getRtype()); |
return mapping.findForward("directory"); |
} |
public ActionForward addDirGroup(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
String idParent = df.getId(); |
df.getDirectory().getGroupsDeclaration().getGroup().add(new GroupImpl()); |
addMessage(request, "directories.add.group"); |
return mapping.findForward("directory"); |
} |
public ActionForward removeDirGroup(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services")) |
{ |
return mapping.findForward("error401"); |
} |
DirectoriesForm df = (DirectoriesForm) form; |
Iterator<GroupDeclarationT.Group> iter = df.getDirectory().getGroupsDeclaration().getGroup().iterator(); |
while(iter.hasNext()) |
{ |
GroupDeclarationT.Group g =iter.next(); |
if(g.getName().equals(df.getRname())) |
{ |
iter.remove(); |
} |
} |
addMessage(request, "directories.remove.group"); |
return mapping.findForward("directory"); |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/java/pt/estgp/estgweb/web/controllers/configuration/SchedullerTasksJson.java |
---|
New file |
0,0 → 1,138 |
package pt.estgp.estgweb.web.controllers.configuration; |
import com.owlike.genson.Genson; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.JobServiceTask; |
import pt.estgp.estgweb.domain.JobServiceTaskImpl; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.web.UserSessionProxy; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.*; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException; |
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServlet; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import java.io.IOException; |
import java.lang.reflect.InvocationTargetException; |
/** |
* Created by jorgemachado on 23/11/15. |
*/ |
public class SchedullerTasksJson extends HttpServlet |
{ |
private static final Logger logger = Logger.getLogger(SchedullerTasksJson.class); |
public void doGet(HttpServletRequest request, HttpServletResponse response) |
throws ServletException, IOException |
{ |
try { |
process(request,response); |
} catch (Throwable e) { |
response.sendError(500); |
logger.error(e,e); |
} |
} |
public void doPost(HttpServletRequest request, HttpServletResponse response) |
throws ServletException, IOException |
{ |
try { |
process(request,response); |
} catch (Throwable e) { |
response.sendError(500); |
logger.error(e, e); |
} |
} |
private void process(HttpServletRequest request, HttpServletResponse response) |
throws ServletException, IOException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { |
String service = request.getParameter("service"); |
this.getClass().getMethod(service,HttpServletRequest.class,HttpServletResponse.class) |
.invoke(this,request,response); |
} |
public void loadLog(HttpServletRequest request,HttpServletResponse response) throws IOException, IncompatibleFilterException, InvalidFilterException, ClassNotIFilterException, FilterRetrieveException, ServiceManagerException, InvalidFilterExpressionException { |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("ci")) |
{ |
response.sendError(403); |
return; |
} |
String id = request.getParameter("id"); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{Long.parseLong(id)}; |
try |
{ |
JobServiceTaskImpl j = (JobServiceTaskImpl) sm.execute(RequestUtils.getRequester(request, response), "LoadJobServiceTask", args, names); |
Genson genson = new Genson.Builder() |
.exclude(Object.class) |
.include("serviceStartDateFormated", JobServiceTask.class) |
.include("serviceLastUpdateDateFormated", JobServiceTask.class) |
.include("serviceFinishDateFormated", JobServiceTask.class) |
.include("status", JobServiceTask.class) |
.include("progress",JobServiceTask.class) |
.create(); |
String json = genson.serialize(j); |
response.setContentType("application/json"); |
response.setCharacterEncoding("ISO-8859-1"); |
response.setContentLength(json.length()); |
response.getOutputStream().print(json); |
} |
catch (FilterChainFailedException e) |
{ |
logger.error(e,e); |
response.sendError(500); |
} |
catch (Throwable e) |
{ |
logger.error(e,e); |
response.sendError(500); |
} |
} |
public static void main(String[] args2) throws IncompatibleFilterException, InvalidFilterException, ClassNotIFilterException, FilterRetrieveException, ServiceManagerException, InvalidFilterExpressionException { |
String id = "44365"; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{Long.parseLong(id)}; |
try |
{ |
AbstractDao.getCurrentSession().beginTransaction(); |
JobServiceTaskImpl j = (JobServiceTaskImpl) DaoFactory.getJobServiceTaskDaoImpl().get(new Long(44365)); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
Genson genson = new Genson.Builder() |
.exclude(Object.class) |
.include("serviceStartDate", JobServiceTask.class) |
.include("serviceLastUpdateDate", JobServiceTask.class) |
.include("serviceFinishDate", JobServiceTask.class) |
.include("status", JobServiceTask.class) |
.include("progress",JobServiceTask.class) |
.create(); |
String json = genson.serialize(j); |
System.out.println(""); |
} |
catch (Throwable e) |
{ |
logger.error(e,e); |
} |
} |
} |
/impl/src/doc/TarefasManutencaoBaco.docx |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |
/impl/src/doc/EMAIL_SEND_CONF.doc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:executable |
+ * |
Added: svn:mime-type |
+ application/octet-stream |
/impl/src/doc/FTPSoftwareLigacoesBaco.txt |
---|
New file |
0,0 → 1,38 |
Documentação FTP do BACO |
Existem vários pontos onde o BACO interage com o FTP |
- FTPService - Permite executar operações de Criação de Dirs, Deletes e Imports |
(Tem verificação de password default ou pessoal, usa a pessoal se existir e estiver isso indicado |
no servidor conf senao usa a default) |
- Se for de acesso estatico ou seja .use.default.credentials.to.updates.and.deletes=true |
usa a pass default, neste momento nao esta assim esta a false |
- Se o user tiver guardado a password em sessão na gestão das pastas é essa que é usada |
e colocada encriptada na password de sessao |
- Se nao é usada a de autenticação guardada em sessão encriptada |
- Se tudo falhar tenta |
- LayoutController - Carrega os NavPlaces para Memoria e processa o FTP com um Layout |
especifico que depois ira usar o DirWebProxy --> Ionline |
substituido mais tarde pelo DirWebProxy |
Se for de acesso estatico usa a default senao usa a de sessao do user que esta encriptada |
- DirWebProxy - Liga-se ao FTP nos serviços de directorio para extender os Leafs dos dirs |
server.use.default.credentials.to.read=false >>> usa a pessoal |
(Tem verificação de password default ou pessoal, usa a pessoal se existir e estiver isso indicado |
no servidor conf .use.default.credentials.to.read=false senao usa a default) |
- FTPFileProxy - Permite sacar um ficheiro por proxy com um LINK do BACO |
server.use.default.credentials.to.read=false >>> usa a pessoal |
(Tem verificação de password default ou pessoal, usa a pessoal se existir e estiver isso indicado |
no servidor conf .use.default.credentials.to.read=false senao usa a default) |
- AuthenticationService - Coloca a password em Sessao encriptada para usar mais tarde |
no caso de o servidor em foco nao ter as credenciais default para uso ou de leitura ou de escrita |
- web/user/ftpclient/ftlClient.jsp - Usado para apresentar o IONLINE na intranet e nas páginas das cadeiras |
não tem influencia directa pois é reencaminhado a partir do Layout Controller com o layout do FTP |
/impl/src/updates/version/release2015-11.txt |
---|
75,4 → 75,11 |
- todo lembrar de tirar o teacherComplete dos saves e meter os savez no JSP |
-todo meter os Roles de Validação de Cursos Configuraveis |
-todo meter os Roles de Validação de Cursos Configuraveis |
Trabalho a fazer Mais Tarde |
- Framework de Autorizações para processos |
Nomeadamente incluir Workflow de Tarefas e Responsáveis |
Incluir serviços de Verficicação de tarefas por realizar que deverá servir para |
validar as tentativas de modificação e de visualização de coisas a fazer |
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml |
---|
29,6 → 29,9 |
<property name="status" type="boolean" index="statusIndex" /> |
<property name="contentsGrants" type="string"/> |
<property name="evaluationStreamId" type="string" index="evaluationStreamIdIndex" /> |
<property name="evaluationOpenByAdmin" type="boolean" index="evaluationOpenByAdminIndex"> |
<column name="evaluationOpenByAdmin" default="false"/> |
</property> |
<property name="summariesJson" type="text"> |
<column name="summariesJson" sql-type="TEXT"/> |
</property> |
/impl/src/hbm/pt/estgp/estgweb/domain/Course.hbm.xml |
---|
20,7 → 20,7 |
<property name="institutionalCode" type="string"/> |
<property name="externalSiteServer" type="string"/> |
<property name="externalSitePath" type="string"/> |
<property name="degree" type="string"/> |
<property name="degree" type="string" index="degreeIndex"/> |
<property name="status" type="boolean"/> |
<property name="cacheWebDocument" type="text"> |
<column name="cacheWebDocument" sql-type="TEXT"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/Configuration.hbm.xml |
---|
29,6 → 29,8 |
<!--CourseUnitEvaluation formatImportYear--> |
<property name="courseUnitEvaluationActiveYear" type="string"/> |
<property name="courseUnitEvaluationActiveDegrees" type="string"/> |
<property name="courseUnitEvaluationActiveCourseIds" type="string"/> |
<many-to-one name="configurationGrades" class="pt.estgp.estgweb.domain.ConfigurationGrades" lazy="proxy" outer-join="false"/> |
<subclass name="pt.estgp.estgweb.domain.ConfigurationImpl" discriminator-value="ConfigurationImpl"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/Job.hbm.xml |
---|
40,7 → 40,7 |
<!--Control Target Service Parameters--> |
<property name="targetService" type="string"/> |
<many-to-one name="createdBy" class="pt.estgp.estgweb.domain.User" lazy="false" outer-join="true"/> |
<set name="serviceTaskParameters"><!--lazy="true">--> |
<set name="serviceTaskParameters" lazy="false"><!--lazy="true">--> |
<key column="job_id"/> |
<one-to-many class="pt.estgp.estgweb.domain.JobServiceTaskParameter"/> |
</set> |
72,8 → 72,9 |
<property name="minute" type="int"/> |
<property name="second" type="int"/> |
<property name="targetService" type="string"/> |
<many-to-one name="lastJobServiceTask" class="pt.estgp.estgweb.domain.JobServiceTask" lazy="false" outer-join="true"/> |
<many-to-one name="createdBy" class="pt.estgp.estgweb.domain.User" lazy="false" outer-join="true"/> |
<set name="serviceTaskSchedulerParameters" ><!--lazy="true">--> |
<set name="serviceTaskSchedulerParameters" lazy="false"><!--lazy="true">--> |
<key column="scheduler_id"/> |
<one-to-many class="pt.estgp.estgweb.domain.JobServiceTaskSchedulerParameter"/> |
</set> |
93,9 → 94,7 |
<property name="saveDate" type="timestamp"/> |
<property name="name" type="string"/> |
<property name="description" type="string"/> |
<property name="object" type="java.io.Serializable"> |
<column name="object" sql-type="LONGBLOB"/> |
</property> |
<property name="object" type="string"/> |
<subclass name="pt.estgp.estgweb.domain.JobServiceTaskParameter"> |
<meta attribute="extends">pt.estgp.estgweb.domain.JobParameter</meta> |
<meta attribute="scope-class">public abstract</meta> |
/impl/src/web/admin/configuration/directory.jsp |
---|
13,25 → 13,21 |
<jomm:messages/> |
<html:errors/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/variables.less"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/lavish-bootstrap.css"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/bootstrap/css/bootstrap.css"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/bootstrap/css/bootstrap-theme.css"/> |
<script src="<%=request.getContextPath()%>/js/jquerytables/jquery-2.1.4.min.js"></script> |
<script src="<%=request.getContextPath()%>/js/jquerytables/bootstrap/js/bootstrap.min.js"></script> |
<script type="text/javascript" language="JavaScript"> |
$(document).ready(function() |
{ |
$(".multilang").hide(); |
$(".advanced").hide(); |
$(".accessRights").hide(); |
if(document.location.href.indexOf("#")>0) |
{ |
$(".advanced").show(); |
//$(".accessRights").show(); |
} |
}); |
function setId(form,value) |
205,10 → 201,14 |
<div class="panel panel-default"> |
<div class="panel-heading"> |
Configurações de Menus <button type="button" class="btn btn-success" onclick="set(form,'refresh');form.submit();">Refrescar com as Alterações</button> <button type="button" style="float:right" class="btn btn-default" onclick="$('.multilang').toggle();return false;">Abrir Multilinguagem</button> <button style="float:right" type="button" class="btn btn-default" onclick="$('.advanced').toggle();return false;">Abrir Configurações Avançadas</button> |
Configurações de Menus |
<button type="button" class="btn btn-success" onclick="set(form,'refresh');form.submit();">Refrescar com as Alterações</button> |
<button type="button" style="float:right" class="btn btn-default" onclick="$('.multilang').toggle();return false;">Multilinguagem</button> |
<button type="button" style="float:right" class="btn btn-default" onclick="$('.advanced').toggle();return false;">Avançadas</button> |
<button type="button" style="float:right" class="btn btn-default" onclick="$('.accessRights').toggle();return false;">Direitos de Acesso</button> |
</div> |
<div class="panel-body"> |
<table class="dataTable tablesorter" style="width: 100%"> |
<table class="tablesorter dataTable" style="width: 100%"> |
<thead> |
<tr> |
<th style="width: 150px">ID</th> |
/impl/src/web/admin/configuration/taskLog.jsp |
---|
New file |
0,0 → 1,189 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.JobServiceTaskScheduler" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ page import="pt.estgp.estgweb.domain.JobServiceTaskImpl" %> |
<%@ page import="jomm.utils.MessageResources" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib prefix="hmlt" uri="http://jakarta.apache.org/struts/tags-html" %> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<jsp:useBean id="SchedulleTasksForm" type="pt.estgp.estgweb.web.form.configuration.SchedulleTasksForm" scope="request"/> |
<jomm:messages/> |
<html:errors/> |
<!--<jsp:include page="/layout/scriptsBootstrapSoft.jsp"/>--> |
<script> |
function updateStatus() |
{ |
$.getJSON( "<%=request.getContextPath()%>/admin/schedullerTasksJson?service=loadLog&id=${SchedulleTasksForm.jobServiceTask.id}", function( data ) { |
$("#serviceStartDateFormated").html(data.serviceStartDateFormated); |
$("#serviceLastUpdateDateFormated").html(data.serviceLastUpdateDateFormated); |
$("#serviceFinishDateFormated").html(data.serviceFinishDateFormated); |
<% |
for(JobServiceTaskImpl.JobStatus jS : JobServiceTaskImpl.JobStatus.values()) |
{ |
%> |
if(data.status == "<%=jS.name()%>") |
{ |
$("#status").html("<%=MessageResources.getInstance(request).getMessage("job.status."+jS.name())%>"); |
} |
<% |
} |
%> |
$("#status").attr("class", "jobStatus"+data.status);(data.status); |
$("#progress").html(data.progress + "%"); |
$(".progress-bar").css("width",data.progress + "%"); |
$(".progress-bar").attr("aria-valuenow",data.progress); |
$(".progress-bar").html(data.progress + "%"); |
if(data.status == "STARTED" || data.status == "PENDDING") |
setTimeout("updateStatus()",2000); |
}); |
} |
$(document).ready(function(){ |
updateStatus(); |
}); |
</script> |
<% |
%> |
<div class="container-fluid"> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="configuration.taskLog"/> |
</div> |
<div class="panel-body"> |
<table id="myTable" class="tablesorter"> |
<thead> |
<tr> |
<th><bean:message key="configuration.task"/></th> |
<th>Iniciado</th> |
<th>Última Atualização</th> |
<th>Terminado</th> |
<th>Criado por</th> |
<th>Parametros</th> |
<th>Status</th> |
<th>Progresso</th> |
</tr> |
</thead> |
<tbody> |
<tr> |
<td><bean:message key="targetService.${SchedulleTasksForm.jobServiceTask.targetService}"/></td> |
<td id="serviceStartDateFormated">${SchedulleTasksForm.jobServiceTask.serviceStartDateFormated}</td> |
<td id="serviceLastUpdateDateFormated">${SchedulleTasksForm.jobServiceTask.serviceLastUpdateDateFormated}</td> |
<td id="serviceFinishDateFormated">${SchedulleTasksForm.jobServiceTask.serviceFinishDateFormated}</td> |
<td>${SchedulleTasksForm.jobServiceTask.createdBy.username}</td> |
<td> |
<table cellspacing="0" cellspadding="0"> |
<logic:iterate id="taskParam" name="SchedulleTasksForm" property="jobServiceTask.serviceTaskParameters" type="pt.estgp.estgweb.domain.JobServiceTaskParameter"> |
<tr> |
<td> |
${taskParam.name} |
</td> |
<td> |
${taskParam.object} |
</td> |
</tr> |
</logic:iterate> |
</table> |
</td> |
<logic:notEmpty name="SchedulleTasksForm" property="jobServiceTask"> |
<td id="status" class="jobStatus${SchedulleTasksForm.jobServiceTask.status}"> |
<bean:message key="job.status.${SchedulleTasksForm.jobServiceTask.status}"/> |
</td> |
<td id="progress" style="text-align: right"> |
${SchedulleTasksForm.jobServiceTask.progress} % |
</td> |
</logic:notEmpty> |
<logic:empty name="SchedulleTasksForm" property="jobServiceTask"> |
<td></td> |
<td></td> |
</logic:empty> |
</tr> |
</tbody> |
</table> |
<div class="progress"> |
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="0" |
aria-valuemin="0" aria-valuemax="100" style="width:0%"> |
70% |
</div> |
</div> |
<div id="screens"></div> |
<a href="<%=request.getContextPath()%>/logServiceStream/${SchedulleTasksForm.jobServiceTask.logFilePath}">Download Log Completo</a> |
</div> |
</div> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/logtailer/logtail.js"></script> |
<style> |
.header { |
background-color: #ccc; |
padding: 0.5em; |
font-family: sans-serif; |
} |
.header .buttons { |
float: right; |
} |
.header h2 { |
margin: 0; |
} |
.screen { |
height: 200px; |
background-color: black; |
padding: 4px; |
overflow: auto; |
margin-bottom: 20px; |
} |
.screen div { |
padding: 0; |
margin: 0; |
border: 0; |
background-color: black; |
color: #bbb; |
line-height: 1.2; |
white-space: pre-wrap; |
font-family: monospace; |
} |
</style> |
<script> |
$(document).ready(function(){ |
// |
// this is a list of logs we want to tail on this page. make sure these |
// point to your own server instead of mine ;) |
// |
var logs = { |
'Messages' : '<%=request.getContextPath()%>/logServiceStream/${SchedulleTasksForm.jobServiceTask.logFilePath}' |
}; |
// |
// for each one we create a log_handler() object, passed it a title, |
// log URL and a parent element to put the log tailer into. |
// |
for (var i in logs){ |
new log_handler(i, logs[i], $('#screens')); |
} |
}); |
</script> |
</div> |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/admin/configuration/grades.jsp |
---|
15,13 → 15,7 |
<jomm:messages/> |
<html:errors/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/variables.less"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/lavish-bootstrap.css"/> |
<script src="<%=request.getContextPath()%>/js/jquerytables/jquery-2.1.4.min.js"></script> |
<script src="<%=request.getContextPath()%>/js/jquerytables/bootstrap/js/bootstrap.min.js"></script> |
<script type="text/javascript" language="JavaScript"> |
//TABLE SORTER |
32,8 → 26,9 |
// $('#myTable').tablesorter(); |
// $('#myTable2').tablesorter(); |
$("#myCollapse1").hide(); |
$("#myCollapse2").hide(); |
<% |
if(request.getAttribute("ConfigurationGradesForm")!=null) |
{ |
44,8 → 39,8 |
{ |
%> |
$("#myCollapse1").show(); |
$("#myCollapse1").collapse('show'); |
<% |
} |
else if(confForm.getOp() != null && ( |
53,7 → 48,7 |
confForm.getOp().equals("deleteEpocaAvaliacao"))) |
{ |
%> |
$("#myCollapse2").collapse('show'); |
$("#myCollapse2").show(); |
<% |
} |
} |
87,11 → 82,11 |
<button style="float: right" class="btn btn-success" onclick="this.form.op.value='addSatusEpoca';set(this.form,'addSatusEpoca');this.form.submit()">Adicionar Novo</button> |
<button class="btn btn-info" data-toggle="collapse" data-target="#myCollapse1" onclick="return false;">Status de Época</button> |
<button type="button" class="btn btn-info" onclick="$('#myCollapse1').toggle();">Status de Época</button> |
</div> |
<div id="myCollapse1" class="collapse"> |
<div id="myCollapse1"> |
<div class="panel-body"> |
<table id="myTable" class="dataTable tablesorter"> |
<thead> |
117,7 → 112,7 |
<nested:text property="obs" style="width:100%"></nested:text> |
</td> |
<td> |
<a href="<%=request.getContextPath()%>/user/grades.do?op=deleteStatusEpoca&dispatch=deleteStatusEpoca&id=${status.id}"><html:img page="/imgs/delete.gif"/></a> |
<a class="btn btn-danger btn-sm" href="<%=request.getContextPath()%>/user/grades.do?op=deleteStatusEpoca&dispatch=deleteStatusEpoca&id=${status.id}"><span class="glyphicon glyphicon-remove"></span></a> |
</td> |
</tr> |
</nested:iterate> |
137,9 → 132,9 |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<button style="float:right" class="btn btn-success" onclick="this.form.op.value='addEpocaAvaliacao';set(this.form,'addEpocaAvaliacao');this.form.action+'#epocas';set(this.form,'addEpocaAvaliacao');this.form.submit()">Adicionar Novo</button> |
<button class="btn btn-info" data-toggle="collapse" data-target="#myCollapse2" onclick="return false;">Épocas de Avaliação</button> |
<button type="button" class="btn btn-info" onclick="$('#myCollapse2').toggle();">Épocas de Avaliação</button> |
</div> |
<div id="myCollapse2" class="collapse"> |
<div id="myCollapse2" > |
<div class="panel-body"> |
<table id="myTable2" class="dataTable tablesorter"> |
<thead> |
169,7 → 164,7 |
<nested:text property="obs" style="width:100%"></nested:text> |
</td> |
<td> |
<a href="<%=request.getContextPath()%>/user/grades.do?op=deleteEpocaAvaliacao&dispatch=deleteEpocaAvaliacao&id=${status.id}#epocas"><html:img page="/imgs/delete.gif"/></a> |
<a class="btn btn-danger btn-sm" href="<%=request.getContextPath()%>/user/grades.do?op=deleteEpocaAvaliacao&dispatch=deleteEpocaAvaliacao&id=${status.id}#epocas"><span class="glyphicon glyphicon-remove"></span></a> |
</td> |
</tr> |
</nested:iterate> |
/impl/src/web/admin/configuration/tasks.jsp |
---|
New file |
0,0 → 1,114 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.JobServiceTaskScheduler" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib prefix="hmlt" uri="http://jakarta.apache.org/struts/tags-html" %> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<jomm:messages/> |
<html:errors/> |
<!--<jsp:include page="/layout/scriptsBootstrapSoft.jsp"/>--> |
<% |
AbstractDao.getCurrentSession().beginTransaction(); |
List<JobServiceTaskScheduler> schedulledTasks = DaoFactory.getJobServiceTaskSchedulerDaoImpl().findAll(); |
request.setAttribute("tasks",schedulledTasks); |
%> |
<div class="container-fluid"> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="configuration.tasks"/> |
<a href="<%=request.getContextPath()%>/user/configurationJobTasks.do" style="float:right" class="btn btn-default"><span class="glyphicon glyphicon-list-alt">Consultar Todos os Logs</span></a> |
<button type="button" style="float:right" class="btn btn-success" onclick="set(form,'new');form.submit();"><span class="glyphicon glyphicon-plus">Agendar</span></button> |
</div> |
<div class="panel-body"> |
<table id="myTable" class="tablesorter"> |
<thead> |
<tr> |
<th><bean:message key="configuration.task"/></th> |
<th>Tipo</th> |
<th>Calendarização</th> |
<th>Criador</th> |
<th>Parametros</th> |
<th>Última</th> |
<th>Progresso</th> |
<th></th> |
</tr> |
</thead> |
<tbody> |
<logic:iterate id="task" name="tasks" type="pt.estgp.estgweb.domain.JobServiceTaskSchedulerImpl"> |
<tr> |
<td><bean:message key="targetService.${task.targetService}"/></td> |
<td><bean:message key="configuration.task.${task.typeMsgKey}"/></td> |
<td> |
<logic:equal value="true" name="task" property="weekly"> |
<bean:message key="weekday.day"/> <bean:message key="weekday.${task.weekDayMsgKey}"/> |
</logic:equal> |
<logic:equal value="true" name="task" property="monthly"> |
<bean:message key="monthday.day"/> ${task.monthday} |
</logic:equal> |
<bean:message key="day.time"/> |
${task.hour}:${task.minute} |
</td> |
<td>${task.createdBy.username}</td> |
<td> |
<table cellspacing="0" cellspadding="0"> |
<logic:iterate id="taskParam" name="task" property="serviceTaskSchedulerParameters" type="pt.estgp.estgweb.domain.JobServiceTaskSchedulerParameter"> |
<tr> |
<td> |
${taskParam.name} |
</td> |
<td> |
${taskParam.object} |
</td> |
</tr> |
</logic:iterate> |
</table> |
</td> |
<td class="jobStatus${task.lastJobServiceTask.status}"> |
<logic:notEmpty name="task" property="lastJobServiceTask"> |
<bean:message key="job.status.${task.lastJobServiceTask.status}"/> |
</logic:notEmpty> |
</td> |
<td style="text-align: right"> |
<logic:notEmpty name="task" property="lastJobServiceTask"> |
${task.lastJobServiceTask.progress} % |
</logic:notEmpty> |
</td> |
<td> |
<logic:notEmpty name="task" property="lastJobServiceTask"> |
<a href="<%=request.getContextPath()%>/user/configurationTasks.do?dispatch=loadLog&id=${task.lastJobServiceTask.id}" class="btn btn-default"> |
<span class="glyphicon glyphicon-list-alt"></span> |
</a> |
</logic:notEmpty> |
</td> |
</tr> |
</logic:iterate> |
</tbody> |
</table> |
</div> |
</div> |
</div> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/admin/configuration/leafNode.jsp |
---|
93,20 → 93,15 |
</nested:select> |
</td> |
<td class="advanced" style="white-space: nowrap"> |
<button type="button" class="btn btn-danger btn-sm" onclick="if(confirm('<nested:message key="directories.remove.ask" arg0="${leaf.id}"/>')){set(form,'removeLeaf');setId(form,'<nested:write property="id"/>');form.submit()}else{return false;}"><span class="glyphicon glyphicon-remove"></span></button> |
<button type="button" class="btn btn-danger btn-sm" onclick="if(confirm('<nested:message key="directories.remove.ask" arg0="${leaf.id}"/>')){set(form,'removeLeaf');setId(form,'<nested:write property="id"/>');form.submit()}else{return false;}"><span class="glyphicon glyphicon-remove"></span></button> <button type="button" onclick="set(form,'addLeaf');setId(form,'<nested:write property="id"/>');form.action = form.action + '#<nested:write property="id"/>';form.submit()" class="btn btn-default btn-sm"><span class="glyphicon glyphicon-plus"></span></button> |
</td> |
<!--<td>remoteExtensionRoot</td> |
<td>ftpDirectory</td> |
<td>size</td> |
<td>mimeType</td>--> |
</tr> |
<tr class="advanced"> |
<td style="padding-left: <%=rightsPad%>px" colspan="11"> |
<button type="button" onclick="set(form,'addLeaf');setId(form,'<nested:write property="id"/>');form.action = form.action + '#<nested:write property="id"/>';form.submit()" class="btn btn-default btn-sm"><span class="glyphicon glyphicon-plus"></span></button> |
</td> |
</tr> |
<nested:notEmpty property="rights"> |
<tr class="advanced"> |
<tr class="accessRights"> |
<td style="padding-left: <%=rightsPad%>px">Direitos Acesso (<nested:write property="id"/>)</td> |
<td colspan="10"> |
/impl/src/web/admin/configuration/jobTasks.jsp |
---|
New file |
0,0 → 1,91 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.JobServiceTask" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.impl.JobServiceTaskDaoImpl" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib prefix="hmlt" uri="http://jakarta.apache.org/struts/tags-html" %> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<jomm:messages/> |
<html:errors/> |
<%--<jsp:include page="/layout/scriptsBootstrapSoft.jsp"/>--%> |
<% |
AbstractDao.getCurrentSession().beginTransaction(); |
List<JobServiceTaskDaoImpl> jobTasks = DaoFactory.getJobServiceTaskDaoImpl().findLastNJobTasks(100); |
request.setAttribute("tasks",jobTasks); |
%> |
<div class="container-fluid"> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="configuration.jobtasks"/> |
</div> |
<div class="panel-body"> |
<table id="myTable" class="tablesorter"> |
<thead> |
<tr> |
<th class="filter-true"><bean:message key="configuration.jobtask"/></th> |
<th class="filter-true">Data Inicio</th> |
<th class="filter-true">Criador</th> |
<th class="filter-true">Parametros</th> |
<th class="filter-true">Estado</th> |
<th class="filter-true">Progresso</th> |
<th></th> |
</tr> |
</thead> |
<tbody> |
<logic:iterate id="task" name="tasks" type="pt.estgp.estgweb.domain.JobServiceTaskImpl"> |
<tr> |
<td><bean:message key="targetService.${task.targetService}"/></td> |
<td>${task.serviceStartDateFormated}</td> |
<td>${task.createdBy.username}</td> |
<td> |
<table cellspacing="0" cellspadding="0"> |
<logic:iterate id="taskParam" name="task" property="serviceTaskParameters" type="pt.estgp.estgweb.domain.JobServiceTaskParameter"> |
<tr> |
<td> |
${taskParam.name} |
</td> |
<td> |
${taskParam.object} |
</td> |
</tr> |
</logic:iterate> |
</table> |
</td> |
<td class="jobStatus${task.status}"> |
<bean:message key="job.status.${task.status}"/> |
</td> |
<td style="text-align: right"> |
${task.progress} % |
</td> |
<td> |
<a href="<%=request.getContextPath()%>/user/configurationTasks.do?dispatch=loadLog&from=jobtasks&id=${task.id}" class="btn btn-default"> |
<span class="glyphicon glyphicon-list-alt"></span> |
</a> |
</td> |
</tr> |
</logic:iterate> |
</tbody> |
</table> |
</div> |
</div> |
</div> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/admin/configuration/task.jsp |
---|
New file |
0,0 → 1,121 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.JobServiceTaskScheduler" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib prefix="hmlt" uri="http://jakarta.apache.org/struts/tags-html" %> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<jomm:messages/> |
<html:errors/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/variables.less"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/lavish-bootstrap.css"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/bootstrap/css/bootstrap.css"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/bootstrap/css/bootstrap-theme.css"/> |
<script src="<%=request.getContextPath()%>/js/jquerytables/jquery-2.1.4.min.js"></script> |
<script src="<%=request.getContextPath()%>/js/jquerytables/bootstrap/js/bootstrap.min.js"></script> |
<% |
AbstractDao.getCurrentSession().beginTransaction(); |
List<JobServiceTaskScheduler> schedulledTasks = DaoFactory.getJobServiceTaskSchedulerDaoImpl().findAll(); |
request.setAttribute("tasks",schedulledTasks); |
%> |
<div class="container-fluid"> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="configuration.tasks"/> |
<button type="button" style="float:right" class="btn btn-default" onclick="set(form,'new');form.submit();"><span class="glyphicon glyphicon-list-alt">Consultar Todos os Logs</span></button> |
<button type="button" style="float:right" class="btn btn-success" onclick="set(form,'new');form.submit();"><span class="glyphicon glyphicon-plus">Agendar</span></button> |
</div> |
<div class="panel-body"> |
<table class="datatable tablesorter"> |
<thead> |
<tr> |
<th><bean:message key="configuration.task"/></th> |
<th>Tipo</th> |
<th>Calendarização</th> |
<th>Criador</th> |
<th>Parametros</th> |
<th>Última</th> |
<th>Progresso</th> |
<th></th> |
</tr> |
</thead> |
<tbody> |
<logic:iterate id="task" name="tasks" type="pt.estgp.estgweb.domain.JobServiceTaskSchedulerImpl"> |
<tr> |
<td><bean:message key="targetService.${task.targetService}"/></td> |
<td><bean:message key="configuration.task.${task.typeMsgKey}"/></td> |
<td> |
<logic:equal value="true" name="task" property="weekly"> |
<bean:message key="weekday.day"/> <bean:message key="weekday.${task.weekDayMsgKey}"/> |
</logic:equal> |
<logic:equal value="true" name="task" property="monthly"> |
<bean:message key="monthday.day"/> ${task.monthday} |
</logic:equal> |
<bean:message key="day.time"/> |
${task.hour}:${task.minute} |
</td> |
<td>${task.createdBy.username}</td> |
<td> |
<table cellspacing="0" cellspadding="0"> |
<logic:iterate id="taskParam" name="task" property="serviceTaskSchedulerParameters" type="pt.estgp.estgweb.domain.JobServiceTaskSchedulerParameter"> |
<tr> |
<td> |
${taskParam.name} |
</td> |
<td> |
${taskParam.object} |
</td> |
</tr> |
</logic:iterate> |
</table> |
</td> |
<td class="jobStatus${task.lastJobServiceTask.status}"> |
<logic:notEmpty name="task" property="lastJobServiceTask"> |
<bean:message key="job.status.${task.lastJobServiceTask.status}"/> |
</logic:notEmpty> |
</td> |
<td style="text-align: right"> |
<logic:notEmpty name="task" property="lastJobServiceTask"> |
${task.lastJobServiceTask.progress} % |
</logic:notEmpty> |
</td> |
<td> |
<button type="button" class="btn btn-default"> |
<span class="glyphicon glyphicon-list-alt"></span> |
</button> |
</td> |
</tr> |
</logic:iterate> |
</tbody> |
</table> |
</div> |
</div> |
</div> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/css/style.css |
---|
2,7 → 2,12 |
BODY *, .contentPortal, .contentPortal p, .contentPortal li, div { |
FONT-FAMILY: "bitstream vera sans", Trebuchet MS, Verdana, Arial, Helvetica, sans-serif; |
FONT-SIZE: 12px; |
} |
BODY |
{ |
background-color: white; |
} |
25,21 → 30,21 |
/*Errors and Warnings*/ |
.statusOK, .active { |
padding: 2px; |
padding: 2px ; |
list-style-type: none; |
color: green; |
background-color: #FFEEDD; |
color: green !important; |
background-color: #FFEEDD !important; |
} |
.statusERROR *, .statusERROR, .inactive { |
color: red; |
color: red !important; |
} |
.statusWARNING *, .statusWARNING { |
padding: 2px; |
list-style-type: none; |
color: yellow; |
background-color: black; |
color: yellow !important; |
background-color: black !important; |
} |
#header #headerTable |
89,7 → 94,7 |
} |
h1 { |
font-size: 1.2em; |
font-size: 1.2em !important; |
margin: 5; |
color: #808081; |
} |
98,17 → 103,20 |
.seccao h1 { |
border-bottom:1px solid black; |
padding:3px; |
font-size: 1.3em; |
font-size: 1.3em !important; |
margin: 0; |
font-weight:bold; |
} |
p,li{ |
color:black; |
} |
.seccao h2 { |
background-color: #EEEEEE; |
padding:2px; |
border-bottom:1px solid black; |
margin: 0; |
font-size: 1em; |
font-size: 1em !important; |
font-weight:normal; |
padding-left:10px; |
} |
116,14 → 124,14 |
.seccao h3 { |
padding:2px; |
border-bottom:1px solid black; |
font-size: 0.96em; |
font-size: 0.96em !important; |
padding-left:20px; |
} |
.seccao h4 { |
padding:2px; |
border-bottom:1px solid black; |
font-size: 0.9em; |
font-size: 0.9em !important; |
font-weight:normal; |
padding-left:35px; |
} |
2061,3 → 2069,41 |
.jobStatusPENDING |
{ |
background-color: #ffffff !important; |
} |
.jobStatusSTARTED |
{ |
background-color: darkgray !important; |
} |
.jobStatusFINISHED |
{ |
background-color: #00ff00 !important; |
} |
.jobStatusFINISHED_ERRORS, .jobStatusFAILED, .jobStatusUNKNOWN_ERROR |
{ |
background-color: #ff0000 !important; |
} |
.jobStatusFINISHED_WARNINGS |
{ |
background-color: #ffff00 !important; |
} |
/impl/src/web/js/logtailer/logtail.js |
---|
New file |
0,0 → 1,152 |
function log_handler(name, url, parent){ |
var self = this; |
this.url = url; |
this.parent = parent; |
this.name = name; |
this.header = $('<div class="header"></div>').appendTo(parent); |
this.playback = $('<a href="#"></a>').text('Pausa').appendTo($('<div class="buttons"></div>').appendTo(this.header)); |
this.header.append($('<h2></h2>').text(name)); |
this.screen = $('<div class="screen"></div>').appendTo(parent); |
this.screen.html('<div></div>'); |
this.playback.click(function(){ |
self.clicked(); |
return false; |
}); |
this.lx = 1; |
this.lines = {}; |
this.line_keys = []; |
this.max_lines = 100000; |
this.idx = 0; |
this.paused = false; |
this.inflight = null; |
this.addLine = function(line, repaint){ |
var id = self.lx++; |
self.line_keys.push(id); |
self.lines[id] = $('<div/>').text(line).html(); |
if (self.line_keys.length > self.max_lines){ |
var dkey = self.line_keys.shift(); |
delete self.lines[dkey]; |
} |
if (repaint) self.repaint(); |
return id; |
}; |
this.repaint = function(){ |
var buffer = ""; |
var l = self.line_keys.length; |
for (var i=0; i<l; i++){ |
buffer += self.lines[self.line_keys[i]] + "\n"; |
} |
self.screen.find('div').html(buffer); |
self.screen.scrollTop(self.screen[0].scrollHeight); |
}; |
this.onLoaded = function(o, success, req){ |
self.inflight = null; |
// if we've been pause, we ignore this response - we'll |
// send it again once we unpause |
if (self.paused) return; |
if (!o){ |
if (!req.status){ |
self.addLine('[ERROR] Can\'t connect to log server', 1); |
}else{ |
self.addLine('[ERROR] Error from log server: '+req.status, 1); |
} |
self.pause(); |
return; |
} |
if (!o.ok){ |
self.addLine('[ERROR] '+o.error); |
self.pause(); |
return; |
} |
if (o.lines){ |
for (var i=0; i<o.lines.length; i++){ |
self.addLine(o.lines[i]); |
} |
self.repaint(); |
} |
if (o.l){ |
self.idx = o.l; |
} |
if (!self.paused){ |
window.setTimeout(function(){ self.pumpLog(); }, 2000); |
} |
}; |
this.onError = function(req, status, ex){ |
self.addLine('[ERROR] '+status, 1); |
self.pause(); |
}; |
this.pumpLog = function(){ |
self.inflight = $.ajax({ |
url: self.url+'?l='+self.idx, |
success: this.onLoaded, |
error: this.onError, |
dataType: 'json' |
}); |
}; |
this.pause = function(){ |
if (self.paused) return; |
self.paused = true; |
// make sure the request we're running now never completes |
if (self.inflight){ |
self.inflight.success = null; |
self.inflight.error = null; |
} |
self.playback.text('Resume'); |
self.addLine('--paused--', 1); |
}; |
this.resume = function(){ |
if (!self.paused) return; |
self.paused = false; |
self.playback.text('Pause'); |
self.pumpLog(); |
self.addLine('--resumed--', 1); |
} |
this.clicked = function(){ |
if (self.paused){ |
self.resume(); |
}else{ |
self.pause(); |
} |
} |
this.repaint(); |
this.pumpLog(); |
} |
/impl/src/web/js/jquerytables/jquerytable/theme.blue.css |
---|
New file |
0,0 → 1,229 |
/************* |
Blue Theme |
*************/ |
/* overall */ |
.tablesorter-blue { |
width: 100%; |
background-color: #fff; |
margin: 10px 0 15px; |
text-align: left; |
border-spacing: 0; |
border: #cdcdcd 1px solid; |
border-width: 1px 0 0 1px; |
} |
.tablesorter-blue th, |
.tablesorter-blue td { |
border: #cdcdcd 1px solid; |
border-width: 0 1px 1px 0; |
} |
/* header */ |
.tablesorter-blue th, |
.tablesorter-blue thead td { |
font: 12px/18px Arial, Sans-serif; |
font-weight: bold; |
color: #000; |
background-color: #99bfe6; |
border-collapse: collapse; |
padding: 4px; |
text-shadow: 0 1px 0 rgba(204, 204, 204, 0.7); |
} |
.tablesorter-blue tbody td, |
.tablesorter-blue tfoot th, |
.tablesorter-blue tfoot td { |
padding: 4px; |
vertical-align: top; |
} |
.tablesorter-blue .header, |
.tablesorter-blue .tablesorter-header { |
/* black (unsorted) double arrow */ |
background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==); |
/* white (unsorted) double arrow */ |
/* background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAAP///////yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==); */ |
/* image */ |
/* background-image: url(images/black-unsorted.gif); */ |
background-repeat: no-repeat; |
background-position: center right; |
padding: 4px 18px 4px 4px; |
white-space: normal; |
cursor: pointer; |
} |
.tablesorter-blue .headerSortUp, |
.tablesorter-blue .tablesorter-headerSortUp, |
.tablesorter-blue .tablesorter-headerAsc { |
background-color: #9fbfdf; |
/* black asc arrow */ |
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); |
/* white asc arrow */ |
/* background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); */ |
/* image */ |
/* background-image: url(images/black-asc.gif); */ |
} |
.tablesorter-blue .headerSortDown, |
.tablesorter-blue .tablesorter-headerSortDown, |
.tablesorter-blue .tablesorter-headerDesc { |
background-color: #8cb3d9; |
/* black desc arrow */ |
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); |
/* white desc arrow */ |
/* background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); */ |
/* image */ |
/* background-image: url(images/black-desc.gif); */ |
} |
.tablesorter-blue thead .sorter-false { |
background-image: none; |
cursor: default; |
padding: 4px; |
} |
/* tfoot */ |
.tablesorter-blue tfoot .tablesorter-headerSortUp, |
.tablesorter-blue tfoot .tablesorter-headerSortDown, |
.tablesorter-blue tfoot .tablesorter-headerAsc, |
.tablesorter-blue tfoot .tablesorter-headerDesc { |
/* remove sort arrows from footer */ |
background-image: none; |
} |
/* tbody */ |
.tablesorter-blue td { |
color: #3d3d3d; |
background-color: #fff; |
padding: 4px; |
vertical-align: top; |
} |
/* hovered row colors |
you'll need to add additional lines for |
rows with more than 2 child rows |
*/ |
.tablesorter-blue tbody > tr.hover > td, |
.tablesorter-blue tbody > tr:hover > td, |
.tablesorter-blue tbody > tr:hover + tr.tablesorter-childRow > td, |
.tablesorter-blue tbody > tr:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td, |
.tablesorter-blue tbody > tr.even.hover > td, |
.tablesorter-blue tbody > tr.even:hover > td, |
.tablesorter-blue tbody > tr.even:hover + tr.tablesorter-childRow > td, |
.tablesorter-blue tbody > tr.even:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td { |
background-color: #d9d9d9; |
} |
.tablesorter-blue tbody > tr.odd.hover > td, |
.tablesorter-blue tbody > tr.odd:hover > td, |
.tablesorter-blue tbody > tr.odd:hover + tr.tablesorter-childRow > td, |
.tablesorter-blue tbody > tr.odd:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td { |
background-color: #bfbfbf; |
} |
/* table processing indicator */ |
.tablesorter-blue .tablesorter-processing { |
background-position: center center !important; |
background-repeat: no-repeat !important; |
/* background-image: url(images/loading.gif) !important; */ |
background-image: url('data:image/gif;base64,R0lGODlhFAAUAKEAAO7u7lpaWgAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgACACwAAAAAFAAUAAACQZRvoIDtu1wLQUAlqKTVxqwhXIiBnDg6Y4eyx4lKW5XK7wrLeK3vbq8J2W4T4e1nMhpWrZCTt3xKZ8kgsggdJmUFACH5BAEKAAIALAcAAAALAAcAAAIUVB6ii7jajgCAuUmtovxtXnmdUAAAIfkEAQoAAgAsDQACAAcACwAAAhRUIpmHy/3gUVQAQO9NetuugCFWAAAh+QQBCgACACwNAAcABwALAAACE5QVcZjKbVo6ck2AF95m5/6BSwEAIfkEAQoAAgAsBwANAAsABwAAAhOUH3kr6QaAcSrGWe1VQl+mMUIBACH5BAEKAAIALAIADQALAAcAAAIUlICmh7ncTAgqijkruDiv7n2YUAAAIfkEAQoAAgAsAAAHAAcACwAAAhQUIGmHyedehIoqFXLKfPOAaZdWAAAh+QQFCgACACwAAAIABwALAAACFJQFcJiXb15zLYRl7cla8OtlGGgUADs=') !important; |
} |
/* Zebra Widget - row alternating colors */ |
.tablesorter-blue tbody tr.odd > td { |
background-color: #ebf2fa; |
} |
.tablesorter-blue tbody tr.even > td { |
background-color: #fff; |
} |
/* Column Widget - column sort colors */ |
.tablesorter-blue td.primary, |
.tablesorter-blue tr.odd td.primary { |
background-color: #99b3e6; |
} |
.tablesorter-blue tr.even td.primary { |
background-color: #c2d1f0; |
} |
.tablesorter-blue td.secondary, |
.tablesorter-blue tr.odd td.secondary { |
background-color: #c2d1f0; |
} |
.tablesorter-blue tr.even td.secondary { |
background-color: #d6e0f5; |
} |
.tablesorter-blue td.tertiary, |
.tablesorter-blue tr.odd td.tertiary { |
background-color: #d6e0f5; |
} |
.tablesorter-blue tr.even td.tertiary { |
background-color: #ebf0fa; |
} |
/* caption */ |
caption { |
background-color: #fff; |
} |
/* filter widget */ |
.tablesorter-blue .tablesorter-filter-row { |
background-color: #eee; |
} |
.tablesorter-blue .tablesorter-filter-row td { |
background-color: #eee; |
line-height: normal; |
text-align: center; /* center the input */ |
-webkit-transition: line-height 0.1s ease; |
-moz-transition: line-height 0.1s ease; |
-o-transition: line-height 0.1s ease; |
transition: line-height 0.1s ease; |
} |
/* optional disabled input styling */ |
.tablesorter-blue .tablesorter-filter-row .disabled { |
opacity: 0.5; |
filter: alpha(opacity=50); |
cursor: not-allowed; |
} |
/* hidden filter row */ |
.tablesorter-blue .tablesorter-filter-row.hideme td { |
/*** *********************************************** ***/ |
/*** change this padding to modify the thickness ***/ |
/*** of the closed filter row (height = padding x 2) ***/ |
padding: 2px; |
/*** *********************************************** ***/ |
margin: 0; |
line-height: 0; |
cursor: pointer; |
} |
.tablesorter-blue .tablesorter-filter-row.hideme * { |
height: 1px; |
min-height: 0; |
border: 0; |
padding: 0; |
margin: 0; |
/* don't use visibility: hidden because it disables tabbing */ |
opacity: 0; |
filter: alpha(opacity=0); |
} |
/* filters */ |
.tablesorter-blue input.tablesorter-filter, |
.tablesorter-blue select.tablesorter-filter { |
width: 98%; |
height: auto; |
margin: 0; |
padding: 4px; |
background-color: #fff; |
border: 1px solid #bbb; |
color: #333; |
-webkit-box-sizing: border-box; |
-moz-box-sizing: border-box; |
box-sizing: border-box; |
-webkit-transition: height 0.1s ease; |
-moz-transition: height 0.1s ease; |
-o-transition: height 0.1s ease; |
transition: height 0.1s ease; |
} |
/* rows hidden by filtering (needed for child rows) */ |
.tablesorter .filtered { |
display: none; |
} |
/* ajax error row */ |
.tablesorter .tablesorter-errorRow td { |
text-align: center; |
cursor: pointer; |
background-color: #e6bf99; |
} |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/js/jquerytables/jquerytable/desc.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |
/impl/src/web/js/jquerytables/jquerytable/style.css |
---|
New file |
0,0 → 1,39 |
/* tables */ |
table.tablesorter { |
font-family:arial; |
background-color: #CDCDCD; |
margin:10px 0pt 15px; |
font-size: 8pt; |
width: 100%; |
text-align: left; |
} |
table.tablesorter thead tr th, table.tablesorter tfoot tr th { |
background-color: #e6EEEE; |
border: 1px solid #FFF; |
font-size: 8pt; |
padding: 4px; |
} |
table.tablesorter thead tr .header { |
background-image: url(bg.gif); |
background-repeat: no-repeat; |
background-position: center right; |
cursor: pointer; |
} |
table.tablesorter tbody td { |
color: #3D3D3D; |
padding: 4px; |
background-color: #FFF; |
vertical-align: top; |
} |
table.tablesorter tbody tr.odd td { |
background-color:#F0F0F6; |
} |
table.tablesorter thead tr .headerSortUp { |
background-image: url(asc.gif); |
} |
table.tablesorter thead tr .headerSortDown { |
background-image: url(desc.gif); |
} |
table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp { |
background-color: #8dbdd8; |
} |
/impl/src/web/js/jquerytables/jquerytable/theme.green.css |
---|
New file |
0,0 → 1,39 |
table.tablesorter { |
font-size: 12px; |
background-color: #4D4D4D; |
width: 1024px; |
border: 1px solid #000; |
} |
table.tablesorter th { |
text-align: left; |
padding: 5px; |
background-color: #6E6E6E; |
} |
table.tablesorter td { |
color: #FFF; |
padding: 5px; |
} |
table.tablesorter .even { |
background-color: #3D3D3D; |
} |
table.tablesorter .odd { |
background-color: #6E6E6E; |
} |
table.tablesorter .header { |
background-image: url(bg.png); |
background-repeat: no-repeat; |
border-left: 1px solid #FFF; |
border-right: 1px solid #000; |
border-top: 1px solid #FFF; |
padding-left: 30px; |
padding-top: 8px; |
height: auto; |
} |
table.tablesorter .headerSortUp { |
background-image: url(asc.png); |
background-repeat: no-repeat; |
} |
table.tablesorter .headerSortDown { |
background-image: url(desc.png); |
background-repeat: no-repeat; |
} |
/impl/src/web/js/jquerytables/jquerytable/asc.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |
/impl/src/web/js/jquerytables/jquerytable/theme.estg.css |
---|
New file |
0,0 → 1,229 |
/************* |
Blue Theme |
*************/ |
/* overall */ |
.tablesorter-blue { |
width: 100%; |
background-color: #fff; |
margin: 10px 0 15px; |
text-align: left; |
border-spacing: 0; |
border: #cdcdcd 1px solid; |
border-width: 1px 0 0 1px; |
} |
.tablesorter-blue th, |
.tablesorter-blue td { |
border: #cdcdcd 1px solid; |
border-width: 0 1px 1px 0; |
} |
/* header */ |
.tablesorter-blue th, |
.tablesorter-blue thead td { |
font: 12px/18px Arial, Sans-serif; |
font-weight: bold; |
color: #000; |
background-color: #e6b262; |
border-collapse: collapse; |
padding: 4px; |
text-shadow: 0 1px 0 rgba(204, 204, 204, 0.7); |
} |
.tablesorter-blue tbody td, |
.tablesorter-blue tfoot th, |
.tablesorter-blue tfoot td { |
padding: 4px; |
vertical-align: top; |
} |
.tablesorter-blue .header, |
.tablesorter-blue .tablesorter-header { |
/* black (unsorted) double arrow */ |
background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==); |
/* white (unsorted) double arrow */ |
/* background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAAP///////yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==); */ |
/* image */ |
/* background-image: url(images/black-unsorted.gif); */ |
background-repeat: no-repeat; |
background-position: center right; |
padding: 4px 18px 4px 4px; |
white-space: normal; |
cursor: pointer; |
} |
.tablesorter-blue .headerSortUp, |
.tablesorter-blue .tablesorter-headerSortUp, |
.tablesorter-blue .tablesorter-headerAsc { |
background-color: #e6b262; |
/* black asc arrow */ |
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); |
/* white asc arrow */ |
/* background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); */ |
/* image */ |
/* background-image: url(images/black-asc.gif); */ |
} |
.tablesorter-blue .headerSortDown, |
.tablesorter-blue .tablesorter-headerSortDown, |
.tablesorter-blue .tablesorter-headerDesc { |
background-color: #e6b262; |
/* black desc arrow */ |
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); |
/* white desc arrow */ |
/* background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); */ |
/* image */ |
/* background-image: url(images/black-desc.gif); */ |
} |
.tablesorter-blue thead .sorter-false { |
background-image: none; |
cursor: default; |
padding: 4px; |
} |
/* tfoot */ |
.tablesorter-blue tfoot .tablesorter-headerSortUp, |
.tablesorter-blue tfoot .tablesorter-headerSortDown, |
.tablesorter-blue tfoot .tablesorter-headerAsc, |
.tablesorter-blue tfoot .tablesorter-headerDesc { |
/* remove sort arrows from footer */ |
background-image: none; |
} |
/* tbody */ |
.tablesorter-blue td { |
color: #3d3d3d; |
background-color: #fff; |
padding: 4px; |
vertical-align: top; |
} |
/* hovered row colors |
you'll need to add additional lines for |
rows with more than 2 child rows |
*/ |
.tablesorter-blue tbody > tr.hover > td, |
.tablesorter-blue tbody > tr:hover > td, |
.tablesorter-blue tbody > tr:hover + tr.tablesorter-childRow > td, |
.tablesorter-blue tbody > tr:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td, |
.tablesorter-blue tbody > tr.even.hover > td, |
.tablesorter-blue tbody > tr.even:hover > td, |
.tablesorter-blue tbody > tr.even:hover + tr.tablesorter-childRow > td, |
.tablesorter-blue tbody > tr.even:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td { |
background-color: #d9d9d9; |
} |
.tablesorter-blue tbody > tr.odd.hover > td, |
.tablesorter-blue tbody > tr.odd:hover > td, |
.tablesorter-blue tbody > tr.odd:hover + tr.tablesorter-childRow > td, |
.tablesorter-blue tbody > tr.odd:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td { |
background-color: #bfbfbf; |
} |
/* table processing indicator */ |
.tablesorter-blue .tablesorter-processing { |
background-position: center center !important; |
background-repeat: no-repeat !important; |
/* background-image: url(images/loading.gif) !important; */ |
background-image: url('data:image/gif;base64,R0lGODlhFAAUAKEAAO7u7lpaWgAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgACACwAAAAAFAAUAAACQZRvoIDtu1wLQUAlqKTVxqwhXIiBnDg6Y4eyx4lKW5XK7wrLeK3vbq8J2W4T4e1nMhpWrZCTt3xKZ8kgsggdJmUFACH5BAEKAAIALAcAAAALAAcAAAIUVB6ii7jajgCAuUmtovxtXnmdUAAAIfkEAQoAAgAsDQACAAcACwAAAhRUIpmHy/3gUVQAQO9NetuugCFWAAAh+QQBCgACACwNAAcABwALAAACE5QVcZjKbVo6ck2AF95m5/6BSwEAIfkEAQoAAgAsBwANAAsABwAAAhOUH3kr6QaAcSrGWe1VQl+mMUIBACH5BAEKAAIALAIADQALAAcAAAIUlICmh7ncTAgqijkruDiv7n2YUAAAIfkEAQoAAgAsAAAHAAcACwAAAhQUIGmHyedehIoqFXLKfPOAaZdWAAAh+QQFCgACACwAAAIABwALAAACFJQFcJiXb15zLYRl7cla8OtlGGgUADs=') !important; |
} |
/* Zebra Widget - row alternating colors */ |
.tablesorter-blue tbody tr.odd > td { |
background-color: #faf2f6; |
} |
.tablesorter-blue tbody tr.even > td { |
background-color: #fff; |
} |
/* Column Widget - column sort colors */ |
.tablesorter-blue td.primary, |
.tablesorter-blue tr.odd td.primary { |
background-color: #e6b721; |
} |
.tablesorter-blue tr.even td.primary { |
background-color: #e8cf60; |
} |
.tablesorter-blue td.secondary, |
.tablesorter-blue tr.odd td.secondary { |
background-color: #e8d68a; |
} |
.tablesorter-blue tr.even td.secondary { |
background-color: #e8d6b5; |
} |
.tablesorter-blue td.tertiary, |
.tablesorter-blue tr.odd td.tertiary { |
background-color: #e8dec8; |
} |
.tablesorter-blue tr.even td.tertiary { |
background-color: #e8e2dd; |
} |
/* caption */ |
caption { |
background-color: #fff; |
} |
/* filter widget */ |
.tablesorter-blue .tablesorter-filter-row { |
background-color: #eee; |
} |
.tablesorter-blue .tablesorter-filter-row td { |
background-color: #eee; |
line-height: normal; |
text-align: center; /* center the input */ |
-webkit-transition: line-height 0.1s ease; |
-moz-transition: line-height 0.1s ease; |
-o-transition: line-height 0.1s ease; |
transition: line-height 0.1s ease; |
} |
/* optional disabled input styling */ |
.tablesorter-blue .tablesorter-filter-row .disabled { |
opacity: 0.5; |
filter: alpha(opacity=50); |
cursor: not-allowed; |
} |
/* hidden filter row */ |
.tablesorter-blue .tablesorter-filter-row.hideme td { |
/*** *********************************************** ***/ |
/*** change this padding to modify the thickness ***/ |
/*** of the closed filter row (height = padding x 2) ***/ |
padding: 2px; |
/*** *********************************************** ***/ |
margin: 0; |
line-height: 0; |
cursor: pointer; |
} |
.tablesorter-blue .tablesorter-filter-row.hideme * { |
height: 1px; |
min-height: 0; |
border: 0; |
padding: 0; |
margin: 0; |
/* don't use visibility: hidden because it disables tabbing */ |
opacity: 0; |
filter: alpha(opacity=0); |
} |
/* filters */ |
.tablesorter-blue input.tablesorter-filter, |
.tablesorter-blue select.tablesorter-filter { |
width: 98%; |
height: auto; |
margin: 0; |
padding: 4px; |
background-color: #fff; |
border: 1px solid #bbb; |
color: #333; |
-webkit-box-sizing: border-box; |
-moz-box-sizing: border-box; |
box-sizing: border-box; |
-webkit-transition: height 0.1s ease; |
-moz-transition: height 0.1s ease; |
-o-transition: height 0.1s ease; |
transition: height 0.1s ease; |
} |
/* rows hidden by filtering (needed for child rows) */ |
.tablesorter .filtered { |
display: none; |
} |
/* ajax error row */ |
.tablesorter .tablesorter-errorRow td { |
text-align: center; |
cursor: pointer; |
background-color: #e6bf99; |
} |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/js/jquerytables/jquerytable/bg.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |
/impl/src/web/js/jquerytables/jquerytable/filter.formatter.css |
---|
New file |
0,0 → 1,183 |
/**** Filter Formatter Elements ****/ |
.tablesorter .tablesorter-filter-row td { |
text-align: center; |
font-size: 0.9em; |
font-weight: normal; |
} |
/**** Sliders ****/ |
/* shrink the sliders to look nicer inside of a table cell */ |
.tablesorter .ui-slider, .tablesorter input.range { |
width: 90%; |
margin: 2px auto 2px auto; /* add enough top margin so the tooltips will fit */ |
font-size: 0.8em; |
} |
.tablesorter .ui-slider { |
top: 12px; |
} |
.tablesorter .ui-slider .ui-slider-handle { |
width: 0.9em; |
height: 0.9em; |
} |
.tablesorter .ui-datepicker { |
font-size: 0.8em; |
} |
.tablesorter .ui-slider-horizontal { |
height: 0.5em; |
} |
/* Add tooltips to slider handles */ |
.tablesorter .value-popup:after { |
content : attr(data-value); |
position: absolute; |
bottom: 14px; |
left: -7px; |
min-width: 18px; |
height: 12px; |
background-color: #444; |
background-image: -webkit-gradient(linear, left top, left bottom, from(#444444), to(#999999)); |
background-image: -webkit-linear-gradient(top, #444, #999); |
background-image: -moz-linear-gradient(top, #444, #999); |
background-image: -o-linear-gradient(top, #444, #999); |
background-image: linear-gradient(to bottom, #444, #999); |
-webkit-border-radius: 3px; |
border-radius: 3px; |
-webkit-background-clip: padding-box; background-clip: padding-box; |
-webkit-box-shadow: 0px 0px 4px 0px #777; |
box-shadow: 0px 0px 4px 0px #777; |
border: #444 1px solid; |
color: #fff; |
font: 1em/1.1em Arial, Sans-Serif; |
padding: 1px; |
text-align: center; |
} |
.tablesorter .value-popup:before { |
content: ""; |
position: absolute; |
width: 0; |
height: 0; |
border-top: 8px solid #777; |
border-left: 8px solid transparent; |
border-right: 8px solid transparent; |
top: -8px; |
left: 50%; |
margin-left: -8px; |
margin-top: -1px; |
} |
/**** Date Picker ****/ |
.tablesorter .dateFrom, .tablesorter .dateTo { |
width: 80px; |
margin: 2px 5px; |
} |
/**** Color Picker/HTML5Number Toggle button ****/ |
.tablesorter .button { |
width: 14px; |
height: 14px; |
background: #fcfff4; |
background: -webkit-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); |
background: -moz-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); |
background: -o-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); |
background: -ms-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); |
background: linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); |
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fcfff4', endColorstr='#b3bead', GradientType=0 ); |
margin: 1px 5px 1px 1px; |
-webkit-border-radius: 25px; |
-moz-border-radius: 25px; |
border-radius: 25px; |
-webkit-box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); |
-moz-box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); |
box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); |
position: relative; |
top: 3px; |
display: inline-block; |
} |
.tablesorter .button label { |
cursor: pointer; |
position: absolute; |
width: 10px; |
height: 10px; |
-webkit-border-radius: 25px; |
-moz-border-radius: 25px; |
border-radius: 25px; |
left: 2px; |
top: 2px; |
-webkit-box-shadow: inset 0px 1px 1px rgba(0,0,0,0.5), 0px 1px 0px rgba(255,255,255,1); |
-moz-box-shadow: inset 0px 1px 1px rgba(0,0,0,0.5), 0px 1px 0px rgba(255,255,255,1); |
box-shadow: inset 0px 1px 1px rgba(0,0,0,0.5), 0px 1px 0px rgba(255,255,255,1); |
background: #45484d; |
background: -webkit-linear-gradient(top, #222 0%, #45484d 100%); |
background: -moz-linear-gradient(top, #222 0%, #45484d 100%); |
background: -o-linear-gradient(top, #222 0%, #45484d 100%); |
background: -ms-linear-gradient(top, #222 0%, #45484d 100%); |
background: linear-gradient(top, #222 0%, #45484d 100%); |
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#222', endColorstr='#45484d', GradientType=0 ); |
} |
.tablesorter .button label:after { |
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; |
filter: alpha(opacity=0); |
opacity: 0; |
content: ''; |
position: absolute; |
width: 8px; |
height: 8px; |
background: #55f; |
background: -webkit-linear-gradient(top, #aaf 0%, #55f 100%); |
background: -moz-linear-gradient(top, #aaf 0%, #55f 100%); |
background: -o-linear-gradient(top, #aaf 0%, #55f 100%); |
background: -ms-linear-gradient(top, #aaf 0%, #55f 100%); |
background: linear-gradient(top, #aaf 0%, #55f 100%); |
-webkit-border-radius: 25px; |
-moz-border-radius: 25px; |
border-radius: 25px; |
top: 1px; |
left: 1px; |
-webkit-box-shadow: inset 0px 1px 1px #fff, 0px 1px 3px rgba(0,0,0,0.5); |
-moz-box-shadow: inset 0px 1px 1px #fff, 0px 1px 3px rgba(0,0,0,0.5); |
box-shadow: inset 0px 1px 1px #fff, 0px 1px 3px rgba(0,0,0,0.5); |
} |
.tablesorter .button label:hover::after { |
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; |
filter: alpha(opacity=30); |
opacity: 0.3; |
} |
.tablesorter .button input[type=checkbox] { |
visibility: hidden; |
} |
.tablesorter .button input[type=checkbox]:checked + label:after { |
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; |
filter: alpha(opacity=100); |
opacity: 1; |
} |
.tablesorter .colorpicker { |
width: 30px; |
height: 18px; |
} |
.tablesorter .ui-spinner-input { |
width: 100px; |
height: 18px; |
} |
.tablesorter .currentColor, .tablesorter .ui-spinner { |
position: relative; |
} |
.tablesorter input.number { |
position: relative; |
} |
/* hide filter row */ |
.tablesorter .tablesorter-filter-row.hideme td * { |
height: 1px; |
min-height: 0; |
border: 0; |
padding: 0; |
margin: 0; |
/* don't use visibility: hidden because it disables tabbing */ |
opacity: 0; |
filter: alpha(opacity=0); |
} |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/layout/scripts.jsp |
---|
2,11 → 2,11 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/menu/assets/skins/sam/menu.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/button/assets/skins/sam/button.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/fonts/fonts-min.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/container/assets/skins/sam/container.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/editor/assets/skins/sam/editor.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/menu/assets/skins/sam/menu.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/button/assets/skins/sam/button.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/fonts/fonts-min.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/container/assets/skins/sam/container.css" /> |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/yui/build/editor/assets/skins/sam/editor.css" /> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/style.css"/> |
14,12 → 14,12 |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/ajax.js"></script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/compactedPopup.js"></script> |
<!-- |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/jquery/style.css"/> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-latest.js"></script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.tablesorter.js"></script> |
--> |
<% |
String link = (String) request.getAttribute(TopImageFilter.TOP_CSS); |
if (link != null) |
33,12 → 33,283 |
<script type="text/javascript" language="JavaScript"> |
var cal = new CalendarPopup(); |
//TABLE SORTER |
/* //TABLE SORTER |
$(document).ready(function() |
{ |
$("#myTable").tablesorter(); |
} |
); |
);*/ |
</script> |
</script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquerytables/jquery-2.1.4.min.js"></script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquerytables/jquery.tablesorter.min.js"></script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquerytables/jquery.tablesorter.widgets.js"></script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquerytables/bootstrap/js/bootstrap.js"></script> |
<link rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/bootstrap/css/bootstrap.css" type="text/css"/> |
<!--<link rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/bootstrap/css/bootstrap-theme.css" type="text/css"/>--> |
<link rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/jquerytable/theme.estg.css" type="text/css"/> |
<link rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/jquerytable/filter.formatter.css" type="text/css"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/variables.less"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/lavish-bootstrap.css"/> |
<script language="javascript"> |
$(document).ready(function() |
{ |
if($("#myTable")) |
{ |
$("#myTable").tablesorter({ |
theme: 'blue', |
sortMultiSortKey: 'altKey', |
//sortList: [[0,0]], |
widgets: ["zebra","filter"], |
ignoreCase: false, |
widthFixed : true, |
widgetOptions : {filter_reset : 'button.reset',filter_columnFilters : true}, |
textExtraction: function(node) { |
// extract data from markup and return it |
if($(node).find(':input').size()>0) |
{ |
var values = $(node).find(":input").map(function() { |
return $(this).val() |
}).get().join(","); |
return values; |
} |
return $(node).text(); |
} |
/* , |
widgetOptions : { |
// filter_anyMatch options was removed in v2.15; it has been replaced by the filter_external option |
// If there are child rows in the table (rows with class name from "cssChildRow" option) |
// and this option is true and a match is found anywhere in the child row, then it will make that row |
// visible; default is false |
filter_childRows : false, |
// if true, filter child row content by column; filter_childRows must also be true |
filter_childByColumn : false, |
// if true, a filter will be added to the top of each table column; |
// disabled by using -> headers: { 1: { filter: false } } OR add class="filter-false" |
// if you set this to false, make sure you perform a search using the second method below |
filter_columnFilters : true, |
// if true, allows using "#:{query}" in AnyMatch searches (column:query; added v2.20.0) |
filter_columnAnyMatch: true, |
// extra css class name (string or array) added to the filter element (input or select) |
filter_cellFilter : '', |
// extra css class name(s) applied to the table row containing the filters & the inputs within that row |
// this option can either be a string (class applied to all filters) or an array (class applied to indexed filter) |
filter_cssFilter : '', // or [] |
// add a default column filter type "~{query}" to make fuzzy searches default; |
// "{q1} AND {q2}" to make all searches use a logical AND. |
filter_defaultFilter : {}, |
// filters to exclude, per column |
filter_excludeFilter : {}, |
// jQuery selector (or object) pointing to an input to be used to match the contents of any column |
// please refer to the filter-any-match demo for limitations - new in v2.15 |
filter_external : '', |
// class added to filtered rows (rows that are not showing); needed by pager plugin |
filter_filteredRow : 'filtered', |
// add custom filter elements to the filter row |
// see the filter formatter demos for more specifics |
filter_formatter : null, |
// add custom filter functions using this option |
// see the filter widget custom demo for more specifics on how to use this option |
filter_functions : null, |
// hide filter row when table is empty |
filter_hideEmpty : true, |
// if true, filters are collapsed initially, but can be revealed by hovering over the grey bar immediately |
// below the header row. Additionally, tabbing through the document will open the filter row when an input gets focus |
filter_hideFilters : true, |
// Set this option to false to make the searches case sensitive |
filter_ignoreCase : true, |
// if true, search column content while the user types (with a delay) |
filter_liveSearch : true, |
// a header with a select dropdown & this class name will only show available (visible) options within that drop down. |
// default placeholder text (overridden by any header "data-placeholder" setting) |
filter_placeholder : { search : '', select : '' }, |
// jQuery selector string of an element used to reset the filters |
filter_reset : 'button.reset', |
// Use the $.tablesorter.storage utility to save the most recent filters (default setting is false) |
filter_saveFilters : true, |
// Delay in milliseconds before the filter widget starts searching; This option prevents searching for |
// every character while typing and should make searching large tables faster. |
filter_searchDelay : 300, |
// allow searching through already filtered rows in special circumstances; will speed up searching in large tables if true |
filter_searchFiltered: true, |
// include a function to return an array of values to be added to the column filter select |
filter_selectSource : null, |
// if true, server-side filtering should be performed because client-side filtering will be disabled, but |
// the ui and events will still be used. |
filter_serversideFiltering : false, |
// Set this option to true to use the filter to find text from the start of the column |
// So typing in "a" will find "albert" but not "frank", both have a's; default is false |
filter_startsWith : false, |
// Filter using parsed content for ALL columns |
// be careful on using this on date columns as the date is parsed and stored as time in seconds |
filter_useParsedData : false, |
// data attribute in the header cell that contains the default filter value |
filter_defaultAttrib : 'data-value', |
// filter_selectSource array text left of the separator is added to the option value, right into the option text |
filter_selectSourceSeparator : '|' |
}*/ |
} |
); |
} |
if($("#myTable2")) |
{ |
$("#myTable2").tablesorter({ |
theme: 'blue', |
sortMultiSortKey: 'altKey', |
//sortList: [[0,0]], |
widgets: ["zebra","filter"], |
ignoreCase: false, |
widthFixed : true, |
widgetOptions : {filter_reset : 'button.reset',filter_columnFilters : true}, |
textExtraction: function(node) { |
// extract data from markup and return it |
if($(node).find(':input').size()>0) |
{ |
var values = $(node).find(":input").map(function() { |
return $(this).val() |
}).get().join(","); |
return values; |
} |
return $(node).text(); |
} |
} |
); |
} |
if($(".tablesortersimple")) |
{ |
$(".tablesortersimple").tablesorter({ |
theme: 'blue', |
sortMultiSortKey: 'altKey', |
//sortList: [[0,0]], |
widgets: ["zebra","filter"], |
ignoreCase: false, |
widthFixed : true, |
widgetOptions : {filter_reset : 'button.reset',filter_columnFilters : false}, |
textExtraction: function(node) { |
// extract data from markup and return it |
if($(node).find(':input').size()>0) |
{ |
var values = $(node).find(":input").map(function() { |
return $(this).val() |
}).get().join(","); |
return values; |
} |
return $(node).text(); |
} |
} |
); |
} |
// External search |
// buttons set up like this: |
// <button type="button" data-filter-column="4" data-filter-text="2?%">Saved Search</button> |
$('button[data-filter-column]').click(function(){ |
/*** first method *** data-filter-column="1" data-filter-text="!son" |
add search value to Discount column (zero based index) input */ |
var filters = [], |
$t = $(this), |
col = $t.data('filter-column'), // zero-based index |
txt = $t.data('filter-text') || $t.text(); // text to add to filter |
filters[col] = txt; |
// using "table.hasFilters" here to make sure we aren't targeting a sticky header |
if($('#myTable')) |
$.tablesorter.setFilters( $('#myTable'), filters, true ); // new v2.9 |
if($('#myTable2')) |
$.tablesorter.setFilters( $('#myTable2'), filters, true ); // new v2.9 |
/** old method (prior to tablsorter v2.9 *** |
var filters = $('table.tablesorter').find('input.tablesorter-filter'); |
filters.val(''); // clear all filters |
filters.eq(col).val(txt).trigger('search', false); |
******/ |
/*** second method *** |
this method bypasses the filter inputs, so the "filter_columnFilters" |
option can be set to false (no column filters showing) |
******/ |
/* |
var columns = []; |
columns[5] = '2?%'; // or define the array this way [ '', '', '', '', '', '2?%' ] |
$('table').trigger('search', [ columns ]); |
*/ |
return false; |
}); |
} |
); |
</script> |
<style> |
th.headerSortUp { |
background-image: url(<%=request.getContextPath()%>/js/jquerytables/jquerytable/asc.gif); |
background-color: #3399FF; |
} |
th.headerSortDown { |
background-image: url(<%=request.getContextPath()%>/js/jquerytables/jquerytable/desc.gif); |
background-color: #3399FF; |
} |
.dorsalActivado span, .dorsal span |
{ |
text-align: center; |
background-color: white; |
padding: 3px; |
border: 1px solid black; |
font-weight: bold; |
white-space: nowrap; |
} |
</style> |
/impl/src/web/layout/footer.jsp |
---|
18,7 → 18,7 |
<div id="license"> |
<ul class="copyRightLink"> |
<li><font size=10 align="center"><b>Copyright © <a href="http://www.estgp.pt">ESTG</a> 2010</b></font></li> |
<li><font size=10 align="center"><b>Powered by BACO - 2010</b></font></li> |
<li><font size=10 align="center"><b>Powered by BACO v3 - 2015</b></font></li> |
</ul> |
</div> |
</td> |
/impl/src/web/layout/scriptsBootstrapSoft.jsp |
---|
New file |
0,0 → 1,10 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/variables.less"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/lavish-bootstrap.css"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/bootstrap/css/bootstrap.css"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/jquerytables/bootstrap/css/bootstrap-theme.css"/> |
<script src="<%=request.getContextPath()%>/js/jquerytables/jquery-2.1.4.min.js"></script> |
<script src="<%=request.getContextPath()%>/js/jquerytables/bootstrap/js/bootstrap.min.js"></script> |
/impl/src/web/user/courseunits/courseunitworks.jsp |
---|
122,173 → 122,180 |
</baco:canManage> |
<p> |
<logic:notEmpty name="CourseUnitView" property="courseUnitAssignements"> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="saveDate"/></th> |
<th><bean:message key="courseunit.title"/></th> |
<th><bean:message key="courseunit.assignement.file"/></th> |
<th><bean:message key="courseunit.assignement.deliver.date"/></th> |
<th><bean:message key="courseunit.assignement.deliver.late.permission"/></th> |
<th><bean:message key="courseunit.assignement.deliver.type"/></th> |
<baco:canManage name="CourseUnitView"> |
<table id="myTable" class="tablesorter dataTable"> |
<thead> |
<tr> |
<th><bean:message key="saveDate"/></th> |
<th><bean:message key="courseunit.title"/></th> |
<th><bean:message key="courseunit.assignement.file"/></th> |
<th><bean:message key="courseunit.assignement.deliver.date"/></th> |
<th><bean:message key="courseunit.assignement.deliver.late.permission"/></th> |
<th><bean:message key="courseunit.assignement.deliver.type"/></th> |
<baco:canManage name="CourseUnitView"> |
<% |
request.setAttribute("colspanAssignement",6); |
%> |
<th><bean:message key="courseunit.status"/></th> |
<th><bean:message key="courseunit.assignement.delivers"/></th> |
<th colspan="3"><bean:message key="manage"/></th> |
</baco:canManage> |
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}"> |
<% |
request.setAttribute("colspanAssignement",8); |
%> |
<th><bean:message key="courseunit.assignement.deliver"/></th> |
<th><bean:message key="courseunit.assignement.deliver.time"/></th> |
<th><bean:message key="courseunit.assignement.deliver.grade"/></th> |
<th><bean:message key="courseunit.assignement.deliver.obs"/></th> |
</baco:isStudentOfCourseUnit> |
</tr> |
</thead> |
<tbody> |
<logic:iterate id="work" name="CourseUnitView" property="courseUnitAssignements" type="pt.estgp.estgweb.domain.views.CourseUnitAssignementView"> |
<tr> |
<td align="right"> |
<a >${work.formatedSaveDate}</a> |
</td> |
<td> |
<a href="javascript:showOrHideOne('assignement${work.id}')">${work.title}</a> |
</td> |
<td> |
<logic:notEmpty name="work" property="workFile"> |
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${work.workFile}">${work.repositoryFile.lastVersion.name} (${work.repositoryFile.lastVersion.sizeKb} Kb)</a> |
</logic:notEmpty> |
</td> |
<% |
request.setAttribute("colspanAssignement",6); |
String deliverDateStyleClass; |
if(work.isActive()) |
deliverDateStyleClass = "active"; |
else |
deliverDateStyleClass = "inactive"; |
%> |
<th><bean:message key="courseunit.status"/></th> |
<th><bean:message key="courseunit.assignement.delivers"/></th> |
<th colspan="3"><bean:message key="manage"/></th> |
</baco:canManage> |
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}"> |
<% |
request.setAttribute("colspanAssignement",8); |
%> |
<th><bean:message key="courseunit.assignement.deliver"/></th> |
<th><bean:message key="courseunit.assignement.deliver.time"/></th> |
<th><bean:message key="courseunit.assignement.deliver.grade"/></th> |
<th><bean:message key="courseunit.assignement.deliver.obs"/></th> |
</baco:isStudentOfCourseUnit> |
</tr> |
<logic:iterate id="work" name="CourseUnitView" property="courseUnitAssignements" type="pt.estgp.estgweb.domain.views.CourseUnitAssignementView"> |
<tr> |
<td align="right"> |
<a >${work.formatedSaveDate}</a> |
</td> |
<td> |
<a href="javascript:showOrHideOne('assignement${work.id}')">${work.title}</a> |
</td> |
<td> |
<logic:notEmpty name="work" property="workFile"> |
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${work.workFile}">${work.repositoryFile.lastVersion.name} (${work.repositoryFile.lastVersion.sizeKb} Kb)</a> |
</logic:notEmpty> |
</td> |
<% |
String deliverDateStyleClass; |
if(work.isActive()) |
deliverDateStyleClass = "active"; |
else |
deliverDateStyleClass = "inactive"; |
%> |
<td class="<%=deliverDateStyleClass%> number"> |
${work.deliverDate} |
</td> |
<td> |
<logic:equal value="true" name="work" property="lateDelivers"> |
<bean:message key="yes"/> |
</logic:equal> |
<logic:notEqual value="true" name="work" property="lateDelivers"> |
<bean:message key="no"/> |
</logic:notEqual> |
</td> |
<td> |
<bean:message key="courseunit.assignement.deliver.type.${work.deliverType}"/> |
</td> |
<baco:canManage name="CourseUnitView"> |
<td> |
<logic:equal value="true" name="work" property="status"> |
<bean:message key="status.active"/> |
</logic:equal> |
<logic:notEqual value="true" name="work" property="status"> |
<bean:message key="status.inactive"/> |
</logic:notEqual> |
</td> |
<td class="number"> |
<logic:greaterThan value="0" name="work" property="delivers"> |
<html:link action="/user/startLoadCourseUnitAssignementFromHome?courseUnitAssignementView.id=${work.id}">${work.delivers}</html:link> |
</logic:greaterThan> |
<logic:equal value="0" name="work" property="delivers"> |
${work.delivers} |
</logic:equal> |
</td> |
<td> |
<html:link action="/user/startEditCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}&courseUnitView.id=${CourseUnitView.id}"> |
<bean:message key="edit"/> |
</html:link> |
</td> |
<td> |
<a href="<%=request.getContextPath()%>/user/startValidateInvalidateCourseUnitWorksFromHome.do?courseUnitAssignementView.id=${work.id}"> |
<logic:equal value="true" name="work" property="status"> |
<bean:message key="deactivate"/> |
<td class="<%=deliverDateStyleClass%> number"> |
${work.deliverDate} |
</td> |
<td> |
<logic:equal value="true" name="work" property="lateDelivers"> |
<bean:message key="yes"/> |
</logic:equal> |
<logic:notEqual value="true" name="work" property="status"> |
<bean:message key="activate"/> |
<logic:notEqual value="true" name="work" property="lateDelivers"> |
<bean:message key="no"/> |
</logic:notEqual> |
</a> |
</td> |
<% |
String confirmDelete = MessageResources.getMessage(request, "courseunitwork.confirm.delete"); |
request.setAttribute("confirmDelete", confirmDelete); |
%> |
<td> |
<logic:equal value="0" name="work" property="delivers"> |
<html:link onclick="return confirm('${confirmDelete}')" action="/user/startDeleteCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}"> |
<bean:message key="delete"/> |
</html:link> |
</logic:equal> |
<logic:notEqual value="0" name="work" property="delivers"> |
<%--<bean:message key="delete"/>--%> |
</logic:notEqual> |
</td> |
</baco:canManage> |
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}"> |
<td nowrap="nowrap"> |
</td> |
<td> |
<bean:message key="courseunit.assignement.deliver.type.${work.deliverType}"/> |
</td> |
<baco:canManage name="CourseUnitView"> |
<td> |
<logic:equal value="true" name="work" property="status"> |
<bean:message key="status.active"/> |
</logic:equal> |
<logic:notEqual value="true" name="work" property="status"> |
<bean:message key="status.inactive"/> |
</logic:notEqual> |
</td> |
<td class="number"> |
<logic:greaterThan value="0" name="work" property="delivers"> |
<html:link action="/user/startLoadCourseUnitAssignementFromHome?courseUnitAssignementView.id=${work.id}">${work.delivers}</html:link> |
</logic:greaterThan> |
<logic:equal value="0" name="work" property="delivers"> |
${work.delivers} |
</logic:equal> |
</td> |
<td> |
<html:link styleClass="btn btn-default btn-sm" action="/user/startEditCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}&courseUnitView.id=${CourseUnitView.id}"> |
<span class="glyphicon glyphicon-pencil"></span> |
</html:link> |
</td> |
<td> |
<logic:equal value="true" name="work" property="status"> |
<a class="btn btn-success btn-sm" href="<%=request.getContextPath()%>/user/startValidateInvalidateCourseUnitWorksFromHome.do?courseUnitAssignementView.id=${work.id}"> |
<span class="glyphicon glyphicon-ok-circle"></span> |
</a> |
</logic:equal> |
<logic:notEqual value="true" name="work" property="status"> |
<a class="btn btn-warning btn-sm" href="<%=request.getContextPath()%>/user/startValidateInvalidateCourseUnitWorksFromHome.do?courseUnitAssignementView.id=${work.id}"> |
<span class="glyphicon glyphicon-ban-circle"></span> |
</a> |
</logic:notEqual> |
</td> |
<% |
String confirmDelete = MessageResources.getMessage(request, "courseunitwork.confirm.delete"); |
request.setAttribute("confirmDelete", confirmDelete); |
%> |
<td> |
<logic:equal value="0" name="work" property="delivers"> |
<% |
if(work.canDeliver(request)) |
{ |
%> |
<html:form action="/user/courseUnitControllerFromHome" enctype="multipart/form-data"> |
<input type="hidden" name="dispatch" value="deliverWork"> |
<html:hidden property="courseUnitAssignementView.id" value="${work.id}"/> |
<html:hidden property="courseUnitView.id" value="${CourseUnitView.id}"/> |
<html:file property="uploadFile"/> |
<html:link styleClass="btn btn-danger btn-sm" onclick="return confirm('${confirmDelete}')" action="/user/startDeleteCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}"> |
<span class="glyphicon glyphicon-remove"></span> |
</html:link> |
</logic:equal> |
<logic:notEqual value="0" name="work" property="delivers"> |
<%--<bean:message key="delete"/>--%> |
</logic:notEqual> |
</td> |
</baco:canManage> |
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}"> |
<td nowrap="nowrap"> |
<% |
if(work.canDeliver(request)) |
{ |
%> |
<html:form action="/user/courseUnitControllerFromHome" enctype="multipart/form-data"> |
<input type="hidden" name="dispatch" value="deliverWork"> |
<html:hidden property="courseUnitAssignementView.id" value="${work.id}"/> |
<html:hidden property="courseUnitView.id" value="${CourseUnitView.id}"/> |
<html:file property="uploadFile"/> |
<logic:notEmpty name="work" property="courseUnitDeliverableView"> |
<input type="submit" value="<bean:message key="replace"/>"/> |
</logic:notEmpty> |
<logic:empty name="work" property="courseUnitDeliverableView"> |
<input type="submit" value="<bean:message key="courseunit.assignement.deliver"/>"/> |
</logic:empty> |
</html:form> |
<% |
} |
%> |
</td> |
<logic:empty name="work" property="courseUnitDeliverableView"> |
<td class="statusWARNING"> |
<bean:message key="courseunit.assignement.deliver.time.no"/> |
</td> |
</logic:empty> |
<logic:notEmpty name="work" property="courseUnitDeliverableView"> |
<input type="submit" value="<bean:message key="replace"/>"/> |
<logic:equal name="work" property="lateDeliver" value="true"> |
<td class="statusERROR"> |
<bean:message key="courseunit.assignement.deliver.time.late"/> |
</td> |
</logic:equal> |
<logic:notEqual name="work" property="lateDeliver" value="true"> |
<td class="statusOK"> |
<bean:message key="courseunit.assignement.deliver.time.ok"/> |
</td> |
</logic:notEqual> |
</logic:notEmpty> |
<logic:empty name="work" property="courseUnitDeliverableView"> |
<input type="submit" value="<bean:message key="courseunit.assignement.deliver"/>"/> |
</logic:empty> |
</html:form> |
<% |
} |
%> |
</td> |
<logic:empty name="work" property="courseUnitDeliverableView"> |
<td class="statusWARNING"> |
<bean:message key="courseunit.assignement.deliver.time.no"/> |
</td> |
</logic:empty> |
<logic:notEmpty name="work" property="courseUnitDeliverableView"> |
<logic:equal name="work" property="lateDeliver" value="true"> |
<td class="statusERROR"> |
<bean:message key="courseunit.assignement.deliver.time.late"/> |
<td> |
${work.courseUnitDeliverableView.grade} |
</td> |
</logic:equal> |
<logic:notEqual name="work" property="lateDeliver" value="true"> |
<td class="statusOK"> |
<bean:message key="courseunit.assignement.deliver.time.ok"/> |
<td> |
${work.courseUnitDeliverableView.obs} |
</td> |
</logic:notEqual> |
</logic:notEmpty> |
<td> |
${work.courseUnitDeliverableView.grade} |
</td> |
<td> |
${work.courseUnitDeliverableView.obs} |
</td> |
</baco:isStudentOfCourseUnit> |
<logic:notEmpty name="work" property="courseUnitDeliverableView"> |
<td> |
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${work.courseUnitDeliverableView.fileStreamId}"><bean:message key="courseunit.assignement.deliver.version"/> (${work.courseUnitDeliverableView.deliverDateStr})</a> |
</td> |
</logic:notEmpty> |
</tr> |
<tr id="assignement${work.id}" style="<%=Globals.HIDDEN%>"> |
<td colspan="${colspanAssignement}"> |
${work.formatedDescription} |
</td> |
</tr> |
</logic:iterate> |
</baco:isStudentOfCourseUnit> |
<logic:notEmpty name="work" property="courseUnitDeliverableView"> |
<td> |
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${work.courseUnitDeliverableView.fileStreamId}"><bean:message key="courseunit.assignement.deliver.version"/> (${work.courseUnitDeliverableView.deliverDateStr})</a> |
</td> |
</logic:notEmpty> |
</tr> |
<tr id="assignement${work.id}" style="<%=Globals.HIDDEN%>"> |
<td colspan="${colspanAssignement}"> |
${work.formatedDescription} |
</td> |
</tr> |
</logic:iterate> |
</tbody> |
</table> |
</logic:notEmpty> |
<logic:empty name="CourseUnitView" property="courseUnitAssignements"> |
/impl/src/web/user/courseunits/courseunitEvaluation.jsp |
---|
4,6 → 4,8 |
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %> |
<%@ page import="java.util.ArrayList" %> |
<%@ page import="pt.estgp.estgweb.domain.Teacher" %> |
<%@ page import="pt.estgp.estgweb.domain.ConfigurationImpl" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
48,8 → 50,23 |
boolean closed = CourseUnitEvaluationForm.getCourseUnitEvaluationView().getCourseUnitEvaluation().isClosed(); |
boolean teacherComplete = CourseUnitEvaluationForm.getCourseUnitEvaluationView().getCourseUnitEvaluation().isTeacherComplete(); |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYearCreateTransaction(); |
List<String> activeDegrees = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveDegreesCreateTransaction(); |
List<Long> activeCourseIds = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveCourseIdsCreateTransaction(); |
boolean isActiveYear = activeYear != null && CourseUnitView.getImportYear().equals(activeYear); |
boolean isActiveDegree = activeDegrees!=null && activeDegrees.contains(CourseUnitView.getCourseView().getDegree()); |
boolean isActiveCourseId = activeCourseIds!=null && activeCourseIds.contains(CourseUnitView.getCourseView().getId()); |
boolean activePeriod = |
CourseUnitView.isEvaluationOpenByAdmin() || |
(isActiveYear && (isActiveCourseId || isActiveDegree)); |
boolean activePeriodRegular = |
(isActiveYear && (isActiveCourseId || isActiveDegree)); |
%> |
<div class="seccao"> |
<h2> |
105,9 → 122,21 |
{ |
if(!activePeriod) |
{ |
%> |
<h2>O periodo de avaliação desta unidade está <label style="background-color: red">ENCERRADO</label> independentemente do seu estado de validação. Apenas a administração tem autorização de excepcionalmente abrir a ficha para edição</h2> |
<br/> |
<% |
} |
if(!activePeriodRegular && activePeriod) |
{ |
%> |
<h2>Esta unidade foi <label style="background-color: #00ff00">ABERTA</label> pela administração para efectuar processo de avaliação extraordinário</h2> |
<br/> |
<% |
} |
<% |
if(closed) |
{ |
%> |
144,7 → 173,7 |
</table> |
<p class="success">Este formulário foi <label style="background-color: green">ACEITE</label> pela <bean:message key="user.role.${CourseUnitView.courseView.validationRole}"/></p> |
<% |
if(editCoordinatorPart) |
if(editCoordinatorPart && activePeriod) |
{ |
%> |
<html:form action="/user/courseUnitEvaluationController"> |
199,7 → 228,7 |
</table> |
<% |
if(editCoordinatorPart) |
if(editCoordinatorPart && activePeriod) |
{ |
%> |
<html:form action="/user/courseUnitEvaluationController"> |
258,9 → 287,15 |
<script> |
$( document ).ready(function() { |
<% |
if(!activePeriod) |
{ |
%> |
$("#formEdit :input").attr("disabled", true); |
<% |
} |
if(closed) |
{ |
%> |
{ |
%> |
$("#formEdit :input").attr("disabled", true); |
<% |
} |
288,7 → 323,7 |
</logic:equal> |
<% |
if(closed) |
if(closed || (!activePeriod && CourseUnitView.getEvaluationStreamId() !=null )) |
{ |
%> |
<% |
304,7 → 339,7 |
} |
%> |
<% |
} |
} |
%> |
<table class="dataTable tableDisabled" width="100%"> |
422,7 → 457,7 |
<tr> |
<td colspan="2"> |
<% |
if(!teacherComplete && !closed && (editCoordinatorPart || editTeacherPart)) |
if(activePeriod && !teacherComplete && !closed && (editCoordinatorPart || editTeacherPart)) |
{ |
%> |
431,7 → 466,7 |
<% |
} |
if(!closed && !teacherComplete && editTeacherPart) |
if(activePeriod && !closed && !teacherComplete && editTeacherPart) |
{ |
%> |
441,7 → 476,7 |
} |
if(!closed && editCoordinatorPart) |
if(activePeriod && !closed && editCoordinatorPart) |
{ |
%> |
/impl/src/web/user/courseunits/courseunit.jsp |
---|
1,8 → 1,7 |
<%@ page import="pt.estgp.estgweb.domain.Teacher" %> |
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %> |
<%@ page import="pt.estgp.estgweb.Globals" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.impl.ConfigurationDaoImpl" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %> |
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %> |
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
32,6 → 31,17 |
String activeEvaluationYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYearCreateTransaction(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{CourseUnitView.getCode(), CourseUnitView.getCourseCode()}; |
pt.estgp.estgweb.domain.views.CourseUnitView courseUnitViewInEvaluation = (pt.estgp.estgweb.domain.views.CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnitInEvaluationBySigesCodes", args, names); |
if(courseUnitViewInEvaluation != null) |
{ |
request.setAttribute("CourseUnitInEvaluation",courseUnitViewInEvaluation); |
} |
%> |
<jomm:messages/> |
64,11 → 74,11 |
</p> |
<% |
} |
else |
if(courseUnitViewInEvaluation != null) |
{ |
%> |
<p> |
<label class="WARNING">Atenção o relatório de avaliação deve ser preenchido no ano <%=activeEvaluationYear%> (Entrar no <%=activeEvaluationYear%> pelo menu lateral esquerdo antes de clicar em relatório de avaliação e confirmar no titulo da unidade).</label> |
<label class="WARNING">Atenção tem um relatório de avaliação em fase de preenchimento no ano <%=courseUnitViewInEvaluation.getImportYear()%> (Entrar no <%=courseUnitViewInEvaluation.getImportYear()%> pelo menu lateral esquerdo antes de clicar em relatório de avaliação e confirmar no titulo da unidade).</label> |
</p> |
<% |
} |
95,15 → 105,23 |
<html:form styleClass="form" action="/user/courseUnitControllerFromHome" enctype="multipart/form-data"> |
<input type="hidden" name="dispatch" value="update"/> |
<html:hidden property="courseUnitView.id"/> |
<h2><bean:message key="courseunit.objectives"/></h2> |
<p> |
<%--<baco:cantManage name="CourseUnitView">--%> |
<logic:present name="CourseUnitView" property="objectives"> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="courseunit.objectives"/> |
</div> |
<div class="panel-body"> |
<p><logic:present name="CourseUnitView" property="objectives"> |
${CourseUnitView.formatedObjectives} |
</logic:present> |
<logic:notPresent name="CourseUnitView" property="objectives"> |
<bean:message key="courseunit.objectives.not.available"/> |
</logic:notPresent> |
</logic:notPresent></p> |
</div> |
</div> |
<p> |
<%--<baco:cantManage name="CourseUnitView">--%> |
<%--</baco:cantManage>--%> |
<%--<baco:canManage name="CourseUnitView">--%> |
<%--<html:textarea styleClass="textarea" property="courseUnitView.objectives"/>--%> |
203,7 → 221,7 |
<h2><bean:message key="module.Announcements"/></h2> |
<logic:notEmpty name="CourseUnitView" property="announcements"> |
<div class="listCircleWhite"> |
<%--<div class="listCircleWhite"> |
<ul> |
<logic:iterate id="announcement" name="CourseUnitView" property="announcements" type="pt.estgp.estgweb.domain.views.AnnouncementView"> |
<li> |
213,7 → 231,20 |
</li> |
</logic:iterate> |
</ul> |
</div> |
</div>--%> |
<logic:iterate id="announcement" name="CourseUnitView" property="announcements" type="pt.estgp.estgweb.domain.views.AnnouncementView"> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<html:link action="/user/startLoadAnnouncementFromCourseUnit?id=${announcement.id}">${announcement.title}</html:link> |
</div> |
<div class="panel-body"> |
<p>${announcement.formatedText}</p> |
</div> |
<div class="panel-footer"><bean:message key="from"/>: ${announcement.owner.name} (${announcement.owner.username}) <bean:message key="at"/> ${announcement.formatedSaveDate} </div> |
</div> |
</logic:iterate> |
</logic:notEmpty> |
<logic:empty name="CourseUnitView" property="announcements"> |
<p><bean:message key="announcement.zero.placed"/></p> |
227,49 → 258,65 |
<div class="seccao"> |
<logic:notEmpty name="CourseUnitView" property="responsableTeacher"> |
<h2><bean:message key="courseunit.responsable"/></h2> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="number"/></th> |
<th><bean:message key="name"/></th> |
<th><bean:message key="email"/></th> |
</tr> |
<tr> |
<td> |
${CourseUnitView.responsableTeacher.code} |
</td> |
<td> |
<html:link action="${user}/startLoadTeacherCourseUnit${fromAction}?code=${CourseUnitView.responsableTeacher.code}&courseUnitView.id=${CourseUnitView.id}">${CourseUnitView.responsableTeacher.name}</html:link> |
</td> |
<td> |
${CourseUnitView.responsableTeacher.safeEmail} |
</td> |
</tr> |
</table> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="courseunit.responsable"/> |
</div> |
<div class="panel-body"> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="number"/></th> |
<th><bean:message key="name"/></th> |
<th><bean:message key="email"/></th> |
</tr> |
<tr> |
<td> |
${CourseUnitView.responsableTeacher.code} |
</td> |
<td> |
<html:link action="${user}/startLoadTeacherCourseUnit${fromAction}?code=${CourseUnitView.responsableTeacher.code}&courseUnitView.id=${CourseUnitView.id}">${CourseUnitView.responsableTeacher.name}</html:link> |
</td> |
<td> |
${CourseUnitView.responsableTeacher.safeEmail} |
</td> |
</tr> |
</table> |
</div> |
</div> |
</logic:notEmpty> |
<h2><bean:message key="courseunit.teachers"/></h2> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="number"/></th> |
<th><bean:message key="name"/></th> |
<th><bean:message key="email"/></th> |
</tr> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="courseunit.teachers"/> |
</div> |
<div class="panel-body"> |
<table class="dataTable tablesorter"> |
<tr> |
<th><bean:message key="number"/></th> |
<th><bean:message key="name"/></th> |
<th><bean:message key="email"/></th> |
</tr> |
<logic:iterate id="teacher" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView"> |
<tr> |
<td> |
${teacher.code} |
</td> |
<td> |
<html:link action="${user}/startLoadTeacherCourseUnit${fromAction}?code=${teacher.code}&courseUnitView.id=${CourseUnitView.id}">${teacher.name}</html:link> |
</td> |
<td> |
${teacher.safeEmail} |
</td> |
</tr> |
</logic:iterate> |
</table> |
</div> |
</div> |
<logic:iterate id="teacher" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView"> |
<tr> |
<td> |
${teacher.code} |
</td> |
<td> |
<html:link action="${user}/startLoadTeacherCourseUnit${fromAction}?code=${teacher.code}&courseUnitView.id=${CourseUnitView.id}">${teacher.name}</html:link> |
</td> |
<td> |
${teacher.safeEmail} |
</td> |
</tr> |
</logic:iterate> |
</table> |
</div> |
<div class="seccao"> |
<h2><bean:message key="courseunit.summaries"/></h2> |
277,12 → 324,12 |
<baco:hasRole role="teacher"> |
<p><a href="<%=request.getContextPath()%>/ftpProxyStream/ionline${CourseUnitView.sumariosPathFileIntranet}">Descarregar PDF</a></p> |
<logic:greaterThan value="0" name="CourseUnitView" property="lateSummaries"> |
<p style="background-color: yellow">Tem <bean:write name="CourseUnitView" property="lateSummaries"/> |
<p style="background-color: yellow">Alerta.Tem <bean:write name="CourseUnitView" property="lateSummaries"/> |
<logic:equal name="CourseUnitView" property="lateSummaries" value="1">Sumário</logic:equal> |
<logic:greaterThan name="CourseUnitView" property="lateSummaries" value="1">Sumários</logic:greaterThan> |
por preencher. |
lançados pelos serviços que não estão preenchidos e estão abertos há mais de 48 horas. Se este for um falso alerta pedimos desculpa pelo incómodo. |
<a target="_blank" href="http://netpa.ipportalegre.pt">Aceda ao NETPA para regularizar</a> |
ou ligue para o Sr José Luis para confirmar a situação:</a> |
ou entre em contacto com o Sr José Luis para confirmar a situação:</a> |
</p> |
<ul> |
/impl/src/web/user/courseunits/menu.jsp |
---|
11,6 → 11,8 |
<%@ page import="pt.estgp.estgweb.Globals" %> |
<%@ page import="pt.estgp.estgweb.utils.ConfigManager" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="pt.estgp.estgweb.domain.CourseUnit" %> |
<%@ page import="pt.estgp.estgweb.domain.views.CourseUnitView" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
18,15 → 20,19 |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %> |
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<% |
<% |
String activeEvaluationYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYearCreateTransaction(); |
try{ |
if (request.getAttribute("BlogView") != null) |
{ |
BlogView bV = (BlogView) request.getAttribute("BlogView"); |
request.setAttribute("CourseUnitView",bV.getCourseUnitView()); |
} |
boolean activePeriod = |
DaoFactory.getConfigurationDaoImpl().isCourseUniEvaluationActivePeriodInTransaction(CourseUnitView.getId()); |
%> |
48,8 → 54,7 |
%> |
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<div class="linkMenuBlock"> |
<div class="linkMenuBlockTitle"><bean:message key="courseunit.menu.unit"/></div> |
<div class="linkLeftMenu"> |
83,7 → 88,7 |
<li style="vertical-align: middle"> |
<html:link action="/user/startLoadCourseUnitEvaluation.do?courseUnitId=${CourseUnitView.id}"><bean:message key="courseunit.menu.evaluation"/> |
<% |
if(activeEvaluationYear != null && activeEvaluationYear.equals(CourseUnitView.getImportYear())) |
if(activePeriod && !CourseUnitView.isValidEvaluation()) |
{ |
%> |
<img src="<%=request.getContextPath()%>/imgs/preencher.gif" width="35px"/> |
186,11 → 191,19 |
<% |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{CourseUnitView.getCode(), CourseUnitView.getCourseCode()}; |
pt.estgp.estgweb.domain.views.CourseUnitView courseUnitViewInEvaluation = (pt.estgp.estgweb.domain.views.CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnitInEvaluationBySigesCodes", args, names); |
names = new String[]{}; |
args = new Object[]{CourseUnitView.getCode(), CourseUnitView.getCourseCode()}; |
List<pt.estgp.estgweb.domain.views.CourseUnitView> courseUnitViews = (List<pt.estgp.estgweb.domain.views.CourseUnitView>) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnitsBySigesCodes", args, names); |
if(courseUnitViews.size() > 1) |
{ |
213,16 → 226,29 |
} |
%> |
</div> |
<% |
%> |
<div class="linkLeftMenu"> |
<div class="listClean"> |
<ul> |
<logic:iterate id="item" name="OldUnits"> |
<logic:iterate id="item" name="OldUnits" type="pt.estgp.estgweb.domain.views.CourseUnitView"> |
<li> |
<logic:equal value="${CourseUnitView.id}" name="item" property="id"> |
>${item.importYear} |
</logic:equal> |
<logic:notEqual value="${CourseUnitView.id}" name="item" property="id"> |
<html:link action="${user}/startLoadCourseUnit${fromAction}?courseUnitView.id=${item.id}">${item.importYear}</html:link> |
<html:link action="${user}/startLoadCourseUnit${fromAction}?courseUnitView.id=${item.id}"> |
${item.importYear} |
<% |
if(courseUnitViewInEvaluation !=null && courseUnitViewInEvaluation.getId()==item.getId()) |
{ |
%> |
<img src="<%=request.getContextPath()%>/imgs/preencher.gif" width="35px"/> |
<% |
} |
%> |
</html:link> |
</logic:notEqual> |
</li> |
/impl/src/web/user/home/teacher.jsp |
---|
149,8 → 149,8 |
try{ |
HibernateUtils.getCurrentSession().beginTransaction(); |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
if(activeYear != null) |
{ |
List<String> activeDegrees = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveDegrees(); |
List<CourseUnit> evaluations = DaoFactory.getCourseUnitDaoImpl().loadTeacherUnitsMissingEvaluation(UserSession); |
List<CourseUnit> programs = DaoFactory.getCourseUnitDaoImpl().loadMissingPrograms(UserSession.getUser().getId()); |
if(programs != null && programs.size() > 0 || evaluations!= null && evaluations.size() > 0) |
184,7 → 184,28 |
if(evaluations != null && evaluations.size() > 0) |
{ |
%> |
<div class="panel-body-h1">Relatórios de avaliação por preencher/entregar</div> |
<div class="panel-body-h1">Relatórios de avaliação por preencher/entregar |
<% |
if(activeDegrees != null) |
{ |
%> |
(graus em processo de validação: |
<% |
String sep = ""; |
for(String activeDegree: activeDegrees) |
{ |
%> |
<%=sep + MessageResources.getInstance(request).getMessage("course."+activeDegree)%> |
<% |
sep = ", "; |
} |
%> |
) |
<% |
} |
%> |
</div> |
<ul> |
<% |
for(CourseUnit cu: evaluations) |
203,7 → 224,7 |
</div> |
<% |
} |
} |
HibernateUtils.getCurrentSession().getTransaction().commit(); |
}catch(Throwable e) |
{ |
218,8 → 239,8 |
try{ |
HibernateUtils.getCurrentSession().beginTransaction(); |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
if(activeYear != null) |
{ |
List<String> activeDegrees = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveDegrees(); |
List<CourseUnitDaoImpl.CourseMissingValidationProgram> result0 = DaoFactory.getCourseUnitDaoImpl().loadMissingPrograms(UserSession); |
List<CourseUnitDaoImpl.CourseMissingValidationProgram> result1 = DaoFactory.getCourseUnitDaoImpl().loadMissingProgramValidate(UserSession); |
List<CourseUnitDaoImpl.CourseMissingValidationEvaluation> result2 = DaoFactory.getCourseUnitDaoImpl().loadMissingEvaluationValidate(UserSession); |
287,7 → 308,27 |
%> |
<div class="panel-body-h1">Relatórios de avaliação por validar</div> |
<div class="panel-body-h1">Relatórios de avaliação por validar |
<% |
String sep = ""; |
if(activeDegrees != null) |
{ |
%> |
(graus em processo de validação: |
<% |
for(String activeDegree: activeDegrees) |
{ |
%> |
<%=sep + MessageResources.getInstance(request).getMessage("course."+activeDegree)%> |
<% |
sep = ", "; |
} |
%> |
) |
<% |
} |
%> |
</div> |
<% |
for(CourseUnitDaoImpl.CourseMissingValidationEvaluation mis:result2) |
301,7 → 342,7 |
for(CourseUnit cu: mis.courseUnits) |
{ |
%> |
<li><a href="<%=request.getContextPath()%>/user/startLoadCourseUnitEvaluation.do?courseUnitId=<%=cu.getId()%>"><%=cu.getImportYear()%> / <%=cu.getName()%> / <%=cu.getCode()%></a></li> |
<li><a href="<%=request.getContextPath()%>/user/startLoadCourseUnitEvaluation.do?courseUnitId=<%=cu.getId()%>"><%=cu.getName()%> / <%=cu.getCode()%></a></li> |
<% |
} |
%> |
323,7 → 364,27 |
%> |
<div class="panel-body-h1">Relatórios de avaliação ainda não preenchidos</div> |
<div class="panel-body-h1">Relatórios de avaliação ainda não preenchidos |
<% |
String sep = ""; |
if(activeDegrees != null) |
{ |
%> |
(graus em processo de validação: |
<% |
for(String activeDegree: activeDegrees) |
{ |
%> |
<%=sep + MessageResources.getInstance(request).getMessage("course."+activeDegree)%> |
<% |
sep = ","; |
} |
%> |
) |
<% |
} |
%> |
</div> |
<% |
for(CourseUnitDaoImpl.CourseMissingValidationEvaluation mis:result3) |
337,7 → 398,7 |
for(CourseUnit cu: mis.courseUnits) |
{ |
%> |
<li><a href="<%=request.getContextPath()%>/user/startLoadCourseUnitEvaluation.do?courseUnitId=<%=cu.getId()%>"><%=cu.getImportYear()%> / <%=cu.getName()%> / <%=cu.getCode()%></a></li> |
<li><a href="<%=request.getContextPath()%>/user/startLoadCourseUnitEvaluation.do?courseUnitId=<%=cu.getId()%>"><%=cu.getName()%> / <%=cu.getCode()%></a></li> |
<% |
} |
%> |
357,7 → 418,7 |
</div> |
<% |
} |
} |
HibernateUtils.getCurrentSession().getTransaction().commit(); |
}catch(Throwable e) |
{ |
/impl/src/web/user/serviceZone/topnavConfigurationTasks.jsp |
---|
New file |
0,0 → 1,10 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "configuration.tasks"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/user/serviceZone/topnavConfigurationTaskLog.jsp |
---|
New file |
0,0 → 1,11 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace("/user/configurationSchedulleTasks.do", "configuration.tasks"); |
topNav.addNavPlace(null, "configuration.taskLog"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/user/serviceZone/serviceZone.jsp |
---|
74,19 → 74,20 |
<div class="head"> |
<bean:message key="intranet.services"/> |
</div> |
<ul> |
<ul> |
<li><bean:message key="configuration"/> |
<ul> |
<li><a href="<%=request.getContextPath()%>/user/configurationGrades.do"><bean:message key="configuration.grades"/></a></li> |
<li><a href="<%=request.getContextPath()%>/user/configurationDirectories.do"><bean:message key="configuration.directories"/></a></li> |
<baco:hasRole role="admin,services,all"> |
<ul> |
<li><bean:message key="configuration"/> |
</ul> |
</li> |
</ul> |
<ul> |
<li><a href="<%=request.getContextPath()%>/user/configurationGrades.do"><bean:message key="configuration.grades"/></a></li> |
<li><a href="<%=request.getContextPath()%>/user/configurationDirectories.do"><bean:message key="configuration.directories"/></a></li> |
<li><a href="<%=request.getContextPath()%>/user/configurationSchedulleTasks.do"><bean:message key="configuration.tasks"/></a></li> |
</ul> |
</li> |
</ul> |
</baco:hasRole> |
<baco:isModuleOn module="processes"> |
<ul> |
/impl/src/web/user/serviceZone/topnavConfigurationJobTasks.jsp |
---|
New file |
0,0 → 1,11 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace("/user/configurationSchedulleTasks.do", "configuration.tasks"); |
topNav.addNavPlace(null, "configuration.jobtasks"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/user/serviceZone/topnavConfigurationTaskLogFromJobTasks.jsp |
---|
New file |
0,0 → 1,12 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace("/user/configurationSchedulleTasks.do", "configuration.tasks"); |
topNav.addNavPlace("/user/configurationJobTasks.do", "configuration.jobtasks"); |
topNav.addNavPlace(null, "configuration.taskLog"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
Property changes: |
Added: svn:executable |
+ * |
/impl/src/web/user/serviceZone/topnavConfigurationTask.jsp |
---|
New file |
0,0 → 1,11 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace("/user/configurationSchedulleTasks.do", "configuration.tasks"); |
topNav.addNavPlace(null, "configuration.task"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
Property changes: |
Added: svn:executable |
+ * |
/impl/build.xml |
---|
476,6 → 476,7 |
classpathref="pathToToolsLib" classpath="${build.dir.classes}"/> |
<target name="generateHibernateSql" depends="build"> |
<schemaexport |
properties="${jdbc.properties.build}/${jdbc.properties.filename}" |
/common/json/genson-0.97.jar |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |