Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1845 → Rev 1848

/branches/v3/impl/conf/WEB-INF/struts/struts-json-ws.xml
44,13 → 44,15
 
<action path="/startGenerateChaveApps" forward="page.gen.chave.apps.password.pae"/>
 
 
<action path="/ws-authenticate" forward="/authenticateWidget.do?dispatch=executeService&amp;serviceJson=authenticateApp"/>
<!--SERVICOS SEGUROS AO NIVEL DO BERSERK-->
<action path="/secure/ws-login-challenge" forward="/user/jsonModel.do?dispatch=executeSimpleServiceOkFail&amp;serviceJson=wsLoginMobileChallenge"/>
<action path="/secure/ws-student-list" forward="/user/jsonModel.do?dispatch=executeService&amp;serviceJson=wsListStudents"/>
<action path="/secure/ws-teacher-list" forward="/user/jsonModel.do?dispatch=executeService&amp;serviceJson=wsListTeachers"/>
<action path="/secure/ws-coordinators-list" forward="/user/jsonModel.do?dispatch=executeService&amp;serviceJson=wsListCoordinators"/>
 
 
 
<!--SERVICOS ABERTOS POR ENQUANTO-->
<!--<action path="/ws-units-report-list" forward="/json/coursesServices.do?dispatch=executeService&amp;serviceJson=getCourseUnitsEvaluations"/>-->
<action path="/ws-course-pedagogic-results-list" forward="/json/coursesServices.do?dispatch=executeService&amp;serviceJson=findPedagogicReport4Period"/>
<action path="/ws-units-dtp-stats" forward="/json/coursesServices.do?dispatch=executeService&amp;serviceJson=getCourseUnitDtpStats"/>
/branches/v3/impl/conf/WEB-INF/struts/struts-pae.xml
31,7 → 31,7
<action path="/WelcomePedagogicSurvey" forward="page.welcome.pae"/>
 
<action path="/user/ChangePassword" forward="page.change.password.pae"/>
<action path="/requestChangePassword" forward="page.request.change.password.pae"/>
<action path="/nofilter/requestChangePassword" forward="page.request.change.password.pae"/>
<action path="/user/changeMyPassword"
type="pt.estgp.estgweb.web.controllers.authenticate.AuthenticateController"
name="EmptyForm"
42,7 → 42,7
<forward name="success" path="page.pae.separators.home"/>
<forward name="fail.change.pass" path="page.change.password.pae"/>
</action>
<action path="/requestChangeMyPassword"
<action path="/auth/requestChangeMyPassword"
type="pt.estgp.estgweb.web.controllers.authenticate.AuthenticateController"
name="EmptyForm"
scope="request"
/branches/v3/impl/conf/WEB-INF/web.xml
88,7 → 88,8
/js,
/layout/themes,
/wsjson/api,
/wsjson/api/app/
/wsjson/api/app/,
/auth/
</param-value>
</init-param>
<init-param>
/branches/v3/impl/conf/berserk/sd.xml
74,6 → 74,18
<chain name="MobileApps"/>
</filterChains>
</service>
<service>
<name>WSAPIListCoordinators</name>
<implementationClass>pt.estgp.estgweb.services.profile.ListUsersService</implementationClass>
<description>Authenticates a User</description>
<isTransactional>true</isTransactional>
<defaultMethod>listCoordinatorTeachersService</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="MobileApps"/>
</filterChains>
</service>
 
<service>
<name>AuthenticateApp</name>
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/ExtensibleDocObject.java
New file
0,0 → 1,20
package pt.estgp.estgweb.utils.documentBuilder;
 
import pt.estgp.estgweb.utils.ClassUtils;
 
import java.util.List;
 
/**
* Created by jorgemachado on 07/11/17.
*/
public class ExtensibleDocObject
{
public List<String> getAllSuperClasses()
{
return ClassUtils.getAllSuperClasses(this.getClass());
}
public void setAllSuperClasses(List<String> superclasses)
{
 
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/DocumentSection.java
6,10 → 6,10
/**
* Created by jorgemachado on 11/10/17.
*/
public class DocumentSection
public class DocumentSection extends SectionContainer
{
String title = "";
List<DocumentSection> subSections = new ArrayList<DocumentSection>();
 
List<DocComponent> components = new ArrayList<DocComponent>();
 
public DocumentSection() {
27,14 → 27,7
this.title = title;
}
 
public List<DocumentSection> getSubSections() {
return subSections;
}
 
public void setSubSections(List<DocumentSection> subSections) {
this.subSections = subSections;
}
 
public List<DocComponent> getComponents() {
return components;
}
43,19 → 36,8
this.components = components;
}
 
public DocumentSection findSubSection(Class sectionClass)
{
if(getSubSections() != null)
for(DocumentSection section: getSubSections())
{
if(section.getClass().equals(sectionClass))
{
return section;
}
}
return null;
}
 
 
public DocComponent findDocComponent(Class compClass)
{
if(getComponents() != null)
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/SectionContainer.java
New file
0,0 → 1,36
package pt.estgp.estgweb.utils.documentBuilder;
 
import java.util.ArrayList;
import java.util.List;
 
/**
* Created by jorgemachado on 07/11/17.
*/
public class SectionContainer extends ExtensibleDocObject
{
List<DocumentSection> sections = new ArrayList<DocumentSection>();
 
public List<DocumentSection> getSections() {
return sections;
}
 
public void setSections(List<DocumentSection> sections) {
this.sections = sections;
}
 
public DocumentSection findSection(Class sectionClass)
{
if(getSections() != null)
for(DocumentSection section: getSections())
{
if(section.getClass().equals(sectionClass))
{
return section;
}
}
return null;
}
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/DocComponent.java
3,5 → 3,5
/**
* Created by jorgemachado on 11/10/17.
*/
public class DocComponent {
public class DocComponent extends ExtensibleDocObject {
}
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/Document.java
5,27 → 5,18
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.domain.utils.JsonView;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.ReportCourseDocument;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
/**
* Created by jorgemachado on 31/10/17.
*/
public class Document implements JsonView
public class Document extends SectionContainer implements JsonView
{
List<DocumentSection> sections = new ArrayList<DocumentSection>();
 
public List<DocumentSection> getSections() {
return sections;
}
 
public void setSections(List<DocumentSection> sections) {
this.sections = sections;
}
 
private static Genson gensonGenericLoad;
static{
gensonGenericLoad = new GensonBuilder()
40,9 → 31,9
.create();
}
 
public static ReportCourseDocument fromJson(String json)
public static CourseReportDocument fromJson(String json)
{
return gensonGenericLoad.deserialize(json,ReportCourseDocument.class);
return gensonGenericLoad.deserialize(json,CourseReportDocument.class);
}
 
 
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/Globals.java
447,8 → 447,8
 
public static final String ROLE_INVITED = "invited";
 
public static final String SYSTEM_WSJSON_SERVICE_COURSE_REPORT_RESULTS = ConfigProperties.getProperty("system.wsjson.service.course.report.quest.result.api");
public static final String SYSTEM_WSJSON_SERVICE_COURSE_UNITS_EVALUATION = ConfigProperties.getProperty("system.wsjson.service.course.units.reports.api");
public static final String SYSTEM_WSJSON_SERVICE_COURSE_QUESTIONARIOS_REPORT_RESULTS = ConfigProperties.getProperty("system.wsjson.service.course.report.quest.result.api");
public static final String SYSTEM_WSJSON_SERVICE_COURSE_UNITS_EVALUATION_REPORT = ConfigProperties.getProperty("system.wsjson.service.course.units.reports.api");
public static final String SYSTEM_WSJSON_SERVICE_COURSE_UNITS_DTP_STATS = ConfigProperties.getProperty("system.wsjson.service.course.units.dtp.stats.api");
 
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/CourseReportServices.java
1,6 → 1,7
package pt.estgp.estgweb.services.courses;
 
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.StreamsUtils;
import org.apache.log4j.Logger;
import org.json.JSONArray;
32,6 → 33,7
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
 
/**
52,52 → 54,8
/****************************************************************************/
 
 
/**
* Gera uma tabela de estatisticas dos DTP recorrendo ao servico WS de
* load de tabelas DTP, caso o serviço nao devolva unidades são criadas novas
* com os valores a falso.
*
* @param courseCode
* @param year
* @return UnitsDtpTable
* @throws IOException
* @throws JSONException
*/
public UnitsDtpTable updateDtpStatsTable4Course(ReportCourseDocument reportCourseDocument, String courseCode, String year) throws IOException, JSONException
{
 
ReportsUcSummarySection reportsUcSummarySection = (ReportsUcSummarySection) reportCourseDocument.findDocumentSection(ReportsUcSummarySection.class);
UnitsDtpTable unitsDtpTable = (UnitsDtpTable) reportsUcSummarySection.findDocComponent(UnitsDtpTable.class);
UnitDtpSemester semester1 = new UnitDtpSemester();
UnitDtpSemester semester2 = new UnitDtpSemester();
unitsDtpTable.setSemester1(semester1);
unitsDtpTable.setSemester2(semester2);
 
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadByCourseSiges(courseCode, year);
 
String json = loadCourseUnitDtpStats(courseCode,year);
JSONObject response = new JSONObject(json);
JSONArray stats = (JSONArray) response.get("dtpstats");
CourseUnitDtpStat[] statsLoaded = CourseUnitDtpStat.fromJson(stats);
 
for(CourseUnit cu :units)
{
CourseUnitDtpStat statFound = CourseReportUtils.findCourseUnitDtpStat(statsLoaded, (CourseUnitImpl) cu);
if(statFound == null)
{
statFound = CourseReportUtils.createCourseUnitDtpStat(cu);
}
 
if(((CourseUnitImpl) cu).getSemestreAbsolutoS1S2().equals("S1"))
semester1.getCourseUnitDtpStats().add(statFound);
else
semester2.getCourseUnitDtpStats().add(statFound);
}
 
return unitsDtpTable;
 
}
 
/**
*
* @param courseCode
106,9 → 64,9
* @throws IOException
* @throws JSONException
*/
public ReportCourseDocument createNewCourseReportDocument(String courseCode,String year) throws IOException, JSONException
public CourseReportDocument createNewCourseReportDocument(String courseCode,String year) throws IOException, JSONException
{
ReportCourseDocument reportCourseDocument = new ReportCourseDocument();
CourseReportDocument reportCourseDocument = new CourseReportDocument();
reportCourseDocument.init();
 
 
133,9 → 91,9
return reportCourseDocument;
}
 
public SurveysResultsSection updateSurveysDataTables(String courseCode, String year, ReportCourseDocument reportCourseDocument) throws IOException, JSONException {
public SurveysResultsSection updateSurveysDataTables(String courseCode, String year, CourseReportDocument reportCourseDocument) throws IOException, JSONException {
SurveysSection surveysSection = (SurveysSection) reportCourseDocument.findDocumentSection(SurveysSection.class);
SurveysResultsSection surveysResultsSection = (SurveysResultsSection) surveysSection.findSubSection(SurveysResultsSection.class);
SurveysResultsSection surveysResultsSection = (SurveysResultsSection) surveysSection.findSection(SurveysResultsSection.class);
QuestionariosDataTableComponent dataTableComponentS1 = (QuestionariosDataTableComponent) surveysResultsSection.getComponents().get(0);
QuestionariosDataTableComponent dataTableComponentS2 = (QuestionariosDataTableComponent) surveysResultsSection.getComponents().get(1);
 
154,7 → 112,7
* @param reportCourseDocument
* @return UnitsLearningResultsTable
*/
public UnitsLearningResultsTable updateCleanLearningResultsFromCourseUnitsSections(ReportCourseDocument reportCourseDocument)
public UnitsLearningResultsTable updateCleanLearningResultsFromCourseUnitsSections(CourseReportDocument reportCourseDocument)
{
CourseUnitsReportsSection unitReportsSection = (CourseUnitsReportsSection) reportCourseDocument.findDocumentSection(CourseUnitsReportsSection.class);
 
163,7 → 121,7
 
Map<Integer,UnitsLearningResultYear> anosPlano = new HashMap<Integer, UnitsLearningResultYear>();
Map<String,UnitsLearningResultSemester> anoSemestre = new HashMap<String, UnitsLearningResultSemester>();
for(DocumentSection subSection : unitReportsSection.getSubSections())
for(DocumentSection subSection : unitReportsSection.getSections())
{
CourseUnitSection unitSection = (CourseUnitSection) subSection;
int anoPlano = unitSection.getAnoPlano();
345,6 → 303,62
 
 
/**
* Gera uma tabela de estatisticas dos DTP recorrendo ao servico WS de
* load de tabelas DTP, caso o serviço nao devolva unidades são criadas novas
* com os valores a falso.
*
* @param courseCode
* @param year
* @return UnitsDtpTable
* @throws IOException
* @throws JSONException
*/
public UnitsDtpTable updateDtpStatsTable4Course(CourseReportDocument reportCourseDocument, String courseCode, String year) throws IOException, JSONException
{
 
ReportsUcSummarySection reportsUcSummarySection = (ReportsUcSummarySection) reportCourseDocument.findDocumentSection(ReportsUcSummarySection.class);
UnitsDtpTable unitsDtpTable = (UnitsDtpTable) reportsUcSummarySection.findDocComponent(UnitsDtpTable.class);
UnitDtpSemester semester1 = new UnitDtpSemester();
UnitDtpSemester semester2 = new UnitDtpSemester();
unitsDtpTable.setSemester1(semester1);
unitsDtpTable.setSemester2(semester2);
 
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadByCourseSiges(courseCode, year);
 
CourseUnitDtpStat[] statsLoaded;
try
{
String json = loadCourseUnitDtpStats(courseCode,year);
JSONObject response = new JSONObject(json);
JSONArray stats = (JSONArray) response.get("dtpstats");
statsLoaded = CourseUnitDtpStat.fromJson(stats);
}
catch(Exception e)
{
logger.error(e,e);
statsLoaded = new CourseUnitDtpStat[0];
}
 
 
for(CourseUnit cu :units)
{
CourseUnitDtpStat statFound = CourseReportUtils.findCourseUnitDtpStat(statsLoaded, (CourseUnitImpl) cu);
if(statFound == null)
{
statFound = CourseReportUtils.createCourseUnitDtpStat(cu);
}
 
if(((CourseUnitImpl) cu).getSemestreAbsolutoS1S2().equals("S1"))
semester1.getCourseUnitDtpStats().add(statFound);
else
semester2.getCourseUnitDtpStats().add(statFound);
}
 
return unitsDtpTable;
 
}
 
/**
* Update course unit sections with reports, this method dows not change learning results table
* values from learning results stays in unit but does not change learning results Table
* @param courseCode
354,18 → 368,27
* @throws IOException
* @return a list of CourseUnitSection
*/
public List<DocumentSection> updateCleanCourseUnitSections(String courseCode, String year, ReportCourseDocument reportCourseDocument) throws JSONException, IOException {
public List<DocumentSection> updateCleanCourseUnitSections(String courseCode, String year, CourseReportDocument reportCourseDocument) throws JSONException, IOException {
 
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadByCourseSiges(courseCode, year);
 
String courseUnitSectionsJson = loadCourseEvaluationSections(courseCode,year);
JSONObject object = new JSONObject(courseUnitSectionsJson);
JSONArray evaluations = object.getJSONArray("evaluations");
CourseUnitSection[] courseUnitSections = CourseUnitSection.fromJsonArray(evaluations.toString());
CourseUnitsReportsSection unitReportsSection = (CourseUnitsReportsSection) reportCourseDocument.findDocumentSection(CourseUnitsReportsSection.class);
CourseUnitSection[] courseUnitSections = null;
try{
String courseUnitSectionsJson = loadCourseEvaluationSections(courseCode,year);
JSONObject object = new JSONObject(courseUnitSectionsJson);
JSONArray evaluations = object.getJSONArray("evaluations");
courseUnitSections = CourseUnitSection.fromJsonArray(evaluations.toString());
}
catch(Exception e)
{
logger.error(e,e);
courseUnitSections = new CourseUnitSection[0];
}
 
CourseUnitsReportsSection unitReportsSection = (CourseUnitsReportsSection) reportCourseDocument.findDocumentSection(CourseUnitsReportsSection.class);
 
List<DocumentSection> subSections = new ArrayList<DocumentSection>();
unitReportsSection.setSubSections(subSections);
unitReportsSection.setSections(subSections);
for(CourseUnit cu :units)
{
CourseUnitSection sectionFound = CourseReportUtils.findCourseUnitSection(courseUnitSections, (CourseUnitImpl) cu);
381,7 → 404,7
cu.setCourseUnitEvaluation(courseUnitEvaluation);
sectionFound.setCourseUnitEvaluation(courseUnitEvaluation);
}
unitReportsSection.getSubSections().add(sectionFound);
unitReportsSection.getSections().add(sectionFound);
}
return subSections;
}
389,20 → 412,20
 
 
public static void main(String[] args) throws IOException, JSONException {
/*AbstractDao.getCurrentSession().beginTransaction();
AbstractDao.getCurrentSession().beginTransaction();
 
ReportCourseDocument reportCourseDocument = new CourseReportServices().createNewCourseReportDocument("44","201617");
CourseReportDocument reportCourseDocument = new CourseReportServices().createNewCourseReportDocument("44","201617");
System.out.println(reportCourseDocument.toJson());
AbstractDao.getCurrentSession().getTransaction().commit();*/
AbstractDao.getCurrentSession().getTransaction().commit();
 
//System.setProperty("javax.net.ssl.trustStore", "/JORGE/COPIAS/.keystore");
//System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
 
URL url = new URL("http://pae.ipportalegre.pt/wsjson/api/app/ws-course-pedagogic-results-list?code=44&year=201617&period=S1");
/*URL url = new URL("http://pae.ipportalegre.pt/wsjson/api/app/ws-course-pedagogic-results-list?code=44&year=201617&period=S1");
 
 
 
System.out.println(StreamsUtils.readString(url.openStream()));
System.out.println(StreamsUtils.readString(url.openStream()));*/
}
 
/*
465,12 → 488,21
}
else
{
URL url = new URL(Globals.SYSTEM_WSJSON_SERVICE_COURSE_UNITS_DTP_STATS + "?code=" + courseCode + "&year=" + year);
InputStream is = url.openStream();
String serviceUrl = Globals.SYSTEM_WSJSON_SERVICE_COURSE_UNITS_DTP_STATS + "?code=" + courseCode + "&year=" + year;
String json = "{ dtpstats : [] }";
try{
URL url = new URL(serviceUrl);
 
String json = StreamsUtils.readString(is);
is.close();
//TODO temos de extrair o resultado do RESPONSE
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
 
json = StreamsUtils.readString(is);
is.close();
}catch(Throwable e)
{
logger.error("Connecting " + serviceUrl,e);
return json;
}
JSONObject jsonObject = new JSONObject(json);
return jsonObject.get("response").toString();
}
493,7 → 525,7
public String loadCourseEvaluationSections(String courseCode,String year) throws JSONException, IOException {
 
 
if(Globals.SYSTEM_WSJSON_SERVICE_COURSE_UNITS_EVALUATION.indexOf("localhost")>=0)
if(Globals.SYSTEM_WSJSON_SERVICE_COURSE_UNITS_EVALUATION_REPORT.indexOf("localhost")>=0)
{
JSONArray array = new JSONArray();
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadByCourseSiges(courseCode, year);
510,11 → 542,22
}
else
{
URL url = new URL(Globals.SYSTEM_WSJSON_SERVICE_COURSE_UNITS_EVALUATION + "?code=" + courseCode + "&year=" + year);
InputStream is = url.openStream();
String json = "{ evaluations : [] }";
String serviceUrl = Globals.SYSTEM_WSJSON_SERVICE_COURSE_UNITS_EVALUATION_REPORT + "?code=" + courseCode + "&year=" + year;
try{
URL url = new URL(serviceUrl);
 
String json = StreamsUtils.readString(is);
is.close();
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
 
json = StreamsUtils.readString(is);
is.close();
}catch(Throwable e)
{
logger.error("Connecting " + serviceUrl,e);
return json;
}
 
JSONObject jsonObject = new JSONObject(json);
return jsonObject.get("response").toString();
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/ReportCourseDocument.java
File deleted
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/surveys/SurveysAnalysisSection.java
18,8 → 18,8
getComponents().add(new TextComponent());
 
//4.2.1
getSubSections().add(new GenericTextSection("Análise das UC's"));
getSections().add(new GenericTextSection("Análise das UC's"));
//4.2.2
getSubSections().add(new GenericTextSection("Análise das Salas"));
getSections().add(new GenericTextSection("Análise das Salas"));
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/ConclusionsSection.java
16,7 → 16,7
public void init()
{
super.setTitle("Conclusões");
super.getSubSections().add(new GenericTextSection("Identificação de Problemas"));
super.getSubSections().add(new GenericTextSection("Melhorias"));
super.getSections().add(new GenericTextSection("Identificação de Problemas"));
super.getSections().add(new GenericTextSection("Melhorias"));
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/SurveysSection.java
19,8 → 19,8
public void init() {
super.setTitle("Inquéritos Pedagógicos");
//4.1
super.getSubSections().add(new SurveysResultsSection("Resultados dos Inquéritos Pedagógicos"));
super.getSections().add(new SurveysResultsSection("Resultados dos Inquéritos Pedagógicos"));
//4.2
super.getSubSections().add(new SurveysAnalysisSection("Análise dos Inquéritos Pedagógicos"));
super.getSections().add(new SurveysAnalysisSection("Análise dos Inquéritos Pedagógicos"));
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/LearningResultsSection.java
28,12 → 28,12
super.getComponents().add(new CustomPane());
 
//3.1 Analise Aproveitamento
super.getSubSections().add(new LearningAnalysisSection("Analise Aproveitamento"));
super.getSections().add(new LearningAnalysisSection("Analise Aproveitamento"));
//3.2 Analise Global Aproveitamento
super.getSubSections().add(new LearningGlobalAnalysisSection("Analise Global Aproveitamento"));
super.getSections().add(new LearningGlobalAnalysisSection("Analise Global Aproveitamento"));
//3.3 Analise Funcionamento UCs
super.getSubSections().add(new GenericTextSection("Analise Funcionamento UCs"));
super.getSections().add(new GenericTextSection("Analise Funcionamento UCs"));
//3.4 Cumprimento de Programas
super.getSubSections().add(new GenericTextSection("Cumprimento de Programas"));
super.getSections().add(new GenericTextSection("Cumprimento de Programas"));
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/CourseUnitsReportsSection.java
19,6 → 19,6
 
public void init() {
setTitle("Relatórios das Unidades Curriculares");
setSubSections(new ArrayList<DocumentSection>());
setSections(new ArrayList<DocumentSection>());
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/CourseReportDocument.java
New file
0,0 → 1,129
package pt.estgp.estgweb.services.courses.coursereport.documentmodel;
 
import com.owlike.genson.Genson;
import com.owlike.genson.GensonBuilder;
import org.apache.log4j.Logger;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.domain.utils.JsonView;
import pt.estgp.estgweb.utils.documentBuilder.Document;
import pt.estgp.estgweb.utils.documentBuilder.DocumentSection;
 
import java.util.Date;
import java.util.List;
 
/**
* Created by jorgemachado on 14/10/17.
*/
public class CourseReportDocument extends Document implements JsonView
{
 
private static final Logger logger = Logger.getLogger(CourseReportDocument.class);
 
public CourseReportDocument()
{
 
}
 
public void init()
{
 
//1 - Introducao
IntroSection introSection = new IntroSection();
introSection.init();
getSections().add(introSection);
 
//2 - Mapa Sintese dos Relatórios dos Responsáveis das UC's
ReportsUcSummarySection reportsUcSummarySection = new ReportsUcSummarySection();
reportsUcSummarySection.init();
getSections().add(reportsUcSummarySection);
 
//3 - Resultados da Aprendizagem
LearningResultsSection learningResultsSection = new LearningResultsSection();
learningResultsSection.init();
getSections().add(learningResultsSection);
 
//4 - Inquéritos
SurveysSection surveysSection = new SurveysSection();
surveysSection.init();
getSections().add(surveysSection);
 
//5 - Conclusões
ConclusionsSection conclusionsSection = new ConclusionsSection();
conclusionsSection.init();
getSections().add(conclusionsSection);
 
//5 - Unidades Curriculares
CourseUnitsReportsSection courseUnitsReportsSection = new CourseUnitsReportsSection();
courseUnitsReportsSection.init();
getSections().add(courseUnitsReportsSection);
}
 
 
 
public DocumentSection findDocumentSection(Class sectionClass)
{
if(getSections() != null)
for(DocumentSection section: getSections())
{
if(section.getClass().equals(sectionClass))
{
return section;
}
}
return null;
}
 
 
 
 
 
private static Genson gensonGenericLoad;
static{
gensonGenericLoad = new GensonBuilder()
.useMethods(true)
.useFields(true)
.useRuntimeType(true) //para ignorar a CGLIB do courseUnitEvaluation
.useClassMetadata(true)
.useDateAsTimestamp(true)
.exclude(Class.class)
.exclude(Date.class)
.exclude(java.sql.Timestamp.class)
.exclude(java.sql.Date.class)
.create();
}
 
public static CourseReportDocument fromJson(String json)
{
return gensonGenericLoad.deserialize(json,CourseReportDocument.class);
}
 
 
 
public List<String> getJsonExcludedProperties() {
return null;
}
 
/**
* Generic Json Object only for local class methods
* @return
* @throws org.json.JSONException
*/
public JSONObject toJsonObject() throws JSONException
{
return new JSONObject(toJson());
}
 
/**
* * Generic Json Object only for local class methods
* @return
* @throws java.io.IOException
*/
public String toJson()
{
return gensonGenericLoad.serialize(this);
}
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/QuestionariosReportsService.java
20,6 → 20,7
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
165,7 → 166,7
public String loadReportUnidadesSalasJson(String sigesCode, String year, String periodIncluded) throws IOException, JSONException {
 
 
if(Globals.SYSTEM_WSJSON_SERVICE_COURSE_REPORT_RESULTS.indexOf("localhost")>=0)
if(Globals.SYSTEM_WSJSON_SERVICE_COURSE_QUESTIONARIOS_REPORT_RESULTS.indexOf("localhost")>=0)
{
Criteria c = DaoFactory.getQuestionarioReportCursoFileDaoImpl().createCriteria();
c.createAlias("reportGroup","rg");
183,11 → 184,22
}
else
{
URL url = new URL(Globals.SYSTEM_WSJSON_SERVICE_COURSE_REPORT_RESULTS + "?code=" + sigesCode + "&year=" + year + "&period="+periodIncluded);
InputStream is = url.openStream();
String json = "{ }";
String serviceUrl = Globals.SYSTEM_WSJSON_SERVICE_COURSE_QUESTIONARIOS_REPORT_RESULTS + "?code=" + sigesCode + "&year=" + year + "&period="+periodIncluded;
try{
URL url = new URL(serviceUrl);
 
String json = StreamsUtils.readString(is);
is.close();
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
 
json = StreamsUtils.readString(is);
is.close();
}catch(Throwable e)
{
logger.error("Connecting " + serviceUrl,e);
return json;
}
 
JSONObject jsonObject = new JSONObject(json);
return jsonObject.get("response").toString();
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/profile/ListUsersService.java
12,6 → 12,9
 
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.eq;
import static org.hibernate.criterion.Restrictions.isNotNull;
 
/**
* Created by jorgemachado on 07/04/17.
*/
134,4 → 137,66
}
return result;
}
 
 
public JSONObject listCoordinatorTeachersService(UserSession sess) throws JSONException
{
 
JSONObject result = new JSONObject();
JSONArray usersArray = new JSONArray();
String nowYear = ((UserSessionImpl)sess).getNowConfiguration().getInterfaceImportYear();
result.put("nowYear",nowYear);
result.put("results",usersArray);
 
Criteria c = DaoFactory.getTeacherDaoImpl().createCriteria();
c.setProjection(Projections.projectionList()
.add(Projections.property("username"))
.add(Projections.property("sigesCode"))
.add(Projections.property("name"))
.add(Projections.property("email"))
.add(Projections.property("outEmail"))
.add(Projections.property("preferrefEmail"))
.add(Projections.property("cc.name"))
.add(Projections.property("cc.code"))
.add(Projections.property("cc.degree"))
.add(Projections.property("d.name"))
.add(Projections.property("s.name"))
.add(Projections.property("s.institutionalCode"))
);
 
 
c.createAlias("coordinatorCourses","cc");
c.createAlias("cc.department","d");
c.createAlias("d.courseSchool","s");
 
c
.add(isNotNull("cc.name"))
.add(eq("cc.status", true))
.add(eq("cc.importYear", ((UserSessionImpl) sess).getNowConfiguration().getInterfaceImportYear()));
 
List<Object[]> results = c.list();
 
 
for(Object[] resultObj: results)
{
JSONObject user = new JSONObject();
usersArray.put(user);
user.put("username",resultObj[0]);
user.put("sigesCode",resultObj[1]);
user.put("name",resultObj[2]);
user.put("email",resultObj[3]);
user.put("outEmail",resultObj[4]);
user.put("preferrefEmail",resultObj[5]);
user.put("courseName",resultObj[6]);
user.put("courseCode",resultObj[7]);
user.put("courseType",resultObj[8]);
user.put("departmentName",resultObj[9]);
user.put("schoolName",resultObj[10]);
user.put("schoolCode",resultObj[11]);
 
}
return result;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/widgetmodel/CoursesServicesWidgetController.java
134,7 → 134,7
 
public static void main(String[] args) throws Throwable
{
URL url = new URL(Globals.SYSTEM_WSJSON_SERVICE_COURSE_UNITS_EVALUATION + "?code=9119&year=201516&period=S2");
URL url = new URL(Globals.SYSTEM_WSJSON_SERVICE_COURSE_UNITS_EVALUATION_REPORT + "?code=9119&year=201516&period=S2");
InputStream is = url.openStream();
 
String json = StreamsUtils.readString(is);
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/widgetmodel/ModelWidgetController.java
250,6 → 250,24
}
 
/**
*
* @param form
* @param request
* @param response
* @return
* @throws Throwable
*/
public JSONObject wsListCoordinators(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable {
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
JSONObject result = (JSONObject) sm.execute(RequestUtils.getRequester(request, response), "WSAPIListCoordinators", args, names);
return result;
}
 
 
/**
* * For Json Services
* @param form
* @param request
293,11 → 311,19
wsLoginListTeachers.put("descricao","usa o certificado para garantir autenticidade da APP e devolve a lista total de professores do sistema no parametro response");
wsLoginListTeachers.put("return1","devolve a lista total de professores do sistema no parametro response");
 
JSONObject wsLoginListCoordinators = new JSONObject();
wsLoginListCoordinators.put("service","/wsjson/api/app/secure/ws-coordinators-list");
wsLoginListCoordinators.put("parameter","certificate");
wsLoginListCoordinators.put("descricao","usa o certificado para garantir autenticidade da APP e devolve a lista total de professores do sistema no parametro response");
wsLoginListCoordinators.put("return1","devolve a lista total de professores do sistema no parametro response");
 
 
JSONArray services = new JSONArray();
services.put(wsAuthenticate);
services.put(wsLoginChallenge);
services.put(wsLoginListStudents);
services.put(wsLoginListTeachers);
services.put(wsLoginListCoordinators);
wsServices.put("services",services);
 
return result;
/branches/v3/impl/src/web/admin/bpmn/processEditor.jsp
981,7 → 981,7
{
possibleVars.push(variable);
}
else if($scope.contains(variable.type.classNameSuperClasses,className))
else if($scope.contains(variable.type.classNamexSuperClasses,className))
{
possibleVars.push(variable);
}
/branches/v3/impl/src/web/auth/lostPass.jsp
12,7 → 12,7
<html:errors/>
<jomm:messages/>
<p>Para receber um email de reposição de password introduza uma das informações requisitadas para podermos proceder à sua identificação</p>
<form class="form-vertical" action="<%=request.getContextPath()%>/requestChangeMyPassword.do" method="post">
<form class="form-vertical" action="<%=request.getContextPath()%>/auth/requestChangeMyPassword.do" method="post">
<input type="hidden" name="dispatch" value="requestChangePassword">
<div class="form-group col-md-12">
<label class="col-md-12">Nome de Utilizador / Email / Número de Cartão de Cidadão / Número de Aluno / Número de Docente</label>
/branches/v3/impl/src/web/js/functions.js
1,3 → 1,9
 
String.prototype.replaceAll = String.prototype.replaceAll || function(needle, replacement) {
return this.split(needle).join(replacement);
};
 
 
function set(form, value)
{
form.dispatch.value = value;
/branches/v3/impl/src/web/layout/themes/estg/auth.jsp
72,7 → 72,7
<div class="col-md-6">
<h2>Esqueci a password</h2>
<div class="col-sm-12">
<p><a class="btn btn-default" href="<%=request.getContextPath()%>/requestChangePassword.do">Perdi a minha password e desejo receber um email para a redefinir</a></p>
<p><a class="btn btn-default" href="<%=request.getContextPath()%>/auth/requestChangePassword.do">Perdi a minha password e desejo receber um email para a redefinir</a></p>
 
</div>
</div>
/branches/v3/impl/src/web/layout/themes/ipp/auth.jsp
72,7 → 72,7
<div class="col-md-6">
<h2>Esqueci a password</h2>
<div class="col-sm-12">
<p><a class="btn btn-default" href="<%=request.getContextPath()%>/requestChangePassword.do">Perdi a minha password e desejo receber um email para a redefinir</a></p>
<p><a class="btn btn-default" href="<%=request.getContextPath()%>/auth/requestChangePassword.do">Perdi a minha password e desejo receber um email para a redefinir</a></p>
 
</div>
</div>
/branches/v3/impl/src/web/user/courses/courseReportEdit.jsp
4,6 → 4,9
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="pt.estgp.estgweb.utils.documentBuilder.TextComponent" %>
<%@ page import="pt.estgp.estgweb.utils.documentBuilder.ImageComponent" %>
<%@ page import="pt.estgp.estgweb.services.courses.CourseReportServices" %>
<%@ page import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument" %>
<%@ page import="org.json.JSONException" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
91,17 → 94,23
 
<%
 
Long courseId = Long.parseLong(request.getParameter("courseId"));
String courseCode = request.getParameter("courseCode");
AbstractDao.getCurrentSession().beginTransaction();
CourseImpl courseImpl = (CourseImpl) DaoFactory.getCourseDaoImpl().get(courseId);
CourseImpl courseImpl = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode);
request.setAttribute("course",courseImpl);
CourseReportDocument courseReport = null;
try {
courseReport = new CourseReportServices().createNewCourseReportDocument("44", "201617");
} catch (Throwable e) {
System.out.println(e);
e.printStackTrace();
}
String courseReportJson = courseReport.toJson();
request.setAttribute("courseDocumentJson",courseReportJson);
request.setAttribute("courseDocument",courseReport);
 
String classTextComponent = TextComponent.class.getName();
String classImageComponent = ImageComponent.class.getName();
request.setAttribute("classTextComponent",classTextComponent);
request.setAttribute("classImageComponent",classImageComponent);
%>
<a href="javascript:demoFromHTML()" class="button">Run Code</a>
<%--<a href="javascript:demoFromHTML()" class="button">Run Code</a>--%>
 
<div class="container-fluid">
 
127,28 → 136,10
<p><b class="label-info">Escola:</b> ${course.department.courseSchool.name}</p>
 
 
<script>
function showSep(id)
{
$(".separatorSectionNav").removeClass("active");
$(".separatorSection").hide();
$("#separatorSectionNav_" + id).addClass("active");
$("#separatorSection_" + id).show();
}
</script>
 
<ul class="nav nav-tabs">
<li id="separatorSectionNav_introducao" class="active separatorSectionNav"><a href="javascript:showSep('introducao')">1 - Introdução</a></li>
<li id="separatorSectionNav_mapaUnidades" class="separatorSectionNav"><a href="javascript:showSep('mapaUnidades')">2 - Mapa Síntese </a></li>
<li id="separatorSectionNav_resultados" class="separatorSectionNav"><a href="javascript:showSep('resultados')">3 - Resultados </a></li>
<li id="separatorSectionNav_inqueritos" class="separatorSectionNav"><a href="javascript:showSep('inqueritos')">4 - Inquéritos </a></li>
<li id="separatorSectionNav_conclusoes" class="separatorSectionNav"><a href="javascript:showSep('conclusoes')">4 - Conclusões </a></li>
 
</ul>
<script>
 
 
 
<script>
//Especifico da aplicacao
var courseReportApp = angular.module('courseReportApp', []);
GLOBAL_BacoAngularAppDependencies.push('courseReportApp');
177,25 → 168,57
courseReportApp.controller('courseReportAppController', function($scope)
{
 
$scope.report =
{
$scope.docAppSelector = "#courseReportApp";
$scope.report = <%=courseReportJson%>
 
}
 
$scope.resize = function(evt,ui,comp) {
//console.log (evt,ui);
comp.width = ui.size.width;
comp.height = ui.size.height;
}
 
/**
* @classe class to match
* @superClasses array of strings
* */
$scope.contains = function(obj,classe)
{
if(obj['@class'] && obj['@class'] == classe)
return true;
if(obj.allSuperClasses)
{
for(var i in obj.allSuperClasses)
{
if(classe == obj.allSuperClasses[i])
return true;
}
}
return false;
}
 
$scope.showSep = function(section)
{
$(".separatorSectionNav").each(function()
{
angular.element($(this)).scope().section.active = false;
});
section.active = true;
 
}
 
$scope.class2id = function(obj)
{
return obj["@class"].replaceAll(".","_");
}
 
$scope.addText = function(parentCustomPane)
{
$scope.addSimpleDocComponent(parentCustomPane,"${classTextComponent}")
$scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.TextComponent")
}
 
$scope.addImage = function(parentCustomPane)
{
$scope.addSimpleDocComponent(parentCustomPane,"${classImageComponent}")
$scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.ImageComponent")
}
 
$scope.addSimpleDocComponent = function(parentCustomPane,classComponent)
206,9 → 229,7
}
parentCustomPane.components.push(
{
"@class" : classComponent,
"text" : "",
"title" : ""
"@class" : classComponent
}
);
}
266,59 → 287,41
 
});
</script>
 
<!--TEMPLATES FOR DOCUMENT BUILDER-->
<jsp:include page="../utils/documentsBuilder.jsp"/>
 
<div class="form-vertical">
<div id="courseReportApp" ng-app="courseReportApp" ng-controller="courseReportAppController">
 
<div id="courseReportApp" ng-app="courseReportApp" ng-controller="courseReportAppController" class="form-vertical">
 
<ul class="nav nav-tabs">
<li ng-model="section" class="separatorSectionNav" ng-class="{ active: section.active}" ng-repeat="section in report.sections">
<a ng-click="showSep(section)">{{section.title}}</a>
</li>
</ul>
 
<!--Introducao-->
<div id="separatorSection_introducao" class="separatorSection clearfix">
 
<div class="documentSimpleComponent form-group clearfix">
<label class="col-md-2 control-label">Texto</label>
<div class="col-md-10">
<textarea class="form-control" rows="10" ng-model="report.introSection.textComponent.text">
 
</textarea>
</div>
</div>
<div ng-include="'customPane_renderer.html'"
ng-init="report.introSection.customPane = {};customPane = report.introSection.customPane;docAppSelector='#courseReportApp'">
</div>
<!--DocumentSection-->
<div ng-model="section" ng-class="{ hidden: !section.active}" ng-repeat="section in report.sections" class="separatorSection clearfix">
 
<div ng-repeat="comp in section.components" ng-include="class2id(comp)">
 
</div>
<!--/Introducao-->
</div>
 
<!--Mapa Unidades-->
<div id="separatorSection_mapaUnidades" class="separatorSection">
 
</div>
<!--/Mapa Unidades-->
</div>
<!--/DocumentSection-->
 
<!--Resultados-->
<div id="separatorSection_resultados" class="separatorSection">
<%--
<pre class="code">{{ report | json }}</pre>
--%>
 
</div>
<!--/Resultados-->
 
<!--Inqueritos-->
<div id="separatorSection_inqueritos" class="separatorSection">
</div><!--App-->
</div> <!--form-->
 
</div>
<!--/Inqueritos-->
 
<!--Conclusoes-->
<div id="separatorSection_conclusoes" class="separatorSection">
 
</div>
<!--/Conclusoes-->
 
<pre class="code">{{ report | json }}</pre>
 
</div><!--App-->
 
</div><!--Panel Body-->
 
</div><!--Panel-->
/branches/v3/impl/src/web/user/utils/documentsBuilder.jsp
1,64 → 1,65
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<style>
.buttonTools
{
border: 1px solid gray;
background-color: lightgray;
padding: 5px;
}
.customComponent
{
padding: 0;
}
.documentSimpleComponent
{
border: 1px solid gray;
padding: 5px;
margin-bottom: 5px;
}
.componentBody
{
border: 1px solid gray;
padding: 5px;
}
</style>
 
 
<%--
customPane Need component customPane in variable customPane
docAppSelector selector usualy an html ID for ng-app example #docReport
Attribute in request classTextComponent
Attribute in request classImageComponent
--%>
<script type="text/ng-template" id="customPane_renderer.html">
<div class="customPane clearfix">
<style>
.buttonTools
{
border: 1px solid gray;
background-color: lightgray;
padding: 5px;
}
.customPane
{
padding: 15px;
}
.documentSimpleComponent
{
border: 1px solid gray;
padding: 5px;
margin-bottom: 5px;
}
.componentBody
{
border: 1px solid gray;
padding: 5px;
}
</style>
 
<script type="text/ng-template" id="pt_estgp_estgweb_utils_documentBuilder_CustomPane">
<div class="customComponent clearfix component">
<div class="buttonTools clearfix">
<button class="btn btn-default pullleft" type="button" ng-click="addText(report.introSection.customPane)">
<button class="btn btn-default pullleft" type="button" ng-click="addText(comp)">
<span class="glyphicon glyphicon-plus"></span>
<span class="glyphicon glyphicon-font"></span>
</button>
 
<button class="btn btn-default pullleft" type="button" ng-click="addImage(report.introSection.customPane)">
<button class="btn btn-default pullleft" type="button" ng-click="addImage(comp)">
<span class="glyphicon glyphicon-plus"></span>
<span class="glyphicon glyphicon-picture"></span>
</button>
 
Secção personalizada
</div>
<div class="customPane">
<div class="componentBody">
<div class="clearfix" ng-repeat="subComp in comp.components" ng-init="parent=comp;comp=subComp" ng-include="class2id(subComp)">
 
</div>
<div>
</div>
</script>
 
<div class="clearfix documentSimpleComponent" ng-repeat="comp in customPane.components">
<div class="buttonTools clearfix">
<button class="btn btn-danger pullright" type="button" ng-click="removeComponent($index,customPane.components)">
<script type="text/ng-template" id="pt_estgp_estgweb_utils_documentBuilder_ImageComponent">
<div class="imageComponent component">
<div ng-if="parent['@class']=='pt.estgp.estgweb.utils.documentBuilder.CustomPane'" class="buttonTools clearfix">
<button class="btn btn-danger pull-right" type="button" ng-click="removeComponent($index,parent.components)">
<span class="glyphicon glyphicon-remove"></span>
</button>
<label ng-if="comp.class=='${classTextComponent}'">Componente de Texto</label>
<label ng-if="comp.class=='${classImageComponent}'">Componente de Imagem (Use esta funcinalidade para adicionar gráficos ou tabelas que ache necessárias)</label>
<label>Componente de Imagem (Use esta funcinalidade para adicionar gráficos ou tabelas que ache necessárias)</label>
</div>
 
</div>
 
<div class="componentBody" ng-if="comp.class=='${classImageComponent}'">
<div class="componentBody" ng-if="comp['@class']=='pt.estgp.estgweb.utils.documentBuilder.ImageComponent'">
<div class="form-group clearfix" ng-if="comp.image.identifier">
<label class="col-md-2 control-label">Legenda</label>
<div class="col-md-10">
68,19 → 69,19
<div class="form-group clearfix">
<div class="col-md-2 control-label">
<a class="btn btn-default" href="#" ng-model="comp"
data-title="Escolha Imagem"
data-showmetafields="false"
data-confirmonupload="true"
data-toggle="modal"
data-target="#filesUploadModal"
data-multiple="false"
data-allowed-extensions="jpg,png,gif"
data-callback-target-function="angular.element($('{{docAppSelector}}')).scope().callbackUploadedFiles">
data-title="Escolha Imagem"
data-showmetafields="false"
data-confirmonupload="true"
data-toggle="modal"
data-target="#filesUploadModal"
data-multiple="false"
data-allowed-extensions="jpg,png,gif"
data-callback-target-function="angular.element($('{{docAppSelector}}')).scope().callbackUploadedFiles">
<span ng-if="comp.image.identifier">
Substituir Imagem
Substituir Imagem
</span>
<span ng-if="!(comp.image.identifier)">
Carregar Imagem
Carregar Imagem
</span>
 
<span class="glyphicon glyphicon-upload"/>
89,8 → 90,8
</div>
 
<div class="col-md-10">
<div ng-if="!(comp.image.identifier)">
Clique em carregar imagens e escolha uma imagem para adicionar nesta secção.
<div ng-if="!(comp.image.identifier)">
Clique em carregar imagens e escolha uma imagem para adicionar nesta secção.
</div>
 
<label ng-if="comp.image.identifier"> Limites do PDF </label>
103,26 → 104,35
</center>
</div>
</div>
</div>
</div>
</div>
</div>
</script>
 
<script type="text/ng-template" id="pt_estgp_estgweb_utils_documentBuilder_TextComponent">
<div class="textComponent component">
 
<div class="componentBody" ng-if="comp.class=='${classTextComponent}'">
<div class="form-group clearfix">
<label class="col-md-2 control-label">Titulo</label>
<div class="col-md-10">
<input type="text" class="form-control" rows="10" ng-model="comp.title">
</div>
<div ng-if="parent['@class']=='pt.estgp.estgweb.utils.documentBuilder.CustomPane'" class="buttonTools clearfix">
<button class="btn btn-danger pull-right" type="button" ng-click="removeComponent($index,parent.components)">
<span class="glyphicon glyphicon-remove"></span>
</button>
<label>Componente de Texto</label>
</div>
<div class="componentBody">
<div ng-if="parent['@class']=='pt.estgp.estgweb.utils.documentBuilder.CustomPane'" class="form-group clearfix">
<label class="col-md-2 control-label">Titulo de Parágrafo</label>
<div class="col-md-10">
<input type="text" class="form-control" rows="10" ng-model="comp.title">
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label">Texto</label>
<div class="col-md-10">
<textarea class="form-control" rows="10" ng-model="comp.text">
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label">Texto</label>
<div class="col-md-10">
<textarea class="form-control" rows="10" ng-model="comp.text">
 
</textarea>
</div>
</textarea>
</div>
</div>
</div>
<div>
</div>
</script>
/branches/v3/common/commons/commons-fileupload-1.2.1.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v3/common/commons/commons-fileupload.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v3/common/commons/commons-fileupload-1.3.3.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream