/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(); |
%> |