diff --git a/pom.xml b/pom.xml
index 58770ee..90ea6d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
org.gcube.portlets.user
performfish-analytics-portlet
war
- 0.6.0-SNAPSHOT
+ 0.7.0-SNAPSHOT
PerformFish Analytics Portlet
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/annualcontrollers/PerformFishAnnualAnalyticsController.java b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/annualcontrollers/PerformFishAnnualAnalyticsController.java
index 86d1b19..c9ce875 100644
--- a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/annualcontrollers/PerformFishAnnualAnalyticsController.java
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/annualcontrollers/PerformFishAnnualAnalyticsController.java
@@ -45,11 +45,15 @@ import org.gcube.portlets.user.performfishanalytics.shared.performfishservice.Pe
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.event.shared.HandlerManager;
import com.google.gwt.resources.client.TextResource;
import com.google.gwt.user.client.Window;
@@ -60,6 +64,7 @@ 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.Panel;
+import com.google.gwt.user.client.ui.VerticalPanel;
// TODO: Auto-generated Javadoc
/**
@@ -90,6 +95,8 @@ public class PerformFishAnnualAnalyticsController {
private Map synopticOrderBy = new HashMap();
+
+
/**
* Instantiates a new perform fish analytics controller.
*/
@@ -154,13 +161,6 @@ public class PerformFishAnnualAnalyticsController {
selectedKPI.getSelectedPopulationType());
eventBus.fireEvent(new PerformFishFieldFormChangedEvent(null));
- // viewController.manageAlgorithmsSubmit(selectedKPIsSize);
- // List batchIds = viewController.getSelectedBatchID();
- // if(batchIds==null || batchIds.size()==0) {
- // viewController.enableAllAlgorithmsForSubmit(false);
- // }else
-
- // viewController.manageAlgorithmsSubmit(selectedKPIsSize);
}
});
@@ -345,11 +345,12 @@ public class PerformFishAnnualAnalyticsController {
final DataMinerAlgorithms algorithm = DataMinerAlgorithms.PERFORMFISH_SYNOPTIC_TABLE_FARM;
final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
- String tabTitle = "Synoptic Table";
+ final String tabTitle = "Synoptic Table";
+ final String tabDescr = PerformFishResources.INSTANCE.synopticTable().getText();
final Tab tab = viewAnnualController.createTab(
tabTitle + " #" + (viewAnnualController.currentNumberOfTab() + 1),
- PerformFishResources.INSTANCE.synopticTable().getText(), submitRequestPanel);
+ tabDescr, submitRequestPanel);
StringBuilder dataInputsFormatter = new StringBuilder();
Map performFishResponseMap = thePerformFishResponse.getMapParameters();
@@ -402,14 +403,14 @@ public class PerformFishAnnualAnalyticsController {
// field_unary_algorithm.setVisible(true);
GWT.log("I'm displaying: " + dmResponse);
displayOutputFilesAsStaticEntities(dmResponse, algorithm, null, null, null, panelContainer,
- false);
+ false,tabTitle, tabDescr);
}
@Override
public void onFailure(Throwable caught) {
loaderIcon.setVisible(false);
checkTabSpinner(submitRequestPanel, tab);
- displayOutputFilesAsStaticEntities(null, algorithm, null, null, null, panelContainer, true);
+ displayOutputFilesAsStaticEntities(null, algorithm, null, null, null, panelContainer, true,tabTitle, tabDescr);
}
});
@@ -487,8 +488,9 @@ public class PerformFishAnnualAnalyticsController {
GWT.log("Building DM request with input parameters: " + dmInputParameters);
StringBuilder dataInputsFormatter = new StringBuilder();
- //dataInputsFormatter.append(
- // PerformFishAnalyticsConstant.DM_SCALEP_PARAM + "=" + viewAnnualController.getForm().getLevel() + ";");
+ // dataInputsFormatter.append(
+ // PerformFishAnalyticsConstant.DM_SCALEP_PARAM + "=" +
+ // viewAnnualController.getForm().getLevel() + ";");
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + dmInputParameters.getChartType() + ";");
@@ -551,9 +553,10 @@ public class PerformFishAnnualAnalyticsController {
final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
submitRequestPanel.showLoader(false, null);
-
+
String tabTitle = DataMinerAlgorithms.DEA_ANALYSIS.getTitle();
- final Tab tab = viewAnnualController.createTab(tabTitle+" #" + (viewAnnualController.currentNumberOfTab() + 1),
+ final Tab tab = viewAnnualController.createTab(
+ tabTitle + " #" + (viewAnnualController.currentNumberOfTab() + 1),
PerformFishResources.INSTANCE.farm_DEAANALYSIS().getText(), submitRequestPanel);
viewAnnualController.noSpinner(tab);
@@ -588,7 +591,7 @@ public class PerformFishAnnualAnalyticsController {
GWT.log("Building DM request with input parameters: " + dmInputParameters);
StringBuilder dataInputsFormatter = new StringBuilder();
-
+
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + dmInputParameters.getChartType() + ";");
@@ -731,8 +734,7 @@ public class PerformFishAnnualAnalyticsController {
SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
// submitRequestPanel.getElement().addClassName("ext-horizontal-panel");
- String tabTitle = algorithm.getTitle();
-
+
// TO MANAGE ALGORITHMS DESCRIPTION
TextResource algDescr = null;
switch (algorithm) {
@@ -764,8 +766,14 @@ public class PerformFishAnnualAnalyticsController {
break;
}
+
+
String algDesrTxt = algDescr != null ? algDescr.getText() : null;
+
+ String tabTitle = algorithm.getTitle();
+ String tabDescr = algDesrTxt;
+
Tab tab = viewAnnualController.createTab(tabTitle + " #" + (viewAnnualController.currentNumberOfTab() + 1),
algDesrTxt, submitRequestPanel);
@@ -784,7 +792,7 @@ public class PerformFishAnnualAnalyticsController {
DataMinerInputParameters dmInputParams = new DataMinerInputParameters(thePerformFishResponse,
viewAnnualController.getSelectedYears(), Arrays.asList(kpi), null, algorithm, focusID);
- callDataMinerServiceForChart(dmInputParams, submitRequestPanel, hp, tab);
+ callDataMinerServiceForChart(dmInputParams, submitRequestPanel, hp, tab, tabTitle, tabDescr);
// resultPanel.add(hp);
submitRequestPanel.addWidget(hp);
}
@@ -807,7 +815,7 @@ public class PerformFishAnnualAnalyticsController {
DataMinerInputParameters dmInputParams = new DataMinerInputParameters(thePerformFishResponse,
viewAnnualController.getSelectedYears(), inputKPI, outputKPI, algorithm, focusID);
callDataMinerServiceForChart(dmInputParams, submitRequestPanel, submitRequestPanel.getContainerPanel(),
- tab);
+ tab,tabTitle, tabDescr);
// callDataMinerServiceForChart(thePerformFishResponse,
// POPULATION_LEVEL.BATCH, inputKPI, outputKPI, algorithm, focusID,
// submitRequestPanel, submitRequestPanel.getContainerPanel(), tab);
@@ -826,9 +834,11 @@ public class PerformFishAnnualAnalyticsController {
* 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 SubmitRequestPanel requestPanel, final ComplexPanel panelContainer, final Tab tab, final String tabTitle, final String tabDescr) {
GWT.log("Building DM request with input parameters: " + dmInputParameters);
@@ -914,7 +924,7 @@ public class PerformFishAnnualAnalyticsController {
GWT.log("I'm displaying: " + dmResponse);
displayOutputFilesAsStaticEntities(dmResponse, dmInputParameters.getChartType(),
dmInputParameters.getInputKPI(), dmInputParameters.getOutputKPI(),
- dmInputParameters.getFocusID(), panelContainer, false);
+ dmInputParameters.getFocusID(), panelContainer, false,tabTitle, tabDescr);
}
@Override
@@ -923,7 +933,7 @@ public class PerformFishAnnualAnalyticsController {
checkTabSpinner(requestPanel, tab);
displayOutputFilesAsStaticEntities(null, dmInputParameters.getChartType(),
dmInputParameters.getInputKPI(), dmInputParameters.getOutputKPI(),
- dmInputParameters.getFocusID(), panelContainer, true);
+ dmInputParameters.getFocusID(), panelContainer, true,tabTitle, tabDescr);
}
});
@@ -987,10 +997,12 @@ public class PerformFishAnnualAnalyticsController {
* the container
* @param displayError
* the display error
+ * @param tabDescr
+ * @param tabTitle
*/
private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
final DataMinerAlgorithms chartType, List inputKPIs, List outputKPIs, final String focusID,
- final Panel container, boolean displayError) {
+ final Panel container, boolean displayError, final String tabTitle, final String tabDescr) {
String title = displayError ? "No results " : "";
@@ -1002,14 +1014,34 @@ public class PerformFishAnnualAnalyticsController {
container.add(alert);
return;
}
+
+
+ VerticalPanel vp = new VerticalPanel();
+ final HorizontalPanel res = new HorizontalPanel();
+
+
+ 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(res,tabTitle,tabTitle,tabDescr,dmResponse.getListOutput().size());
+ }
+ });
+
+ vp.add(savePDFButton);
+ vp.add(res);
+ container.add(vp);
final String toTitle = title;
- int outputNumber=0;
-
+ int outputNumber = 0;
+
for (final OutputFile outputFile : dmResponse.getListOutput()) {
outputNumber++;
- final String outputId="OutputId_"+outputNumber;
-
+ final String outputId = "OutputId_" + outputNumber;
+
switch (outputFile.getDataType()) {
case IMAGE:
PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
@@ -1037,7 +1069,7 @@ public class PerformFishAnnualAnalyticsController {
title = chartType.getTitle() + " - on all farm data
";
title += "Blue dots indicate the selected farm: " + focusID;
- ShowResult showResult = new ShowResult(outputId,title, outputFile.getDataType());
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
showResult.showImage(base64Content);
displayingOrderedBoxPlot(dmResponse, title, container, showResult);
return;
@@ -1066,7 +1098,7 @@ public class PerformFishAnnualAnalyticsController {
break;
}
- ShowResult showResult = new ShowResult(outputId,title,outputFile.getDataType());
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
showResult.showImage(base64Content);
container.add(showResult);
@@ -1074,7 +1106,7 @@ public class PerformFishAnnualAnalyticsController {
});
break;
case CSV:
-
+
PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
new AsyncCallback() {
@@ -1102,7 +1134,7 @@ public class PerformFishAnnualAnalyticsController {
title += "
";
title += "Data aggregation is performed by considering farms as base units";
- ShowResult showResult = new ShowResult(outputId,title, outputFile.getDataType());
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
showResult.showCSVFile(result, cssTableStyle);
displayingOrderedBoxPlot(dmResponse, title, container, showResult);
return;
@@ -1122,7 +1154,8 @@ public class PerformFishAnnualAnalyticsController {
} else {
cssTableStyle = "simpletable-synoptic";
}
- ShowResult showResultSin = new ShowResult(outputId,title, outputFile.getDataType());
+ ShowResult showResultSin = new ShowResult(outputId, title,
+ outputFile.getDataType());
showResultSin.showCSVFile(result, cssTableStyle);
displayingOrderedSynopticTable(dmResponse, result.getFileName(), container,
showResultSin);
@@ -1138,7 +1171,7 @@ public class PerformFishAnnualAnalyticsController {
break;
}
- ShowResult showResult = new ShowResult(outputId,title, outputFile.getDataType());
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
showResult.showCSVFile(result, cssTableStyle);
container.add(showResult);
}
@@ -1218,4 +1251,121 @@ public class PerformFishAnnualAnalyticsController {
flex.setWidget(0, 2, showResult);
}
}
+
+ private static native void saveFilePDF(HorizontalPanel chart, String filename, String tabTitle, String tabDescr, int outputNumber)/*-{
+ var that = this;
+ console.log('saveFilePDF()');
+
+ var tTitle=tabTitle;
+ var tDescr=tabDescr;
+ var result = chart;
+ console.log(chart);
+
+ 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 <= outputNumber; i++) {
+
+ var outputId = 'OutputId_'+ i;
+ 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 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 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);
+ }
+
+ }
+
+
+ console.log('Done');
+
+ pdoc.save(filename);
+
+ }-*/;
+
}
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/controllers/PerformFishAnalyticsController.java b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/controllers/PerformFishAnalyticsController.java
index 5cf6daf..84930e8 100644
--- a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/controllers/PerformFishAnalyticsController.java
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/controllers/PerformFishAnalyticsController.java
@@ -34,13 +34,14 @@ import org.gcube.portlets.user.performfishanalytics.client.event.SubmitRequestEv
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.BoxPlotPanelResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.DeaPanelResult;
-import org.gcube.portlets.user.performfishanalytics.client.viewbinder.ShowResult;
+import org.gcube.portlets.user.performfishanalytics.client.viewbinder.ScatterPanelResult;
+import org.gcube.portlets.user.performfishanalytics.client.viewbinder.SpeedometerPanelResult;
import org.gcube.portlets.user.performfishanalytics.client.viewbinder.SubmitRequestPanel;
+import org.gcube.portlets.user.performfishanalytics.client.viewbinder.SynopticTablePanelResult;
import org.gcube.portlets.user.performfishanalytics.shared.KPI;
-import org.gcube.portlets.user.performfishanalytics.shared.OutputFile;
import org.gcube.portlets.user.performfishanalytics.shared.PopulationType;
-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.PerformFishInitParameter;
import org.gcube.portlets.user.performfishanalytics.shared.performfishservice.PerformFishResponse;
@@ -50,19 +51,10 @@ import com.github.gwtbootstrap.client.ui.Modal;
import com.github.gwtbootstrap.client.ui.Tab;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.ControlGroupType;
-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.shared.HandlerManager;
-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.HTMLPanel;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
@@ -82,9 +74,7 @@ public class PerformFishAnalyticsController {
/** The decrypt parameters. */
private PerformFishInitParameter decryptParameters;
- private Map boxPlotOrderBy = new HashMap();
-
- private Map synopticOrderBy = new HashMap();
+ private static int requestId = 0;
/**
* Instantiates a new perform fish analytics controller.
@@ -376,92 +366,9 @@ public class PerformFishAnalyticsController {
final Map> performFishRequestParameters) {
GWT.log("Read perform fish response: " + performFishResponse);
- String batchTableURL = performFishResponse.getMapParameters().get(PerformFishAnalyticsConstant.BATCHES_TABLE);
-
- if (batchTableURL == null || batchTableURL.isEmpty())
- Window.alert("Something seems wrong. No batches tables matching with parameter "
- + PerformFishAnalyticsConstant.BATCHES_TABLE + " returned from service");
-
- final Map> mapParameters = new HashMap>();
-
- StringBuilder dataInputsFormatter = new StringBuilder();
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_INPUT_TABLE + "=" + batchTableURL + ";");
-
- // READ THE INPUT FILE
- String popType = viewController.getForm().getBatchType();
-
- DataMinerAlgorithms chartType = null;
- if (popType.equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.GROW_OUT_INDIVIDUAL_CLOSED_BATCHES.name())
- || popType.equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.GROW_OUT_INDIVIDUAL.name())) {
- chartType = DataMinerAlgorithms.PERFORMFISH_SYNOPTICTABLE_BATCH;
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_QUARTER_LABELS + "="
- + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_ZONE_LABELS + "="
- + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
- } else if (popType
- .equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.HATCHERY_INDIVIDUAL_CLOSED_BATCHES.name())
- || popType.equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.HATCHERY_INDIVIDUAL.name())) {
- chartType = DataMinerAlgorithms.PERFORMFISH_SYNOPTICTABLE_BATCH_HATCHERY;
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_STOCKING_PERIOD + "="
- + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
- } else if (popType.equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.PRE_ONGROWING.name()) || popType
- .equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.PRE_ONGROWING_CLOSED_BATCHES.name())) {
- chartType = DataMinerAlgorithms.PERFORMFISH_SYNOPTICTABLE_BATCH_PREGROW;
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_ZONE_LABELS + "="
- + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_STOCKING_PERIOD + "="
- + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
- }
-
- String dataInParameters = dataInputsFormatter.toString();
- mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
- mapParameters.put("Identifier", Arrays.asList(
- "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers." + chartType));
-
- GWT.log("Calling DM service with client input parameters: " + mapParameters);
-
- final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
- // submitRequestPanel.getElement().addClassName("ext-horizontal-panel");
- String tabTitle = "Synoptic Table"; // CAMEL CASE
- final Tab tab = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1),
- PerformFishResources.INSTANCE.synopticTable().getText(), submitRequestPanel);
- final HTMLPanel panelContainer = submitRequestPanel.getContainerPanel();
-
- final LoaderIcon loaderIcon = new LoaderIcon(
- "Submitting request to " + DataMinerAlgorithms.PERFORMFISH_SYNOPTICTABLE_BATCH.getTitle() + "...");
- loaderIcon.setVisible(true);
- panelContainer.setVisible(true);
- panelContainer.add(loaderIcon);
- Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
- @Override
- public void execute() {
- loaderIcon.setFocus(true);
- }
- });
-
- final DataMinerAlgorithms toFinalChartType = chartType;
- PerformFishAnalyticsServiceAsync.Util.getInstance().callDMServiceToLoadSynopticTable(performFishResponse,
- mapParameters, new AsyncCallback() {
-
- @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, toFinalChartType, null, null, null,
- panelContainer, false);
- }
-
- @Override
- public void onFailure(Throwable caught) {
- loaderIcon.setVisible(false);
- checkTabSpinner(submitRequestPanel, tab);
- displayOutputFilesAsStaticEntities(null, toFinalChartType, null, null, null, panelContainer,
- true);
-
- }
- });
+ @SuppressWarnings("unused")
+ SynopticTablePanelResult synopticTablePanelResult = new SynopticTablePanelResult(requestId++, viewController,
+ performFishResponse, performFishRequestParameters);
}
@@ -494,7 +401,8 @@ public class PerformFishAnalyticsController {
dataInputsFormatter
.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + DataMinerAlgorithms.CORRELATION + ";");
dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FARMFILE_PARAM + "=" + batchTableURL + ";");
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "="+viewController.getSelectedBatchID()+";");
+ dataInputsFormatter
+ .append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "=" + viewController.getSelectedBatchID() + ";");
String kpiCodes = "";
for (KPI kpi : viewController.getSelectedKPIs()) {
@@ -512,13 +420,13 @@ public class PerformFishAnalyticsController {
final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
submitRequestPanel.showLoader(false, null);
-
+
String tabTitle = DataMinerAlgorithms.DEA_ANALYSIS.getTitle();
- final Tab tab = viewController.createTab(tabTitle+" #" + (viewController.currentNumberOfTab() + 1),
+ final Tab tab = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1),
PerformFishResources.INSTANCE.batch_DEAANALYSIS().getText(), submitRequestPanel);
viewController.noSpinner(tab);
final List selectedKPI = new ArrayList(viewController.getSelectedKPIs());
-
+
DeaPanelResult deaPanelResult = new DeaPanelResult();
deaPanelResult.addSelectedKPIs(selectedKPI);
deaPanelResult.setDeaDescription(PerformFishResources.INSTANCE.batch_DEAANALYSIS().getText());
@@ -581,7 +489,7 @@ public class PerformFishAnalyticsController {
final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
submitRequestPanel.showLoader(true,
"Submitting " + DataMinerAlgorithms.CORRELATION.getTitle() + " request to DM Service...");
-
+
String tabTitle = DataMinerAlgorithms.CORRELATION.getTitle();
final Tab tab = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1),
PerformFishResources.INSTANCE.batch_CORRELATION().getText(), submitRequestPanel);
@@ -648,7 +556,7 @@ public class PerformFishAnalyticsController {
* @param outputKPI
* the output kpi
*/
- private void callAlgorithm(DataMinerAlgorithms algorithm, String focusID, List inputKPI,
+ private void callAlgorithm(final DataMinerAlgorithms algorithm, String focusID, List inputKPI,
final List outputKPI) {
String selectedBatchID = viewController.getSelectedBatchID();
@@ -656,199 +564,32 @@ public class PerformFishAnalyticsController {
if (selectedBatchID == null || selectedBatchID.isEmpty())
Window.alert("Something seems wrong, no selected BatchID, try again");
- // submitRequestPanel.getElement().addClassName("ext-horizontal-panel");
- String tabTitle = algorithm.getTitle();
-
- // TO MANAGE ALGORITHMS DESCRIPTION
- TextResource algDescr = null;
switch (algorithm) {
case BOXPLOT:
- algDescr = PerformFishResources.INSTANCE.batch_BOXPLOT();
- break;
- case CORRELATION:
- algDescr = PerformFishResources.INSTANCE.batch_CORRELATION();
- break;
- case DEA_ANALYSIS:
- break;
- case DEA_CHART:
- break;
- case PERFORMFISH_SYNOPTIC_TABLE_FARM:
- break;
- case PERFORMFISH_SYNOPTICTABLE_BATCH:
- break;
- case SCATTER:
- algDescr = PerformFishResources.INSTANCE.batch_SCATTER();
+ @SuppressWarnings("unused")
+ BoxPlotPanelResult boxPlotPanelResult = new BoxPlotPanelResult(requestId++, viewController, algorithm,
+ focusID, inputKPI, outputKPI);
break;
case SPEEDOMETER:
- algDescr = PerformFishResources.INSTANCE.batch_SPEEDOMETER();
+ @SuppressWarnings("unused")
+ SpeedometerPanelResult speedometerPanelResult = new SpeedometerPanelResult(requestId++, viewController,
+ algorithm, focusID, inputKPI, outputKPI);
+
break;
- case PERFORMFISH_SYNOPTICTABLE_BATCH_HATCHERY:
- break;
- case PERFORMFISH_SYNOPTICTABLE_BATCH_PREGROW:
+ case SCATTER:
+ @SuppressWarnings("unused")
+ ScatterPanelResult scatterPanelResult = new ScatterPanelResult(requestId++, viewController, algorithm,
+ focusID, inputKPI, outputKPI);
break;
default:
break;
+ // callDataMinerServiceForChart(viewController.getPerformFishResponse(),
+ // POPULATION_LEVEL.BATCH, inputKPI,
+ // outputKPI, algorithm, focusID, submitRequestPanel,
+ // submitRequestPanel.getContainerPanel(), tab,
+ // req, oIteration);
}
- String algDesrTxt = algDescr != null ? algDescr.getText() : null;
- final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
- Tab tab = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1), algDesrTxt,
- submitRequestPanel);
-
- switch (algorithm) {
- case BOXPLOT:
- case SPEEDOMETER:
-
- submitRequestPanel.setTotalRequests(inputKPI.size());
- for (KPI kpi : inputKPI) {
- String title = "KPI: " + kpi.getName();
- HTML toBigTitle = new HTML(title);
- 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,
- Arrays.asList(kpi), Arrays.asList(kpi), algorithm, focusID, submitRequestPanel, hp, tab);
- // resultPanel.add(hp);
- submitRequestPanel.addWidget(hp);
- }
- break;
- case SCATTER:
-
- 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 titleScatter = "KPI: " + inputKPI.get(0).getName() + " vs " + inputKPI.get(1).getName();
- submitRequestPanel.setTheTitle(titleScatter);
-
- default:
- callDataMinerServiceForChart(viewController.getPerformFishResponse(), POPULATION_LEVEL.BATCH, inputKPI,
- outputKPI, algorithm, focusID, submitRequestPanel, submitRequestPanel.getContainerPanel(), tab);
- }
- }
-
- /**
- * Call data miner service for chart.
- *
- * @param performFishResponse
- * the perform fish response
- * @param scalePValue
- * the scale p value
- * @param inputKPI
- * the input kpi
- * @param outputKPI
- * the output kpi
- * @param chartType
- * the chart type
- * @param focusID
- * the focus id
- * @param requestPanel
- * the request panel
- * @param panelContainer
- * the panel
- * @param tab
- * the tab
- */
- private void callDataMinerServiceForChart(PerformFishResponse performFishResponse, POPULATION_LEVEL scalePValue,
- final List inputKPI, final List outputKPI, final DataMinerAlgorithms chartType,
- final String focusID, final SubmitRequestPanel requestPanel, final ComplexPanel panelContainer,
- final Tab tab) {
-
- GWT.log("Read perform fish response: " + performFishResponse);
-
- String batchTableURL = performFishResponse.getMapParameters().get(PerformFishAnalyticsConstant.BATCHES_TABLE);
-
- if (batchTableURL == null || batchTableURL.isEmpty())
- Window.alert("Something seems wrong. No batches tables matching with parameter "
- + PerformFishAnalyticsConstant.BATCHES_TABLE + " returned from service");
-
- StringBuilder dataInputsFormatter = new StringBuilder();
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_SCALEP_PARAM + "=" + scalePValue.name() + ";");
- String theBatchType = viewController.getForm().getBatchType();
- theBatchType = theBatchType.replace("_CLOSED_BATCHES", ""); // REMOVING
- // SUFFIX
- // _CLOSED_BATCHES
- // FOR
- // DATAMINER
- // CALL
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_BATCHTYPE_PARAM + "=" + theBatchType + ";");
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + chartType + ";");
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FARMFILE_PARAM + "=" + batchTableURL + ";");
- dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "=" + focusID + ";");
-
- if (inputKPI != null && inputKPI.size() > 0) {
- String kpiCodes = "";
- for (KPI kpi : inputKPI) {
- 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 (outputKPI != null && outputKPI.size() > 0) {
- String kpiCodes = "";
- for (KPI kpi : outputKPI) {
- 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 + ";");
-
- }
-
- String dataInParameters = dataInputsFormatter.toString();
- GWT.log("Calling DM service with client input parameters: " + dataInParameters);
-
- Map> mapParameters = new HashMap>();
- mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
-
- final LoaderIcon loaderIcon = new LoaderIcon("Submitting request to " + chartType.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().callingDataMinerPerformFishAnalysis(mapParameters,
- new AsyncCallback() {
-
- @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, chartType, inputKPI, outputKPI, focusID,
- panelContainer, false);
- }
-
- @Override
- public void onFailure(Throwable caught) {
- loaderIcon.setVisible(false);
- checkTabSpinner(requestPanel, tab);
- displayOutputFilesAsStaticEntities(null, chartType, inputKPI, outputKPI, focusID,
- panelContainer, true);
-
- }
- });
}
/**
@@ -869,223 +610,4 @@ public class PerformFishAnalyticsController {
}
}
- /**
- * Display output files as static entities.
- *
- * @param dmResponse
- * the dm response
- * @param chartType
- * the chart type
- * @param inputKPIs
- * the input kp is
- * @param outputKPIs
- * the output kp is
- * @param focusID
- * the focus id
- * @param container
- * the container
- * @param displayError
- * the display error
- */
- private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
- final DataMinerAlgorithms chartType, List inputKPIs, List outputKPIs, final String focusID,
- final Panel container, boolean displayError) {
-
- 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;
- }
-
- final String toTitle = title;
- int outputNumber=0;
- for (final OutputFile outputFile : dmResponse.getListOutput()) {
- outputNumber++;
- final String outputId="OutputId_"+outputNumber;
-
- switch (outputFile.getDataType()) {
- case IMAGE:
- PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
- new AsyncCallback() {
-
- @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;
- switch (chartType) {
- case BOXPLOT:
- title = chartType.getName() + " - on all batches
";
- title += "Blue dots indicate the selected batch(es): " + focusID;
-
- ShowResult showResult = new ShowResult(outputId,title, outputFile.getDataType());
- showResult.showImage(base64Content);
- displayingOrderedBoxPlot(dmResponse, title, container, showResult);
- return;
- case CORRELATION:
- break;
- case DEA_ANALYSIS:
- break;
- case SCATTER:
- break;
- case SPEEDOMETER:
- title = chartType.getTitle() + "
";
- title += "Selected Batch ID: " + focusID + "
";
- title += "Normalized with respect to all batches in the VRE";
- break;
- case DEA_CHART:
- break;
- case PERFORMFISH_SYNOPTICTABLE_BATCH:
- case PERFORMFISH_SYNOPTICTABLE_BATCH_HATCHERY:
- case PERFORMFISH_SYNOPTICTABLE_BATCH_PREGROW:
- case PERFORMFISH_SYNOPTIC_TABLE_FARM:
- break;
- default:
- break;
- }
-
- ShowResult showResult = new ShowResult(outputId,title, outputFile.getDataType());
- showResult.showImage(base64Content);
- container.add(showResult);
-
- }
- });
- break;
- case CSV:
- PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
- new AsyncCallback() {
-
- @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 BOXPLOT:
-
- if (result.getFileName().contains("_user")) {
- title = "My Batch(es)";
- } else {
- title = "All batches in the VRE (including mine)";
- }
- title += "
";
- title += "Data aggregation is performed by considering batches as base units";
-
- ShowResult showResult = new ShowResult(outputId,title, outputFile.getDataType());
- showResult.showCSVFile(result, cssTableStyle);
- displayingOrderedBoxPlot(dmResponse, title, container, showResult);
-
- return;
-
- case CORRELATION:
- break;
- case DEA_ANALYSIS:
- break;
- case SCATTER:
- break;
- case SPEEDOMETER:
- break;
- case DEA_CHART:
- break;
- case PERFORMFISH_SYNOPTICTABLE_BATCH:
- case PERFORMFISH_SYNOPTICTABLE_BATCH_HATCHERY:
- case PERFORMFISH_SYNOPTICTABLE_BATCH_PREGROW:
-
- if (!result.getFileName().contains("legend")) {
- cssTableStyle = "synoptictable-batch";
- } else {
- cssTableStyle = "simpletable-synoptic";
- }
-
- ShowResult showResultSin = new ShowResult(outputId,title, outputFile.getDataType());
- showResultSin.showCSVFile(result, cssTableStyle);
- displayingOrderedSynopticTable(dmResponse, result.getFileName(), container,
- showResultSin);
-
- return;
- case PERFORMFISH_SYNOPTIC_TABLE_FARM:
- break;
- default:
- break;
- }
- // ALL OTHER CASES
- ShowResult showResult = new ShowResult(outputId,title, outputFile.getDataType());
- 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);
- }
- }
-
- 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);
- }
- }
}
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/request/RequestInfo.java b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/request/RequestInfo.java
new file mode 100644
index 0000000..b98b5a6
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/request/RequestInfo.java
@@ -0,0 +1,58 @@
+package org.gcube.portlets.user.performfishanalytics.client.request;
+
+import java.io.Serializable;
+
+import org.gcube.portlets.user.performfishanalytics.client.DataMinerAlgorithms;
+
+public class RequestInfo implements Serializable {
+
+ private static final long serialVersionUID = -2786256071405466977L;
+ private int outputIteration;
+ private int outputNumber;
+ private DataMinerAlgorithms dataminerAlgorithms;
+
+ public RequestInfo(){
+ super();
+ }
+
+ public RequestInfo(int outputIteration, int outputNumber, DataMinerAlgorithms dataminerAlgorithms) {
+ super();
+ this.outputIteration = outputIteration;
+ this.outputNumber = outputNumber;
+ this.dataminerAlgorithms = dataminerAlgorithms;
+ }
+
+ public int getOutputIteration() {
+ return outputIteration;
+ }
+
+ public void setOutputIteration(int outputIteration) {
+ this.outputIteration = outputIteration;
+ }
+
+ public int getOutputNumber() {
+ return outputNumber;
+ }
+
+ public void setOutputNumber(int outputNumber) {
+ this.outputNumber = outputNumber;
+ }
+
+ public DataMinerAlgorithms getDataminerAlgorithms() {
+ return dataminerAlgorithms;
+ }
+
+ public void setDataminerAlgorithms(DataMinerAlgorithms dataminerAlgorithms) {
+ this.dataminerAlgorithms = dataminerAlgorithms;
+ }
+
+ @Override
+ public String toString() {
+ return "RequestInfo [outputIteration=" + outputIteration + ", outputNumber=" + outputNumber
+ + ", dataminerAlgorithms=" + dataminerAlgorithms + "]";
+ }
+
+
+
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewannualbinder/AnalyticsAnnualPanelResult.java b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewannualbinder/AnalyticsAnnualPanelResult.java
index 38eb432..224f8cd 100644
--- a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewannualbinder/AnalyticsAnnualPanelResult.java
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewannualbinder/AnalyticsAnnualPanelResult.java
@@ -21,10 +21,12 @@ 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;
@@ -96,6 +98,12 @@ public class AnalyticsAnnualPanelResult extends Composite {
@UiField
ListBox field_list_focus_id_correlation;
+ @UiField
+ Button uib_save_pdf_1;
+
+ // @UiField
+ // Button uib_save_pdf_2;
+
private Map dataInputParameters;
private DataMinerResponse dmResponse;
@@ -110,19 +118,46 @@ public class AnalyticsAnnualPanelResult extends Composite {
private Map csvGenerated = new HashMap();
- /**
- * 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:
- * Hello! Note that
- * depending on the widget that is used, it may be necessary to implement
- * HasHTML instead of HasText.
- */
+ private AnalyticsAnnualPanelResult analyticsPanelResult;
+
+ private static int callNumber;
+
+ private static Map outputNumbers = new HashMap();
+
+ private String analysisDescription;
+
public AnalyticsAnnualPanelResult(HandlerManager eventBus) {
initWidget(uiBinder.createAndBindUi(this));
// this.theEventBus = eventBus;
+
+ analyticsPanelResult = this;
+
+ uib_save_pdf_1.setIcon(IconType.PRINT);
+ uib_save_pdf_1.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ saveFilePDF(analyticsPanelResult, "AnalysisResult.pdf");
+ }
+ });
+
+ /*
+ * 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;
}
/**
@@ -245,8 +280,9 @@ public class AnalyticsAnnualPanelResult extends Composite {
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)));
+ // 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) {
@@ -256,8 +292,6 @@ public class AnalyticsAnnualPanelResult extends Composite {
flexTable.setWidget(2, 0, new HTML("KPIs:"));
flexTable.setWidget(2, 1, new HTML(KPINames));
-
-
} catch (Exception e) {
// silent
}
@@ -537,4 +571,157 @@ public class AnalyticsAnnualPanelResult extends Composite {
.fireEvent(new CallAlgorithmEvent(DataMinerAlgorithms.SCATTER, focusID, selectedKPI, null));
}
+ private static native void saveFilePDF(AnalyticsAnnualPanelResult chart, String filename)/*-{
+ var that = this;
+ console.log('saveFilePDF()');
+
+ var pdoc = new jsPDF("p", "mm", "a4");
+ pdoc.setProperties({
+ title : 'PerformFish Analysis',
+ 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 Analysis";
+ 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 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');
+
+ var deaAnalysisResult = $doc.getElementById('DeaAnalysisResult_'
+ + n);
+
+ console.log("DeaAnalysisResult: " + n);
+
+ var outputNumber = @org.gcube.portlets.user.performfishanalytics.client.viewbinder.DeaPanelResult::getOutputNumber(Ljava/lang/String;)('DeaAnalysisResult_'+ n);
+ console.log('OutputNumber: ' + outputNumber);
+
+ for (var i = 1; i <= outputNumber; i++) {
+
+ var deaOutputId = 'DeaAnalysisResult_' + n + '_' + i;
+ console.log('DeaOutputId: ' + deaOutputId);
+
+ var deaOutputNumber = $doc.getElementById(deaOutputId);
+
+ console.log('DeaOutputNumber: ' + deaOutputNumber.innerHTML);
+ var resultType = deaOutputNumber.className;
+
+ console.log('DeaOutputNumber 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 = 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
+ });
+
+ 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);
+ }
+
+ }
+ }
+ console.log('Done');
+
+ pdoc.save(filename);
+
+ }-*/;
+
}
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewannualbinder/AnalyticsAnnualPanelResult.ui.xml b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewannualbinder/AnalyticsAnnualPanelResult.ui.xml
index 7dcebf9..664459c 100644
--- a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewannualbinder/AnalyticsAnnualPanelResult.ui.xml
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewannualbinder/AnalyticsAnnualPanelResult.ui.xml
@@ -8,7 +8,10 @@
-
+
+
+
@@ -45,7 +48,7 @@
-
+
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/BoxPlotPanelResult.java b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/BoxPlotPanelResult.java
new file mode 100644
index 0000000..46b8c9d
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/BoxPlotPanelResult.java
@@ -0,0 +1,454 @@
+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.PerformFishAnalyticsConstant.POPULATION_LEVEL;
+import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
+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.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 BoxPlotPanelResult {
+
+ private Map boxPlotOrderBy = new HashMap();
+
+ private PerformFishAnalyticsViewController viewController;
+ private int outputIteration = 0;
+ private int outputNumber = 0;
+ private int requestId;
+
+
+ public BoxPlotPanelResult(int reqId,PerformFishAnalyticsViewController viewController, final DataMinerAlgorithms algorithm,
+ String focusID, List inputKPI, final List outputKPI) {
+ this.requestId=reqId;
+ this.viewController = viewController;
+ TextResource algDescr = PerformFishResources.INSTANCE.batch_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 = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1), algDesrTxt,
+ submitRequestPanel);
+
+ HorizontalPanel res = new HorizontalPanel();
+
+ 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);
+ // dmResponse.getListOutput().size()
+ }
+ });
+
+ 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().addClassName("to-big-title");
+ submitRequestPanel.addWidget(toBigTitle);
+ HorizontalPanel hp = new HorizontalPanel();
+ hp.getElement().addClassName("ext-horizontal-panel");
+ callDataMinerServiceForChart(viewController.getPerformFishResponse(), POPULATION_LEVEL.BATCH,
+ Arrays.asList(kpi), Arrays.asList(kpi), algorithm, focusID, submitRequestPanel, hp, tab,
+ oIteration);
+ // resultPanel.add(hp);
+ submitRequestPanel.addWidget(hp);
+ }
+ outputIteration = oIteration;
+
+ }
+
+ private void callDataMinerServiceForChart(PerformFishResponse performFishResponse, POPULATION_LEVEL scalePValue,
+ final List inputKPI, final List outputKPI, final DataMinerAlgorithms chartType,
+ final String focusID, final SubmitRequestPanel requestPanel, final ComplexPanel panelContainer,
+ final Tab tab, final int oIteration) {
+
+ GWT.log("Read perform fish response: " + performFishResponse);
+
+ String batchTableURL = performFishResponse.getMapParameters().get(PerformFishAnalyticsConstant.BATCHES_TABLE);
+
+ if (batchTableURL == null || batchTableURL.isEmpty())
+ Window.alert("Something seems wrong. No batches tables matching with parameter "
+ + PerformFishAnalyticsConstant.BATCHES_TABLE + " returned from service");
+
+ StringBuilder dataInputsFormatter = new StringBuilder();
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_SCALEP_PARAM + "=" + scalePValue.name() + ";");
+ String theBatchType = viewController.getForm().getBatchType();
+ theBatchType = theBatchType.replace("_CLOSED_BATCHES", ""); // REMOVING
+ // SUFFIX
+ // _CLOSED_BATCHES
+ // FOR
+ // DATAMINER
+ // CALL
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_BATCHTYPE_PARAM + "=" + theBatchType + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + chartType + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FARMFILE_PARAM + "=" + batchTableURL + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "=" + focusID + ";");
+
+ if (inputKPI != null && inputKPI.size() > 0) {
+ String kpiCodes = "";
+ for (KPI kpi : inputKPI) {
+ 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 (outputKPI != null && outputKPI.size() > 0) {
+ String kpiCodes = "";
+ for (KPI kpi : outputKPI) {
+ 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 + ";");
+
+ }
+
+ String dataInParameters = dataInputsFormatter.toString();
+ GWT.log("Calling DM service with client input parameters: " + dataInParameters);
+
+ Map> mapParameters = new HashMap>();
+ mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
+
+ final LoaderIcon loaderIcon = new LoaderIcon("Submitting request to " + chartType.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().callingDataMinerPerformFishAnalysis(mapParameters,
+ new AsyncCallback() {
+
+ @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, chartType, inputKPI, outputKPI, focusID,
+ panelContainer, false, oIteration);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ loaderIcon.setVisible(false);
+ checkTabSpinner(requestPanel, tab);
+ displayOutputFilesAsStaticEntities(null, chartType, inputKPI, outputKPI, focusID,
+ panelContainer, true, oIteration);
+
+ }
+ });
+ }
+
+ private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
+ final DataMinerAlgorithms chartType, List inputKPIs, List outputKPIs, final String focusID,
+ final Panel container, boolean displayError, 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;
+ }
+
+ 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;
+
+ switch (outputFile.getDataType()) {
+ case IMAGE:
+ PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
+ new AsyncCallback() {
+
+ @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.getName() + " - on all batches
";
+ title += "Blue dots indicate the selected batch(es): " + focusID;
+
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
+ showResult.showImage(base64Content);
+ displayingOrderedBoxPlot(dmResponse, title, container, showResult);
+ }
+ });
+ break;
+ case CSV:
+ PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
+ new AsyncCallback() {
+
+ @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)";
+ } else {
+ title = "All batches in the VRE (including mine)";
+ }
+ title += "
";
+ title += "Data aggregation is performed by considering batches as base units";
+
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
+ 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) {
+ viewController.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++) {
+
+ 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 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 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);
+ }
+
+ }
+ }
+
+ console.log('Done');
+
+ pdoc.save(filename);
+
+ }-*/;
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/ScatterPanelResult.java b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/ScatterPanelResult.java
new file mode 100644
index 0000000..577642e
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/ScatterPanelResult.java
@@ -0,0 +1,417 @@
+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.PerformFishAnalyticsConstant.POPULATION_LEVEL;
+import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
+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.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.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,
+ final DataMinerAlgorithms algorithm, String focusID, List inputKPI, final List outputKPI) {
+ this.requestId=reqId;
+ this.viewController = viewController;
+ TextResource algDescr = PerformFishResources.INSTANCE.batch_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 = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1), algDesrTxt,
+ submitRequestPanel);
+
+ HorizontalPanel res = new HorizontalPanel();
+
+ 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);
+ // dmResponse.getListOutput().size()
+ }
+ });
+
+ res.add(savePDFButton);
+ submitRequestPanel.addWidget(res);
+ int oIteration = 1;
+
+ 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 titleScatter = "KPI: " + inputKPI.get(0).getName() + " vs " + inputKPI.get(1).getName();
+ submitRequestPanel.setTheTitle(titleScatter);
+
+ callDataMinerServiceForChart(viewController.getPerformFishResponse(), POPULATION_LEVEL.BATCH, inputKPI,
+ outputKPI, algorithm, focusID, submitRequestPanel, submitRequestPanel.getContainerPanel(), tab,
+ oIteration);
+ outputIteration = oIteration;
+
+ }
+
+ private void callDataMinerServiceForChart(PerformFishResponse performFishResponse, POPULATION_LEVEL scalePValue,
+ final List inputKPI, final List outputKPI, final DataMinerAlgorithms chartType,
+ final String focusID, final SubmitRequestPanel requestPanel, final ComplexPanel panelContainer,
+ final Tab tab, final int oIteration) {
+
+ GWT.log("Read perform fish response: " + performFishResponse);
+
+ String batchTableURL = performFishResponse.getMapParameters().get(PerformFishAnalyticsConstant.BATCHES_TABLE);
+
+ if (batchTableURL == null || batchTableURL.isEmpty())
+ Window.alert("Something seems wrong. No batches tables matching with parameter "
+ + PerformFishAnalyticsConstant.BATCHES_TABLE + " returned from service");
+
+ StringBuilder dataInputsFormatter = new StringBuilder();
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_SCALEP_PARAM + "=" + scalePValue.name() + ";");
+ String theBatchType = viewController.getForm().getBatchType();
+ theBatchType = theBatchType.replace("_CLOSED_BATCHES", ""); // REMOVING
+ // SUFFIX
+ // _CLOSED_BATCHES
+ // FOR
+ // DATAMINER
+ // CALL
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_BATCHTYPE_PARAM + "=" + theBatchType + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + chartType + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FARMFILE_PARAM + "=" + batchTableURL + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "=" + focusID + ";");
+
+ if (inputKPI != null && inputKPI.size() > 0) {
+ String kpiCodes = "";
+ for (KPI kpi : inputKPI) {
+ 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 (outputKPI != null && outputKPI.size() > 0) {
+ String kpiCodes = "";
+ for (KPI kpi : outputKPI) {
+ 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 + ";");
+
+ }
+
+ String dataInParameters = dataInputsFormatter.toString();
+ GWT.log("Calling DM service with client input parameters: " + dataInParameters);
+
+ Map> mapParameters = new HashMap>();
+ mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
+
+ final LoaderIcon loaderIcon = new LoaderIcon("Submitting request to " + chartType.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().callingDataMinerPerformFishAnalysis(mapParameters,
+ new AsyncCallback() {
+
+ @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, chartType, inputKPI, outputKPI, focusID,
+ panelContainer, false, oIteration);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ loaderIcon.setVisible(false);
+ checkTabSpinner(requestPanel, tab);
+ displayOutputFilesAsStaticEntities(null, chartType, inputKPI, outputKPI, focusID,
+ panelContainer, true, oIteration);
+
+ }
+ });
+ }
+
+ private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
+ final DataMinerAlgorithms chartType, List inputKPIs, List outputKPIs, final String focusID,
+ final Panel container, boolean displayError, 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;
+ }
+
+ 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;
+
+ switch (outputFile.getDataType()) {
+ case IMAGE:
+ PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
+ new AsyncCallback() {
+
+ @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;
+
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
+ showResult.showImage(base64Content);
+ container.add(showResult);
+
+
+ }
+ });
+ break;
+ case CSV:
+ PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
+ new AsyncCallback() {
+
+ @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;
+
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
+ 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) {
+ viewController.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++) {
+
+ 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 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 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);
+ }
+
+ }
+ }
+
+ console.log('Done');
+
+ pdoc.save(filename);
+
+ }-*/;
+}
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/SpeedometerPanelResult.java b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/SpeedometerPanelResult.java
new file mode 100644
index 0000000..6f13715
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/SpeedometerPanelResult.java
@@ -0,0 +1,420 @@
+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.PerformFishAnalyticsConstant.POPULATION_LEVEL;
+import org.gcube.portlets.user.performfishanalytics.client.PerformFishAnalyticsServiceAsync;
+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.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 SpeedometerPanelResult {
+
+ private PerformFishAnalyticsViewController viewController;
+ private int requestId;
+ private int outputIteration = 0;
+ private int outputNumber = 0;
+
+ public SpeedometerPanelResult(int reqId,PerformFishAnalyticsViewController viewController,
+ final DataMinerAlgorithms algorithm, String focusID, List inputKPI, final List outputKPI) {
+ this.requestId=reqId;
+ this.viewController = viewController;
+ TextResource algDescr = PerformFishResources.INSTANCE.batch_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 = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1), algDesrTxt,
+ submitRequestPanel);
+
+ HorizontalPanel res = new HorizontalPanel();
+
+ 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);
+ }
+ });
+
+ 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().addClassName("to-big-title");
+ submitRequestPanel.addWidget(toBigTitle);
+ HorizontalPanel hp = new HorizontalPanel();
+ hp.getElement().addClassName("ext-horizontal-panel");
+ callDataMinerServiceForChart(viewController.getPerformFishResponse(), POPULATION_LEVEL.BATCH,
+ Arrays.asList(kpi), Arrays.asList(kpi), algorithm, focusID, submitRequestPanel, hp, tab,
+ oIteration);
+ // resultPanel.add(hp);
+ submitRequestPanel.addWidget(hp);
+ }
+ outputIteration = oIteration;
+
+ }
+
+ private void callDataMinerServiceForChart(PerformFishResponse performFishResponse, POPULATION_LEVEL scalePValue,
+ final List inputKPI, final List outputKPI, final DataMinerAlgorithms chartType,
+ final String focusID, final SubmitRequestPanel requestPanel, final ComplexPanel panelContainer,
+ final Tab tab, final int oIteration) {
+
+ GWT.log("Read perform fish response: " + performFishResponse);
+
+ String batchTableURL = performFishResponse.getMapParameters().get(PerformFishAnalyticsConstant.BATCHES_TABLE);
+
+ if (batchTableURL == null || batchTableURL.isEmpty())
+ Window.alert("Something seems wrong. No batches tables matching with parameter "
+ + PerformFishAnalyticsConstant.BATCHES_TABLE + " returned from service");
+
+ StringBuilder dataInputsFormatter = new StringBuilder();
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_SCALEP_PARAM + "=" + scalePValue.name() + ";");
+ String theBatchType = viewController.getForm().getBatchType();
+ theBatchType = theBatchType.replace("_CLOSED_BATCHES", ""); // REMOVING
+ // SUFFIX
+ // _CLOSED_BATCHES
+ // FOR
+ // DATAMINER
+ // CALL
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_BATCHTYPE_PARAM + "=" + theBatchType + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_CHARTTYPE_PARAM + "=" + chartType + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FARMFILE_PARAM + "=" + batchTableURL + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_FOCUS_PARAM + "=" + focusID + ";");
+
+ if (inputKPI != null && inputKPI.size() > 0) {
+ String kpiCodes = "";
+ for (KPI kpi : inputKPI) {
+ 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 (outputKPI != null && outputKPI.size() > 0) {
+ String kpiCodes = "";
+ for (KPI kpi : outputKPI) {
+ 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 + ";");
+
+ }
+
+ String dataInParameters = dataInputsFormatter.toString();
+ GWT.log("Calling DM service with client input parameters: " + dataInParameters);
+
+ Map> mapParameters = new HashMap>();
+ mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
+
+ final LoaderIcon loaderIcon = new LoaderIcon("Submitting request to " + chartType.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().callingDataMinerPerformFishAnalysis(mapParameters,
+ new AsyncCallback() {
+
+ @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, chartType, inputKPI, outputKPI, focusID,
+ panelContainer, false, oIteration);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ loaderIcon.setVisible(false);
+ checkTabSpinner(requestPanel, tab);
+ displayOutputFilesAsStaticEntities(null, chartType, inputKPI, outputKPI, focusID,
+ panelContainer, true, oIteration);
+
+ }
+ });
+ }
+
+ private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
+ final DataMinerAlgorithms chartType, List inputKPIs, List outputKPIs, final String focusID,
+ final Panel container, boolean displayError, 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;
+ }
+
+ 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;
+
+ switch (outputFile.getDataType()) {
+ case IMAGE:
+ PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
+ new AsyncCallback() {
+
+ @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() + "
";
+ title += "Selected Batch ID: " + focusID + "
";
+ title += "Normalized with respect to all batches in the VRE";
+
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
+ showResult.showImage(base64Content);
+ container.add(showResult);
+
+ }
+ });
+ break;
+ case CSV:
+ PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
+ new AsyncCallback() {
+
+ @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;
+
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
+ 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) {
+ viewController.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++) {
+
+ 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 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 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);
+ }
+
+ }
+ }
+
+ console.log('Done');
+
+ pdoc.save(filename);
+
+ }-*/;
+}
diff --git a/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/SynopticTablePanelResult.java b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/SynopticTablePanelResult.java
new file mode 100644
index 0000000..535cdc0
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/performfishanalytics/client/viewbinder/SynopticTablePanelResult.java
@@ -0,0 +1,427 @@
+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.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.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 SynopticTablePanelResult {
+
+ private Map synopticOrderBy = new HashMap();
+
+ private PerformFishAnalyticsViewController viewController;
+ private int requestId;
+ private int outputIteration = 0;
+ private int outputNumber = 0;
+
+ public SynopticTablePanelResult(int reqId, PerformFishAnalyticsViewController viewController,
+ PerformFishResponse performFishResponse, final Map> performFishRequestParameters) {
+ this.requestId = reqId;
+ this.viewController = viewController;
+
+ String batchTableURL = performFishResponse.getMapParameters().get(PerformFishAnalyticsConstant.BATCHES_TABLE);
+
+ if (batchTableURL == null || batchTableURL.isEmpty())
+ Window.alert("Something seems wrong. No batches tables matching with parameter "
+ + PerformFishAnalyticsConstant.BATCHES_TABLE + " returned from service");
+
+ final Map> mapParameters = new HashMap>();
+
+ StringBuilder dataInputsFormatter = new StringBuilder();
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_INPUT_TABLE + "=" + batchTableURL + ";");
+
+ // READ THE INPUT FILE
+ String popType = viewController.getForm().getBatchType();
+
+ DataMinerAlgorithms chartType = null;
+ if (popType.equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.GROW_OUT_INDIVIDUAL_CLOSED_BATCHES.name())
+ || popType.equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.GROW_OUT_INDIVIDUAL.name())) {
+ chartType = DataMinerAlgorithms.PERFORMFISH_SYNOPTICTABLE_BATCH;
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_QUARTER_LABELS + "="
+ + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_ZONE_LABELS + "="
+ + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
+ } else if (popType
+ .equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.HATCHERY_INDIVIDUAL_CLOSED_BATCHES.name())
+ || popType.equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.HATCHERY_INDIVIDUAL.name())) {
+ chartType = DataMinerAlgorithms.PERFORMFISH_SYNOPTICTABLE_BATCH_HATCHERY;
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_STOCKING_PERIOD + "="
+ + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
+ } else if (popType.equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.PRE_ONGROWING.name()) || popType
+ .equalsIgnoreCase(PerformFishAnalyticsConstant.BATCH_LEVEL.PRE_ONGROWING_CLOSED_BATCHES.name())) {
+ chartType = DataMinerAlgorithms.PERFORMFISH_SYNOPTICTABLE_BATCH_PREGROW;
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_ZONE_LABELS + "="
+ + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
+ dataInputsFormatter.append(PerformFishAnalyticsConstant.DM_STOCKING_PERIOD + "="
+ + PerformFishAnalyticsConstant.DM_VALUE_ALL + ";");
+ }
+
+ String dataInParameters = dataInputsFormatter.toString();
+ mapParameters.put(PerformFishAnalyticsConstant.DATA_INPUTS, Arrays.asList(dataInParameters));
+ mapParameters.put("Identifier", Arrays.asList(
+ "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers." + chartType));
+
+ GWT.log("Calling DM service with client input parameters: " + mapParameters);
+
+ final SubmitRequestPanel submitRequestPanel = new SubmitRequestPanel("", 1);
+ // submitRequestPanel.getElement().addClassName("ext-horizontal-panel");
+
+ // TODO
+ final DataMinerAlgorithms algorithm = chartType;
+ final String tabTitle = "Synoptic Table";
+ final String tabDescr = PerformFishResources.INSTANCE.synopticTable().getText();
+ final Tab tab = viewController.createTab(tabTitle + " #" + (viewController.currentNumberOfTab() + 1),
+ PerformFishResources.INSTANCE.synopticTable().getText(), submitRequestPanel);
+ HorizontalPanel res = new HorizontalPanel();
+
+ 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);
+ // dmResponse.getListOutput().size()
+ }
+ });
+
+ res.add(savePDFButton);
+ submitRequestPanel.addWidget(res);
+ outputIteration=1;
+
+ final HTMLPanel panelContainer = submitRequestPanel.getContainerPanel();
+
+ final LoaderIcon loaderIcon = new LoaderIcon(
+ "Submitting request to " + DataMinerAlgorithms.PERFORMFISH_SYNOPTICTABLE_BATCH.getTitle() + "...");
+ loaderIcon.setVisible(true);
+ panelContainer.setVisible(true);
+ panelContainer.add(loaderIcon);
+ Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+ @Override
+ public void execute() {
+ loaderIcon.setFocus(true);
+ }
+ });
+
+ final DataMinerAlgorithms toFinalChartType = chartType;
+ PerformFishAnalyticsServiceAsync.Util.getInstance().callDMServiceToLoadSynopticTable(performFishResponse,
+ mapParameters, new AsyncCallback() {
+
+ @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, toFinalChartType, null, null, null,
+ panelContainer, false, 1);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ loaderIcon.setVisible(false);
+ checkTabSpinner(submitRequestPanel, tab);
+ displayOutputFilesAsStaticEntities(null, toFinalChartType, null, null, null, panelContainer,
+ true, 1);
+
+ }
+ });
+
+ }
+
+ /**
+ * 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) {
+ viewController.noSpinner(tab);
+ }
+ }
+
+ private void displayOutputFilesAsStaticEntities(final DataMinerResponse dmResponse,
+ final DataMinerAlgorithms chartType, List inputKPIs, List outputKPIs, final String focusID,
+ final Panel container, boolean displayError, 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;
+ }
+
+ 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;
+
+ switch (outputFile.getDataType()) {
+ case IMAGE:
+ PerformFishAnalyticsServiceAsync.Util.getInstance().getImageFile(outputFile,
+ new AsyncCallback() {
+
+ @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;
+
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
+ showResult.showImage(base64Content);
+ container.add(showResult);
+
+ }
+ });
+ break;
+ case CSV:
+ PerformFishAnalyticsServiceAsync.Util.getInstance().getCSVFile(outputFile, true,
+ new AsyncCallback() {
+
+ @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_SYNOPTICTABLE_BATCH:
+ case PERFORMFISH_SYNOPTICTABLE_BATCH_HATCHERY:
+ case PERFORMFISH_SYNOPTICTABLE_BATCH_PREGROW:
+
+ if (!result.getFileName().contains("legend")) {
+ cssTableStyle = "synoptictable-batch";
+ } else {
+ cssTableStyle = "simpletable-synoptic";
+ }
+
+ ShowResult showResultSin = new ShowResult(outputId, title,
+ outputFile.getDataType());
+ showResultSin.showCSVFile(result, cssTableStyle);
+ displayingOrderedSynopticTable(dmResponse, result.getFileName(), container,
+ showResultSin);
+
+ return;
+ case PERFORMFISH_SYNOPTIC_TABLE_FARM:
+ break;
+ default:
+ break;
+ }
+ // ALL OTHER CASES
+ ShowResult showResult = new ShowResult(outputId, title, outputFile.getDataType());
+ 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 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 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);
+ }
+
+ }
+ }
+
+ console.log('Done');
+
+ pdoc.save(filename);
+
+ }-*/;
+
+}