Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1916 → Rev 1929

/branches/grupo1/impl/conf/WEB-INF/struts/struts-courses.xml
164,7 → 164,7
 
<action path="/user/courseReportTools" forward="page.course.report.tools"/>
<action path="/user/loadCourseReportTools" forward="page.course.report.tools.load"/>
<action path="/user/editCourseReport" forward="page.course.report.edit"/>
<action path="/user/editCourseReport" forward="/user/courseReport.do?dispatch=startEdit"/>
 
<action path="/user/courseReport"
type="pt.estgp.estgweb.web.controllers.courses.CoursesServicesController"
173,6 → 173,7
parameter="dispatch"
validate="true"
input="page.widget.json.fail.validations">
<forward name="editCourseReport" path="page.course.report.edit"/>
</action>
 
 
/branches/grupo1/impl/conf/berserk/sd.xml
4063,6 → 4063,26
</service>
 
<service>
<name>CourseReportGenerateLearningResultsChartSem</name>
 
<implementationClass>pt.estgp.estgweb.services.courses.CourseReportServices</implementationClass>
<description>
@reportCourseDocument documento course report em json
@semesterCode Codigo do semestre
Serviço de suporte para gerar um grafico
Coloca o grafico no report documento
e salva o documento no curso
Devolve uma classe RepositoryFile4JsonView serializada em JSON
</description>
<isTransactional>true</isTransactional>
<defaultMethod>generateGenerateGlobalLearningResultsChartSem</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
 
<service>
<name>SaveCourseReportDocument</name>
<implementationClass>pt.estgp.estgweb.services.courses.CourseReportServices</implementationClass>
<description>
4090,6 → 4110,7
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="CourseCommission"/>
</filterChains>
</service>
 
/branches/grupo1/impl/conf/berserk/fd.xml
299,8 → 299,13
<isTransactional>false</isTransactional>
</filter>
 
<filter>
<name>IsFromCourseCommission</name>
<implementationClass>pt.estgp.estgweb.filters.filters.IsFromCourseCommission</implementationClass>
<description>Checks if the requester is teacher in course commission</description>
<isTransactional>true</isTransactional>
</filter>
 
 
 
</filterDefinitions>
/branches/grupo1/impl/conf/berserk/fcd.xml
584,6 → 584,13
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
 
<filterChain>
<name>CourseCommission</name>
<expression>IsFromCourseCommission("courseCode")</expression>
<description>Course Commission Filter</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
 
 
 
/branches/grupo1/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/ExtensibleDocObject.java
1,7 → 1,13
package pt.estgp.estgweb.utils.documentBuilder;
 
import com.owlike.genson.Genson;
import com.owlike.genson.GensonBuilder;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument;
import pt.estgp.estgweb.utils.ClassUtils;
 
import java.util.Date;
import java.util.List;
 
/**
9,12 → 15,53
*/
public class ExtensibleDocObject
{
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);
}
/**
* Generic Json Object only for local class methods
* @return
* @throws 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);
}
 
public List<String> getAllSuperClasses()
{
return ClassUtils.getAllSuperClasses(this.getClass());
}
 
public void setAllSuperClasses(List<String> superclasses)
{
 
}
 
}
/branches/grupo1/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/DocumentSection.java
50,4 → 50,18
}
return null;
}
 
public DocComponent findDocComponent(Class compClass, String internalCode)
{
 
if(getComponents() != null)
for(DocComponent comp: getComponents())
{
if(comp.getClass().equals(compClass) && comp.getInternalCode().equals(internalCode))
{
return comp;
}
}
return null;
}
}
/branches/grupo1/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/DocComponent.java
4,4 → 4,16
* Created by jorgemachado on 11/10/17.
*/
public class DocComponent extends ExtensibleDocObject {
String internalCode = null;
 
 
public String getInternalCode() {
 
return internalCode;
}
 
public void setInternalCode(String internalCode) {
 
this.internalCode = internalCode;
}
}
/branches/grupo1/impl/src/java/pt/estgp/estgweb/services/courses/CourseReportServices.java
13,6 → 13,7
import pt.estgp.estgweb.services.courses.coursereport.CourseReportUtils;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.*;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.courseunitreport.CourseUnitSection;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.LearningAnalysisSection;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.LearningGlobalAnalysisSection;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components.*;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.reportucsummary.CourseUnitDtpStat;
437,11 → 438,11
if(imageInitialized)
{
String identifier = chartImg.getImage().getIdentifier();
view = repositoryService.replaceRepositoryFileFromFileUpload(identifier, fileUploaded, ResourceAccessControlEnum.privateDomain, session);
view = repositoryService.replaceRepositoryFileFromFileUpload(identifier, fileUploaded, ResourceAccessControlEnum.publicDomain, session);
}
else
{
view = repositoryService.storeRepositoryFileFromFileUpload(fileUploaded,ResourceAccessControlEnum.privateDomain,session);
view = repositoryService.storeRepositoryFileFromFileUpload(fileUploaded,ResourceAccessControlEnum.publicDomain,session);
}
chartImg.setImage(view);
//TODO FALTA GUARDAR O JSON NO CURSO
470,17 → 471,58
if(imageInitialized)
{
String identifier = chartImg.getImage().getIdentifier();
view = repositoryService.replaceRepositoryFileFromFileUpload(identifier, fileUploaded, ResourceAccessControlEnum.privateDomain, session);
view = repositoryService.replaceRepositoryFileFromFileUpload(identifier, fileUploaded, ResourceAccessControlEnum.publicDomain, session);
}
else
{
view = repositoryService.storeRepositoryFileFromFileUpload(fileUploaded,ResourceAccessControlEnum.privateDomain,session);
view = repositoryService.storeRepositoryFileFromFileUpload(fileUploaded,ResourceAccessControlEnum.publicDomain,session);
}
chartImg.setImage(view);
//TODO FALTA GUARDAR O JSON NO CURSO
return view.toJson();
}
 
public String generateGenerateGlobalLearningResultsChartSem(String reportDocumentJson, String semesterCode, UserSession session) throws IOException {
 
CourseReportDocument reportDocument = CourseReportDocument.fromJson(reportDocumentJson);
 
LearningResultsSection learningResultsSection = (LearningResultsSection) reportDocument.findDocumentSection(LearningResultsSection.class);
 
LearningAnalysisSection learningAnalysisSection = (LearningAnalysisSection) learningResultsSection.findSection(LearningAnalysisSection.class);
 
LearningResultsChartSem chartImg = (LearningResultsChartSem) learningAnalysisSection.findDocComponent(LearningResultsChartSem.class, semesterCode);
UnitsLearningResultsTable table = (UnitsLearningResultsTable) learningResultsSection.findDocComponent(UnitsLearningResultsTable.class);
 
 
 
FileUploaded fileUploaded = chartImg.generateChart2tmp(table,reportDocument);
 
 
 
RepositoryService repositoryService = new RepositoryService();
 
 
boolean imageInitialized = chartImg.getImage() != null
&&
chartImg.getImage().getIdentifier() != null;
 
 
RepositoryFile4JsonView view;
 
if(imageInitialized)
{
String identifier = chartImg.getImage().getIdentifier();
view = repositoryService.replaceRepositoryFileFromFileUpload(identifier, fileUploaded, ResourceAccessControlEnum.publicDomain, session);
}
else
{
view = repositoryService.storeRepositoryFileFromFileUpload(fileUploaded,ResourceAccessControlEnum.publicDomain,session);
}
chartImg.setImage(view);
//TODO FALTA GUARDAR O JSON NO CURSO
return view.toJson();
}
 
public String saveCourseReportDocument(String reportDocumentJson,UserSession session) {
CourseReportDocument reportDocument = CourseReportDocument.fromJson(reportDocumentJson);
 
508,11 → 550,10
}
 
if (courseReportJson == null) {
CourseReportDocument courseReport = null;
 
try {
courseReport = new CourseReportServices().createNewCourseReportDocument(courseCode, year);
CourseReportDocument courseReport = new CourseReportServices().createNewCourseReportDocument(courseCode, year);
courseReportJson = courseReport.toJson();
saveCourseReportDocument(courseReportJson, session);
} catch (Throwable e) {
System.out.println(e);
e.printStackTrace();
/branches/grupo1/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/learningresults/components/LearningResultsChartSem.java
1,20 → 1,51
package pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components;
 
import jomm.utils.BytesUtils;
import jomm.utils.MimeTypeGuesser;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.StackedBarRenderer;
import org.jfree.chart.renderer.category.StandardBarPainter;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleInsets;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument;
import pt.estgp.estgweb.utils.Globals;
import pt.estgp.estgweb.utils.documentBuilder.ImageComponent;
import pt.estgp.estgweb.utils.documentBuilder.AutoImageWraperComponent;
import pt.estgp.estgweb.web.controllers.utils.FileUploaded;
 
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Map;
import java.util.Random;
 
 
 
/**
* Created by jorgemachado on 31/10/17.
* Created by ASUS on 14/01/18.
*/
public class LearningResultsChartSem extends AutoImageWraperComponent
{
String semesterCode;
 
 
public LearningResultsChartSem() {
}
 
public LearningResultsChartSem(String semesterCode) {
this.semesterCode = semesterCode;
setInternalCode(semesterCode);
}
 
public String getSemesterCode() {
24,4 → 55,121
public void setSemesterCode(String semesterCode) {
this.semesterCode = semesterCode;
}
 
public FileUploaded generateChart2tmp(UnitsLearningResultsTable results, CourseReportDocument courseReportDocument) throws IOException {
List<UnitsLearningResultYear> years = results.getYears();
String tempName = BytesUtils.generateHexKey() + ".png";
 
DefaultCategoryDataset data = new DefaultCategoryDataset();
for(UnitsLearningResultYear year : years){
for(UnitsLearningResultSemester semester : year.getSemesters()){
if(semester.getSemestre().equals(getSemesterCode())){
for(UnitsLearningResultUc uc : semester.getUcs()){
data.addValue(new Double(uc.getSemElementosPercent()), "Sem elementos", uc.getName());
data.addValue(new Double(uc.getReprovadosPercent()), "Reprovados", uc.getName());
data.addValue(new Double(uc.getAprovadosPercent()), "Aprovados", uc.getName());
}
break;
}
}
}
 
JFreeChart chart = ChartFactory.createStackedBarChart(null,null,null,data,PlotOrientation.HORIZONTAL,true,false,false);
chart.setBackgroundPaint(Color.WHITE);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setRangeGridlinePaint(Color.GRAY);
plot.setRangeGridlinesVisible(true);
//plot.setRangeGridlineStroke(new BasicStroke(1.0f));
 
RectangleInsets chartRectangle = new RectangleInsets(0,0,30F,0);
chart.setPadding(chartRectangle);
 
plot.getDomainAxis().setTickLabelFont(new Font("Helvetica", Font.PLAIN,25));
plot.getRangeAxis().setTickLabelFont(new Font("Helvetica", Font.PLAIN,25));
 
StackedBarRenderer renderer = (StackedBarRenderer) plot.getRenderer();
// Remover gradiente das barras
renderer.setBarPainter(new StandardBarPainter());
renderer.setSeriesPaint(0, new Color(237,127,32));
renderer.setSeriesPaint(1, new Color(255,198,0));
renderer.setSeriesPaint(2, new Color(122,173,38));
renderer.setMaximumBarWidth(0.2);
 
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", new DecimalFormat("#.##'%'")));
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelFont(new Font("Helvetica", Font.PLAIN,25));
 
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("Helvetica", Font.PLAIN,25));
legend.setFrame(BlockBorder.NONE);
 
BufferedImage image = chart.createBufferedImage(300*4, 200*4);
String pathGraficoTiposAlunos = Globals.TMP_DIR + File.separator + tempName;
File output = new File(pathGraficoTiposAlunos);
ImageIO.write(image,"png", new FileOutputStream(output));
 
FileUploaded fileUploaded = new FileUploaded();
fileUploaded.setTmpName(tempName);
fileUploaded.setTitle("Taxa global de aproveitamento");
fileUploaded.setDescription("Curso: " + courseReportDocument.getCourseName() + " (" + courseReportDocument.getCourseCode()+ ") ano " + courseReportDocument.getYear());
fileUploaded.setContentType(MimeTypeGuesser.getInstance().guessMimeType(output));
fileUploaded.setFileSize(output.length());
fileUploaded.setExtension("png");
 
return fileUploaded;
}
 
public static void main(String[] args) throws IOException{
String tempName = "test.png";
 
DefaultCategoryDataset data = new DefaultCategoryDataset();
 
for (int i=0; i<16; i++){
int s = new Random().nextInt(75);
int r = new Random().nextInt((101 - s));
int a = (100 - s - r);
 
data.addValue(new Double(s), "Sem elementos", "Engenharia de Software " + i);
data.addValue(new Double(r), "Reprovados", "Engenharia de Software " + i);
data.addValue(new Double(a), "Aprovados", "Engenharia de Software " + i);
}
 
JFreeChart chart = ChartFactory.createStackedBarChart(null,null,null,data,PlotOrientation.HORIZONTAL, true, false, false);
chart.setBackgroundPaint(Color.WHITE);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setRangeGridlinePaint(Color.GRAY);
plot.setRangeGridlinesVisible(true);
//plot.setRangeGridlineStroke(new BasicStroke(1.0f));
 
RectangleInsets chartRectangle = new RectangleInsets(0,0,30F,0);
chart.setPadding(chartRectangle);
 
plot.getDomainAxis().setTickLabelFont(new Font("Helvetica", Font.PLAIN,25));
plot.getRangeAxis().setTickLabelFont(new Font("Helvetica", Font.PLAIN,25));
 
StackedBarRenderer renderer = (StackedBarRenderer) plot.getRenderer();
// Remover gradiente das barras
renderer.setBarPainter(new StandardBarPainter());
renderer.setSeriesPaint(0, new Color(237,127,32));
renderer.setSeriesPaint(1, new Color(255,198,0));
renderer.setSeriesPaint(2, new Color(122,173,38));
renderer.setMaximumBarWidth(0.1);
 
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", new DecimalFormat("#.##'%'")));
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelFont(new Font("Helvetica", Font.PLAIN,25));
 
LegendTitle legend = chart.getLegend();
legend.setItemFont(new Font("Helvetica", Font.PLAIN,25));
legend.setFrame(BlockBorder.NONE);
 
BufferedImage image = chart.createBufferedImage( 300*4, 400*4);
String pathGraficoTiposAlunos = Globals.TMP_DIR + File.separator + tempName;
File output = new File(pathGraficoTiposAlunos);
ImageIO.write(image, "png", new FileOutputStream(output));
 
}
 
}
/branches/grupo1/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseYearDaoImpl.java
28,10 → 28,7
}
public CourseYear findCourseYearU(String code, String importYear)
{
List<CourseYear> cYs = createCriteria()
.createAlias("course","c")
.add(eq("importYear", importYear))
.add(eq("c.code",code)).list();
List<CourseYear> cYs = findCourseYear(code,importYear);
 
if (cYs.isEmpty())
return null;
/branches/grupo1/impl/src/java/pt/estgp/estgweb/filters/filters/IsFromCourseCommission.java
New file
0,0 → 1,50
package pt.estgp.estgweb.filters.filters;
 
/**
* Created by ASUS on 15/01/2018.
*/
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.CourseImpl;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.utils.Globals;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
 
public class IsFromCourseCommission extends LoadControlFilter {
private static final Logger logger = Logger.getLogger(IsFromCourseCommission.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
//CourseImpl course = (CourseImpl) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
String courseCode = (String) request.getServiceParameters().getParameter((String) filterParameters.getParameter(0));
CourseImpl course = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode);
 
if(!course.isFromCourseCommission(userSession.getUser()))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
/branches/grupo1/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesServicesController.java
1,8 → 1,14
package pt.estgp.estgweb.web.controllers.courses;
 
import jomm.dao.impl.AbstractDao;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.json.JSONObject;
import pt.estgp.estgweb.domain.CourseImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
53,6 → 59,18
return new JSONObject(json);
}
 
public JSONObject generateGenerateGlobalLearningResultsChartSem(HttpServletRequest request, HttpServletResponse response) throws Throwable {
String courseReportDocument = request.getParameter("courseReportDocument");
String semesterCode = request.getParameter("semesterCode");
 
 
IServiceManager sm = ServiceManager.getInstance();
String json = (String) sm.execute(RequestUtils.getRequester(request, response),
"CourseReportGenerateLearningResultsChartSem",
new Object[]{courseReportDocument, semesterCode});
return new JSONObject(json);
}
 
public JSONObject saveCourseReportDocument(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable {
String courseReportDocument = request.getParameter("courseReportDocument");
 
62,4 → 80,22
new Object[]{courseReportDocument});
return new JSONObject(json);
}
 
public ActionForward startEdit(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable {
String courseCode = request.getParameter("courseCode");
String year = request.getParameter("year");
 
IServiceManager sm = ServiceManager.getInstance();
String courseReportJson = (String) sm.execute(RequestUtils.getRequester(request, response),
"LoadCourseReportDocument",
new Object[]{courseCode, year});
request.setAttribute("courseReportJson", courseReportJson);
 
AbstractDao.getCurrentSession().beginTransaction();
CourseImpl courseImpl = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode);
request.setAttribute("course", courseImpl);
AbstractDao.getCurrentSession().getTransaction().commit();
 
return mapping.findForward("editCourseReport");
}
}
/branches/grupo1/impl/src/web/user/courses/coursereport/templates.jsp
753,4 → 753,77
</div>
</div>
</div>
</script>
 
 
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_LearningResultsChartSem">
<learningresultschartsem>
</learningresultschartsem>
</script>
 
<script>
angular.module("courseReportApp").directive('learningresultschartsem', function() {
 
return {
restrict: 'E',
link: function($scope, element, attrs)
{
$scope.generateChart = function(comp)
{
 
widgetCallWithActionParameters(
"<%=request.getContextPath()%>/user/courseReport.do",
"generateGenerateGlobalLearningResultsChartSem",
{
"courseReportDocument" : BacoJS.stringifyOrdered(angular.element($("#courseReportApp")).scope().report),
"semesterCode" : comp.semesterCode
},
"#courseReportApp",
function(repositoryFile4JsonView)
{
comp.image = repositoryFile4JsonView;
comp.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + comp.image.identifier + "?" + new Date().getTime();
angular.element($("#courseReportApp")).scope().$apply();
},
function(){}
);
}
 
 
},
templateUrl: function(elem,attrs) {
return "learningresultschartsem";
}
}
});
</script>
<script type="text/ng-template" id="learningresultschartsem">
<div class="imageComponent component">
 
<div class="componentBody">
<div class="form-group clearfix">
<label class="col-md-2 control-label">Legenda</label>
<div class="col-md-10">
<input type="text" class="form-control" rows="10" ng-model="comp.title">
</div>
</div>
<div class="form-group clearfix">
<div class="col-md-2 control-label">
<button class="btn btn-default" ng-click="generateChart(comp)">Refrescar/Gerar Gráfico</button>
</div>
<div class="col-md-10">
<label ng-if="comp.image.identifier"> Limites do PDF </label>
<div ng-if="comp.image.identifier" style="text-align: center; width: 595px; border: 1px solid black; padding: 45px">
<center>
<div style="width: 200px;height: 200px; max-width: 500px; max-height: 750px" resizable on-resize="resize($evt, $ui, comp)">
<img ng-if="comp.imageUrl" style="width: 100%;height: 100%" ng-src="{{comp.imageUrl}}">
<img ng-if="!comp.imageUrl" style="width: 100%;height: 100%" ng-src="{{'<%=request.getContextPath()%>/repositoryStream/' + comp.image.identifier}}">
</div>
(Se desejar altere o tamanho da imagem arrastando no canto inferior direito)
</center>
</div>
</div>
</div>
</div>
</div>
</script>
/branches/grupo1/impl/src/web/user/courses/courseReportEdit.jsp
92,27 → 92,12
}
</script>
 
<%
String courseCode = request.getParameter("courseCode");
String year = request.getParameter("year");
<script>ping()</script>
<jsp:useBean id="courseReportJson" type="java.lang.String" scope="request"/>
<jsp:useBean id="course" type="pt.estgp.estgweb.domain.CourseImpl" scope="request"/>
 
String courseReportJson = null;
try {
IServiceManager sm = ServiceManager.getInstance();
courseReportJson = (String) sm.execute(RequestUtils.getRequester(request, response),
"LoadCourseReportDocument",
new Object[]{courseCode, year});
} catch (Throwable throwable) {
throwable.printStackTrace();
}
request.setAttribute("courseDocumentJson",courseReportJson);
 
 
AbstractDao.getCurrentSession().beginTransaction();
CourseImpl courseImpl = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode);
request.setAttribute("course",courseImpl);
 
//request.setAttribute("courseDocument",courseReport);
<%
//AbstractDao.getCurrentSession().beginTransaction();
%>
<%--<a href="javascript:demoFromHTML()" class="button">Run Code</a>--%>
 
173,7 → 158,7
{
 
$scope.docAppSelector = "#courseReportApp";
$scope.report = <%=courseReportJson%>
$scope.report = ${courseReportJson}
 
$scope.resize = function(evt,ui,comp) {
//console.log (evt,ui);
366,5 → 351,5
</div><!--container-fluid-->
 
<%
AbstractDao.getCurrentSession().getTransaction().commit();
//AbstractDao.getCurrentSession().getTransaction().commit();
%>