Merge pull request 'Feature/17249' (#1) from Feature/17249 into master

master
Giancarlo Panichi 4 years ago
commit c18f95a480

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/performfish-analytics-portlet-0.6.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<classpathentry kind="src" output="target/performfish-analytics-portlet-0.7.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/performfish-analytics-portlet-0.6.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<classpathentry excluding="**" kind="src" output="target/performfish-analytics-portlet-0.7.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
@ -35,5 +35,5 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/performfish-analytics-portlet-0.6.0-SNAPSHOT/WEB-INF/classes"/>
<classpathentry kind="output" path="target/performfish-analytics-portlet-0.7.0-SNAPSHOT/WEB-INF/classes"/>
</classpath>

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="performfish-analytics-portlet-0.6.0-SNAPSHOT">
<wb-module deploy-name="performfish-analytics-portlet-0.7.0-SNAPSHOT">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>

@ -0,0 +1,56 @@
# Changelog
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v1.0.0] - 2020-05-28
### Added
**Features**
[#17249] Added PDF support
## [v0.4.0] - 2019-11-07
### Added
**Features**
[#17252] Enabled DEA Analysis
## [v0.3.0] - 2019-07-07
### Added
**Features**
[#17247] Add numbers to correlation charts
[#17225] Change Speedometer to Performeter
[#17570] Added synoptic tables for Pre-grow and Hatchery
## [v0.2.0] - 2019-06-07
### Added
**Features**
[#17166] Release Synoptic table functionality
## [v0.1.0] - 2019-05-07
### Added
**Features**
first release

@ -1,21 +1,25 @@
<ReleaseNotes>
<Changeset
component="org.gcube.portlets.user.performfish-analytics-portlet.1-0-0"
date="2020-05-28">
<Change>[#17249] Added PDF support</Change>
</Changeset>
<Changeset
component="org.gcube.portlets.user.performfish-analytics-portlet.0-4-0"
date="2019-11-07">
<Change>[Task #17252] Enabled DEA Analysis</Change>
<Change>[#17252] Enabled DEA Analysis</Change>
</Changeset>
<Changeset
component="org.gcube.portlets.user.performfish-analytics-portlet.0-3-0"
date="2019-07-07">
<Change>[Task #17247] Add numbers to correlation charts</Change>
<Change>[Task #17225] Change Speedometer to Performeter</Change>
<Change>[Task #17570] Added synoptic tables for Pre-grow and Hatchery</Change>
<Change>[#17247] Add numbers to correlation charts</Change>
<Change>[#17225] Change Speedometer to Performeter</Change>
<Change>[#17570] Added synoptic tables for Pre-grow and Hatchery</Change>
</Changeset>
<Changeset
component="org.gcube.portlets.user.performfish-analytics-portlet.0-2-0"
date="2019-06-07">
<Change>[Task #17165]</Change>
<Change>[]Task #17166] Release Synoptic table functionality</Change>
<Change>[#17166] Release Synoptic table functionality</Change>
</Changeset>
<Changeset
component="org.gcube.portlets.user.performfish-analytics-portlet.0-1-0"

@ -11,7 +11,7 @@
<groupId>org.gcube.portlets.user</groupId>
<artifactId>performfish-analytics-portlet</artifactId>
<packaging>war</packaging>
<version>0.7.0-SNAPSHOT</version>
<version>1.0.0-SNAPSHOT</version>
<name>PerformFish Analytics Portlet</name>
<scm>

@ -33,7 +33,7 @@ import org.gcube.portlets.user.performfishanalytics.client.event.SubmitRequestEv
import org.gcube.portlets.user.performfishanalytics.client.event.SubmitRequestEventHandler;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.AnalyticsPanelResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.CorrelationPanelResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.BoxPlotPanelResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.DeaPanelResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.ScatterPanelResult;
@ -366,8 +366,9 @@ public class PerformFishAnalyticsController {
final Map<String, List<String>> performFishRequestParameters) {
GWT.log("Read perform fish response: " + performFishResponse);
requestId++;
@SuppressWarnings("unused")
SynopticTablePanelResult synopticTablePanelResult = new SynopticTablePanelResult(requestId++, viewController,
SynopticTablePanelResult synopticTablePanelResult = new SynopticTablePanelResult(requestId, viewController,
performFishResponse, performFishRequestParameters);
}
@ -490,12 +491,15 @@ public class PerformFishAnalyticsController {
submitRequestPanel.showLoader(true,
"Submitting " + DataMinerAlgorithms.CORRELATION.getTitle() + " request to DM Service...");
String tabTitle = DataMinerAlgorithms.CORRELATION.getTitle();
final String tabTitle = DataMinerAlgorithms.CORRELATION.getTitle();
final String tabDescr = PerformFishResources.INSTANCE.batch_CORRELATION().getText();
final Tab tab = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1),
PerformFishResources.INSTANCE.batch_CORRELATION().getText(), submitRequestPanel);
tabDescr, submitRequestPanel);
final List<KPI> selectedKPI = new ArrayList<KPI>(viewController.getSelectedKPIs());
final List<String> batchIDs = new ArrayList<String>(viewController.getListBatchesID());
requestId++;
PerformFishAnalyticsServiceAsync.Util.getInstance().callingDataMinerPerformFishCorrelationAnalysis(
performFishResponse, mapParameters, new AsyncCallback<DataMinerResponse>() {
@ -503,7 +507,7 @@ public class PerformFishAnalyticsController {
public void onSuccess(DataMinerResponse dmResponse) {
submitRequestPanel.showLoader(false, null);
checkTabSpinner(submitRequestPanel, tab);
AnalyticsPanelResult analyticsPanelResult = new AnalyticsPanelResult();
CorrelationPanelResult analyticsPanelResult = new CorrelationPanelResult(requestId,tabTitle, tabDescr);
analyticsPanelResult.addSelectedAreas(
performFishRequestParameters.get(PerformFishAnalyticsConstant.PERFORM_FISH_AREA_PARAM));
analyticsPanelResult.addSelectedKPIs(selectedKPI);
@ -524,7 +528,7 @@ public class PerformFishAnalyticsController {
submitRequestPanel.showLoader(false, null);
checkTabSpinner(submitRequestPanel, tab);
try {
AnalyticsPanelResult analyticsPanelResult = new AnalyticsPanelResult();
CorrelationPanelResult analyticsPanelResult = new CorrelationPanelResult(requestId, tabTitle, tabDescr);
analyticsPanelResult.addSelectedAreas(performFishRequestParameters
.get(PerformFishAnalyticsConstant.PERFORM_FISH_AREA_PARAM));
analyticsPanelResult.addSelectedKPIs(selectedKPI);
@ -563,22 +567,23 @@ public class PerformFishAnalyticsController {
if (selectedBatchID == null || selectedBatchID.isEmpty())
Window.alert("Something seems wrong, no selected BatchID, try again");
requestId++;
switch (algorithm) {
case BOXPLOT:
@SuppressWarnings("unused")
BoxPlotPanelResult boxPlotPanelResult = new BoxPlotPanelResult(requestId++, viewController, algorithm,
BoxPlotPanelResult boxPlotPanelResult = new BoxPlotPanelResult(requestId, viewController, algorithm,
focusID, inputKPI, outputKPI);
break;
case SPEEDOMETER:
@SuppressWarnings("unused")
SpeedometerPanelResult speedometerPanelResult = new SpeedometerPanelResult(requestId++, viewController,
SpeedometerPanelResult speedometerPanelResult = new SpeedometerPanelResult(requestId, viewController,
algorithm, focusID, inputKPI, outputKPI);
break;
case SCATTER:
@SuppressWarnings("unused")
ScatterPanelResult scatterPanelResult = new ScatterPanelResult(requestId++, viewController, algorithm,
ScatterPanelResult scatterPanelResult = new ScatterPanelResult(requestId, viewController, algorithm,
focusID, inputKPI, outputKPI);
break;
default:

@ -1,4 +1,4 @@
The correlation matrix is a table displaying the correlation between pairs of KPIs.
Correlation coefficients are calculated using the Person parametric correlation test and coloured according to the value in red (significant positive correlation), yellow (significant negative correlation), and in light blue (non-significant correlation).
Correlation coefficients are calculated using the Pearson parametric correlation test and coloured according to the value in red (significant positive correlation), yellow (significant negative correlation), and in light blue (non-significant correlation).
The Student t-test is used to determine the ranges of correlation for Pearson coefficients.
The analysis is performed on all batches data.

@ -1,4 +1,4 @@
The correlation matrix is a table displaying the correlation between pairs of KPIs.
Correlation coefficients are calculated using the Person parametric correlation test and coloured according to the value in red (significant positive correlation), yellow (significant negative correlation), and in light blue (non-significant correlation).
Correlation coefficients are calculated using the Pearson parametric correlation test and coloured according to the value in red (significant positive correlation), yellow (significant negative correlation), and in light blue (non-significant correlation).
The Student t-test is used to determine the ranges of correlation for Pearson coefficients.
The analysis is performed on all farm data.

@ -0,0 +1,591 @@
package org.gcube.portlets.user.performfishanalytics.client.viewannualbinder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.portlets.user.performfishanalytics.client.DataMinerAlgorithms;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
import org.gcube.portlets.user.performfishanalytics.client.annualcontrollers.DataMinerInputParameters;
import org.gcube.portlets.user.performfishanalytics.client.annualcontrollers.PerformFishAnnualAnalyticsViewController;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.ShowResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.SubmitRequestPanel;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
import org.gcube.portlets.user.performfishanalytics.shared.dataminer.DataMinerResponse;
import org.gcube.portlets.user.performfishanalytics.shared.performfishservice.PerformFishResponse;
import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Tab;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.resources.client.TextResource;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Panel;
public class BoxPlotAnnualPanelResult {
private Map<Integer, FlexTable> boxPlotOrderBy = new HashMap<Integer, FlexTable>();
private PerformFishAnnualAnalyticsViewController viewAnnualController;
private int outputIteration = 0;
private int outputNumber = 2;
private int requestId = 0;
private Button savePDFButton;
public BoxPlotAnnualPanelResult(int reqId, PerformFishAnnualAnalyticsViewController viewAnnualController,
PerformFishResponse thePerformFishResponse, final DataMinerAlgorithms algorithm, String focusID,
List<KPI> inputKPI, final List<KPI> outputKPI) {
GWT.log("RequestID: " + reqId);
requestId = reqId;
this.viewAnnualController = viewAnnualController;
TextResource algDescr = PerformFishResources.INSTANCE.farm_BOXPLOT();
String algDesrTxt = algDescr != null ? algDescr.getText() : null;
// TODO
final String tabTitle = algorithm.getTitle();
final String tabDescr = algDesrTxt;
final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
Tab tab = viewAnnualController.createTab(tabTitle + " #" + (viewAnnualController.currentNumberOfTab() + 1),
algDesrTxt, submitRequestPanel);
HorizontalPanel res = new HorizontalPanel();
savePDFButton = new Button();
savePDFButton.getElement().getStyle().setMargin(10, Unit.PX);
savePDFButton.setIcon(IconType.PRINT);
savePDFButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
saveFilePDF(algorithm.getId(), tabTitle, tabTitle, tabDescr, requestId, outputIteration, outputNumber);
// dmResponse.getListOutput().size()
}
});
savePDFButton.setVisible(false);
res.add(savePDFButton);
submitRequestPanel.addWidget(res);
int oIteration = 0;
submitRequestPanel.setTotalRequests(inputKPI.size());
for (KPI kpi : inputKPI) {
oIteration++;
String title = "KPI: " + kpi.getName();
HTML toBigTitle = new HTML(title);
toBigTitle.getElement().setId("KPI_BoxPlotAnnual_" + requestId + "_" + oIteration);
toBigTitle.getElement().addClassName("to-big-title");
submitRequestPanel.addWidget(toBigTitle);
HorizontalPanel hp = new HorizontalPanel();
hp.getElement().addClassName("ext-horizontal-panel");
DataMinerInputParameters dmInputParams = new DataMinerInputParameters(thePerformFishResponse,
viewAnnualController.getSelectedYears(), Arrays.asList(kpi), null, algorithm, focusID);
callDataMinerServiceForChart(dmInputParams, submitRequestPanel, hp, tab, oIteration);
// resultPanel.add(hp);
submitRequestPanel.addWidget(hp);
}
outputIteration = oIteration;
GWT.log("outputInteration: " + outputIteration);
}
/**
* Call data miner service for chart.
*
* @param dmInputParameters
* the dm input parameters
* @param requestPanel
* the request panel
* @param panelContainer
* the panel
* @param tab
* the tab
* @param tabDescr
* @param tabTitle
*/
private void callDataMinerServiceForChart(final DataMinerInputParameters dmInputParameters,
final SubmitRequestPanel requestPanel, final ComplexPanel panelContainer, final Tab tab,
final int oIteration) {
GWT.log("Building DM request with input parameters: " + dmInputParameters);
StringBuilder dataInputsFormatter = new StringBuilder();
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + dmInputParameters.getChartType() + ";");
String yearsValue = "";
for (String year : dmInputParameters.getSelectedYears()) {
yearsValue += year + "|";
}
yearsValue = yearsValue.substring(0, yearsValue.length() - 1);
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_YEARS_PARAM + "=" + yearsValue + ";");
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "=" + dmInputParameters.getFocusID() + ";");
// dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM+"=ID;");
if (dmInputParameters.getInputKPI() != null && dmInputParameters.getInputKPI().size() > 0) {
String kpiCodes = "";
for (KPI kpi : dmInputParameters.getInputKPI()) {
kpiCodes += kpi.getCode() + "|";
}
// remove last |
kpiCodes = kpiCodes.substring(0, kpiCodes.length() - 1);
GWT.log("Input KPICodes: " + kpiCodes);
// ADDING KPIs code
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_INPUT_KPI_PARAM + "=" + kpiCodes + ";");
}
if (dmInputParameters.getOutputKPI() != null && dmInputParameters.getOutputKPI().size() > 0) {
String kpiCodes = "";
for (KPI kpi : dmInputParameters.getOutputKPI()) {
kpiCodes += kpi.getCode() + "|";
}
// remove last |
kpiCodes = kpiCodes.substring(0, kpiCodes.length() - 1);
GWT.log("Output KPICodes: " + kpiCodes);
// ADDING KPIs code
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_OUTPUT_KPI_PARAM + "=" + kpiCodes + ";");
}
Map<String, String> performFishResponseMap = dmInputParameters.getPerformFishResponse().getMapParameters();
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.LethalIncidentsTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AnnualTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AntibioticsTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AntiparasiticTable);
String dataInParameters = dataInputsFormatter.toString();
GWT.log("Calling DM service with client input parameters: " + dataInParameters);
Map<String, List<String>> mapParameters = new HashMap<String, List<String>>();
mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
final LoaderIcon loaderIcon = new LoaderIcon(
"Submitting request to " + dmInputParameters.getChartType().getTitle() + " Analysis...");
loaderIcon.setVisible(true);
panelContainer.setVisible(true);
panelContainer.add(loaderIcon);
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
loaderIcon.setFocus(true);
}
});
PerformFishAnalyticsServiceAsync.Util.getInstance().callingDataMinerPerformFishAnnualAnalysis(mapParameters,
new AsyncCallback<DataMinerResponse>() {
@Override
public void onSuccess(DataMinerResponse dmResponse) {
loaderIcon.setVisible(false);
checkTabSpinner(requestPanel, tab);
// field_unary_algorithm.setVisible(true);
GWT.log("I'm displaying: " + dmResponse);
displayOutputFilesAsStaticEntities(dmResponse, dmInputParameters.getChartType(),
dmInputParameters.getInputKPI(), dmInputParameters.getOutputKPI(),
dmInputParameters.getFocusID(), panelContainer, false, oIteration);
}
@Override
public void onFailure(Throwable caught) {
loaderIcon.setVisible(false);
checkTabSpinner(requestPanel, tab);
displayOutputFilesAsStaticEntities(null, dmInputParameters.getChartType(),
dmInputParameters.getInputKPI(), dmInputParameters.getOutputKPI(),
dmInputParameters.getFocusID(), panelContainer, true, oIteration);
}
});
}
/**
* Append DM input table.
*
* @param performFishResponseMap
* the perform fish response map
* @param dataInputsFormatter
* the data inputs formatter
* @param table
* the table
* @return the string builder
*/
private StringBuilder appendDMInputTable(Map<String, String> performFishResponseMap,
StringBuilder dataInputsFormatter, PFSERVICE_TO_DM_MAPPING_TABLE table) {
String toDMInputTable = performFishResponseMap.get(table.getPerformFishTable());
if (toDMInputTable != null && !toDMInputTable.isEmpty()) {
dataInputsFormatter.append(table.getDataMinerTable() + "=" + toDMInputTable + ";");
}
return dataInputsFormatter;
}
private String getOutputId(int oIteration, String title) {
if (title.startsWith("My")) {
return null;
} else if (title.startsWith("All")) {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 1;
return outputId;
} else {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 2;
return outputId;
}
}
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List<KPI> inputKPIs, List<KPI> outputKPIs, final String focusID,
final Panel container, boolean displayError, final int oIteration) {
String title = displayError ? "No results " : "";
if (displayError) {
Alert alert = new Alert(title);
alert.setType(AlertType.ERROR);
alert.setClose(false);
alert.getElement().getStyle().setMargin(10, Unit.PX);
container.add(alert);
return;
}
savePDFButton.setVisible(true);
final String toTitle = title;
for (OutputFile outputFile : dmResponse.getListOutput()) {
final FileContentType fileContentType = outputFile.getDataType();
switch (outputFile.getDataType()) {
case IMAGE:
PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// showAlert(caught.getMessage(),
// AlertType.ERROR, true,
// uib_vp_deanalanlysis_request_container);
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(String base64Content) {
String title = toTitle;
title = chartType.getTitle() + " - on all farm data<br>";
title += "Blue dots indicate the selected farm: " + focusID;
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showImage(base64Content);
displayingOrderedBoxPlot(dmResponse, title, container, showResult);
}
});
break;
case CSV:
PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
new AsyncCallback<CSVFile>() {
@Override
public void onFailure(Throwable caught) {
// showAlert(caught.getMessage(),
// AlertType.ERROR, true,
// uib_vp_deanalanlysis_request_container);
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(CSVFile result) {
GWT.log("Displaying: " + result);
String cssTableStyle = "simpletable";
String title = toTitle;
if (result.getFileName().contains("_user")) {
title = "My Batch(es)";
return;
} else {
title = "All farm data in the VRE (including mine)";
}
title += "<br>";
title += "Data aggregation is performed by considering farms as base units";
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showCSVFile(result, cssTableStyle);
displayingOrderedBoxPlot(dmResponse, title, container, showResult);
}
});
break;
default:
break;
}
}
}
private void displayingOrderedBoxPlot(final DataMinerResponse dmResponse, String title, final Panel container,
ShowResult showResult) {
int hashcode = dmResponse.hashCode();
GWT.log("The hascode is: " + hashcode);
FlexTable flex = boxPlotOrderBy.get(hashcode);
if (flex == null) {
GWT.log("The flextable is null");
flex = new FlexTable();
boxPlotOrderBy.put(hashcode, flex);
container.add(flex);
}
if (title.startsWith("My")) {
flex.setWidget(0, 0, showResult);
} else if (title.startsWith("All")) {
flex.setWidget(0, 1, showResult);
} else {
flex.setWidget(0, 2, showResult);
}
}
/**
* Remove the spinner if all DM responses are returned.
*
* @param requestPanel
* the request panel
* @param tab
* the tab
*/
private void checkTabSpinner(SubmitRequestPanel requestPanel, Tab tab) {
requestPanel.incrementCompletedRequests();
int completed = requestPanel.getCompletedRequests();
int total = requestPanel.getTotalRequests();
if (completed >= total) {
viewAnnualController.noSpinner(tab);
}
}
private static native void saveFilePDF(String chartType, String filename, String tabTitle, String tabDescr,
int requestId, int outputIteration, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
console.log('requestId: ' + requestId);
console.log('OutputIteration: ' + outputIteration);
console.log('OutputNumber:' + outputNumber);
var tTitle = tabTitle;
var tDescr = tabDescr;
var pdoc = new jsPDF("p", "mm", "a4");
pdoc.setProperties({
title : 'PerformFish ' + tTitle,
subject : ' Results',
author : 'PerformFish',
keywords : 'PerformFish',
creator : 'D4Science'
});
var lMargin = 15; //left margin in mm
var rMargin = 15; //right margin in mm
var tMargin = 15; //top margin in mm
var bMargin = 15; //bottom margin in mm
var pdfWidthInMM = 210; // width of A4 in mm
var pdfHeightInMM = 297; // height of A4 in mm
var pageCenter = pdfWidthInMM / 2;
pdoc.setFontSize(24);
var title = "PerformFish " + tTitle;
var titleHeight = pdoc.getLineHeight(title) / pdoc.internal.scaleFactor
var xPos = lMargin;
var yPos = tMargin;
pdoc.text(title, pageCenter, yPos, 'center');
yPos += titleHeight;
pdoc.setFontSize(10);
var lineHeight = pdoc.getLineHeight(tDescr) / pdoc.internal.scaleFactor
var splittedAnalysisDescription = pdoc.splitTextToSize(tDescr,
(pdfWidthInMM - lMargin - rMargin));
var lines = splittedAnalysisDescription.length // splitted text is a string array
var analysisDescriptionHeight = lines * lineHeight
pdoc.text(splittedAnalysisDescription, xPos, yPos, 'left');
yPos += analysisDescriptionHeight;
//yPos += 2;
//pdoc.text("Analysis:", xPos, yPos, 'left');
yPos += 6;
for (var i = 1; i <= outputIteration; i++) {
var kpiId = 'KPI_BoxPlotAnnual_' + requestId + '_' + i;
console.log('kpiId: ' + kpiId);
var kpiName = $doc.getElementById(kpiId);
yPos += 2;
pdoc.setFontSize(14);
pdoc.setFontType("bold");
var kpiText = kpiName.textContent;
var kpiHeight = pdoc.getLineHeight(kpiText)
/ pdoc.internal.scaleFactor;
var splittedKpiName = pdoc.splitTextToSize(kpiText, (pdfWidthInMM
- lMargin - rMargin));
var kpiLines = splittedKpiName.length; // splitted text is a string array
var kpiLinesHeight = kpiLines * kpiHeight;
pdoc.text(splittedKpiName, xPos, yPos, 'left');
yPos += kpiLinesHeight;
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
for (var j = 1; j <= outputNumber; j++) {
var outputId = 'OutputId_' + requestId + '_' + i + '_' + j;
console.log('OutputId: ' + outputId);
var resultOutputNumber = $doc.getElementById(outputId);
console.log('OutputId_: ' + resultOutputNumber.innerHTML);
var resultType = resultOutputNumber.className;
console.log('resultOutputNumber className: ' + resultType);
if (typeof resultType !== 'undefined' && resultType !== null
&& resultType !== '') {
if (resultType == 'csv') {
console.log('Result Type csv: ' + i);
// foo could get resolved and it's defined
var childrenTable = resultOutputNumber.children;
var titleCurrentTable = childrenTable[0].rows[0].cells[0];
console.log('Title current table: '
+ titleCurrentTable.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentTable.textContent, xPos, yPos,
'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
console.log('CSV SecondTable: ' + secondTable);
pdoc.autoTable({
theme : 'grid',
startY : yPos,
pageBreak : 'auto',
bodyStyles : {
fontSize : 9
},
html : secondTable
});
yPos = pdoc.previousAutoTable.finalY + 6;
} else {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = resultOutputNumber.children;
var titleCurrentImage = childrenTable[0].rows[0].cells[0];
console.log('Title current image: '
+ titleCurrentImage.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentImage.textContent, xPos,
yPos, 'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
console.log('Image element: ' + imageElement);
pdoc.addImage(imageElement, lMargin, yPos);
console.log('Image Height: ' + imageElement.height);
yPos += (imageElement.height * 0.26458333);
} else {
console.log('Result Type unknow: ' + i);
}
}
} else {
console.log('Result Type is undefined:' + i);
}
}
if (i < outputIteration) {
pdoc.addPage();
yPos = tMargin; // Restart position
} else {
}
}
var numberOfPages=pdoc.internal.getNumberOfPages()
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/"+numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');
pdoc.save(filename);
}-*/;
}

@ -10,7 +10,7 @@ import java.util.Map;
import org.gcube.portlets.user.performfishanalytics.client.DataMinerAlgorithms;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
import org.gcube.portlets.user.performfishanalytics.client.controllers.PerformFishAnalyticsController;
import org.gcube.portlets.user.performfishanalytics.client.annualcontrollers.PerformFishAnnualAnalyticsController;
import org.gcube.portlets.user.performfishanalytics.client.event.CallAlgorithmEvent;
import org.gcube.portlets.user.performfishanalytics.client.view.util.CorrelationValueToColourUtil;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
@ -32,7 +32,6 @@ import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.rpc.AsyncCallback;
@ -51,13 +50,13 @@ import com.google.gwt.user.client.ui.Widget;
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jan 29, 2019
*/
public class AnalyticsAnnualPanelResult extends Composite {
public class CorrelationAnnualPanelResult extends Composite {
/**
*
*/
private static AnalyticsPanelResultUiBinder uiBinder = GWT.create(AnalyticsPanelResultUiBinder.class);
private static CorrelationPanelResultUiBinder uiBinder = GWT.create(CorrelationPanelResultUiBinder.class);
/**
* The Interface AnalyticsPanelResultUiBinder.
@ -65,7 +64,7 @@ public class AnalyticsAnnualPanelResult extends Composite {
* @author Francesco Mangiacrapa at ISTI-CNR
* (francesco.mangiacrapa@isti.cnr.it) Jan 30, 2019
*/
interface AnalyticsPanelResultUiBinder extends UiBinder<Widget, AnalyticsAnnualPanelResult> {
interface CorrelationPanelResultUiBinder extends UiBinder<Widget, CorrelationAnnualPanelResult> {
}
@UiField
@ -114,19 +113,17 @@ public class AnalyticsAnnualPanelResult extends Composite {
private List<String> selectedAreas;
// private HandlerManager theEventBus;
private Map<String, CSVFile> csvGenerated = new HashMap<String, CSVFile>();
private AnalyticsAnnualPanelResult analyticsPanelResult;
private static int callNumber;
private CorrelationAnnualPanelResult analyticsPanelResult;
private static Map<String, Integer> outputNumbers = new HashMap<String, Integer>();
private int outputNumber;
private int requestId = 0;
private String analysisDescription;
public AnalyticsAnnualPanelResult(HandlerManager eventBus) {
public CorrelationAnnualPanelResult(int reqId, final String tabTitle,
final String tabDescription) {
GWT.log("RequestID: " + reqId);
requestId = reqId;
initWidget(uiBinder.createAndBindUi(this));
// this.theEventBus = eventBus;
@ -138,26 +135,10 @@ public class AnalyticsAnnualPanelResult extends Composite {
@Override
public void onClick(ClickEvent event) {
saveFilePDF(analyticsPanelResult, "AnalysisResult.pdf");
saveFilePDF(analyticsPanelResult, tabTitle, tabTitle, tabDescription, requestId, outputNumber);
}
});
/*
* uib_save_pdf_2.setIcon(IconType.PRINT);
* uib_save_pdf_2.addClickHandler(new ClickHandler() {
*
* @Override public void onClick(ClickEvent event) {
* saveFilePDF(analyticsPanelResult, "AnalysisResult.pdf"); } });
*/
}
public String getAnalysisDescription() {
return analysisDescription;
}
public void setAnalysisDescription(String analysisDescription) {
this.analysisDescription = analysisDescription;
}
/**
@ -256,6 +237,7 @@ public class AnalyticsAnnualPanelResult extends Composite {
public void addParameters(String keyToGet, Map<String, List<String>> parameters, String toShowBatchTypeValue) {
final FlexTable flexTable = new FlexTable();
flexTable.getElement().setId("CorrelationParameterInputKPIs");
flexTable.setStyleName("colgrouptable");
try {
@ -289,8 +271,8 @@ public class AnalyticsAnnualPanelResult extends Composite {
KPINames += kpi.getName() + ", ";
}
KPINames = KPINames.substring(0, KPINames.length() - 2);
flexTable.setWidget(2, 0, new HTML("KPIs:"));
flexTable.setWidget(2, 1, new HTML(KPINames));
flexTable.setWidget(1, 0, new HTML("KPIs:"));
flexTable.setWidget(1, 1, new HTML(KPINames));
} catch (Exception e) {
// silent
@ -311,6 +293,13 @@ public class AnalyticsAnnualPanelResult extends Composite {
}
}
private String getOutputId() {
outputNumber++;
String outputId = "OutputId_" + requestId + "_" + outputNumber;
GWT.log("Generated OutputId: " + outputId);
return outputId;
}
/**
* Adds the results.
*
@ -321,7 +310,8 @@ public class AnalyticsAnnualPanelResult extends Composite {
this.dmResponse = dmResponse;
for (final OutputFile outputFile : dmResponse.getListOutput()) {
outputNumber = 0;
for (OutputFile outputFile : dmResponse.getListOutput()) {
if (outputFile.getDataType().equals(FileContentType.CSV)) {
PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
@ -373,7 +363,9 @@ public class AnalyticsAnnualPanelResult extends Composite {
HorizontalPanel hp = new HorizontalPanel();
final FlexTable flexTable = new FlexTable();
flexTable.setStyleName("fixedtable");
flexTable.getElement().setId(getOutputId());
flexTable.getElement().getStyle().setMarginBottom(10, Unit.PX);
flexTable.setWidget(0, 0, new Label(""));
@ -453,7 +445,7 @@ public class AnalyticsAnnualPanelResult extends Composite {
}
}
});
buttonHTML.getElement().getStyle().setBackgroundColor(theColor);
flexTable.setWidget(rowIndex, j, buttonHTML);
}
@ -462,6 +454,7 @@ public class AnalyticsAnnualPanelResult extends Composite {
hp.add(flexTable);
final FlexTable flexLegend = new FlexTable();
flexLegend.getElement().setId(getOutputId());
flexLegend.setStyleName("simpletable");
Map<String, String> map = CorrelationValueToColourUtil.getMap();
flexLegend.setWidget(0, 0, new Label("Legend"));
@ -470,6 +463,7 @@ public class AnalyticsAnnualPanelResult extends Composite {
for (String key : map.keySet()) {
final String rgbColor = map.get(key);
final HTML theLegendColor = new HTML("");
theLegendColor.getElement().getStyle().setBackgroundColor(rgbColor);
flexLegend.setWidget(i, 0, theLegendColor);
flexLegend.setWidget(i, 1, new HTML(key));
theLegendColor.addAttachHandler(new AttachEvent.Handler() {
@ -567,17 +561,21 @@ public class AnalyticsAnnualPanelResult extends Composite {
GWT.log("Called ScatterChart at rowIndex: " + rowIndex + ", columnIndex: " + columnIndex);
List<KPI> selectedKPI = getKPIForIndexes(rowIndex, columnIndex);
GWT.log("Selected KPI: " + selectedKPI);
PerformFishAnalyticsController.eventBus
PerformFishAnnualAnalyticsController.eventBus
.fireEvent(new CallAlgorithmEvent(DataMinerAlgorithms.SCATTER, focusID, selectedKPI, null));
}
private static native void saveFilePDF(AnalyticsAnnualPanelResult chart, String filename)/*-{
private static native void saveFilePDF(CorrelationAnnualPanelResult chart, String filename, String tabTitle,
String tabDescr, int requestId, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
var tTitle = tabTitle;
var tDescr = tabDescr;
var pdoc = new jsPDF("p", "mm", "a4");
pdoc.setProperties({
title : 'PerformFish Analysis',
title : 'PerformFish ' + tTitle,
subject : ' Results',
author : 'PerformFish',
keywords : 'PerformFish',
@ -593,131 +591,196 @@ public class AnalyticsAnnualPanelResult extends Composite {
var pageCenter = pdfWidthInMM / 2;
pdoc.setFontSize(24);
var title = "PerformFish Analysis";
var title = "PerformFish " + tTitle;
var titleHeight = pdoc.getLineHeight(title) / pdoc.internal.scaleFactor
var xPos = lMargin;
var yPos = tMargin;
pdoc.text(title, pageCenter, yPos, 'center');
yPos += titleHeight;
var analysisDescription = chart.@org.gcube.portlets.user.performfishanalytics.client.viewannualbinder.AnalyticsAnnualPanelResult::analysisDescription;
pdoc.setFontSize(10);
var lineHeight = pdoc.getLineHeight(deaDescription)
/ pdoc.internal.scaleFactor
var splittedAnalysisDescription = pdoc.splitTextToSize(
analysisDescription, (pdfWidthInMM - lMargin - rMargin));
var lineHeight = pdoc.getLineHeight(tDescr) / pdoc.internal.scaleFactor
var splittedAnalysisDescription = pdoc.splitTextToSize(tDescr,
(pdfWidthInMM - lMargin - rMargin));
var lines = splittedAnalysisDescription.length // splitted text is a string array
var analysisDescriptionHeight = lines * lineHeight
pdoc.text(splittedAnalysisDescription, xPos, yPos, 'left');
yPos += analysisDescriptionHeight;
yPos += 2;
pdoc.text("Analysis:", xPos, yPos, 'left');
yPos += 6;
var callNumber = @org.gcube.portlets.user.performfishanalytics.client.viewannualbinder.AnalyticsAnnualPanelResult::callNumber;
console.log('CallNumber: ' + callNumber);
for (var n = 1; n <= callNumber; n++) {
var deaAnalysisResultParametersInputKPIs = $doc
.getElementById('DeaAnalysisResultParameterInputKPIs_' + n).innerHTML;
console.log('InputKPIs: ' + deaAnalysisResultParametersInputKPIs);
var deaAnalysisResultParametersOutputKPIs = $doc
.getElementById('DeaAnalysisResultParameterOutputKPIs_' + n).innerHTML;
console.log('OuputKPIs: ' + deaAnalysisResultParametersOutputKPIs);
pdoc.autoTable({
theme : 'plain',
startY : yPos,
pageBreak : 'auto',
columnStyles : {
0 : {
halign : 'left',
fillColor : [ 211, 225, 241 ]
}
},
head : null,
body : [
[ 'Selected Input KPIs',
deaAnalysisResultParametersInputKPIs ],
[ 'Selected Output KPIs',
deaAnalysisResultParametersOutputKPIs ] ]
});
yPos = pdoc.previousAutoTable.finalY + 6;
var deaAnalysisResults = $doc.getElementById('DeaAnalysisResults');
yPos += 4;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text("Parameters:", xPos, yPos, 'left');
pdoc.setFontSize(10);
pdoc.setFontType("normal");
yPos += 4;
var correlationParametersInputKPIs = $doc
.getElementById('CorrelationParameterInputKPIs');
console.log('InputKPIs: ' + correlationParametersInputKPIs);
pdoc.autoTable({
theme : 'plain',
startY : yPos,
pageBreak : 'auto',
columnStyles : {
0 : {
halign : 'left',
fillColor : [ 211, 225, 241 ]
}
},
html : correlationParametersInputKPIs
var deaAnalysisResult = $doc.getElementById('DeaAnalysisResult_'
+ n);
});
console.log("DeaAnalysisResult: " + n);
//head : null,
// body : [
// [ 'Parameters',
// correlationParametersInputKPIs ]
// ]
var outputNumber = @org.gcube.portlets.user.performfishanalytics.client.viewbinder.DeaPanelResult::getOutputNumber(Ljava/lang/String;)('DeaAnalysisResult_'+ n);
console.log('OutputNumber: ' + outputNumber);
yPos = pdoc.previousAutoTable.finalY + 6;
for (var i = 1; i <= outputNumber; i++) {
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text("CORRELATION Matrix:", xPos, yPos, 'left');
pdoc.setFontSize(10);
pdoc.setFontType("normal");
yPos += 4;
console.log('OutputNumber: ' + outputNumber);
for (var i = 1; i <= outputNumber; i++) {
var outputId = 'OutputId_' + requestId + '_' + i;
console.log('OutputId: ' + outputId);
var resultElement = $doc.getElementById(outputId);
console.log('Result Element: ' + resultElement);
var resultType = resultElement.className;
console.log('Result Element className: ' + resultType);
if (typeof resultType !== 'undefined' && resultType !== null
&& resultType !== '') {
if (resultType == 'fixedtable' || resultType == 'simpletable') {
console.log('Result Type csv: ' + i);
console.log('Result Content: ' + resultElement.innerHTML);
var checkColor = function(data) {
if (data.section === 'body') {
console.log(data);
if (typeof data.cell !== 'undefined'
&& data.cell !== null) {
if (typeof data.cell.raw !== 'undefined'
&& data.cell.raw !== null) {
console.log(data.cell.raw.innerHTML);
var positive = 'rgb(255, 68, 45)';
var negative = 'rgb(173, 216, 230)';
var nonsignificant = 'rgb(230, 223, 0)';
if (data.cell.raw.innerHTML
.indexOf(positive) >= 0) {
data.cell.styles.fillColor = [ 255, 68,
45 ];
} else {
if (data.cell.raw.innerHTML
.indexOf(negative) >= 0) {
data.cell.styles.fillColor = [ 173,
216, 230 ];
} else {
if (data.cell.raw.innerHTML
.indexOf(nonsignificant) >= 0) {
data.cell.styles.fillColor = [
230, 223, 0 ];
} else {
}
}
}
}
}
var deaOutputId = 'DeaAnalysisResult_' + n + '_' + i;
console.log('DeaOutputId: ' + deaOutputId);
}
};
pdoc.autoTable({
theme : 'grid',
startY : yPos,
pageBreak : 'auto',
bodyStyles : {
fontSize : 9
},
didParseCell : checkColor,
html : resultElement
});
yPos = pdoc.previousAutoTable.finalY + 6;
} else {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = outputNumber.children;
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv
.getElementsByTagName('img').item(0);
console.log('Image element: ' + imageElement);
pdoc.addImage(imageElement, lMargin, yPos);
console.log('Image Height: ' + imageElement.height);
yPos += (imageElement.height * 0.26458333);
var deaOutputNumber = $doc.getElementById(deaOutputId);
} else {
console.log('Result Type unknow: ' + i);
}
console.log('DeaOutputNumber: ' + deaOutputNumber.innerHTML);
var resultType = deaOutputNumber.className;
}
} else {
console.log('Result Type is undefined:' + i);
}
console.log('DeaOutputNumber className: ' + resultType);
if (i == outputNumber) {
if (typeof resultType !== 'undefined' && resultType !== null
&& resultType !== '') {
} else {
if (pdfHeightInMM - yPos < pdfHeightInMM / 7) {
pdoc.addPage();
yPos = tMargin; // Restart position
}
}
if (resultType == 'csv') {
console.log('Result Type csv: ' + i);
// foo could get resolved and it's defined
}
var childrenTable = deaOutputNumber.children;
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
console.log('CSV SecondTable: ' + secondTable);
pdoc.autoTable({
theme : 'grid',
startY : yPos,
pageBreak : 'auto',
bodyStyles : {
fontSize : 9
},
html : secondTable
});
var focusIDElement = $doc
.getElementById('field_list_focus_id_correlation');
console.log('FocusID Element: ' + focusIDElement);
var selectedIndex = focusIDElement.selectedIndex;
if (selectedIndex > -1) {
var value = focusIDElement[selectedIndex].innerText;
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
pdoc.text("Focus ID: "+value, xPos, yPos, 'left');
pdoc.setFontSize(10);
pdoc.setFontType("normal");
yPos += 4;
yPos = pdoc.previousAutoTable.finalY + 6;
} else {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = deaOutputNumber.children;
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
console.log('Image element: ' + imageElement);
pdoc.addImage(imageElement, lMargin, yPos);
console.log('Image Height: ' + imageElement.height);
yPos += (imageElement.height * 0.26458333);
} else {
console.log('Result Type unknow: ' + i);
}
}
}
} else {
console.log('Result Type is undefined:' + i);
}
var numberOfPages = pdoc.internal.getNumberOfPages()
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/" + numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
}
console.log('Done');
pdoc.save(filename);

@ -0,0 +1,548 @@
package org.gcube.portlets.user.performfishanalytics.client.viewannualbinder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.portlets.user.performfishanalytics.client.DataMinerAlgorithms;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
import org.gcube.portlets.user.performfishanalytics.client.annualcontrollers.DataMinerInputParameters;
import org.gcube.portlets.user.performfishanalytics.client.annualcontrollers.PerformFishAnnualAnalyticsViewController;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.ShowResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.SubmitRequestPanel;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
import org.gcube.portlets.user.performfishanalytics.shared.dataminer.DataMinerResponse;
import org.gcube.portlets.user.performfishanalytics.shared.performfishservice.PerformFishResponse;
import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Tab;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.resources.client.TextResource;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Panel;
public class ScatterAnnualPanelResult {
private PerformFishAnnualAnalyticsViewController viewAnnualController;
private int requestId;
private int outputIteration = 1;
private int outputNumber = 1;
private Button savePDFButton;
public ScatterAnnualPanelResult(int reqId, PerformFishAnnualAnalyticsViewController viewAnnualController,
PerformFishResponse thePerformFishResponse, final DataMinerAlgorithms algorithm, String focusID,
List<KPI> inputKPI, final List<KPI> outputKPI) {
GWT.log("RequestID: " + reqId);
requestId = reqId;
this.viewAnnualController = viewAnnualController;
TextResource algDescr = PerformFishResources.INSTANCE.farm_SCATTER();
String algDesrTxt = algDescr != null ? algDescr.getText() : null;
// TODO
final String tabTitle = algorithm.getTitle();
final String tabDescr = algDesrTxt;
final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
Tab tab = viewAnnualController.createTab(tabTitle + " #" + (viewAnnualController.currentNumberOfTab() + 1),
algDesrTxt, submitRequestPanel);
HorizontalPanel res = new HorizontalPanel();
savePDFButton = new Button();
savePDFButton.getElement().getStyle().setMargin(10, Unit.PX);
savePDFButton.setIcon(IconType.PRINT);
savePDFButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
saveFilePDF(algorithm.getId(), tabTitle, tabTitle, tabDescr, requestId, outputIteration, outputNumber);
// dmResponse.getListOutput().size()
}
});
savePDFButton.setVisible(false);
res.add(savePDFButton);
submitRequestPanel.addWidget(res);
if (inputKPI.get(0) == null || inputKPI.get(1) == null) {
submitRequestPanel
.setTheTitle("Sorry, something seems wrong, the selected KPIs are not valid. Please try again");
checkTabSpinner(submitRequestPanel, tab);
return;
// Window.alert("Something seems wrong, no selected BatchID, try
// again");
}
String title = "KPI: " + inputKPI.get(0).getName() + " vs " + inputKPI.get(1).getName();
HTML toBigTitle = new HTML(title);
toBigTitle.getElement().setId("KPI_ScatterAnnual_" + requestId + "_" + outputIteration);
toBigTitle.getElement().addClassName("to-big-title");
submitRequestPanel.addWidget(toBigTitle);
HorizontalPanel hp = new HorizontalPanel();
hp.getElement().addClassName("ext-horizontal-panel");
DataMinerInputParameters dmInputParams = new DataMinerInputParameters(thePerformFishResponse,
viewAnnualController.getSelectedYears(), inputKPI, outputKPI, algorithm, focusID);
callDataMinerServiceForChart(dmInputParams, submitRequestPanel, hp, tab, outputIteration);
submitRequestPanel.addWidget(hp);
}
/**
* Call data miner service for chart.
*
* @param dmInputParameters
* the dm input parameters
* @param requestPanel
* the request panel
* @param panelContainer
* the panel
* @param tab
* the tab
* @param tabDescr
* @param tabTitle
*/
private void callDataMinerServiceForChart(final DataMinerInputParameters dmInputParameters,
final SubmitRequestPanel requestPanel, final ComplexPanel panelContainer, final Tab tab,
final int oIteration) {
GWT.log("Building DM request with input parameters: " + dmInputParameters);
StringBuilder dataInputsFormatter = new StringBuilder();
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + dmInputParameters.getChartType() + ";");
String yearsValue = "";
for (String year : dmInputParameters.getSelectedYears()) {
yearsValue += year + "|";
}
yearsValue = yearsValue.substring(0, yearsValue.length() - 1);
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_YEARS_PARAM + "=" + yearsValue + ";");
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "=" + dmInputParameters.getFocusID() + ";");
// dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM+"=ID;");
if (dmInputParameters.getInputKPI() != null && dmInputParameters.getInputKPI().size() > 0) {
String kpiCodes = "";
for (KPI kpi : dmInputParameters.getInputKPI()) {
kpiCodes += kpi.getCode() + "|";
}
// remove last |
kpiCodes = kpiCodes.substring(0, kpiCodes.length() - 1);
GWT.log("Input KPICodes: " + kpiCodes);
// ADDING KPIs code
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_INPUT_KPI_PARAM + "=" + kpiCodes + ";");
}
if (dmInputParameters.getOutputKPI() != null && dmInputParameters.getOutputKPI().size() > 0) {
String kpiCodes = "";
for (KPI kpi : dmInputParameters.getOutputKPI()) {
kpiCodes += kpi.getCode() + "|";
}
// remove last |
kpiCodes = kpiCodes.substring(0, kpiCodes.length() - 1);
GWT.log("Output KPICodes: " + kpiCodes);
// ADDING KPIs code
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_OUTPUT_KPI_PARAM + "=" + kpiCodes + ";");
}
Map<String, String> performFishResponseMap = dmInputParameters.getPerformFishResponse().getMapParameters();
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.LethalIncidentsTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AnnualTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AntibioticsTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AntiparasiticTable);
String dataInParameters = dataInputsFormatter.toString();
GWT.log("Calling DM service with client input parameters: " + dataInParameters);
Map<String, List<String>> mapParameters = new HashMap<String, List<String>>();
mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
final LoaderIcon loaderIcon = new LoaderIcon(
"Submitting request to " + dmInputParameters.getChartType().getTitle() + " Analysis...");
loaderIcon.setVisible(true);
panelContainer.setVisible(true);
panelContainer.add(loaderIcon);
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
loaderIcon.setFocus(true);
}
});
PerformFishAnalyticsServiceAsync.Util.getInstance().callingDataMinerPerformFishAnnualAnalysis(mapParameters,
new AsyncCallback<DataMinerResponse>() {
@Override
public void onSuccess(DataMinerResponse dmResponse) {
loaderIcon.setVisible(false);
checkTabSpinner(requestPanel, tab);
// field_unary_algorithm.setVisible(true);
GWT.log("I'm displaying: " + dmResponse);
displayOutputFilesAsStaticEntities(dmResponse, dmInputParameters.getChartType(),
dmInputParameters.getInputKPI(), dmInputParameters.getOutputKPI(),
dmInputParameters.getFocusID(), panelContainer, false, oIteration);
}
@Override
public void onFailure(Throwable caught) {
loaderIcon.setVisible(false);
checkTabSpinner(requestPanel, tab);
displayOutputFilesAsStaticEntities(null, dmInputParameters.getChartType(),
dmInputParameters.getInputKPI(), dmInputParameters.getOutputKPI(),
dmInputParameters.getFocusID(), panelContainer, true, oIteration);
}
});
}
/**
* Append DM input table.
*
* @param performFishResponseMap
* the perform fish response map
* @param dataInputsFormatter
* the data inputs formatter
* @param table
* the table
* @return the string builder
*/
private StringBuilder appendDMInputTable(Map<String, String> performFishResponseMap,
StringBuilder dataInputsFormatter, PFSERVICE_TO_DM_MAPPING_TABLE table) {
String toDMInputTable = performFishResponseMap.get(table.getPerformFishTable());
if (toDMInputTable != null && !toDMInputTable.isEmpty()) {
dataInputsFormatter.append(table.getDataMinerTable() + "=" + toDMInputTable + ";");
}
return dataInputsFormatter;
}
private String getOutputId(int oIteration, String title) {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 1;
return outputId;
}
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List<KPI> inputKPIs, List<KPI> outputKPIs, final String focusID,
final Panel container, boolean displayError, final int oIteration) {
String title = displayError ? "No results " : "";
if (displayError) {
Alert alert = new Alert(title);
alert.setType(AlertType.ERROR);
alert.setClose(false);
alert.getElement().getStyle().setMargin(10, Unit.PX);
container.add(alert);
return;
}
savePDFButton.setVisible(true);
final String toTitle = title;
for (OutputFile outputFile : dmResponse.getListOutput()) {
final FileContentType fileContentType = outputFile.getDataType();
switch (outputFile.getDataType()) {
case IMAGE:
PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// showAlert(caught.getMessage(),
// AlertType.ERROR, true,
// uib_vp_deanalanlysis_request_container);
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(String base64Content) {
String title = toTitle;
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showImage(base64Content);
container.add(showResult);
}
});
break;
case CSV:
PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
new AsyncCallback<CSVFile>() {
@Override
public void onFailure(Throwable caught) {
// showAlert(caught.getMessage(),
// AlertType.ERROR, true,
// uib_vp_deanalanlysis_request_container);
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(CSVFile result) {
GWT.log("Displaying: " + result);
String cssTableStyle = "simpletable";
String title = toTitle;
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showCSVFile(result, cssTableStyle);
container.add(showResult);
}
});
break;
default:
break;
}
}
}
/**
* Remove the spinner if all DM responses are returned.
*
* @param requestPanel
* the request panel
* @param tab
* the tab
*/
private void checkTabSpinner(SubmitRequestPanel requestPanel, Tab tab) {
requestPanel.incrementCompletedRequests();
int completed = requestPanel.getCompletedRequests();
int total = requestPanel.getTotalRequests();
if (completed >= total) {
viewAnnualController.noSpinner(tab);
}
}
private static native void saveFilePDF(String chartType, String filename, String tabTitle, String tabDescr,
int requestId, int outputIteration, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
console.log('requestId: ' + requestId);
console.log('OutputIteration: ' + outputIteration);
console.log('OutputNumber:' + outputNumber);
var tTitle = tabTitle;
var tDescr = tabDescr;
var pdoc = new jsPDF("p", "mm", "a4");
pdoc.setProperties({
title : 'PerformFish ' + tTitle,
subject : ' Results',
author : 'PerformFish',
keywords : 'PerformFish',
creator : 'D4Science'
});
var lMargin = 15; //left margin in mm
var rMargin = 15; //right margin in mm
var tMargin = 15; //top margin in mm
var bMargin = 15; //bottom margin in mm
var pdfWidthInMM = 210; // width of A4 in mm
var pdfHeightInMM = 297; // height of A4 in mm
var pageCenter = pdfWidthInMM / 2;
pdoc.setFontSize(24);
var title = "PerformFish " + tTitle;
var titleHeight = pdoc.getLineHeight(title) / pdoc.internal.scaleFactor;
var xPos = lMargin;
var yPos = tMargin;
pdoc.text(title, pageCenter, yPos, 'center');
yPos += titleHeight;
pdoc.setFontSize(10);
var lineHeight = pdoc.getLineHeight(tDescr) / pdoc.internal.scaleFactor;
var splittedAnalysisDescription = pdoc.splitTextToSize(tDescr,
(pdfWidthInMM - lMargin - rMargin));
var lines = splittedAnalysisDescription.length;// splitted text is a string array
var analysisDescriptionHeight = lines * lineHeight;
pdoc.text(splittedAnalysisDescription, xPos, yPos, 'left');
yPos += analysisDescriptionHeight;
//yPos += 2;
//pdoc.text("Analysis:", xPos, yPos, 'left');
yPos += 6;
for (var i = 1; i <= outputIteration; i++) {
var kpiId = 'KPI_ScatterAnnual_' + requestId + '_' + i;
console.log('kpiId: ' + kpiId);
var kpiName = $doc.getElementById(kpiId);
yPos += 2;
pdoc.setFontSize(14);
pdoc.setFontType("bold");
var kpiText = kpiName.textContent;
var kpiHeight = pdoc.getLineHeight(kpiText)
/ pdoc.internal.scaleFactor;
var splittedKpiName = pdoc.splitTextToSize(kpiText, (pdfWidthInMM
- lMargin - rMargin));
var kpiLines = splittedKpiName.length; // splitted text is a string array
var kpiLinesHeight = kpiLines * kpiHeight;
pdoc.text(splittedKpiName, xPos, yPos, 'left');
yPos += kpiLinesHeight;
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
for (var j = 1; j <= outputNumber; j++) {
var outputId = 'OutputId_' + requestId + '_' + i + '_' + j;
console.log('OutputId: ' + outputId);
var resultOutputNumber = $doc.getElementById(outputId);
console.log('OutputId_: ' + resultOutputNumber.innerHTML);
var resultType = resultOutputNumber.className;
console.log('resultOutputNumber className: ' + resultType);
if (typeof resultType !== 'undefined' && resultType !== null
&& resultType !== '') {
if (resultType == 'csv') {
console.log('Result Type csv: ' + i);
// foo could get resolved and it's defined
var childrenTable = resultOutputNumber.children;
var titleCurrentTable = childrenTable[0].rows[0].cells[0];
console.log('Title current table: '
+ titleCurrentTable.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentTable.textContent, xPos, yPos,
'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
console.log('CSV SecondTable: ' + secondTable);
pdoc.autoTable({
theme : 'grid',
startY : yPos,
pageBreak : 'auto',
bodyStyles : {
fontSize : 9
},
html : secondTable
});
yPos = pdoc.previousAutoTable.finalY + 6;
} else {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = resultOutputNumber.children;
var titleCurrentImage = childrenTable[0].rows[0].cells[0];
console.log('Title current image: '
+ titleCurrentImage.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentImage.textContent, xPos,
yPos, 'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
console.log('Image element: ' + imageElement);
pdoc.addImage(imageElement, lMargin, yPos);
console.log('Image Height: ' + imageElement.height);
yPos += (imageElement.height * 0.26458333);
} else {
console.log('Result Type unknow: ' + i);
}
}
} else {
console.log('Result Type is undefined:' + i);
}
}
if (i == outputNumber) {
} else {
if (pdfHeightInMM - yPos < pdfHeightInMM / 4) {
pdoc.addPage();
yPos = tMargin; // Restart position
}
}
}
var numberOfPages=pdoc.internal.getNumberOfPages()
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/"+numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');
pdoc.save(filename);
}-*/;
}

@ -0,0 +1,578 @@
package org.gcube.portlets.user.performfishanalytics.client.viewannualbinder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.portlets.user.performfishanalytics.client.DataMinerAlgorithms;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
import org.gcube.portlets.user.performfishanalytics.client.annualcontrollers.DataMinerInputParameters;
import org.gcube.portlets.user.performfishanalytics.client.annualcontrollers.PerformFishAnnualAnalyticsViewController;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.ShowResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.SubmitRequestPanel;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
import org.gcube.portlets.user.performfishanalytics.shared.dataminer.DataMinerResponse;
import org.gcube.portlets.user.performfishanalytics.shared.performfishservice.PerformFishResponse;
import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Tab;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.resources.client.TextResource;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Panel;
public class SpeedometerAnnualPanelResult {
private Map<Integer, FlexTable> boxPlotOrderBy = new HashMap<Integer, FlexTable>();
private PerformFishAnnualAnalyticsViewController viewAnnualController;
private int requestId = 0;
private int outputIteration = 0;
private int outputNumber = 1;
private Button savePDFButton;
public SpeedometerAnnualPanelResult(int reqId, PerformFishAnnualAnalyticsViewController viewAnnualController,
PerformFishResponse thePerformFishResponse, final DataMinerAlgorithms algorithm, String focusID,
List<KPI> inputKPI, final List<KPI> outputKPI) {
GWT.log("RequestID: " + reqId);
requestId = reqId;
this.viewAnnualController = viewAnnualController;
TextResource algDescr = PerformFishResources.INSTANCE.farm_SPEEDOMETER();
String algDesrTxt = algDescr != null ? algDescr.getText() : null;
// TODO
final String tabTitle = algorithm.getTitle();
final String tabDescr = algDesrTxt;
final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
Tab tab = viewAnnualController.createTab(tabTitle + " #" + (viewAnnualController.currentNumberOfTab() + 1),
algDesrTxt, submitRequestPanel);
HorizontalPanel res = new HorizontalPanel();
savePDFButton = new Button();
savePDFButton.getElement().getStyle().setMargin(10, Unit.PX);
savePDFButton.setIcon(IconType.PRINT);
savePDFButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
saveFilePDF(algorithm.getId(), tabTitle, tabTitle, tabDescr, requestId, outputIteration, outputNumber);
// dmResponse.getListOutput().size()
}
});
savePDFButton.setVisible(false);
res.add(savePDFButton);
submitRequestPanel.addWidget(res);
int oIteration = 0;
submitRequestPanel.setTotalRequests(inputKPI.size());
for (KPI kpi : inputKPI) {
oIteration++;
String title = "KPI: " + kpi.getName();
HTML toBigTitle = new HTML(title);
toBigTitle.getElement().setId("KPI_SpeedometerAnnual_" + requestId + "_" + oIteration);
toBigTitle.getElement().addClassName("to-big-title");
submitRequestPanel.addWidget(toBigTitle);
HorizontalPanel hp = new HorizontalPanel();
hp.getElement().addClassName("ext-horizontal-panel");
DataMinerInputParameters dmInputParams = new DataMinerInputParameters(thePerformFishResponse,
viewAnnualController.getSelectedYears(), Arrays.asList(kpi), null, algorithm, focusID);
callDataMinerServiceForChart(dmInputParams, submitRequestPanel, hp, tab, oIteration);
// resultPanel.add(hp);
submitRequestPanel.addWidget(hp);
}
outputIteration = oIteration;
}
/**
* Call data miner service for chart.
*
* @param dmInputParameters
* the dm input parameters
* @param requestPanel
* the request panel
* @param panelContainer
* the panel
* @param tab
* the tab
* @param tabDescr
* @param tabTitle
*/
private void callDataMinerServiceForChart(final DataMinerInputParameters dmInputParameters,
final SubmitRequestPanel requestPanel, final ComplexPanel panelContainer, final Tab tab,
final int oIteration) {
GWT.log("Building DM request with input parameters: " + dmInputParameters);
StringBuilder dataInputsFormatter = new StringBuilder();
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + dmInputParameters.getChartType() + ";");
String yearsValue = "";
for (String year : dmInputParameters.getSelectedYears()) {
yearsValue += year + "|";
}
yearsValue = yearsValue.substring(0, yearsValue.length() - 1);
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_YEARS_PARAM + "=" + yearsValue + ";");
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "=" + dmInputParameters.getFocusID() + ";");
// dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM+"=ID;");
if (dmInputParameters.getInputKPI() != null && dmInputParameters.getInputKPI().size() > 0) {
String kpiCodes = "";
for (KPI kpi : dmInputParameters.getInputKPI()) {
kpiCodes += kpi.getCode() + "|";
}
// remove last |
kpiCodes = kpiCodes.substring(0, kpiCodes.length() - 1);
GWT.log("Input KPICodes: " + kpiCodes);
// ADDING KPIs code
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_INPUT_KPI_PARAM + "=" + kpiCodes + ";");
}
if (dmInputParameters.getOutputKPI() != null && dmInputParameters.getOutputKPI().size() > 0) {
String kpiCodes = "";
for (KPI kpi : dmInputParameters.getOutputKPI()) {
kpiCodes += kpi.getCode() + "|";
}
// remove last |
kpiCodes = kpiCodes.substring(0, kpiCodes.length() - 1);
GWT.log("Output KPICodes: " + kpiCodes);
// ADDING KPIs code
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_OUTPUT_KPI_PARAM + "=" + kpiCodes + ";");
}
Map<String, String> performFishResponseMap = dmInputParameters.getPerformFishResponse().getMapParameters();
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.LethalIncidentsTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AnnualTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AntibioticsTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AntiparasiticTable);
String dataInParameters = dataInputsFormatter.toString();
GWT.log("Calling DM service with client input parameters: " + dataInParameters);
Map<String, List<String>> mapParameters = new HashMap<String, List<String>>();
mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
final LoaderIcon loaderIcon = new LoaderIcon(
"Submitting request to " + dmInputParameters.getChartType().getTitle() + " Analysis...");
loaderIcon.setVisible(true);
panelContainer.setVisible(true);
panelContainer.add(loaderIcon);
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
loaderIcon.setFocus(true);
}
});
PerformFishAnalyticsServiceAsync.Util.getInstance().callingDataMinerPerformFishAnnualAnalysis(mapParameters,
new AsyncCallback<DataMinerResponse>() {
@Override
public void onSuccess(DataMinerResponse dmResponse) {
loaderIcon.setVisible(false);
checkTabSpinner(requestPanel, tab);
// field_unary_algorithm.setVisible(true);
GWT.log("I'm displaying: " + dmResponse);
displayOutputFilesAsStaticEntities(dmResponse, dmInputParameters.getChartType(),
dmInputParameters.getInputKPI(), dmInputParameters.getOutputKPI(),
dmInputParameters.getFocusID(), panelContainer, false, oIteration);
}
@Override
public void onFailure(Throwable caught) {
loaderIcon.setVisible(false);
checkTabSpinner(requestPanel, tab);
displayOutputFilesAsStaticEntities(null, dmInputParameters.getChartType(),
dmInputParameters.getInputKPI(), dmInputParameters.getOutputKPI(),
dmInputParameters.getFocusID(), panelContainer, true, oIteration);
}
});
}
/**
* Append DM input table.
*
* @param performFishResponseMap
* the perform fish response map
* @param dataInputsFormatter
* the data inputs formatter
* @param table
* the table
* @return the string builder
*/
private StringBuilder appendDMInputTable(Map<String, String> performFishResponseMap,
StringBuilder dataInputsFormatter, PFSERVICE_TO_DM_MAPPING_TABLE table) {
String toDMInputTable = performFishResponseMap.get(table.getPerformFishTable());
if (toDMInputTable != null && !toDMInputTable.isEmpty()) {
dataInputsFormatter.append(table.getDataMinerTable() + "=" + toDMInputTable + ";");
}
return dataInputsFormatter;
}
private String getOutputId(int oIteration, String title) {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 1;
return outputId;
}
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List<KPI> inputKPIs, List<KPI> outputKPIs, final String focusID,
final Panel container, boolean displayError, final int oIteration) {
String title = displayError ? "No results " : "";
if (displayError) {
Alert alert = new Alert(title);
alert.setType(AlertType.ERROR);
alert.setClose(false);
alert.getElement().getStyle().setMargin(10, Unit.PX);
container.add(alert);
return;
}
savePDFButton.setVisible(true);
final String toTitle = title;
for (OutputFile outputFile : dmResponse.getListOutput()) {
final FileContentType fileContentType = outputFile.getDataType();
switch (outputFile.getDataType()) {
case IMAGE:
PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// showAlert(caught.getMessage(),
// AlertType.ERROR, true,
// uib_vp_deanalanlysis_request_container);
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(String base64Content) {
String title = toTitle;
title = chartType.getTitle() + "<br>";
title += "Selected Farm: " + focusID + "<br>";
title += "Normalized with respect to all farm data in the VRE";
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showImage(base64Content);
container.add(showResult);
}
});
break;
case CSV:
PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
new AsyncCallback<CSVFile>() {
@Override
public void onFailure(Throwable caught) {
// showAlert(caught.getMessage(),
// AlertType.ERROR, true,
// uib_vp_deanalanlysis_request_container);
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(CSVFile result) {
GWT.log("Displaying: " + result);
String cssTableStyle = "simpletable";
String title = toTitle;
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showCSVFile(result, cssTableStyle);
container.add(showResult);
}
});
break;
default:
break;
}
}
}
private void displayingOrderedBoxPlot(final DataMinerResponse dmResponse, String title, final Panel container,
ShowResult showResult) {
int hashcode = dmResponse.hashCode();
GWT.log("The hascode is: " + hashcode);
FlexTable flex = boxPlotOrderBy.get(hashcode);
if (flex == null) {
GWT.log("The flextable is null");
flex = new FlexTable();
boxPlotOrderBy.put(hashcode, flex);
container.add(flex);
}
if (title.startsWith("My")) {
flex.setWidget(0, 0, showResult);
} else if (title.startsWith("All")) {
flex.setWidget(0, 1, showResult);
} else {
flex.setWidget(0, 2, showResult);
}
}
/**
* Remove the spinner if all DM responses are returned.
*
* @param requestPanel
* the request panel
* @param tab
* the tab
*/
private void checkTabSpinner(SubmitRequestPanel requestPanel, Tab tab) {
requestPanel.incrementCompletedRequests();
int completed = requestPanel.getCompletedRequests();
int total = requestPanel.getTotalRequests();
if (completed >= total) {
viewAnnualController.noSpinner(tab);
}
}
private static native void saveFilePDF(String chartType, String filename, String tabTitle, String tabDescr,
int requestId, int outputIteration, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
console.log('requestId: ' + requestId);
console.log('OutputIteration: ' + outputIteration);
console.log('OutputNumber:' + outputNumber);
var tTitle = tabTitle;
var tDescr = tabDescr;
var pdoc = new jsPDF("p", "mm", "a4");
pdoc.setProperties({
title : 'PerformFish ' + tTitle,
subject : ' Results',
author : 'PerformFish',
keywords : 'PerformFish',
creator : 'D4Science'
});
var lMargin = 15; //left margin in mm
var rMargin = 15; //right margin in mm
var tMargin = 15; //top margin in mm
var bMargin = 15; //bottom margin in mm
var pdfWidthInMM = 210; // width of A4 in mm
var pdfHeightInMM = 297; // height of A4 in mm
var pageCenter = pdfWidthInMM / 2;
pdoc.setFontSize(24);
var title = "PerformFish " + tTitle;
var titleHeight = pdoc.getLineHeight(title) / pdoc.internal.scaleFactor
var xPos = lMargin;
var yPos = tMargin;
pdoc.text(title, pageCenter, yPos, 'center');
yPos += titleHeight;
pdoc.setFontSize(10);
var lineHeight = pdoc.getLineHeight(tDescr) / pdoc.internal.scaleFactor
var splittedAnalysisDescription = pdoc.splitTextToSize(tDescr,
(pdfWidthInMM - lMargin - rMargin));
var lines = splittedAnalysisDescription.length // splitted text is a string array
var analysisDescriptionHeight = lines * lineHeight
pdoc.text(splittedAnalysisDescription, xPos, yPos, 'left');
yPos += analysisDescriptionHeight;
//yPos += 2;
//pdoc.text("Analysis:", xPos, yPos, 'left');
yPos += 6;
for (var i = 1; i <= outputIteration; i++) {
var kpiId = 'KPI_SpeedometerAnnual_' + requestId + '_' + i;
console.log('kpiId: ' + kpiId);
var kpiName = $doc.getElementById(kpiId);
yPos += 2;
pdoc.setFontSize(14);
pdoc.setFontType("bold");
var kpiText = kpiName.textContent;
var kpiHeight = pdoc.getLineHeight(kpiText)
/ pdoc.internal.scaleFactor;
var splittedKpiName = pdoc.splitTextToSize(kpiText, (pdfWidthInMM
- lMargin - rMargin));
var kpiLines = splittedKpiName.length; // splitted text is a string array
var kpiLinesHeight = kpiLines * kpiHeight;
pdoc.text(splittedKpiName, xPos, yPos, 'left');
yPos += kpiLinesHeight;
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
for (var j = 1; j <= outputNumber; j++) {
var outputId = 'OutputId_' + requestId + '_' + i + '_' + j;
console.log('OutputId: ' + outputId);
var resultOutputNumber = $doc.getElementById(outputId);
console.log('OutputId_: ' + resultOutputNumber.innerHTML);
var resultType = resultOutputNumber.className;
console.log('resultOutputNumber className: ' + resultType);
if (typeof resultType !== 'undefined' && resultType !== null
&& resultType !== '') {
if (resultType == 'csv') {
console.log('Result Type csv: ' + i);
// foo could get resolved and it's defined
var childrenTable = resultOutputNumber.children;
var titleCurrentTable = childrenTable[0].rows[0].cells[0];
console.log('Title current table: '
+ titleCurrentTable.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentTable.textContent, xPos, yPos,
'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
console.log('CSV SecondTable: ' + secondTable);
pdoc.autoTable({
theme : 'grid',
startY : yPos,
pageBreak : 'auto',
bodyStyles : {
fontSize : 9
},
html : secondTable
});
yPos = pdoc.previousAutoTable.finalY + 6;
} else {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = resultOutputNumber.children;
var titleCurrentImage = childrenTable[0].rows[0].cells[0];
console.log('Title current image: '
+ titleCurrentImage.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentImage.textContent, xPos,
yPos, 'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
console.log('Image element: ' + imageElement);
pdoc.addImage(imageElement, lMargin, yPos);
console.log('Image Height: ' + imageElement.height);
yPos += (imageElement.height * 0.26458333);
} else {
console.log('Result Type unknow: ' + i);
}
}
} else {
console.log('Result Type is undefined:' + i);
}
}
if (i == outputNumber) {
} else {
if (pdfHeightInMM - yPos < pdfHeightInMM / 4) {
pdoc.addPage();
yPos = tMargin; // Restart position
}
}
}
var numberOfPages=pdoc.internal.getNumberOfPages()
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/"+numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');
pdoc.save(filename);
}-*/;
}

@ -0,0 +1,561 @@
package org.gcube.portlets.user.performfishanalytics.client.viewannualbinder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.portlets.user.performfishanalytics.client.DataMinerAlgorithms;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
import org.gcube.portlets.user.performfishanalytics.client.annualcontrollers.PerformFishAnnualAnalyticsViewController;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.ShowResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.SubmitRequestPanel;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
import org.gcube.portlets.user.performfishanalytics.shared.dataminer.DataMinerResponse;
import org.gcube.portlets.user.performfishanalytics.shared.performfishservice.PerformFishResponse;
import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Tab;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Panel;
public class SynopticTableAnnualPanelResult {
private Map<Integer, FlexTable> synopticOrderBy = new HashMap<Integer, FlexTable>();
private PerformFishAnnualAnalyticsViewController viewAnnualController;
private int requestId;
private int outputIteration = 1;
private int outputNumber = 0;
private Button savePDFButton;
public SynopticTableAnnualPanelResult(int reqId, PerformFishAnnualAnalyticsViewController viewAnnualController,
PerformFishResponse performFishResponse) {
GWT.log("RequestID: " + reqId);
requestId = reqId;
this.viewAnnualController = viewAnnualController;
final DataMinerAlgorithms algorithm = DataMinerAlgorithms.PERFORMFISH_SYNOPTIC_TABLE_FARM;
final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
final String tabTitle = "Synoptic Table";
final String tabDescr = PerformFishResources.INSTANCE.synopticTable().getText();
final Tab tab = viewAnnualController.createTab(
tabTitle + " #" + (viewAnnualController.currentNumberOfTab() + 1), tabDescr, submitRequestPanel);
// TODO
HorizontalPanel res = new HorizontalPanel();
savePDFButton = new Button();
savePDFButton.getElement().getStyle().setMargin(10, Unit.PX);
savePDFButton.setIcon(IconType.PRINT);
savePDFButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
saveFilePDF(algorithm.getId(), tabTitle, tabTitle, tabDescr, requestId, outputIteration, outputNumber);
// dmResponse.getListOutput().size()
}
});
savePDFButton.setVisible(false);
res.add(savePDFButton);
submitRequestPanel.addWidget(res);
StringBuilder dataInputsFormatter = new StringBuilder();
Map<String, String> performFishResponseMap = performFishResponse.getMapParameters();
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.LethalIncidentsTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AnnualTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AntibioticsTable);
dataInputsFormatter = appendDMInputTable(performFishResponseMap, dataInputsFormatter,
PerformFishAnalyticsConstant.PFSERVICE_TO_DM_MAPPING_TABLE.AntiparasiticTable);
String yearsValue = "";
for (String year : viewAnnualController.getSelectedYears()) {
yearsValue += year + "#";
}
yearsValue = yearsValue.substring(0, yearsValue.length() - 1);
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_ALLYEARS_PARAM + "=" + yearsValue + ";");
String dataInParameters = dataInputsFormatter.toString();
GWT.log("Calling DM service with client input parameters: " + dataInParameters);
Map<String, List<String>> mapParameters = new HashMap<String, List<String>>();
mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
final HTMLPanel panelContainer = submitRequestPanel.getContainerPanel();
final LoaderIcon loaderIcon = new LoaderIcon("Submitting request to " + algorithm.getTitle() + "...");
loaderIcon.setVisible(true);
panelContainer.setVisible(true);
panelContainer.add(loaderIcon);
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
loaderIcon.setFocus(true);
}
});
PerformFishAnalyticsServiceAsync.Util.getInstance().callDMServiceToLoadSynopticAnnualTable(performFishResponse,
mapParameters, new AsyncCallback<DataMinerResponse>() {
@Override
public void onSuccess(DataMinerResponse dmResponse) {
loaderIcon.setVisible(false);
checkTabSpinner(submitRequestPanel, tab);
// field_unary_algorithm.setVisible(true);
GWT.log("I'm displaying: " + dmResponse);
displayOutputFilesAsStaticEntities(dmResponse, algorithm, null, null, null, panelContainer,
false, outputIteration);
}
@Override
public void onFailure(Throwable caught) {
loaderIcon.setVisible(false);
checkTabSpinner(submitRequestPanel, tab);
displayOutputFilesAsStaticEntities(null, algorithm, null, null, null, panelContainer, true,
outputIteration);
}
});
}
/**
* Append DM input table.
*
* @param performFishResponseMap
* the perform fish response map
* @param dataInputsFormatter
* the data inputs formatter
* @param table
* the table
* @return the string builder
*/
private StringBuilder appendDMInputTable(Map<String, String> performFishResponseMap,
StringBuilder dataInputsFormatter, PFSERVICE_TO_DM_MAPPING_TABLE table) {
String toDMInputTable = performFishResponseMap.get(table.getPerformFishTable());
if (toDMInputTable != null && !toDMInputTable.isEmpty()) {
dataInputsFormatter.append(table.getDataMinerTable() + "=" + toDMInputTable + ";");
}
return dataInputsFormatter;
}
/**
*
*
*
* Remove the spinner if all DM responses are returned.
*
* @param requestPanel
* the request panel
* @param tab
* the tab
*/
private void checkTabSpinner(SubmitRequestPanel requestPanel, Tab tab) {
requestPanel.incrementCompletedRequests();
int completed = requestPanel.getCompletedRequests();
int total = requestPanel.getTotalRequests();
if (completed >= total) {
viewAnnualController.noSpinner(tab);
}
}
private String getOutputId(int oIteration, boolean isLegend) {
String outputId;
if (isLegend) {
outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 1;
} else {
outputNumber++;
outputId = "OutputId_" + requestId + "_" + oIteration + "_" + outputNumber;
}
return outputId;
}
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List<KPI> inputKPIs, List<KPI> outputKPIs, final String focusID,
final Panel container, boolean displayError, final int oIteration) {
String title = displayError ? "No results " : "";
if (displayError) {
Alert alert = new Alert(title);
alert.setType(AlertType.ERROR);
alert.setClose(false);
alert.getElement().getStyle().setMargin(10, Unit.PX);
container.add(alert);
return;
}
savePDFButton.setVisible(true);
final String toTitle = title;
outputNumber = 1;
for (OutputFile outputFile : dmResponse.getListOutput()) {
final FileContentType fileContentType = outputFile.getDataType();
switch (outputFile.getDataType()) {
case IMAGE:
PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// showAlert(caught.getMessage(),
// AlertType.ERROR, true,
// uib_vp_deanalanlysis_request_container);
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(String base64Content) {
String title = toTitle;
String outputId = getOutputId(oIteration, false);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showImage(base64Content);
container.add(showResult);
}
});
break;
case CSV:
PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
new AsyncCallback<CSVFile>() {
@Override
public void onFailure(Throwable caught) {
// showAlert(caught.getMessage(),
// AlertType.ERROR, true,
// uib_vp_deanalanlysis_request_container);
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(CSVFile result) {
GWT.log("Displaying: " + result);
String cssTableStyle = "simpletable";
String title = toTitle;
switch (chartType) {
case PERFORMFISH_SYNOPTIC_TABLE_FARM:
String outputId;
if (!result.getFileName().contains("legend")) {
cssTableStyle = "synoptictable-farm";
outputId = getOutputId(oIteration, false);
} else {
cssTableStyle = "simpletable-synoptic";
outputId = getOutputId(oIteration, true);
}
ShowResult showResultSin = new ShowResult(outputId, title, fileContentType);
showResultSin.showCSVFile(result, cssTableStyle);
displayingOrderedSynopticTable(dmResponse, result.getFileName(), container,
showResultSin);
return;
case PERFORMFISH_SYNOPTICTABLE_BATCH:
break;
case PERFORMFISH_SYNOPTICTABLE_BATCH_HATCHERY:
break;
case PERFORMFISH_SYNOPTICTABLE_BATCH_PREGROW:
break;
default:
break;
}
String outputId = getOutputId(oIteration, false);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showCSVFile(result, cssTableStyle);
container.add(showResult);
}
});
break;
default:
break;
}
}
}
private void displayingOrderedSynopticTable(final DataMinerResponse dmResponse, String fileName,
final Panel container, ShowResult showResult) {
int hashcode = dmResponse.hashCode();
GWT.log("The hascode is: " + hashcode);
FlexTable flex = synopticOrderBy.get(hashcode);
if (flex == null) {
GWT.log("The flextable is null");
flex = new FlexTable();
synopticOrderBy.put(hashcode, flex);
container.add(flex);
}
if (fileName.toLowerCase().contains("legend")) {
flex.setWidget(0, 0, showResult);
} else {
flex.setWidget(flex.getRowCount() + 1, 0, showResult);
}
}
private static native void saveFilePDF(String chartType, String filename, String tabTitle, String tabDescr,
int requestId, int outputIteration, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
console.log('requestId: ' + requestId);
console.log('OutputIteration: ' + outputIteration);
console.log('OutputNumber:' + outputNumber);
var tTitle = tabTitle;
var tDescr = tabDescr;
var pdoc = new jsPDF("p", "mm", "a4");
pdoc.setProperties({
title : 'PerformFish ' + tTitle,
subject : ' Results',
author : 'PerformFish',
keywords : 'PerformFish',
creator : 'D4Science'
});
var lMargin = 15; //left margin in mm
var rMargin = 15; //right margin in mm
var tMargin = 15; //top margin in mm
var bMargin = 15; //bottom margin in mm
var pdfWidthInMM = 210; // width of A4 in mm
var pdfHeightInMM = 297; // height of A4 in mm
var pageCenter = pdfWidthInMM / 2;
pdoc.setFontSize(24);
var title = "PerformFish " + tTitle;
var titleHeight = pdoc.getLineHeight(title) / pdoc.internal.scaleFactor
var xPos = lMargin;
var yPos = tMargin;
pdoc.text(title, pageCenter, yPos, 'center');
yPos += titleHeight;
pdoc.setFontSize(10);
var lineHeight = pdoc.getLineHeight(tDescr) / pdoc.internal.scaleFactor
var splittedAnalysisDescription = pdoc.splitTextToSize(tDescr,
(pdfWidthInMM - lMargin - rMargin));
var lines = splittedAnalysisDescription.length // splitted text is a string array
var analysisDescriptionHeight = lines * lineHeight
pdoc.text(splittedAnalysisDescription, xPos, yPos, 'left');
yPos += analysisDescriptionHeight;
//yPos += 2;
//pdoc.text("Analysis:", xPos, yPos, 'left');
yPos += 6;
for (var i = 1; i <= outputIteration; i++) {
for (var j = 1; j <= outputNumber; j++) {
var outputId = 'OutputId_' + requestId + '_' + i + '_' + j;
console.log('OutputId: ' + outputId);
var resultOutputNumber = $doc.getElementById(outputId);
console.log('OutputId_: ' + resultOutputNumber.innerHTML);
var resultType = resultOutputNumber.className;
console.log('resultOutputNumber className: ' + resultType);
if (typeof resultType !== 'undefined' && resultType !== null
&& resultType !== '') {
if (resultType == 'csv') {
console.log('Result Type csv: ' + i);
// foo could get resolved and it's defined
var childrenTable = resultOutputNumber.children;
var titleCurrentTable = childrenTable[0].rows[0].cells[0];
console.log('Title current table: '
+ titleCurrentTable.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentTable.textContent, xPos, yPos,
'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
console.log('CSV SecondTable: ' + secondTable);
var checkColor = function(data) {
if (data.section === 'body') {
console.log(data);
var good = '<div class="gwt-HTML"><span style="padding-left: 10px; padding-right: 10px; background-color: limegreen; border: 1px solid limegreen;"></span></div>';
var normal = '<div class="gwt-HTML"><span style="padding-left: 10px; padding-right: 10px; background-color: yellow; border: 1px solid yellow;"></span></div>';
var bad = '<div class="gwt-HTML"><span style="padding-left: 10px; padding-right: 10px; background-color: red;border: 1px solid red;"></span></div>';
if (typeof data.cell !== 'undefined'
&& data.cell !== null) {
if (typeof data.cell.raw !== 'undefined'
&& data.cell.raw !== null) {
console.log(data.cell.raw.innerHTML);
if (data.cell.raw.innerHTML === good) {
console.log('good');
var posIW = (data.cell.x + (data.cell.width / 2)-2);
var posIH = (data.cell.y + (data.cell.height / 2)-2);
var greenImg = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wgARCAAKAAoDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAWAQEBAQAAAAAAAAAAAAAAAAAACAn/2gAMAwEAAhADEAAAAbSM8+wB/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQABBQIf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwIf/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQABPyEf/9oADAMBAAIAAwAAABAAD//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8QH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8QH//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEAAT8QH//Z'
pdoc.addImage(greenImg, 'JPEG', posIW, posIH, 4, 4);
//pdoc.setFontSize(10);
//pdoc.setFontType("normal");
//var posW = (data.cell.x + (data.cell.width / 2));
//var posH = (data.cell.y + (data.cell.height / 2));
//pdoc.text('G', posW, posH,'center');
} else {
if (data.cell.raw.innerHTML === normal) {
console.log('normal');
var posIW = (data.cell.x + (data.cell.width / 2)-2);
var posIH = (data.cell.y + (data.cell.height / 2)-2);
var yellowImg = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wgARCAAKAAoDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAn/xAAWAQEBAQAAAAAAAAAAAAAAAAAABwr/2gAMAwEAAhADEAAAAbEZ/wCqAD//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAEFAh//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Ah//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAE/IR//2gAMAwEAAgADAAAAEAAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPxAf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPxAf/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQABPxAf/9k='
pdoc.addImage(yellowImg, 'JPEG', posIW, posIH, 4, 4);
//pdoc.setFontSize(10);
//pdoc.setFontType("normal");
//var posW = (data.cell.x + (data.cell.width / 2));
//var posH = (data.cell.y + (data.cell.height / 2));
//pdoc.text('N', posW, posH,'center');
} else {
if (data.cell.raw.innerHTML === bad) {
console.log('bad');
var posIW = (data.cell.x + (data.cell.width / 2)-2);
var posIH = (data.cell.y + (data.cell.height / 2)-2);
var redImg = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wgARCAAKAAoDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAj/xAAWAQEBAQAAAAAAAAAAAAAAAAAACAn/2gAMAwEAAhADEAAAAYvlPfwAf//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEAAQUCH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEABj8CH//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEAAT8hH//aAAwDAQACAAMAAAAQAA//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAE/EB//2Q=='
pdoc.addImage(redImg, 'JPEG', posIW, posIH, 4, 4);
//pdoc.setFontSize(10);
//pdoc.setFontType("normal");
//var posW = (data.cell.x + (data.cell.width / 2));
//var posH = (data.cell.y + (data.cell.height / 2));
//pdoc.text('B', posW, posH,'center');
} else {
}
}
}
}
}
}
};
pdoc.autoTable({
theme : 'grid',
startY : yPos,
pageBreak : 'auto',
bodyStyles : {
fontSize : 9
},
didDrawCell : checkColor,
html : secondTable
});
yPos = pdoc.previousAutoTable.finalY + 6;
} else {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = resultOutputNumber.children;
var titleCurrentImage = childrenTable[0].rows[0].cells[0];
console.log('Title current image: '
+ titleCurrentImage.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentImage.textContent, xPos,
yPos, 'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
console.log('Image element: ' + imageElement);
pdoc.addImage(imageElement, lMargin, yPos);
console.log('Image Height: ' + imageElement.height);
yPos += (imageElement.height * 0.26458333);
} else {
console.log('Result Type unknow: ' + i);
}
}
} else {
console.log('Result Type is undefined:' + i);
}
}
if (i == outputNumber) {
} else {
if (pdfHeightInMM - yPos < pdfHeightInMM / 7) {
pdoc.addPage();
yPos = tMargin; // Restart position
}
}
}
var numberOfPages = pdoc.internal.getNumberOfPages();
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/" + numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');
pdoc.save(filename);
}-*/;
}

@ -1,588 +0,0 @@
/**
*
*/
package org.gcube.portlets.user.performfishanalytics.client.viewbinder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.portlets.user.performfishanalytics.client.DataMinerAlgorithms;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
import org.gcube.portlets.user.performfishanalytics.client.controllers.PerformFishAnalyticsController;
import org.gcube.portlets.user.performfishanalytics.client.event.CallAlgorithmEvent;
import org.gcube.portlets.user.performfishanalytics.client.view.util.CorrelationValueToColourUtil;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVRow;
import org.gcube.portlets.user.performfishanalytics.shared.dataminer.DataMinerResponse;
import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.ControlGroup;
import com.github.gwtbootstrap.client.ui.ListBox;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.ControlGroupType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* The Class AnalyticsPanelResult.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jan 29, 2019
*/
public class AnalyticsPanelResult extends Composite {
/**
*
*/
private static AnalyticsPanelResultUiBinder uiBinder =
GWT.create(AnalyticsPanelResultUiBinder.class);
/**
* The Interface AnalyticsPanelResultUiBinder.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
* Jan 30, 2019
*/
interface AnalyticsPanelResultUiBinder
extends UiBinder<Widget, AnalyticsPanelResult> {
}
@UiField
HTMLPanel field_html_panel;
@UiField
VerticalPanel field_parameters_container;
@UiField
VerticalPanel uib_vp_correlation_results_container;
@UiField
VerticalPanel field_unary_algorithm_container;
@UiField
VerticalPanel field_binary_algorithm;
@UiField
VerticalPanel field_binary_algorithm_container;
@UiField
VerticalPanel field_unary_algorithm;
@UiField
Label uib_label_focus_id;
@UiField
ControlGroup cg_focus_id_correlation;
@UiField
ListBox field_list_focus_id_correlation;
private Map<String,String> dataInputParameters;
private DataMinerResponse dmResponse;
private Map<String,List<KPI>> kpiMapPointers = new HashMap<String, List<KPI>>();
private List<KPI> selectedKPIs;
private List<String> selectedAreas;
private Map<String, CSVFile> csvGenerated = new HashMap<String, CSVFile>();
/**
* Because this class has a default constructor, it can
* be used as a binder template. In other words, it can be used in other
* *.ui.xml files as follows:
* <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
* xmlns:g="urn:import:**user's package**">
* <g:**UserClassName**>Hello!</g:**UserClassName>
* </ui:UiBinder>
* Note that depending on the widget that is used, it may be necessary to
* implement HasHTML instead of HasText.
*/
public AnalyticsPanelResult() {
initWidget(uiBinder.createAndBindUi(this));
}
/**
* Adds the selected areas.
*
* @param listAreas the list areas
*/
public void addSelectedAreas(List<String> listAreas) {
this.selectedAreas = listAreas;
}
/**
* Gets the data miner response.
*
* @return the data miner response
*/
public DataMinerResponse getDataMinerResponse(){
return dmResponse;
}
/**
* Gets the data input parameters.
*
* @return the data input parameters
*/
public Map<String, String> getDataInputParameters() {
return dataInputParameters;
}
/**
* Show alert.
*
* @param error the error
* @param type the type
* @param closable the closable
* @param panel the panel
*/
private void showAlert(String error, AlertType type, boolean closable, ComplexPanel panel){
Alert alert = new Alert(error);
alert.setType(type);
alert.setClose(closable);
alert.getElement().getStyle().setMargin(10, Unit.PX);
panel.add(alert);
}
/**
* Adds the selected kp is.
*
* @param selectedKPIs the selected kp is
*/
public void addSelectedKPIs(List<KPI> selectedKPIs) {
this.selectedKPIs = selectedKPIs;
}
/**
* Gets the KPI for name.
*
* @param name the name
* @return the KPI for name
*/
public KPI getKPIForName(String name){
GWT.log("Searching KPI name: "+name);
KPI foundKPI = null;
String purgedName = name.trim();
for (KPI kpi : selectedKPIs) {
String purgedKPIName = kpi.getName().trim();
if(purgedKPIName.compareToIgnoreCase(purgedName)==0) {
foundKPI = kpi;
break;
}
}
GWT.log("FOUND KPI: "+foundKPI);
return foundKPI;
}
/**
* Adds the parameters.
*
* @param keyToGet the key to get
* @param parameters the parameters
* @param toShowBatchTypeValue label to show batch type value
*/
public void addParameters(String keyToGet, Map<String, List<String>> parameters, String toShowBatchTypeValue) {
final FlexTable flexTable = new FlexTable();
flexTable.setStyleName("colgrouptable");
try{
List<String> dataInputs = parameters.get(keyToGet);
if(dataInputs==null || dataInputs.isEmpty())
return;
dataInputParameters = new HashMap<String, String>();
String theDataInputs = dataInputs.get(0);
String[] splittedParams = theDataInputs.split(";");
for (String splitParam : splittedParams) {
try{
String[] keyvalue = splitParam.split("=");
dataInputParameters.put(keyvalue[0], keyvalue[1]);
}catch(Exception e){
}
}
flexTable.setWidget(0, 0, new HTML("Batch Type:"));
flexTable.setWidget(0, 1, new HTML(toShowBatchTypeValue));
flexTable.setWidget(1, 0, new HTML("Level:"));
flexTable.setWidget(1, 1, new HTML(dataInputParameters.get(PerformFishAnalyticsConstant.DM_SCALEP_PARAM)));
String KPINames = "";
for (KPI kpi: selectedKPIs) {
KPINames+=kpi.getName() +", ";
}
KPINames = KPINames.substring(0, KPINames.length()-2);
flexTable.setWidget(2, 0, new HTML("KPIs:"));
flexTable.setWidget(2, 1, new HTML(KPINames));
}catch(Exception e){
//silent
}
field_parameters_container.add(flexTable);
}
/**
* Adds the list focus ids.
*
* @param listFocusIDs the list focus I ds
*/
public void addListFocusIds(List<String> listFocusIDs){
for (String batchID : listFocusIDs) {
field_list_focus_id_correlation.addItem(batchID, batchID);
}
}
/**
* Adds the results.
*
* @param dmResponse the dm response
*/
public void addResults(DataMinerResponse dmResponse) {
this.dmResponse = dmResponse;
for (final OutputFile outputFile : dmResponse.getListOutput()) {
if(outputFile.getDataType().equals(FileContentType.CSV)){
PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true, new AsyncCallback<CSVFile>() {
@Override
public void onFailure(Throwable caught) {
showAlert(caught.getMessage(), AlertType.ERROR, true, uib_vp_correlation_results_container);
}
@Override
public void onSuccess(CSVFile result) {
csvGenerated.put(result.getFileName(), result);
fillCorrelationMatrix();
}
});
}
}
}
private void fillCorrelationMatrix() {
if(csvGenerated.size()<2)
return;
String corrIndexFilename = null;
String corrFilename = null;
for (String fileName : csvGenerated.keySet()) {
if(fileName.contains("index")) {
corrIndexFilename = fileName;
}else {
corrFilename = fileName;
}
}
GWT.log("Correlation Matrix Index File: "+corrIndexFilename);
GWT.log("Correlation Matrix File: "+corrFilename);
CSVFile corrIndexCsvFile = csvGenerated.get(corrIndexFilename);
CSVFile corrCsvFile = csvGenerated.get(corrFilename);
GWT.log("Correlation Matrix Index CSV: "+corrIndexCsvFile);
GWT.log("Correlation Matrix CSV: "+corrCsvFile);
HorizontalPanel hp = new HorizontalPanel();
final FlexTable flexTable = new FlexTable();
flexTable.setStyleName("fixedtable");
flexTable.getElement().getStyle().setMarginBottom(10, Unit.PX);
flexTable.setWidget(0, 0,new Label(""));
CSVRow headerRow = corrIndexCsvFile.getHeaderRow();
//HEADER
for (int i=1; i<headerRow.getListValues().size(); i++) {
final String headerValue = headerRow.getListValues().get(i);
// final Button button = new Button(headerValue);
// button.setType(ButtonType.LINK);
HTML label = new HTML(headerValue);
label.getElement().getStyle().setFontSize(16, Unit.PX);
final int columnIndex = i;
KPI kpi = getKPIForName(headerValue);
fillKPIReferenceForIndex(0, columnIndex, Arrays.asList(kpi));
// button.addClickHandler(new ClickHandler() {
//
// @Override
// public void onClick(ClickEvent event) {
// //calling unary operator
// callBoxPlotAndSpeedoMeter(0,columnIndex,button);
//
// }
// });
flexTable.setWidget(0, i,label);
}
//DATA
for (int i=0; i<corrIndexCsvFile.getValueRows().size(); i++) {
CSVRow row = corrIndexCsvFile.getValueRows().get(i);
CSVRow rowMatrixColor = corrCsvFile.getValueRows().get(i);
final int rowIndex = i+1; //adding +1 for header row
for (int j=0; j<row.getListValues().size(); j++) {
final String rowValue = row.getListValues().get(j);
final String rowMatrixColorValue = rowMatrixColor.getListValues().get(j);
final String theColor = CorrelationValueToColourUtil.getRGBColor(rowMatrixColorValue);
final int columnIndex = j;
//final Button button = new Button(rowValue);
final HTML buttonHTML = new HTML(rowValue);
buttonHTML.addStyleName("my-active-html");
// button.setType(ButtonType.LINK);
// button.setSize(ButtonSize.LARGE);
//only the first column
if(j==0){
HTML label = new HTML(rowValue);
label.getElement().getStyle().setFontSize(16, Unit.PX);
flexTable.setWidget(rowIndex, j,label);
//rowValue is a KPI name
KPI kpi = getKPIForName(rowValue);
fillKPIReferenceForIndex(rowIndex, columnIndex, Arrays.asList(kpi));
continue;
//rowValue is a KPI name
// KPI kpi = getKPIForName(rowValue);
// fillKPIReferenceForIndex(rowIndex, columnIndex, Arrays.asList(kpi));
// button.addClickHandler(new ClickHandler() {
//
// @Override
// public void onClick(ClickEvent event) {
// //calling unary operator
// callBoxPlotAndSpeedoMeter(rowIndex, columnIndex, button);
//
// }
// });
}
//diagonal
else if(rowIndex==j){
//rowValue should be 1
//HTML dg = new HTML("1");
HTML dg = new HTML(rowValue);
dg.getElement().getStyle().setFontSize(18, Unit.PX);
flexTable.setWidget(rowIndex, j,dg);
continue;
//j > 0
}else{
KPI columnKPI = getKPIForName(headerRow.getListValues().get(columnIndex));
//Here the first index is the KPI name
KPI rowKPI = getKPIForName(row.getListValues().get(0));
fillKPIReferenceForIndex(rowIndex, columnIndex, Arrays.asList(columnKPI, rowKPI));
//button.setText(" ");
//button.setIcon(IconType.COMPASS);
//button.setSize(ButtonSize.LARGE);
buttonHTML.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//callScatterAndDeaChart(rowIndex, columnIndex, button);
callScatter(rowIndex, columnIndex, buttonHTML);
}
});
}
//button.setType(ButtonType.LINK);
//APPLYING STYLE ONLY ON INTERNAL VALUES OF CSV
if(j>0)
buttonHTML.getElement().getStyle().setColor("#000");
buttonHTML.addAttachHandler(new AttachEvent.Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
if(theColor.startsWith("#")){
GWT.log("Setting backgrounf color: "+theColor);
buttonHTML.getElement().getParentElement().getStyle().setBackgroundColor(theColor);
}
}
});
flexTable.setWidget(rowIndex, j,buttonHTML);
}
}
hp.add(flexTable);
final FlexTable flexLegend = new FlexTable();
flexLegend.setStyleName("simpletable");
//flexLegend.getElement().getStyle().setBorderWidth(0, Unit.PX);
Map<String, String> map = CorrelationValueToColourUtil.getMap();
flexLegend.setWidget(0, 0, new Label("Legend"));
flexLegend.setWidget(0, 1, new HTML(""));
int i = 1;
for (String key : map.keySet()) {
final String rgbColor = map.get(key);
final HTML theLegendColor = new HTML("");
flexLegend.setWidget(i, 0, theLegendColor);
flexLegend.setWidget(i, 1, new HTML(key));
theLegendColor.addAttachHandler(new AttachEvent.Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
theLegendColor.getElement().getParentElement().getStyle().setBackgroundColor(rgbColor);
}
});
i++;
}
flexLegend.getElement().getStyle().setMarginLeft(15, Unit.PX);
hp.add(flexLegend);
uib_vp_correlation_results_container.insert(hp,0);
}
/**
* Fill kpi reference for index.
*
* @param rowIndex the row index
* @param columnIndex the column index
* @param listKPI the list kpi
*/
private void fillKPIReferenceForIndex(int rowIndex, int columnIndex, List<KPI> listKPI){
String key = generateKey(rowIndex, columnIndex);
kpiMapPointers.put(key, listKPI);
}
/**
* Gets the KPI for indexes.
*
* @param rowIndex the row index
* @param columnIndex the column index
* @return the KPI for indexes
*/
public List<KPI> getKPIForIndexes(int rowIndex, int columnIndex){
String key = generateKey(rowIndex, columnIndex);
return kpiMapPointers.get(key);
}
/**
* Generate key.
*
* @param rowIndex the row index
* @param columnIndex the column index
* @return the string
*/
private String generateKey(int rowIndex, int columnIndex) {
return rowIndex+"-"+columnIndex;
}
/**
* Check valid focus id.
*
* @return the FocusID if it is valid, null otherwise.
*/
public String checkValidFocusID(){
cg_focus_id_correlation.setType(ControlGroupType.NONE);
//CHECK THE FOCUS ID VALUE
String focusID = field_list_focus_id_correlation.getSelectedItemText();
if(focusID==null || focusID.isEmpty()){
String msgError = "Could not execute a valid Analysis.";
if(selectedAreas==null || selectedAreas.isEmpty()){
msgError+=" Please select another parameters computation";
}else{
msgError+=" Select at least the Area of your FARM";
}
showAlert(msgError, AlertType.ERROR, true, uib_vp_correlation_results_container);
cg_focus_id_correlation.setType(ControlGroupType.ERROR);
return null;
}
return focusID;
}
/**
* Call scatter.
*
* @param rowIndex the row index
* @param columnIndex the column index
* @param button the button
*/
private void callScatter(int rowIndex, int columnIndex, HTML button){
String focusID = checkValidFocusID();
if(focusID==null)
return;
GWT.log("Called ScatterChart at rowIndex: "+rowIndex +", columnIndex: "+columnIndex);
List<KPI> selectedKPI = getKPIForIndexes(rowIndex, columnIndex);
GWT.log("Selected KPI: "+selectedKPI);
PerformFishAnalyticsController.eventBus.fireEvent(new CallAlgorithmEvent(DataMinerAlgorithms.SCATTER, focusID, selectedKPI, null));
}
}

@ -12,6 +12,7 @@ import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsS
import org.gcube.portlets.user.performfishanalytics.client.controllers.PerformFishAnalyticsViewController;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
@ -38,18 +39,20 @@ import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Panel;
public class BoxPlotPanelResult {
private Map<Integer, FlexTable> boxPlotOrderBy = new HashMap<Integer, FlexTable>();
private PerformFishAnalyticsViewController viewController;
private int outputIteration = 0;
private int outputNumber = 0;
private int requestId;
private int outputNumber = 3;
private int requestId = 0;
private Button savePDFButton;
public BoxPlotPanelResult(int reqId,PerformFishAnalyticsViewController viewController, final DataMinerAlgorithms algorithm,
String focusID, List<KPI> inputKPI, final List<KPI> outputKPI) {
this.requestId=reqId;
public BoxPlotPanelResult(int reqId, PerformFishAnalyticsViewController viewController,
final DataMinerAlgorithms algorithm, String focusID, List<KPI> inputKPI, final List<KPI> outputKPI) {
GWT.log("RequestID: " + reqId);
requestId = reqId;
this.viewController = viewController;
TextResource algDescr = PerformFishResources.INSTANCE.batch_BOXPLOT();
@ -65,7 +68,7 @@ public class BoxPlotPanelResult {
HorizontalPanel res = new HorizontalPanel();
Button savePDFButton = new Button();
savePDFButton = new Button();
savePDFButton.getElement().getStyle().setMargin(10, Unit.PX);
savePDFButton.setIcon(IconType.PRINT);
savePDFButton.addClickHandler(new ClickHandler() {
@ -76,6 +79,7 @@ public class BoxPlotPanelResult {
// dmResponse.getListOutput().size()
}
});
savePDFButton.setVisible(false);
res.add(savePDFButton);
submitRequestPanel.addWidget(res);
@ -86,6 +90,7 @@ public class BoxPlotPanelResult {
oIteration++;
String title = "KPI: " + kpi.getName();
HTML toBigTitle = new HTML(title);
toBigTitle.getElement().setId("KPI_BoxPlot_" + requestId + "_" + oIteration);
toBigTitle.getElement().addClassName("to-big-title");
submitRequestPanel.addWidget(toBigTitle);
HorizontalPanel hp = new HorizontalPanel();
@ -194,11 +199,26 @@ public class BoxPlotPanelResult {
}
});
}
private String getOutputId(int oIteration, String title) {
if (title.startsWith("My")) {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 1;
return outputId;
} else if (title.startsWith("All")) {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 2;
return outputId;
} else {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 3;
return outputId;
}
}
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List<KPI> inputKPIs, List<KPI> outputKPIs, final String focusID,
final Panel container, boolean displayError, int oIteration) {
final Panel container, boolean displayError, final int oIteration) {
String title = displayError ? "No results " : "";
@ -210,16 +230,13 @@ public class BoxPlotPanelResult {
container.add(alert);
return;
}
savePDFButton.setVisible(true);
final String toTitle = title;
outputNumber = dmResponse.getListOutput().size();
int oNumber = 0;
for (OutputFile outputFile : dmResponse.getListOutput()) {
for (final OutputFile outputFile : dmResponse.getListOutput()) {
oNumber++;
final String outputId = "OutputId_" +requestId+"_"+ oIteration + "_" + oNumber;
final FileContentType fileContentType = outputFile.getDataType();
switch (outputFile.getDataType()) {
case IMAGE:
@ -243,7 +260,8 @@ public class BoxPlotPanelResult {
title = chartType.getName() + " - on all batches<br>";
title += "Blue dots indicate the selected batch(es): " + focusID;
ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showImage(base64Content);
displayingOrderedBoxPlot(dmResponse, title, container, showResult);
}
@ -277,7 +295,8 @@ public class BoxPlotPanelResult {
title += "<br>";
title += "Data aggregation is performed by considering batches as base units";
ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showCSVFile(result, cssTableStyle);
displayingOrderedBoxPlot(dmResponse, title, container, showResult);
@ -292,7 +311,7 @@ public class BoxPlotPanelResult {
}
}
private void displayingOrderedBoxPlot(final DataMinerResponse dmResponse, String title, final Panel container,
ShowResult showResult) {
int hashcode = dmResponse.hashCode();
@ -314,7 +333,7 @@ public class BoxPlotPanelResult {
flex.setWidget(0, 2, showResult);
}
}
/**
* Remove the spinner if all DM responses are returned.
*
@ -337,7 +356,7 @@ public class BoxPlotPanelResult {
int requestId, int outputIteration, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
console.log('requestId: '+requestId);
console.log('requestId: ' + requestId);
console.log('OutputIteration: ' + outputIteration);
console.log('OutputNumber:' + outputNumber);
@ -385,9 +404,32 @@ public class BoxPlotPanelResult {
for (var i = 1; i <= outputIteration; i++) {
var kpiId = 'KPI_BoxPlot_' + requestId + '_' + i;
console.log('kpiId: ' + kpiId);
var kpiName = $doc.getElementById(kpiId);
yPos += 2;
pdoc.setFontSize(14);
pdoc.setFontType("bold");
var kpiText = kpiName.textContent;
var kpiHeight = pdoc.getLineHeight(kpiText)
/ pdoc.internal.scaleFactor;
var splittedKpiName = pdoc.splitTextToSize(kpiText, (pdfWidthInMM
- lMargin - rMargin));
var kpiLines = splittedKpiName.length; // splitted text is a string array
var kpiLinesHeight = kpiLines * kpiHeight;
pdoc.text(splittedKpiName, xPos, yPos, 'left');
yPos += kpiLinesHeight;
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
for (var j = 1; j <= outputNumber; j++) {
var outputId = 'OutputId_'+requestId+'_'+ i + '_' + j;
var outputId = 'OutputId_' + requestId + '_' + i + '_' + j;
console.log('OutputId: ' + outputId);
var resultOutputNumber = $doc.getElementById(outputId);
@ -405,6 +447,19 @@ public class BoxPlotPanelResult {
// foo could get resolved and it's defined
var childrenTable = resultOutputNumber.children;
var titleCurrentTable = childrenTable[0].rows[0].cells[0];
console.log('Title current table: '
+ titleCurrentTable.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentTable.textContent, xPos, yPos,
'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
@ -425,6 +480,20 @@ public class BoxPlotPanelResult {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = resultOutputNumber.children;
var titleCurrentImage = childrenTable[0].rows[0].cells[0];
console.log('Title current image: '
+ titleCurrentImage.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentImage.textContent, xPos,
yPos, 'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
@ -443,6 +512,24 @@ public class BoxPlotPanelResult {
}
}
if (i < outputIteration) {
pdoc.addPage();
yPos = tMargin; // Restart position
} else {
}
}
var numberOfPages=pdoc.internal.getNumberOfPages()
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/"+numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');
@ -450,5 +537,5 @@ public class BoxPlotPanelResult {
pdoc.save(filename);
}-*/;
}

@ -0,0 +1,807 @@
/**
*
*/
package org.gcube.portlets.user.performfishanalytics.client.viewbinder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.portlets.user.performfishanalytics.client.DataMinerAlgorithms;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsConstant;
import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
import org.gcube.portlets.user.performfishanalytics.client.controllers.PerformFishAnalyticsController;
import org.gcube.portlets.user.performfishanalytics.client.event.CallAlgorithmEvent;
import org.gcube.portlets.user.performfishanalytics.client.view.util.CorrelationValueToColourUtil;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVRow;
import org.gcube.portlets.user.performfishanalytics.shared.dataminer.DataMinerResponse;
import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.ControlGroup;
import com.github.gwtbootstrap.client.ui.ListBox;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.ControlGroupType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* The Class AnalyticsPanelResult.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jan 29, 2019
*/
public class CorrelationPanelResult extends Composite {
/**
*
*/
private static CorrelationPanelResultUiBinder uiBinder = GWT.create(CorrelationPanelResultUiBinder.class);
/**
* The Interface AnalyticsPanelResultUiBinder.
*
* @author Francesco Mangiacrapa at ISTI-CNR
* (francesco.mangiacrapa@isti.cnr.it) Jan 30, 2019
*/
interface CorrelationPanelResultUiBinder extends UiBinder<Widget, CorrelationPanelResult> {
}
@UiField
HTMLPanel field_html_panel;
@UiField
VerticalPanel field_parameters_container;
@UiField
VerticalPanel uib_vp_correlation_results_container;
@UiField
VerticalPanel field_unary_algorithm_container;
@UiField
VerticalPanel field_binary_algorithm;
@UiField
VerticalPanel field_binary_algorithm_container;
@UiField
VerticalPanel field_unary_algorithm;
@UiField
Label uib_label_focus_id;
@UiField
ControlGroup cg_focus_id_correlation;
@UiField
ListBox field_list_focus_id_correlation;
@UiField
Button uib_save_pdf_1;
private Map<String, String> dataInputParameters;
private DataMinerResponse dmResponse;
private Map<String, List<KPI>> kpiMapPointers = new HashMap<String, List<KPI>>();
private List<KPI> selectedKPIs;
private List<String> selectedAreas;
private Map<String, CSVFile> csvGenerated = new HashMap<String, CSVFile>();
private CorrelationPanelResult analyticsPanelResult;
private int outputNumber;
private int requestId = 0;
/**
*
* @param reqId
* Request Identifier
* @param tabTitle
* Title
* @param tabDescription
* Description
*/
public CorrelationPanelResult(int reqId, final String tabTitle, final String tabDescription) {
GWT.log("RequestID: " + reqId);
requestId = reqId;
initWidget(uiBinder.createAndBindUi(this));
analyticsPanelResult = this;
uib_save_pdf_1.setIcon(IconType.PRINT);
uib_save_pdf_1.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
saveFilePDF(analyticsPanelResult, tabTitle, tabTitle, tabDescription, requestId, outputNumber);
}
});
}
/**
* Adds the selected areas.
*
* @param listAreas
* the list areas
*/
public void addSelectedAreas(List<String> listAreas) {
this.selectedAreas = listAreas;
}
/**
* Gets the data miner response.
*
* @return the data miner response
*/
public DataMinerResponse getDataMinerResponse() {
return dmResponse;
}
/**
* Gets the data input parameters.
*
* @return the data input parameters
*/
public Map<String, String> getDataInputParameters() {
return dataInputParameters;
}
/**
* Show alert.
*
* @param error
* the error
* @param type
* the type
* @param closable
* the closable
* @param panel
* the panel
*/
private void showAlert(String error, AlertType type, boolean closable, ComplexPanel panel) {
Alert alert = new Alert(error);
alert.setType(type);
alert.setClose(closable);
alert.getElement().getStyle().setMargin(10, Unit.PX);
panel.add(alert);
}
/**
* Adds the selected kp is.
*
* @param selectedKPIs
* the selected kp is
*/
public void addSelectedKPIs(List<KPI> selectedKPIs) {
this.selectedKPIs = selectedKPIs;
}
/**
* Gets the KPI for name.
*
* @param name
* the name
* @return the KPI for name
*/
public KPI getKPIForName(String name) {
GWT.log("Searching KPI name: " + name);
KPI foundKPI = null;
String purgedName = name.trim();
for (KPI kpi : selectedKPIs) {
String purgedKPIName = kpi.getName().trim();
if (purgedKPIName.compareToIgnoreCase(purgedName) == 0) {
foundKPI = kpi;
break;
}
}
GWT.log("FOUND KPI: " + foundKPI);
return foundKPI;
}
/**
* Adds the parameters.
*
* @param keyToGet
* the key to get
* @param parameters
* the parameters
* @param toShowBatchTypeValue
* label to show batch type value
*/
public void addParameters(String keyToGet, Map<String, List<String>> parameters, String toShowBatchTypeValue) {
final FlexTable flexTable = new FlexTable();
flexTable.getElement().setId("CorrelationParameterInputKPIs");
flexTable.setStyleName("colgrouptable");
try {
List<String> dataInputs = parameters.get(keyToGet);
if (dataInputs == null || dataInputs.isEmpty())
return;
dataInputParameters = new HashMap<String, String>();
String theDataInputs = dataInputs.get(0);
String[] splittedParams = theDataInputs.split(";");
for (String splitParam : splittedParams) {
try {
String[] keyvalue = splitParam.split("=");
dataInputParameters.put(keyvalue[0], keyvalue[1]);
} catch (Exception e) {
}
}
flexTable.setWidget(0, 0, new HTML("Batch Type:"));
flexTable.setWidget(0, 1, new HTML(toShowBatchTypeValue));
flexTable.setWidget(1, 0, new HTML("Level:"));
flexTable.setWidget(1, 1, new HTML(dataInputParameters.get(PerformFishAnalyticsConstant.DM_SCALEP_PARAM)));
String KPINames = "";
for (KPI kpi : selectedKPIs) {
KPINames += kpi.getName() + ", ";
}
KPINames = KPINames.substring(0, KPINames.length() - 2);
flexTable.setWidget(2, 0, new HTML("KPIs:"));
flexTable.setWidget(2, 1, new HTML(KPINames));
} catch (Exception e) {
// silent
}
field_parameters_container.add(flexTable);
}
/**
* Adds the list focus ids.
*
* @param listFocusIDs
* the list focus I ds
*/
public void addListFocusIds(List<String> listFocusIDs) {
for (String batchID : listFocusIDs) {
field_list_focus_id_correlation.addItem(batchID, batchID);
}
}
private String getOutputId() {
outputNumber++;
String outputId = "OutputId_" + outputNumber;
GWT.log("Generated OutputId: " + outputId);
return outputId;
}
/**
* Adds the results.
*
* @param dmResponse
* the dm response
*/
public void addResults(DataMinerResponse dmResponse) {
this.dmResponse = dmResponse;
outputNumber = 0;
for (OutputFile outputFile : dmResponse.getListOutput()) {
if (outputFile.getDataType().equals(FileContentType.CSV)) {
PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
new AsyncCallback<CSVFile>() {
@Override
public void onFailure(Throwable caught) {
showAlert(caught.getMessage(), AlertType.ERROR, true,
uib_vp_correlation_results_container);
}
@Override
public void onSuccess(CSVFile result) {
csvGenerated.put(result.getFileName(), result);
fillCorrelationMatrix();
}
});
}
}
}
private void fillCorrelationMatrix() {
if (csvGenerated.size() < 2)
return;
String corrIndexFilename = null;
String corrFilename = null;
for (String fileName : csvGenerated.keySet()) {
if (fileName.contains("index")) {
corrIndexFilename = fileName;
} else {
corrFilename = fileName;
}
}
GWT.log("Correlation Matrix Index File: " + corrIndexFilename);
GWT.log("Correlation Matrix File: " + corrFilename);
CSVFile corrIndexCsvFile = csvGenerated.get(corrIndexFilename);
CSVFile corrCsvFile = csvGenerated.get(corrFilename);
GWT.log("Correlation Matrix Index CSV: " + corrIndexCsvFile);
GWT.log("Correlation Matrix CSV: " + corrCsvFile);
HorizontalPanel hp = new HorizontalPanel();
final FlexTable flexTable = new FlexTable();
flexTable.getElement().setId(getOutputId());
flexTable.setStyleName("fixedtable");
flexTable.getElement().getStyle().setMarginBottom(10, Unit.PX);
flexTable.setWidget(0, 0, new Label(""));
CSVRow headerRow = corrIndexCsvFile.getHeaderRow();
// HEADER
for (int i = 1; i < headerRow.getListValues().size(); i++) {
final String headerValue = headerRow.getListValues().get(i);
HTML label = new HTML(headerValue);
label.getElement().getStyle().setFontSize(16, Unit.PX);
final int columnIndex = i;
KPI kpi = getKPIForName(headerValue);
fillKPIReferenceForIndex(0, columnIndex, Arrays.asList(kpi));
flexTable.setWidget(0, i, label);
}
// DATA
for (int i = 0; i < corrIndexCsvFile.getValueRows().size(); i++) {
CSVRow row = corrIndexCsvFile.getValueRows().get(i);
CSVRow rowMatrixColor = corrCsvFile.getValueRows().get(i);
final int rowIndex = i + 1; // adding +1 for header row
for (int j = 0; j < row.getListValues().size(); j++) {
final String rowValue = row.getListValues().get(j);
final String rowMatrixColorValue = rowMatrixColor.getListValues().get(j);
final String theColor = CorrelationValueToColourUtil.getRGBColor(rowMatrixColorValue);
final int columnIndex = j;
final HTML buttonHTML = new HTML(rowValue);
buttonHTML.addStyleName("my-active-html");
if (j == 0) {
HTML label = new HTML(rowValue);
label.getElement().getStyle().setFontSize(16, Unit.PX);
flexTable.setWidget(rowIndex, j, label);
// rowValue is a KPI name
KPI kpi = getKPIForName(rowValue);
fillKPIReferenceForIndex(rowIndex, columnIndex, Arrays.asList(kpi));
continue;
}
// diagonal
else if (rowIndex == j) {
HTML dg = new HTML(rowValue);
dg.getElement().getStyle().setFontSize(18, Unit.PX);
flexTable.setWidget(rowIndex, j, dg);
continue;
// j > 0
} else {
KPI columnKPI = getKPIForName(headerRow.getListValues().get(columnIndex));
// Here the first index is the KPI name
KPI rowKPI = getKPIForName(row.getListValues().get(0));
fillKPIReferenceForIndex(rowIndex, columnIndex, Arrays.asList(columnKPI, rowKPI));
buttonHTML.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// callScatterAndDeaChart(rowIndex, columnIndex,
// button);
callScatter(rowIndex, columnIndex, buttonHTML);
}
});
}
// button.setType(ButtonType.LINK);
// APPLYING STYLE ONLY ON INTERNAL VALUES OF CSV
if (j > 0)
buttonHTML.getElement().getStyle().setColor("#000");
buttonHTML.addAttachHandler(new AttachEvent.Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
if (theColor.startsWith("#")) {
GWT.log("Setting backgrounf color: " + theColor);
buttonHTML.getElement().getParentElement().getStyle().setBackgroundColor(theColor);
}
}
});
buttonHTML.getElement().getStyle().setBackgroundColor(theColor);
flexTable.setWidget(rowIndex, j, buttonHTML);
}
}
hp.add(flexTable);
final FlexTable flexLegend = new FlexTable();
flexLegend.getElement().setId(getOutputId());
flexLegend.setStyleName("simpletable");
Map<String, String> map = CorrelationValueToColourUtil.getMap();
flexLegend.setWidget(0, 0, new Label("Legend"));
flexLegend.setWidget(0, 1, new HTML(""));
int i = 1;
for (String key : map.keySet()) {
final String rgbColor = map.get(key);
final HTML theLegendColor = new HTML("");
theLegendColor.getElement().getStyle().setBackgroundColor(rgbColor);
flexLegend.setWidget(i, 0, theLegendColor);
flexLegend.setWidget(i, 1, new HTML(key));
theLegendColor.addAttachHandler(new AttachEvent.Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
theLegendColor.getElement().getParentElement().getStyle().setBackgroundColor(rgbColor);
}
});
i++;
}
flexLegend.getElement().getStyle().setMarginLeft(15, Unit.PX);
hp.add(flexLegend);
uib_vp_correlation_results_container.insert(hp, 0);
}
/**
* Fill kpi reference for index.
*
* @param rowIndex
* the row index
* @param columnIndex
* the column index
* @param listKPI
* the list kpi
*/
private void fillKPIReferenceForIndex(int rowIndex, int columnIndex, List<KPI> listKPI) {
String key = generateKey(rowIndex, columnIndex);
kpiMapPointers.put(key, listKPI);
}
/**
* Gets the KPI for indexes.
*
* @param rowIndex
* the row index
* @param columnIndex
* the column index
* @return the KPI for indexes
*/
public List<KPI> getKPIForIndexes(int rowIndex, int columnIndex) {
String key = generateKey(rowIndex, columnIndex);
return kpiMapPointers.get(key);
}
/**
* Generate key.
*
* @param rowIndex
* the row index
* @param columnIndex
* the column index
* @return the string
*/
private String generateKey(int rowIndex, int columnIndex) {
return rowIndex + "-" + columnIndex;
}
/**
* Check valid focus id.
*
* @return the FocusID if it is valid, null otherwise.
*/
public String checkValidFocusID() {
cg_focus_id_correlation.setType(ControlGroupType.NONE);
// CHECK THE FOCUS ID VALUE
String focusID = field_list_focus_id_correlation.getSelectedItemText();
if (focusID == null || focusID.isEmpty()) {
String msgError = "Could not execute a valid Analysis.";
if (selectedAreas == null || selectedAreas.isEmpty()) {
msgError += " Please select another parameters computation";
} else {
msgError += " Select at least the Area of your FARM";
}
showAlert(msgError, AlertType.ERROR, true, uib_vp_correlation_results_container);
cg_focus_id_correlation.setType(ControlGroupType.ERROR);
return null;
}
return focusID;
}
/**
* Call scatter.
*
* @param rowIndex
* the row index
* @param columnIndex
* the column index
* @param button
* the button
*/
private void callScatter(int rowIndex, int columnIndex, HTML button) {
String focusID = checkValidFocusID();
if (focusID == null)
return;
GWT.log("Called ScatterChart at rowIndex: " + rowIndex + ", columnIndex: " + columnIndex);
List<KPI> selectedKPI = getKPIForIndexes(rowIndex, columnIndex);
GWT.log("Selected KPI: " + selectedKPI);
PerformFishAnalyticsController.eventBus
.fireEvent(new CallAlgorithmEvent(DataMinerAlgorithms.SCATTER, focusID, selectedKPI, null));
}
private static native void saveFilePDF(CorrelationPanelResult chart, String filename, String tabTitle,
String tabDescr, int requestId, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
var tTitle = tabTitle;
var tDescr = tabDescr;
var pdoc = new jsPDF("p", "mm", "a4");
pdoc.setProperties({
title : 'PerformFish ' + tTitle,
subject : ' Results',
author : 'PerformFish',
keywords : 'PerformFish',
creator : 'D4Science'
});
var lMargin = 15; //left margin in mm
var rMargin = 15; //right margin in mm
var tMargin = 15; //top margin in mm
var bMargin = 15; //bottom margin in mm
var pdfWidthInMM = 210; // width of A4 in mm
var pdfHeightInMM = 297; // height of A4 in mm
var pageCenter = pdfWidthInMM / 2;
pdoc.setFontSize(24);
var title = "PerformFish " + tTitle;
var titleHeight = pdoc.getLineHeight(title) / pdoc.internal.scaleFactor
var xPos = lMargin;
var yPos = tMargin;
pdoc.text(title, pageCenter, yPos, 'center');
yPos += titleHeight;
pdoc.setFontSize(10);
var lineHeight = pdoc.getLineHeight(tDescr) / pdoc.internal.scaleFactor
var splittedAnalysisDescription = pdoc.splitTextToSize(tDescr,
(pdfWidthInMM - lMargin - rMargin));
var lines = splittedAnalysisDescription.length // splitted text is a string array
var analysisDescriptionHeight = lines * lineHeight
pdoc.text(splittedAnalysisDescription, xPos, yPos, 'left');
yPos += analysisDescriptionHeight;
yPos += 4;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text("Parameters:", xPos, yPos, 'left');
pdoc.setFontSize(10);
pdoc.setFontType("normal");
yPos += 4;
var correlationParametersInputKPIs = $doc
.getElementById('CorrelationParameterInputKPIs');
console.log('InputKPIs: ' + correlationParametersInputKPIs);
pdoc.autoTable({
theme : 'plain',
startY : yPos,
pageBreak : 'auto',
columnStyles : {
0 : {
halign : 'left',
fillColor : [ 211, 225, 241 ]
}
},
html : correlationParametersInputKPIs
});
//head : null,
// body : [
// [ 'Parameters',
// correlationParametersInputKPIs ]
// ]
yPos = pdoc.previousAutoTable.finalY + 6;
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text("CORRELATION Matrix:", xPos, yPos, 'left');
pdoc.setFontSize(10);
pdoc.setFontType("normal");
yPos += 4;
console.log('OutputNumber: ' + outputNumber);
for (var i = 1; i <= outputNumber; i++) {
var outputId = 'OutputId_' + requestId + '_' + i;
console.log('OutputId: ' + outputId);
var resultElement = $doc.getElementById(outputId);
console.log('Result Element: ' + resultElement);
var resultType = resultElement.className;
console.log('Result Element className: ' + resultType);
if (typeof resultType !== 'undefined' && resultType !== null
&& resultType !== '') {
if (resultType == 'fixedtable' || resultType == 'simpletable') {
console.log('Result Type csv: ' + i);
console.log('Result Content: ' + resultElement.innerHTML);
var checkColor = function(data) {
if (data.section === 'body') {
console.log(data);
if (typeof data.cell !== 'undefined'
&& data.cell !== null) {
if (typeof data.cell.raw !== 'undefined'
&& data.cell.raw !== null) {
console.log(data.cell.raw.innerHTML);
var positive = 'rgb(255, 68, 45)';
var negative = 'rgb(173, 216, 230)';
var nonsignificant = 'rgb(230, 223, 0)';
if (data.cell.raw.innerHTML
.indexOf(positive) >= 0) {
data.cell.styles.fillColor = [ 255, 68,
45 ];
} else {
if (data.cell.raw.innerHTML
.indexOf(negative) >= 0) {
data.cell.styles.fillColor = [ 173,
216, 230 ];
} else {
if (data.cell.raw.innerHTML
.indexOf(nonsignificant) >= 0) {
data.cell.styles.fillColor = [
230, 223, 0 ];
} else {
}
}
}
}
}
}
};
pdoc.autoTable({
theme : 'grid',
startY : yPos,
pageBreak : 'auto',
bodyStyles : {
fontSize : 9
},
didParseCell : checkColor,
html : resultElement
});
yPos = pdoc.previousAutoTable.finalY + 6;
} else {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = outputNumber.children;
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv
.getElementsByTagName('img').item(0);
console.log('Image element: ' + imageElement);
pdoc.addImage(imageElement, lMargin, yPos);
console.log('Image Height: ' + imageElement.height);
yPos += (imageElement.height * 0.26458333);
} else {
console.log('Result Type unknow: ' + i);
}
}
} else {
console.log('Result Type is undefined:' + i);
}
if (i == outputNumber) {
} else {
if (pdfHeightInMM - yPos < pdfHeightInMM / 7) {
pdoc.addPage();
yPos = tMargin; // Restart position
}
}
}
var focusIDElement = $doc
.getElementById('field_list_focus_id_correlation');
console.log('FocusID Element: ' + focusIDElement);
var selectedIndex = focusIDElement.selectedIndex;
if (selectedIndex > -1) {
var value = focusIDElement[selectedIndex].innerText;
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
pdoc.text("Focus ID: "+value, xPos, yPos, 'left');
pdoc.setFontSize(10);
pdoc.setFontType("normal");
yPos += 4;
}
var numberOfPages = pdoc.internal.getNumberOfPages()
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/" + numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');
pdoc.save(filename);
}-*/;
}

@ -8,7 +8,10 @@
</ui:style>
<g:HTMLPanel ui:field="field_html_panel" addStyleNames="the_margin">
<b:Button size="SMALL" ui:field="uib_save_pdf_1"
title="Save PDF" />
<g:VerticalPanel ui:field="field_parameters">
<g:VerticalPanel ui:field="field_parameters_container"
addStyleNames="the_margin_top_bottom">

@ -12,6 +12,7 @@ import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsS
import org.gcube.portlets.user.performfishanalytics.client.controllers.PerformFishAnalyticsViewController;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
@ -32,19 +33,22 @@ import com.google.gwt.resources.client.TextResource;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Panel;
public class ScatterPanelResult {
private PerformFishAnalyticsViewController viewController;
private int requestId;
private int outputIteration = 0;
private int outputNumber = 0;
public ScatterPanelResult(int reqId,PerformFishAnalyticsViewController viewController,
private int requestId = 0;
private int outputIteration = 1;
private int outputNumber = 1;
private Button savePDFButton;
public ScatterPanelResult(int reqId, PerformFishAnalyticsViewController viewController,
final DataMinerAlgorithms algorithm, String focusID, List<KPI> inputKPI, final List<KPI> outputKPI) {
this.requestId=reqId;
GWT.log("RequestID: " + reqId);
requestId = reqId;
this.viewController = viewController;
TextResource algDescr = PerformFishResources.INSTANCE.batch_SCATTER();
@ -60,21 +64,21 @@ public class ScatterPanelResult {
HorizontalPanel res = new HorizontalPanel();
Button savePDFButton = new Button();
savePDFButton = new Button();
savePDFButton.getElement().getStyle().setMargin(10, Unit.PX);
savePDFButton.setIcon(IconType.PRINT);
savePDFButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
saveFilePDF(algorithm.getId(), tabTitle, tabTitle, tabDescr, requestId,outputIteration, outputNumber);
saveFilePDF(algorithm.getId(), tabTitle, tabTitle, tabDescr, requestId, outputIteration, outputNumber);
// dmResponse.getListOutput().size()
}
});
savePDFButton.setVisible(false);
res.add(savePDFButton);
submitRequestPanel.addWidget(res);
int oIteration = 1;
if (inputKPI.get(0) == null || inputKPI.get(1) == null) {
submitRequestPanel
@ -85,13 +89,17 @@ public class ScatterPanelResult {
// again");
}
String titleScatter = "KPI: " + inputKPI.get(0).getName() + " vs " + inputKPI.get(1).getName();
submitRequestPanel.setTheTitle(titleScatter);
String title = "KPI: " + inputKPI.get(0).getName() + " vs " + inputKPI.get(1).getName();
HTML toBigTitle = new HTML(title);
toBigTitle.getElement().setId("KPI_Scatter_" + requestId + "_" + outputIteration);
toBigTitle.getElement().addClassName("to-big-title");
submitRequestPanel.addWidget(toBigTitle);
HorizontalPanel hp = new HorizontalPanel();
hp.getElement().addClassName("ext-horizontal-panel");
callDataMinerServiceForChart(viewController.getPerformFishResponse(), POPULATION_LEVEL.BATCH, inputKPI,
outputKPI, algorithm, focusID, submitRequestPanel, submitRequestPanel.getContainerPanel(), tab,
oIteration);
outputIteration = oIteration;
outputKPI, algorithm, focusID, submitRequestPanel, hp, tab, outputIteration);
submitRequestPanel.addWidget(hp);
}
@ -191,9 +199,15 @@ public class ScatterPanelResult {
});
}
private String getOutputId(int oIteration, String title) {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 1;
return outputId;
}
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List<KPI> inputKPIs, List<KPI> outputKPIs, final String focusID,
final Panel container, boolean displayError, int oIteration) {
final Panel container, boolean displayError, final int oIteration) {
String title = displayError ? "No results " : "";
@ -205,17 +219,13 @@ public class ScatterPanelResult {
container.add(alert);
return;
}
savePDFButton.setVisible(true);
final String toTitle = title;
outputNumber = dmResponse.getListOutput().size();
int oNumber = 0;
for (final OutputFile outputFile : dmResponse.getListOutput()) {
oNumber++;
final String outputId = "OutputId_" + requestId+"_"+oIteration + "_" + oNumber;
for (OutputFile outputFile : dmResponse.getListOutput()) {
final FileContentType fileContentType = outputFile.getDataType();
switch (outputFile.getDataType()) {
case IMAGE:
PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
@ -234,11 +244,11 @@ public class ScatterPanelResult {
public void onSuccess(String base64Content) {
String title = toTitle;
ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showImage(base64Content);
container.add(showResult);
}
});
break;
@ -262,7 +272,8 @@ public class ScatterPanelResult {
String title = toTitle;
ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showCSVFile(result, cssTableStyle);
container.add(showResult);
}
@ -277,8 +288,6 @@ public class ScatterPanelResult {
}
/**
* Remove the spinner if all DM responses are returned.
*
@ -301,7 +310,7 @@ public class ScatterPanelResult {
int requestId, int outputIteration, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
console.log('requestId: '+requestId);
console.log('requestId: ' + requestId);
console.log('OutputIteration: ' + outputIteration);
console.log('OutputNumber:' + outputNumber);
@ -349,9 +358,32 @@ public class ScatterPanelResult {
for (var i = 1; i <= outputIteration; i++) {
var kpiId = 'KPI_Scatter_' + requestId + '_' + i;
console.log('kpiId: ' + kpiId);
var kpiName = $doc.getElementById(kpiId);
yPos += 2;
pdoc.setFontSize(14);
pdoc.setFontType("bold");
var kpiText = kpiName.textContent;
var kpiHeight = pdoc.getLineHeight(kpiText)
/ pdoc.internal.scaleFactor;
var splittedKpiName = pdoc.splitTextToSize(kpiText, (pdfWidthInMM
- lMargin - rMargin));
var kpiLines = splittedKpiName.length; // splitted text is a string array
var kpiLinesHeight = kpiLines * kpiHeight;
pdoc.text(splittedKpiName, xPos, yPos, 'left');
yPos += kpiLinesHeight;
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
for (var j = 1; j <= outputNumber; j++) {
var outputId = 'OutputId_'+requestId+'_'+ i + '_' + j;
var outputId = 'OutputId_' + requestId + '_' + i + '_' + j;
console.log('OutputId: ' + outputId);
var resultOutputNumber = $doc.getElementById(outputId);
@ -369,6 +401,19 @@ public class ScatterPanelResult {
// foo could get resolved and it's defined
var childrenTable = resultOutputNumber.children;
var titleCurrentTable = childrenTable[0].rows[0].cells[0];
console.log('Title current table: '
+ titleCurrentTable.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentTable.textContent, xPos, yPos,
'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
@ -389,6 +434,20 @@ public class ScatterPanelResult {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = resultOutputNumber.children;
var titleCurrentImage = childrenTable[0].rows[0].cells[0];
console.log('Title current image: '
+ titleCurrentImage.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentImage.textContent, xPos,
yPos, 'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
@ -407,6 +466,26 @@ public class ScatterPanelResult {
}
}
if (i == outputNumber) {
} else {
if (pdfHeightInMM - yPos < pdfHeightInMM / 4) {
pdoc.addPage();
yPos = tMargin; // Restart position
}
}
}
var numberOfPages=pdoc.internal.getNumberOfPages()
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/"+numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');

@ -12,6 +12,7 @@ import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsS
import org.gcube.portlets.user.performfishanalytics.client.controllers.PerformFishAnalyticsViewController;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
@ -41,11 +42,13 @@ public class SpeedometerPanelResult {
private PerformFishAnalyticsViewController viewController;
private int requestId;
private int outputIteration = 0;
private int outputNumber = 0;
public SpeedometerPanelResult(int reqId,PerformFishAnalyticsViewController viewController,
private int outputNumber = 1;
private Button savePDFButton;
public SpeedometerPanelResult(int reqId, PerformFishAnalyticsViewController viewController,
final DataMinerAlgorithms algorithm, String focusID, List<KPI> inputKPI, final List<KPI> outputKPI) {
this.requestId=reqId;
GWT.log("RequestID: " + reqId);
requestId = reqId;
this.viewController = viewController;
TextResource algDescr = PerformFishResources.INSTANCE.batch_SPEEDOMETER();
@ -61,17 +64,18 @@ public class SpeedometerPanelResult {
HorizontalPanel res = new HorizontalPanel();
Button savePDFButton = new Button();
savePDFButton = new Button();
savePDFButton.getElement().getStyle().setMargin(10, Unit.PX);
savePDFButton.setIcon(IconType.PRINT);
savePDFButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
saveFilePDF(algorithm.getId(), tabTitle, tabTitle, tabDescr, requestId,outputIteration, outputNumber);
saveFilePDF(algorithm.getId(), tabTitle, tabTitle, tabDescr, requestId, outputIteration, outputNumber);
}
});
savePDFButton.setVisible(false);
res.add(savePDFButton);
submitRequestPanel.addWidget(res);
int oIteration = 0;
@ -81,6 +85,7 @@ public class SpeedometerPanelResult {
oIteration++;
String title = "KPI: " + kpi.getName();
HTML toBigTitle = new HTML(title);
toBigTitle.getElement().setId("KPI_Speedometer_" + requestId + "_" + oIteration);
toBigTitle.getElement().addClassName("to-big-title");
submitRequestPanel.addWidget(toBigTitle);
HorizontalPanel hp = new HorizontalPanel();
@ -191,9 +196,15 @@ public class SpeedometerPanelResult {
});
}
private String getOutputId(int oIteration, String title) {
String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 1;
return outputId;
}
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List<KPI> inputKPIs, List<KPI> outputKPIs, final String focusID,
final Panel container, boolean displayError, int oIteration) {
final Panel container, boolean displayError, final int oIteration) {
String title = displayError ? "No results " : "";
@ -205,16 +216,13 @@ public class SpeedometerPanelResult {
container.add(alert);
return;
}
savePDFButton.setVisible(true);
final String toTitle = title;
outputNumber = dmResponse.getListOutput().size();
int oNumber = 0;
for (final OutputFile outputFile : dmResponse.getListOutput()) {
oNumber++;
final String outputId = "OutputId_" +requestId+"_"+ oIteration + "_" + oNumber;
for (OutputFile outputFile : dmResponse.getListOutput()) {
final FileContentType fileContentType = outputFile.getDataType();
switch (outputFile.getDataType()) {
case IMAGE:
@ -238,7 +246,8 @@ public class SpeedometerPanelResult {
title += "Selected Batch ID: " + focusID + "<br>";
title += "Normalized with respect to all batches in the VRE";
ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showImage(base64Content);
container.add(showResult);
@ -265,7 +274,8 @@ public class SpeedometerPanelResult {
String title = toTitle;
ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
String outputId = getOutputId(oIteration, title);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showCSVFile(result, cssTableStyle);
container.add(showResult);
}
@ -280,8 +290,6 @@ public class SpeedometerPanelResult {
}
/**
* Remove the spinner if all DM responses are returned.
*
@ -304,7 +312,7 @@ public class SpeedometerPanelResult {
int requestId, int outputIteration, int outputNumber)/*-{
var that = this;
console.log('saveFilePDF()');
console.log('requestId: '+requestId);
console.log('requestId: ' + requestId);
console.log('OutputIteration: ' + outputIteration);
console.log('OutputNumber:' + outputNumber);
@ -352,9 +360,32 @@ public class SpeedometerPanelResult {
for (var i = 1; i <= outputIteration; i++) {
var kpiId = 'KPI_Speedometer_' + requestId + '_' + i;
console.log('kpiId: ' + kpiId);
var kpiName = $doc.getElementById(kpiId);
yPos += 2;
pdoc.setFontSize(14);
pdoc.setFontType("bold");
var kpiText = kpiName.textContent;
var kpiHeight = pdoc.getLineHeight(kpiText)
/ pdoc.internal.scaleFactor;
var splittedKpiName = pdoc.splitTextToSize(kpiText, (pdfWidthInMM
- lMargin - rMargin));
var kpiLines = splittedKpiName.length; // splitted text is a string array
var kpiLinesHeight = kpiLines * kpiHeight;
pdoc.text(splittedKpiName, xPos, yPos, 'left');
yPos += kpiLinesHeight;
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
for (var j = 1; j <= outputNumber; j++) {
var outputId = 'OutputId_'+requestId+'_'+ i + '_' + j;
var outputId = 'OutputId_' + requestId + '_' + i + '_' + j;
console.log('OutputId: ' + outputId);
var resultOutputNumber = $doc.getElementById(outputId);
@ -372,6 +403,19 @@ public class SpeedometerPanelResult {
// foo could get resolved and it's defined
var childrenTable = resultOutputNumber.children;
var titleCurrentTable = childrenTable[0].rows[0].cells[0];
console.log('Title current table: '
+ titleCurrentTable.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentTable.textContent, xPos, yPos,
'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
@ -392,6 +436,20 @@ public class SpeedometerPanelResult {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = resultOutputNumber.children;
var titleCurrentImage = childrenTable[0].rows[0].cells[0];
console.log('Title current image: '
+ titleCurrentImage.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentImage.textContent, xPos,
yPos, 'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
@ -410,6 +468,26 @@ public class SpeedometerPanelResult {
}
}
if (i == outputNumber) {
} else {
if (pdfHeightInMM - yPos < pdfHeightInMM / 4) {
pdoc.addPage();
yPos = tMargin; // Restart position
}
}
}
var numberOfPages=pdoc.internal.getNumberOfPages()
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/"+numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');
@ -417,4 +495,5 @@ public class SpeedometerPanelResult {
pdoc.save(filename);
}-*/;
}

@ -91,6 +91,11 @@ public class SubmitRequestPanel extends Composite {
else
theTitle.setHTML("");
}
public void addTheTitleClassName(String className){
theTitle.getElement().addClassName(className);
}
/**
* Gets the panel.

@ -11,6 +11,7 @@ import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsS
import org.gcube.portlets.user.performfishanalytics.client.controllers.PerformFishAnalyticsViewController;
import org.gcube.portlets.user.performfishanalytics.client.resources.PerformFishResources;
import org.gcube.portlets.user.performfishanalytics.client.view.LoaderIcon;
import org.gcube.portlets.user.performfishanalytics.shared.FileContentType;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.csv.CSVFile;
@ -40,12 +41,15 @@ public class SynopticTablePanelResult {
private PerformFishAnalyticsViewController viewController;
private int requestId;
private int outputIteration = 0;
private int outputIteration = 1;
private int outputNumber = 0;
private Button savePDFButton;
public SynopticTablePanelResult(int reqId, PerformFishAnalyticsViewController viewController,
PerformFishResponse performFishResponse, final Map<String, List<String>> performFishRequestParameters) {
this.requestId = reqId;
GWT.log("RequestID: " + reqId);
requestId = reqId;
this.viewController = viewController;
String batchTableURL = performFishResponse.getMapParameters().get(PerformFishAnalyticsConstant.BATCHES_TABLE);
@ -103,7 +107,7 @@ public class SynopticTablePanelResult {
PerformFishResources.INSTANCE.synopticTable().getText(), submitRequestPanel);
HorizontalPanel res = new HorizontalPanel();
Button savePDFButton = new Button();
savePDFButton = new Button();
savePDFButton.getElement().getStyle().setMargin(10, Unit.PX);
savePDFButton.setIcon(IconType.PRINT);
savePDFButton.addClickHandler(new ClickHandler() {
@ -114,10 +118,10 @@ public class SynopticTablePanelResult {
// dmResponse.getListOutput().size()
}
});
savePDFButton.setVisible(false);
res.add(savePDFButton);
submitRequestPanel.addWidget(res);
outputIteration=1;
final HTMLPanel panelContainer = submitRequestPanel.getContainerPanel();
@ -144,7 +148,7 @@ public class SynopticTablePanelResult {
// field_unary_algorithm.setVisible(true);
GWT.log("I'm displaying: " + dmResponse);
displayOutputFilesAsStaticEntities(dmResponse, toFinalChartType, null, null, null,
panelContainer, false, 1);
panelContainer, false, outputIteration);
}
@Override
@ -152,7 +156,7 @@ public class SynopticTablePanelResult {
loaderIcon.setVisible(false);
checkTabSpinner(submitRequestPanel, tab);
displayOutputFilesAsStaticEntities(null, toFinalChartType, null, null, null, panelContainer,
true, 1);
true, outputIteration);
}
});
@ -177,9 +181,20 @@ public class SynopticTablePanelResult {
}
}
private String getOutputId(int oIteration, boolean isLegend) {
String outputId;
if (isLegend) {
outputId = "OutputId_" + requestId + "_" + oIteration + "_" + 1;
} else {
outputNumber++;
outputId = "OutputId_" + requestId + "_" + oIteration + "_" + outputNumber;
}
return outputId;
}
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List<KPI> inputKPIs, List<KPI> outputKPIs, final String focusID,
final Panel container, boolean displayError, int oIteration) {
final Panel container, boolean displayError, final int oIteration) {
String title = displayError ? "No results " : "";
@ -192,15 +207,15 @@ public class SynopticTablePanelResult {
return;
}
savePDFButton.setVisible(false);
final String toTitle = title;
outputNumber = 1;
outputNumber = dmResponse.getListOutput().size();
int oNumber = 0;
for (OutputFile outputFile : dmResponse.getListOutput()) {
for (final OutputFile outputFile : dmResponse.getListOutput()) {
oNumber++;
final String outputId = "OutputId_" + requestId + "_" + oIteration + "_" + oNumber;
final FileContentType fileContentType = outputFile.getDataType();
switch (outputFile.getDataType()) {
case IMAGE:
@ -221,7 +236,8 @@ public class SynopticTablePanelResult {
String title = toTitle;
ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
String outputId = getOutputId(oIteration, false);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showImage(base64Content);
container.add(showResult);
@ -252,14 +268,16 @@ public class SynopticTablePanelResult {
case PERFORMFISH_SYNOPTICTABLE_BATCH_HATCHERY:
case PERFORMFISH_SYNOPTICTABLE_BATCH_PREGROW:
String outputId;
if (!result.getFileName().contains("legend")) {
cssTableStyle = "synoptictable-batch";
cssTableStyle = "synoptictable-farm";
outputId = getOutputId(oIteration, false);
} else {
cssTableStyle = "simpletable-synoptic";
outputId = getOutputId(oIteration, true);
}
ShowResult showResultSin = new ShowResult(outputId, title,
outputFile.getDataType());
ShowResult showResultSin = new ShowResult(outputId, title, fileContentType);
showResultSin.showCSVFile(result, cssTableStyle);
displayingOrderedSynopticTable(dmResponse, result.getFileName(), container,
showResultSin);
@ -271,7 +289,9 @@ public class SynopticTablePanelResult {
break;
}
// ALL OTHER CASES
ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
String outputId = getOutputId(oIteration, false);
ShowResult showResult = new ShowResult(outputId, title, fileContentType);
showResult.showCSVFile(result, cssTableStyle);
container.add(showResult);
}
@ -356,7 +376,7 @@ public class SynopticTablePanelResult {
//pdoc.text("Analysis:", xPos, yPos, 'left');
yPos += 6;
for (var i = 1; i <= outputIteration; i++) {
for (var i = 1; i <= outputIteration; i++) {
for (var j = 1; j <= outputNumber; j++) {
@ -378,11 +398,85 @@ public class SynopticTablePanelResult {
// foo could get resolved and it's defined
var childrenTable = resultOutputNumber.children;
var titleCurrentTable = childrenTable[0].rows[0].cells[0];
console.log('Title current table: '
+ titleCurrentTable.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentTable.textContent, xPos, yPos,
'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var secondTable = secondDiv.children[0].children[0];
console.log('CSV SecondTable: ' + secondTable);
var checkColor = function(data) {
if (data.section === 'body') {
console.log(data);
var good = '<div class="gwt-HTML"><span style="padding-left: 10px; padding-right: 10px; background-color: limegreen; border: 1px solid limegreen;"></span></div>';
var normal = '<div class="gwt-HTML"><span style="padding-left: 10px; padding-right: 10px; background-color: yellow; border: 1px solid yellow;"></span></div>';
var bad = '<div class="gwt-HTML"><span style="padding-left: 10px; padding-right: 10px; background-color: red;border: 1px solid red;"></span></div>';
if (typeof data.cell !== 'undefined'
&& data.cell !== null) {
if (typeof data.cell.raw !== 'undefined'
&& data.cell.raw !== null) {
console.log(data.cell.raw.innerHTML);
if (data.cell.raw.innerHTML === good) {
console.log('good');
var posIW = (data.cell.x + (data.cell.width / 2)-2);
var posIH = (data.cell.y + (data.cell.height / 2)-2);
var greenImg = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wgARCAAKAAoDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAWAQEBAQAAAAAAAAAAAAAAAAAACAn/2gAMAwEAAhADEAAAAbSM8+wB/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQABBQIf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwIf/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQABPyEf/9oADAMBAAIAAwAAABAAD//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8QH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8QH//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEAAT8QH//Z'
pdoc.addImage(greenImg, 'JPEG', posIW, posIH, 4, 4);
//pdoc.setFontSize(10);
//pdoc.setFontType("normal");
//var posW = (data.cell.x + (data.cell.width / 2));
//var posH = (data.cell.y + (data.cell.height / 2));
//pdoc.text('G', posW, posH,'center');
} else {
if (data.cell.raw.innerHTML === normal) {
console.log('normal');
var posIW = (data.cell.x + (data.cell.width / 2)-2);
var posIH = (data.cell.y + (data.cell.height / 2)-2);
var yellowImg = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wgARCAAKAAoDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAn/xAAWAQEBAQAAAAAAAAAAAAAAAAAABwr/2gAMAwEAAhADEAAAAbEZ/wCqAD//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAEFAh//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Ah//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAE/IR//2gAMAwEAAgADAAAAEAAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPxAf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPxAf/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQABPxAf/9k='
pdoc.addImage(yellowImg, 'JPEG', posIW, posIH, 4, 4);
//pdoc.setFontSize(10);
//pdoc.setFontType("normal");
//var posW = (data.cell.x + (data.cell.width / 2));
//var posH = (data.cell.y + (data.cell.height / 2));
//pdoc.text('N', posW, posH,'center');
} else {
if (data.cell.raw.innerHTML === bad) {
console.log('bad');
var posIW = (data.cell.x + (data.cell.width / 2)-2);
var posIH = (data.cell.y + (data.cell.height / 2)-2);
var redImg = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wgARCAAKAAoDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAj/xAAWAQEBAQAAAAAAAAAAAAAAAAAACAn/2gAMAwEAAhADEAAAAYvlPfwAf//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEAAQUCH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEABj8CH//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEAAT8hH//aAAwDAQACAAMAAAAQAA//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAE/EB//2Q=='
pdoc.addImage(redImg, 'JPEG', posIW, posIH, 4, 4);
//pdoc.setFontSize(10);
//pdoc.setFontType("normal");
//var posW = (data.cell.x + (data.cell.width / 2));
//var posH = (data.cell.y + (data.cell.height / 2));
//pdoc.text('B', posW, posH,'center');
} else {
}
}
}
}
}
}
};
pdoc.autoTable({
theme : 'grid',
startY : yPos,
@ -390,6 +484,7 @@ public class SynopticTablePanelResult {
bodyStyles : {
fontSize : 9
},
didDrawCell : checkColor,
html : secondTable
});
@ -398,6 +493,20 @@ public class SynopticTablePanelResult {
if (resultType == 'image') {
console.log('Result Type image: ' + i);
var childrenTable = resultOutputNumber.children;
var titleCurrentImage = childrenTable[0].rows[0].cells[0];
console.log('Title current image: '
+ titleCurrentImage.textContent);
yPos += 2;
pdoc.setFontSize(10);
pdoc.setFontType("bold");
pdoc.text(titleCurrentImage.textContent, xPos,
yPos, 'left');
yPos += 6;
pdoc.setFontSize(10);
pdoc.setFontType("normal");
var secondDiv = childrenTable[0].rows[1].cells[0];
var imageElement = secondDiv.getElementsByTagName(
'img').item(0);
@ -416,6 +525,26 @@ public class SynopticTablePanelResult {
}
}
if (i == outputNumber) {
} else {
if (pdfHeightInMM - yPos < pdfHeightInMM / 7) {
pdoc.addPage();
yPos = tMargin; // Restart position
}
}
}
var numberOfPages = pdoc.internal.getNumberOfPages();
console.log('NumberOfPages: ' + numberOfPages);
for (var k = 1; k <= numberOfPages; k++) {
pdoc.setPage(k);
console.log('CurrentPage: ' + k);
var footner = 'Page ' + k + "/" + numberOfPages;
pdoc.text(footner, pageCenter, pdfHeightInMM - 7, 'center');
}
console.log('Done');
@ -423,5 +552,4 @@ public class SynopticTablePanelResult {
pdoc.save(filename);
}-*/;
}

Loading…
Cancel
Save