diff --git a/distro/changelog.xml b/distro/changelog.xml index 3367943..80af3bc 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,16 @@ + + Added service info [ticket #12594] + Added support to show log information [ticket #11711] + Added support to show files html, json, pdf, txt [ticket + #17106] + + Updated information show to the user when a computation is + submitted [ticket #17030] + + Added Item Id support [ticket #16503] + Added location and zoom support [ticket #11708] diff --git a/pom.xml b/pom.xml index c51367b..c9e2d58 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portlets.widgets data-miner-manager-widget - 1.4.0-SNAPSHOT + 1.5.0-SNAPSHOT data-miner-manager-widget data-miner-manager-widget offers a unique access to perform data mining and statistical operations on heterogeneous data diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/DataMinerManagerController.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/DataMinerManagerController.java index bcffdd0..93a175a 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/DataMinerManagerController.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/DataMinerManagerController.java @@ -6,6 +6,7 @@ import org.gcube.data.analysis.dataminermanagercl.shared.data.OutputData; import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationData; import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId; import org.gcube.data.analysis.dataminermanagercl.shared.process.OperatorsClassification; +import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.DataMinerWorkArea; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusProvider; @@ -26,6 +27,8 @@ import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.OutputDat import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.RefreshDataMinerWorkAreaEvent; import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ResubmitComputationExecutionEvent; import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ResubmitComputationExecutionRequestEvent; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ServiceInfoEvent; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ServiceInfoRequestEvent; import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.SessionExpiredEvent; import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.StartComputationExecutionRequestEvent; import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.TabularResourceInfoEvent; @@ -253,6 +256,17 @@ public class DataMinerManagerController { }); + EventBusProvider.INSTANCE.addHandler(ServiceInfoRequestEvent.TYPE, + new ServiceInfoRequestEvent.ServiceInfoRequestEventHandler() { + + @Override + public void onRequest(ServiceInfoRequestEvent event) { + Log.debug("Catch EnvironmentRequestEvent: " + event); + retrieveEnvironment(event); + + } + }); + } private void restoreUISession() { @@ -546,6 +560,33 @@ public class DataMinerManagerController { } + private void retrieveEnvironment(final ServiceInfoRequestEvent event) { + DataMinerPortletServiceAsync.INSTANCE.getServiceInfo(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof SessionExpiredServiceException) { + UtilsGXT3.alert("Error", "Expired Session"); + EventBusProvider.INSTANCE.fireEvent(new SessionExpiredEvent()); + } else { + UtilsGXT3.alert("Error", + "Error retrieving DataMiner service info: " + caught.getLocalizedMessage()); + } + } + + @Override + public void onSuccess(ServiceInfo serviceInfo) { + Log.debug("DataMiner Service Info: " + serviceInfo); + + ServiceInfoEvent serviceInfoEvent = new ServiceInfoEvent(serviceInfo); + EventBusProvider.INSTANCE.fireEvent(serviceInfoEvent); + + } + + }); + + } + private void fireDataMinerWorkAreaEventRetrieved(DataMinerWorkAreaRequestEvent event, DataMinerWorkArea result) { dataMinerWorkArea = result; DataMinerWorkAreaEvent dataMinerWorkAreaEvent = new DataMinerWorkAreaEvent(DataMinerWorkAreaEventType.OPEN, diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/computations/ComputationValueFilePanel.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/computations/ComputationValueFilePanel.java index 8f3ccc8..1198c5f 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/computations/ComputationValueFilePanel.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/computations/ComputationValueFilePanel.java @@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.dataminermanagerwidget.client.computations; import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationValueFile; import org.gcube.portlets.widgets.dataminermanagerwidget.client.DataMinerManagerPanel; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.widgets.ShowFileDialog; import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.SelectVariableEvent; import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.SelectVariableEvent.SelectVariableEventHandler; import org.gcube.portlets.widgets.netcdfbasicwidgets.client.widgets.NetCDFPreviewDialog; @@ -11,6 +12,9 @@ import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.sencha.gxt.core.client.dom.XDOM; import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign; import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; import com.sencha.gxt.widget.core.client.container.SimpleContainer; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; @@ -31,8 +35,8 @@ public class ComputationValueFilePanel extends SimpleContainer { init(); create(); } - - private void init(){ + + private void init() { setBorders(false); } @@ -42,19 +46,26 @@ public class ComputationValueFilePanel extends SimpleContainer { final String fileUrl = computationValueFile.getValue(); HtmlLayoutContainer fileNameHtml; if (fileName != null) { - fileNameHtml = new HtmlLayoutContainer( - "

" - + new SafeHtmlBuilder().appendEscaped(fileName) - .toSafeHtml().asString() + "

"); + fileNameHtml = new HtmlLayoutContainer("

" + + new SafeHtmlBuilder().appendEscaped(fileName).toSafeHtml().asString() + "

"); } else { - fileNameHtml = new HtmlLayoutContainer( - "

" - + new SafeHtmlBuilder().appendEscaped("NoName") - .toSafeHtml().asString() + "

"); + fileNameHtml = new HtmlLayoutContainer("

" + + new SafeHtmlBuilder().appendEscaped("NoName").toSafeHtml().asString() + "

"); } lc.add(fileNameHtml, new VerticalLayoutData(-1, -1, new Margins(0))); - TextButton downloadBtn = new TextButton("Download File"); + + TextButton showFileButton = new TextButton("Show"); + showFileButton.setIcon(DataMinerManagerPanel.resources.pageWhite()); + showFileButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + showFileCreate(); + } + }); + + TextButton downloadBtn = new TextButton("Download"); downloadBtn.setIcon(DataMinerManagerPanel.resources.download()); downloadBtn.addSelectHandler(new SelectEvent.SelectHandler() { @Override @@ -63,7 +74,7 @@ public class ComputationValueFilePanel extends SimpleContainer { } }); - + TextButton netcdfButton = new TextButton(""); netcdfButton.setIcon(DataMinerManagerPanel.resources.netcdf()); netcdfButton.addSelectHandler(new SelectEvent.SelectHandler() { @@ -74,21 +85,45 @@ public class ComputationValueFilePanel extends SimpleContainer { } }); + HBoxLayoutContainer buttonsContainer = new HBoxLayoutContainer(); + buttonsContainer.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); + BoxLayoutData buttonBoxLayoutData = new BoxLayoutData(new Margins(2, 2, 2, 2)); - lc.add(downloadBtn, new VerticalLayoutData(-1, -1, new Margins(0))); - if (computationValueFile.isNetcdf()) { - lc.add(netcdfButton, new VerticalLayoutData(-1, -1, new Margins(0))); + if (fileName != null && !fileName.isEmpty()) { + String fileNameLowerCase = fileName.toLowerCase(); + if (fileNameLowerCase.endsWith(".html") || fileNameLowerCase.endsWith(".htm") + || fileNameLowerCase.endsWith(".pdf") || fileNameLowerCase.endsWith(".log") + || fileNameLowerCase.endsWith(".json") || fileNameLowerCase.endsWith(".txt")) { + buttonsContainer.add(showFileButton, buttonBoxLayoutData); + } } + // c.add(previewButton, new VerticalLayoutData(-1, -1, new Margins(0))); + buttonsContainer.add(downloadBtn, buttonBoxLayoutData); + if (computationValueFile.isNetcdf()) { + buttonsContainer.add(netcdfButton, buttonBoxLayoutData); + } + + lc.add(buttonsContainer); add(lc); } - - + + private void showFileCreate() { + if (computationValueFile != null && computationValueFile.getValue() != null + && !computationValueFile.getValue().isEmpty()) { + GWT.log("ShowFileCreate"); + + ShowFileDialog showFileDialog = new ShowFileDialog(computationValueFile.getValue()); + showFileDialog.setZIndex(XDOM.getTopZIndex()); + showFileDialog.show(); + + } + } + private void showNetCDFFile() { - if (computationValueFile != null && computationValueFile.getValue() != null && !computationValueFile.getValue().isEmpty() - && computationValueFile.isNetcdf()) { + if (computationValueFile != null && computationValueFile.getValue() != null + && !computationValueFile.getValue().isEmpty() && computationValueFile.isNetcdf()) { GWT.log("NetcdfBasicWidgetsManager"); - // Example SelectVariableEventHandler handler = new SelectVariableEventHandler() { @Override @@ -105,5 +140,4 @@ public class ComputationValueFilePanel extends SimpleContainer { } } - } diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/events/ServiceInfoEvent.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/events/ServiceInfoEvent.java new file mode 100644 index 0000000..717d45a --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/events/ServiceInfoEvent.java @@ -0,0 +1,62 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.events; + +import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +/** + * Service Info Event + * + * + * @author Giancarlo Panichi + * + * + */ +public class ServiceInfoEvent extends GwtEvent { + + public static Type TYPE = new Type(); + private ServiceInfo serviceInfo; + + public interface ServiceInfoEventHandler extends EventHandler { + void onRequest(ServiceInfoEvent event); + } + + public interface HasServiceInfoEventHandler extends HasHandlers { + public HandlerRegistration addServiceInfoEventHandler(ServiceInfoEventHandler handler); + } + + public ServiceInfoEvent(ServiceInfo serviceInfo) { + this.serviceInfo = serviceInfo; + } + + @Override + protected void dispatch(ServiceInfoEventHandler handler) { + handler.onRequest(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, ServiceInfoEvent event) { + source.fireEvent(event); + } + + public ServiceInfo getServiceInfo() { + return serviceInfo; + } + + @Override + public String toString() { + return "ServiceInfoEvent [serviceInfo=" + serviceInfo + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/events/ServiceInfoRequestEvent.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/events/ServiceInfoRequestEvent.java new file mode 100644 index 0000000..9efe0de --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/events/ServiceInfoRequestEvent.java @@ -0,0 +1,56 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.events; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +/** + * Service Info Request Event + * + * + * @author Giancarlo Panichi + * + * + */ +public class ServiceInfoRequestEvent extends GwtEvent { + + public static Type TYPE = new Type(); + + public interface ServiceInfoRequestEventHandler extends EventHandler { + void onRequest(ServiceInfoRequestEvent event); + } + + public interface HasServiceInfoRequestEventHandler extends HasHandlers { + public HandlerRegistration addServiceInfoRequestEventHandler(ServiceInfoRequestEventHandler handler); + } + + public ServiceInfoRequestEvent() { + + } + + @Override + protected void dispatch(ServiceInfoRequestEventHandler handler) { + handler.onRequest(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, ServiceInfoRequestEvent event) { + source.fireEvent(event); + } + + @Override + public String toString() { + return "ServiceInfoRequestEvent []"; + } + + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/ComputationStatusPanel.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/ComputationStatusPanel.java index 1e89602..61abc10 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/ComputationStatusPanel.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/ComputationStatusPanel.java @@ -3,17 +3,18 @@ */ package org.gcube.portlets.widgets.dataminermanagerwidget.client.experiments; -import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId; -import org.gcube.data.analysis.dataminermanagercl.shared.process.ComputationStatus; -import org.gcube.data.analysis.dataminermanagercl.shared.process.ComputationStatus.Status; import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusProvider; import org.gcube.portlets.widgets.dataminermanagerwidget.client.custom.progress.GreenProgressBar; import org.gcube.portlets.widgets.dataminermanagerwidget.client.custom.progress.OrangeProgressBar; import org.gcube.portlets.widgets.dataminermanagerwidget.client.custom.progress.RedProgressBar; import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.CancelComputationExecutionRequestEvent; import org.gcube.portlets.widgets.dataminermanagerwidget.client.rpc.DataMinerPortletServiceAsync; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.ElementsHighlights; import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.UtilsGXT3; import org.gcube.portlets.widgets.dataminermanagerwidget.shared.Constants; +import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId; +import org.gcube.data.analysis.dataminermanagercl.shared.process.ComputationStatus; +import org.gcube.data.analysis.dataminermanagercl.shared.process.ComputationStatus.Status; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.dom.client.Style.Unit; @@ -49,7 +50,8 @@ public class ComputationStatusPanel extends SimpleContainer { /** * - * @param operatorName operator name + * @param operatorName + * operator name */ public ComputationStatusPanel(String operatorName) { super(); @@ -65,8 +67,7 @@ public class ComputationStatusPanel extends SimpleContainer { private void create() { vert = new VerticalLayoutContainer(); HtmlLayoutContainer title = new HtmlLayoutContainer( - "

Computation of " - + operatorName + "

"); + "

Computation of " + operatorName + "

"); vert.add(title, new VerticalLayoutData(-1, -1, new Margins(0))); add(vert); forceLayout(); @@ -85,9 +86,8 @@ public class ComputationStatusPanel extends SimpleContainer { */ // vert.add(date, new VerticalLayoutData(-1, -1, new Margins(0))); - vert.add(new HtmlLayoutContainer("

Created, the id is " - + computationId.getId() + " [link]

")); + vert.add(new HtmlLayoutContainer( + "

Id: " + computationId.getId() + "

")); TextButton equivalentRequestBtn = new TextButton(); equivalentRequestBtn.setText("Show"); @@ -98,14 +98,26 @@ public class ComputationStatusPanel extends SimpleContainer { showEquivalentRequestDialog(); } - }); - FieldLabel equivalentRequestLabel = new FieldLabel( - equivalentRequestBtn, "Equivalent Get Request"); - equivalentRequestLabel.setLabelWidth(140); - vert.add(equivalentRequestLabel, new VerticalLayoutData(-1, -1, - new Margins(0))); + FieldLabel equivalentRequestLabel = new FieldLabel(equivalentRequestBtn, "WPS Request"); + equivalentRequestLabel.setLabelWidth(180); + vert.add(equivalentRequestLabel, new VerticalLayoutData(-1, -1, new Margins(0))); + + TextButton monitorComputationBtn = new TextButton(); + monitorComputationBtn.setText("Show"); + monitorComputationBtn.addSelectHandler(new SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + showLinkToMonitorComputationDialog(); + + } + }); + + FieldLabel monitorComputationLabel = new FieldLabel(monitorComputationBtn, "Link to monitor the computation"); + monitorComputationLabel.setLabelWidth(180); + vert.add(monitorComputationLabel, new VerticalLayoutData(-1, -1, new Margins(0))); progressBar = new ProgressBar(); progressBar.updateProgress(0, "Starting..."); @@ -123,24 +135,26 @@ public class ComputationStatusPanel extends SimpleContainer { } }); - cancelComputationBtn.getElement().getStyle() - .setMarginBottom(36, Unit.PX); + cancelComputationBtn.getElement().getStyle().setMarginBottom(36, Unit.PX); - vert.add(cancelComputationBtn, new VerticalLayoutData(-1, -1, - new Margins(0))); + vert.add(cancelComputationBtn, new VerticalLayoutData(-1, -1, new Margins(0))); forceLayout(); timer.scheduleRepeating(Constants.TIME_UPDATE_COMPUTATION_STATUS_PANEL); } private void showEquivalentRequestDialog() { - EquivalentRequestDialog equivalentRequestDialog = new EquivalentRequestDialog( - computationId); + EquivalentRequestDialog equivalentRequestDialog = new EquivalentRequestDialog(computationId); equivalentRequestDialog.show(); } - private void cancelComputation() { - CancelComputationExecutionRequestEvent event = new CancelComputationExecutionRequestEvent( + private void showLinkToMonitorComputationDialog() { + LinkToMonitorComputationDialog linkToMonitorComputDialogDialog = new LinkToMonitorComputationDialog( computationId); + linkToMonitorComputDialogDialog.show(); + } + + private void cancelComputation() { + CancelComputationExecutionRequestEvent event = new CancelComputationExecutionRequestEvent(computationId); EventBusProvider.INSTANCE.fireEvent(event); } @@ -149,8 +163,7 @@ public class ComputationStatusPanel extends SimpleContainer { * @param operator * */ - private void computationTerminated(ComputationId computationId, - ComputationStatus computationStatus) { + private void computationTerminated(ComputationId computationId, ComputationStatus computationStatus) { Log.debug("Computation Terminated"); Log.debug("Computation Status:" + computationStatus); if (terminated == false) { @@ -158,17 +171,14 @@ public class ComputationStatusPanel extends SimpleContainer { cancelComputationBtn.setVisible(false); if (computationStatus.isComplete()) { Log.debug("Computation is Complete"); - Info.display("Terminated", - "The computation " + computationId.getId() + " of " - + computationId.getOperatorName() - + " is terminated correctly."); + Info.display("Terminated", "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + " is terminated correctly."); int index = vert.getWidgetIndex(progressBar); vert.remove(index); // TODO progressBar = new GreenProgressBar(); progressBar.updateProgress(1, "Computation Complete"); - vert.insert(progressBar, index, new VerticalLayoutData(1, -1, - new Margins(20))); + vert.insert(progressBar, index, new VerticalLayoutData(1, -1, new Margins(20))); showComputationCompletedOutput(); } else if (computationStatus.isFailed()) { Log.debug("Computation is Failed"); @@ -176,46 +186,37 @@ public class ComputationStatusPanel extends SimpleContainer { if (computationStatus.getError() == null) { errorMessage = new String("Computation Failed!"); } else { - errorMessage = computationStatus.getError() - .getLocalizedMessage(); + errorMessage = computationStatus.getError().getLocalizedMessage(); + ElementsHighlights el = new ElementsHighlights(); + errorMessage = el.createLinkFromText(errorMessage); + } - Info.display("Failed", - "The computation " + computationId.getId() + " of " - + computationId.getOperatorName() - + " is failed."); - UtilsGXT3.alert("Failed", - "The computation " + computationId.getId() + " of " - + computationId.getOperatorName() - + " has failed.
" + errorMessage); + Info.display("Failed", "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + " is failed."); + UtilsGXT3.alert("Failed", "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + " has failed.
" + errorMessage); int index = vert.getWidgetIndex(progressBar); vert.remove(index); // TODO progressBar = new RedProgressBar(); progressBar.updateProgress(1, "Computation Failed"); - progressBar.getElement().getStyle() - .setMarginBottom(36, Unit.PX); - vert.insert(progressBar, index, new VerticalLayoutData(1, -1, - new Margins(20))); + progressBar.getElement().getStyle().setMarginBottom(36, Unit.PX); + vert.insert(progressBar, index, new VerticalLayoutData(1, -1, new Margins(20))); } else if (computationStatus.isCancelled()) { Log.debug("Computation Cancelled"); String errorMessage; errorMessage = new String("Computation Cancelled!"); - Info.display("Info", "The computation " + computationId.getId() - + " of " + computationId.getOperatorName() - + " has been cancelled."); - UtilsGXT3.info("Info", - "The computation " + computationId.getId() + " of " - + computationId.getOperatorName() - + " has been cancelled.
" + errorMessage); + Info.display("Info", "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + " has been cancelled."); + UtilsGXT3.info("Info", "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + " has been cancelled.
" + errorMessage); int index = vert.getWidgetIndex(progressBar); vert.remove(index); // TODO progressBar = new OrangeProgressBar(); progressBar.updateProgress(1, "Computation Cancelled"); - progressBar.getElement().getStyle() - .setMarginBottom(36, Unit.PX); - vert.insert(progressBar, index, new VerticalLayoutData(1, -1, - new Margins(20))); + progressBar.getElement().getStyle().setMarginBottom(36, Unit.PX); + vert.insert(progressBar, index, new VerticalLayoutData(1, -1, new Margins(20))); } } @@ -228,16 +229,11 @@ public class ComputationStatusPanel extends SimpleContainer { */ private void showComputationCompletedOutput() { HtmlLayoutContainer computationEndMessage = new HtmlLayoutContainer( - "

The computation " + computationId.getOperatorName() - + " finished.

"); - vert.add(computationEndMessage, new VerticalLayoutData(-1, -1, - new Margins(0))); - ComputationOutputPanel computationOutputPanel = new ComputationOutputPanel( - computationId); - computationOutputPanel.getElement().getStyle() - .setMarginBottom(36, Unit.PX); - vert.add(computationOutputPanel, new VerticalLayoutData(1, -1, - new Margins(0))); + "

The computation " + computationId.getOperatorName() + " finished.

"); + vert.add(computationEndMessage, new VerticalLayoutData(-1, -1, new Margins(0))); + ComputationOutputPanel computationOutputPanel = new ComputationOutputPanel(computationId); + computationOutputPanel.getElement().getStyle().setMarginBottom(36, Unit.PX); + vert.add(computationOutputPanel, new VerticalLayoutData(1, -1, new Margins(0))); } @@ -245,8 +241,7 @@ public class ComputationStatusPanel extends SimpleContainer { * @param computationStatus */ private void updateStatus(ComputationStatus computationStatus) { - Log.debug("Conputation Status Panel ::Update Status " - + computationStatus); + Log.debug("Conputation Status Panel ::Update Status " + computationStatus); if (computationStatus.getStatus().compareTo(Status.ACCEPTED) == 0) progressBar.updateText("Accepted..."); else { @@ -254,8 +249,7 @@ public class ComputationStatusPanel extends SimpleContainer { if (percentage == 0) { progressBar.updateText("Running, 0% Complete"); } else { - progressBar.updateProgress(percentage / 100, "Running, " - + percentage + "% Complete"); + progressBar.updateProgress(percentage / 100, "Running, " + percentage + "% Complete"); } } forceLayout(); @@ -266,8 +260,8 @@ public class ComputationStatusPanel extends SimpleContainer { @Override public void run() { Log.debug("Timer run ....."); - DataMinerPortletServiceAsync.INSTANCE.getComputationStatus( - computationId, new AsyncCallback() { + DataMinerPortletServiceAsync.INSTANCE.getComputationStatus(computationId, + new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -275,25 +269,19 @@ public class ComputationStatusPanel extends SimpleContainer { vert.remove(index); // TODO progressBar = new RedProgressBar(); - progressBar.updateProgress(1, - "Failed to get the status"); - progressBar.getElement().getStyle() - .setMarginBottom(36, Unit.PX); - vert.insert(progressBar, index, - new VerticalLayoutData(1, -1, new Margins( - 20))); + progressBar.updateProgress(1, "Failed to get the status"); + progressBar.getElement().getStyle().setMarginBottom(36, Unit.PX); + vert.insert(progressBar, index, new VerticalLayoutData(1, -1, new Margins(20))); } @Override - public void onSuccess( - ComputationStatus computationStatus) { - Log.debug("ComputationStatus: "+computationStatus); + public void onSuccess(ComputationStatus computationStatus) { + Log.debug("ComputationStatus: " + computationStatus); if (computationStatus != null) { if (computationStatus.isTerminated()) { ComputationTimer.this.cancel(); - computationTerminated(computationId, - computationStatus); + computationTerminated(computationId, computationStatus); } else updateStatus(computationStatus); } diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/LinkToMonitorComputationDialog.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/LinkToMonitorComputationDialog.java new file mode 100644 index 0000000..c662ab4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/LinkToMonitorComputationDialog.java @@ -0,0 +1,48 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.experiments; + +import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId; + +import com.allen_sauer.gwt.log.client.Log; +import com.sencha.gxt.widget.core.client.Dialog; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.form.TextArea; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class LinkToMonitorComputationDialog extends Dialog { + private ComputationId computationId; + + public LinkToMonitorComputationDialog(ComputationId computationId) { + super(); + Log.debug("LinkToMonitorComputationDialog: " + computationId); + this.computationId = computationId; + init(); + create(); + } + + private void init() { + setModal(true); + setClosable(true); + setHeadingText("Link To Monitor The Computation"); + setBodyBorder(true); + setHideOnButtonClick(true); + setPredefinedButtons(PredefinedButton.CLOSE); + getButtonBar().setPack(BoxLayoutPack.CENTER); + } + + private void create() { + TextArea infoArea = new TextArea(); + infoArea.setHeight(200); + infoArea.setWidth(640); + infoArea.setValue(computationId.getUrlId()); + infoArea.setReadOnly(true); + add(infoArea); + + + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/WorkflowPanel.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/WorkflowPanel.java index 599acd8..1680469 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/WorkflowPanel.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/experiments/WorkflowPanel.java @@ -9,6 +9,7 @@ import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusP import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ComputationReadyEvent; import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ResubmitComputationExecutionEvent; import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.StartComputationExecutionRequestEvent; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.info.ServiceInfoPanel; import com.allen_sauer.gwt.log.client.Log; import com.sencha.gxt.widget.core.client.TabItemConfig; @@ -21,11 +22,13 @@ import com.sencha.gxt.widget.core.client.TabPanel; * */ public class WorkflowPanel extends TabPanel { - - public static final String DEFAULT_OPERATOR = "AQUAMAPS_SUITABLE"; - + private static final String OPERATOR = "Operator"; + private static final String SERVICE_INFO = "Service Profile"; + //private ComputationExecutionPanel computationExecutionPanel; private ComputationPanel computationPanel; + private ServiceInfoPanel serviceInfoPanel; + /** * @@ -44,7 +47,7 @@ public class WorkflowPanel extends TabPanel { private void create() { - TabItemConfig tabWorkFlowLcItemConf = new TabItemConfig("Operator", + TabItemConfig tabWorkFlowLcItemConf = new TabItemConfig(OPERATOR, false); tabWorkFlowLcItemConf.setIcon(DataMinerManagerPanel.resources .folderExplore()); @@ -61,14 +64,13 @@ public class WorkflowPanel extends TabPanel { }); add(computationPanel, tabWorkFlowLcItemConf); - /* - TabItemConfig tabComputationPanelItemConf = new TabItemConfig( - "Computations Execution", false); - tabComputationPanelItemConf.setIcon(DataMinerManagerPanel.resources + + TabItemConfig tabServiceInfoPanelItemConf = new TabItemConfig( + SERVICE_INFO, false); + tabServiceInfoPanelItemConf.setIcon(DataMinerManagerPanel.resources .folderExplore()); - computationExecutionPanel = new ComputationExecutionPanel(); - add(computationExecutionPanel, tabComputationPanelItemConf); - */ + serviceInfoPanel = new ServiceInfoPanel(); + add(serviceInfoPanel, tabServiceInfoPanelItemConf); setActiveWidget(computationPanel); } @@ -105,9 +107,6 @@ public class WorkflowPanel extends TabPanel { StartComputationExecutionRequestEvent event = new StartComputationExecutionRequestEvent( op, 1); EventBusProvider.INSTANCE.fireEvent(event); - /* - setActiveWidget(computationExecutionPanel); - computationExecutionPanel.startNewComputation(op);*/ } diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/info/ServiceInfoDataProperties.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/info/ServiceInfoDataProperties.java new file mode 100644 index 0000000..ec23263 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/info/ServiceInfoDataProperties.java @@ -0,0 +1,24 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.info; + +import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfoData; + +import com.google.gwt.editor.client.Editor.Path; +import com.sencha.gxt.core.client.ValueProvider; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.PropertyAccess; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public interface ServiceInfoDataProperties extends PropertyAccess { + @Path("key") + ModelKeyProvider id(); + + ValueProvider key(); + ValueProvider value(); + ValueProvider category(); +} + diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/info/ServiceInfoPanel.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/info/ServiceInfoPanel.java new file mode 100644 index 0000000..6958e5d --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/info/ServiceInfoPanel.java @@ -0,0 +1,222 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.info; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo; +import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfoData; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusProvider; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ServiceInfoEvent; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ServiceInfoRequestEvent; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; +import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.widget.core.client.FramedPanel; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.form.FieldSet; +import com.sencha.gxt.widget.core.client.grid.ColumnConfig; +import com.sencha.gxt.widget.core.client.grid.ColumnModel; +import com.sencha.gxt.widget.core.client.grid.Grid; +import com.sencha.gxt.widget.core.client.grid.GroupingView; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class ServiceInfoPanel extends FramedPanel { + + private static final String RUNTIME_FEATURE = "Runtime features"; + private static final String SERVICE_INFO_TITLE = "Service Profile"; + private static final ServiceInfoDataProperties props = GWT.create(ServiceInfoDataProperties.class); + private VerticalLayoutContainer v; + private VerticalLayoutContainer environmentVBox; + + public ServiceInfoPanel() { + super(); + Log.debug("ServiceInfoPanel"); + init(); + create(); + bind(); + EventBusProvider.INSTANCE.fireEvent(new ServiceInfoRequestEvent()); + + } + + private void init() { + setItemId("ServiceInfoPanel"); + forceLayoutOnResize = true; + setBodyBorder(false); + setBorders(false); + setBodyStyle("backgroundColor:white;"); + setHeaderVisible(false); + setResize(true); + setHeadingText(SERVICE_INFO_TITLE); + setBodyStyle("backgroundColor:white;"); + + } + + private void create() { + try { + v = new VerticalLayoutContainer(); + v.setScrollMode(ScrollMode.AUTO); + add(v); + createView(); + forceLayout(); + } catch (Throwable e) { + Log.error("Error creating ServiceInfoPanel: " + e.getLocalizedMessage(), e); + } + } + + private void bind() { + + EventBusProvider.INSTANCE.addHandler(ServiceInfoEvent.TYPE, new ServiceInfoEvent.ServiceInfoEventHandler() { + + @Override + public void onRequest(ServiceInfoEvent event) { + Log.debug("Catch ServiceInfoEvent"); + showServiceInfo(event.getServiceInfo()); + + } + + }); + + } + + private void createView() { + + SimpleContainer sectionTitle = new SimpleContainer(); + SimpleContainer sectionSubTitle = new SimpleContainer(); + + // title + HtmlLayoutContainer title = new HtmlLayoutContainer( + "
" + SERVICE_INFO_TITLE + "
"); + sectionTitle.add(title, new MarginData()); + sectionTitle.getElement().getStyle().setMarginRight(20, Unit.PX); + v.add(sectionTitle, new VerticalLayoutData(-1, -1, new Margins(10))); + + // subtitle + HtmlLayoutContainer subtitle = new HtmlLayoutContainer( + "

This page reports information on the DataMiner " + + "service instance serving this working environment giving an up to date " + + "picture of its capacities and capabilities.

"); + sectionSubTitle.add(subtitle, new MarginData()); + sectionSubTitle.getElement().getStyle().setMarginRight(20, Unit.PX); + v.add(sectionSubTitle, new VerticalLayoutData(-1, -1, new Margins(10))); + + } + + private FieldSet environmentView() { + try { + environmentVBox = new VerticalLayoutContainer(); + + FieldSet configurationFieldSet = new FieldSet(); + configurationFieldSet.setHeadingText(RUNTIME_FEATURE); + configurationFieldSet.setCollapsible(true); + configurationFieldSet.add(environmentVBox); + configurationFieldSet.getElement().getStyle().setMarginRight(20, Unit.PX); + return configurationFieldSet; + } catch (Throwable e) { + Log.error("Error in ServiceInfoPanel in environment: " + e.getLocalizedMessage(), e); + throw e; + } + } + + private void showAddress(String address) { + // Service address + SimpleContainer sectionServerAddress = new SimpleContainer(); + + HtmlLayoutContainer addressHtml = new HtmlLayoutContainer( + "

The base url of the service instance is: " + "" + + address + "

"); + sectionServerAddress.add(addressHtml, new MarginData()); + sectionServerAddress.getElement().getStyle().setMarginRight(20, Unit.PX); + v.add(sectionServerAddress, new VerticalLayoutData(-1, -1, new Margins(10))); + + } + + private void showServiceInfo(ServiceInfo serviceInfo) { + + if (serviceInfo != null) { + + String address=serviceInfo.getServiceAddress(); + if(address!=null&&!address.isEmpty()){ + showAddress(address); + } + + FieldSet environmentFieldSet = environmentView(); + v.add(environmentFieldSet, new VerticalLayoutData(-1, -1, new Margins(10))); + + ArrayList properties=serviceInfo.getServiceProperties(); + if (properties!=null&&!properties.isEmpty()) { + Grid grid = createInfoGrid(properties); + environmentVBox.add(grid, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4))); + } else { + HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer( + "

No Info Available.

"); + + environmentVBox.add(emptyInfoContainer, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4))); + } + } else { + FieldSet environmentFieldSet = environmentView(); + v.add(environmentFieldSet, new VerticalLayoutData(-1, -1, new Margins(10))); + + HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer( + "

No Info Available.

"); + + environmentVBox.add(emptyInfoContainer, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4))); + } + + forceLayout(); + + } + + private Grid createInfoGrid(ArrayList properties) { + + ColumnConfig keyCol = new ColumnConfig(props.key(), 100, + "Key"); + ColumnConfig valueCol = new ColumnConfig(props.value(), 100, + "Value"); + ColumnConfig categoryCol = new ColumnConfig(props.category(), + 100,"Category"); + + List> columns = new ArrayList>(); + columns.add(keyCol); + columns.add(valueCol); + columns.add(categoryCol); + + ColumnModel cm = new ColumnModel(columns); + + ListStore store = new ListStore(props.id()); + store.addAll(properties); + + final GroupingView groupingView = new GroupingView(); + groupingView.setShowGroupedColumn(false); + groupingView.groupBy(categoryCol); + groupingView.setForceFit(true); + groupingView.setAutoExpandColumn(valueCol); + groupingView.setEmptyText("No info retrieved"); + + Grid grid = new Grid(store, cm, groupingView); + + grid.setAllowTextSelection(true); + grid.setBorders(false); + grid.setColumnReordering(false); + + // Stage manager, turn on state management + grid.setStateful(true); + grid.setStateId("gridServiceInfoData"); + + return grid; + + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ItemIdFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ItemIdFld.java new file mode 100644 index 0000000..bb2b205 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ItemIdFld.java @@ -0,0 +1,244 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ItemIdParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.DataMinerManagerPanel; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.UtilsGXT3; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.workspace.DownloadWidget; +import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener; +import org.gcube.portlets.widgets.wsexplorer.client.select.WorkspaceExplorerSelectDialog; +import org.gcube.portlets.widgets.wsexplorer.shared.Item; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.core.client.dom.XDOM; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.form.TextField; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class ItemIdFld extends AbstractFld { + + private VerticalLayoutContainer vp; + + // FileSelector fileSelector; + private WorkspaceExplorerSelectDialog wselectDialog; + private TextButton selectButton, selectButton2, cancelButton; + private ItemDescription selectedItem = null; + + private ItemIdParameter itemIdParameter; + + private SimpleContainer fieldContainer; + + private HBoxLayoutContainer horiz; + + private TextButton downloadButton; + + /** + * @param parameter + * parameter + */ + public ItemIdFld(Parameter parameter) { + super(parameter); + itemIdParameter = (ItemIdParameter) parameter; + + SimpleContainer tabContainer = new SimpleContainer(); + vp = new VerticalLayoutContainer(); + init(); + tabContainer.add(vp, new MarginData(new Margins(0))); + + fieldContainer = new SimpleContainer(); + horiz = new HBoxLayoutContainer(); + horiz.setPack(BoxLayoutPack.START); + horiz.setEnableOverflow(false); + + HtmlLayoutContainer descr; + + if (itemIdParameter.getDescription() == null || itemIdParameter.getDescription().isEmpty()) { + descr = new HtmlLayoutContainer("

"); + descr.addStyleName("workflow-fieldDescription"); + } else { + descr = new HtmlLayoutContainer( + "

" + itemIdParameter.getDescription() + "

"); + descr.addStyleName("workflow-fieldDescription"); + + } + + horiz.add(tabContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + showNoSelectionField(); + + } + + private void init() { + + wselectDialog = new WorkspaceExplorerSelectDialog("Select Item", false); + + WorskpaceExplorerSelectNotificationListener handler = new WorskpaceExplorerSelectNotificationListener() { + + @Override + public void onSelectedItem(Item item) { + + if (item == null) { + UtilsGXT3.info("Attention", "Select a valid item!"); + + } else { + retrieveItemInformation(item); + } + + } + + @Override + public void onFailed(Throwable throwable) { + Log.error("Error in create project: " + throwable.getLocalizedMessage()); + UtilsGXT3.alert("Error", throwable.getLocalizedMessage()); + throwable.printStackTrace(); + } + + @Override + public void onAborted() { + + } + + @Override + public void onNotValidSelection() { + UtilsGXT3.info("Attention", "Select a valid item!"); + } + }; + + wselectDialog.addWorkspaceExplorerSelectNotificationListener(handler); + wselectDialog.setZIndex(XDOM.getTopZIndex()); + + selectButton = new TextButton("Select Item"); + selectButton.setIcon(DataMinerManagerPanel.resources.folderExplore()); + selectButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + wselectDialog.show(); + + } + }); + selectButton.setToolTip("Select Item"); + + selectButton2 = new TextButton(""); + selectButton2.setIcon(DataMinerManagerPanel.resources.folderExplore()); + selectButton2.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + wselectDialog.show(); + } + }); + selectButton2.setToolTip("Select Another Item"); + + cancelButton = new TextButton(""); + cancelButton.setIcon(DataMinerManagerPanel.resources.cancel()); + cancelButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + selectedItem = null; + showNoSelectionField(); + } + }); + + downloadButton = new TextButton(""); + downloadButton.setIcon(DataMinerManagerPanel.resources.download()); + downloadButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + downloadFile(); + } + }); + + } + + private void retrieveItemInformation(final Item item) { + Log.debug("Retrieved: " + item); + final ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(), + item.getPath(), item.getType().name()); + selectedItem = itemDescription; + Log.debug("SelectedItem: " + selectedItem); + showFieldWithSelection(); + } + + private void downloadFile() { + if (selectedItem != null) { + DownloadWidget downloadWidget = new DownloadWidget(); + downloadWidget.download(selectedItem.getId()); + } else { + UtilsGXT3.info("Attention", "Select a Item!"); + } + + } + + private void showNoSelectionField() { + vp.clear(); + vp.add(selectButton); + vp.forceLayout(); + fieldContainer.forceLayout(); + } + + private void showFieldWithSelection() { + String fileName = selectedItem.getName(); + + if (fileName == null || fileName.isEmpty()) { + fileName = "NoName"; + } + + TextField tableDescription = new TextField(); + tableDescription.setValue(fileName); + tableDescription.setReadOnly(true); + + HBoxLayoutContainer h = new HBoxLayoutContainer(); + h.add(tableDescription, new BoxLayoutData(new Margins())); + h.add(selectButton2, new BoxLayoutData(new Margins())); + h.add(downloadButton, new BoxLayoutData(new Margins())); + h.add(cancelButton, new BoxLayoutData(new Margins())); + vp.clear(); + vp.add(h); + vp.forceLayout(); + fieldContainer.forceLayout(); + + } + + /** + * + */ + @Override + public boolean isValid() { + return (selectedItem != null); + } + + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public String getValue() { + return (selectedItem == null) ? null : selectedItem.getId(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/OperatorFieldWidget.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/OperatorFieldWidget.java index ad9f23a..835692f 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/OperatorFieldWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/OperatorFieldWidget.java @@ -7,6 +7,7 @@ import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ListParamete import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; + import com.allen_sauer.gwt.log.client.Log; import com.sencha.gxt.widget.core.client.form.FieldLabel; @@ -46,6 +47,9 @@ public class OperatorFieldWidget { case FILE: field = new FileFld(parameter); break; + case ITEMID: + field = new ItemIdFld(parameter); + break; case LIST: field = createListField(parameter); break; diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/resources/Resources.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/resources/Resources.java index 3635a90..b903de8 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/resources/Resources.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/resources/Resources.java @@ -87,6 +87,9 @@ public interface Resources extends ClientBundle { @Source("monitor.png") ImageResource computationPerspective(); + @Source("page-white.png") + ImageResource pageWhite(); + @Source("download.png") ImageResource download(); diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/resources/page-white.png b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/resources/page-white.png new file mode 100644 index 0000000..3075584 Binary files /dev/null and b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/resources/page-white.png differ diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/rpc/DataMinerPortletService.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/rpc/DataMinerPortletService.java index 7348ecd..1a88d95 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/rpc/DataMinerPortletService.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/rpc/DataMinerPortletService.java @@ -10,6 +10,7 @@ import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; import org.gcube.data.analysis.dataminermanagercl.shared.process.ComputationStatus; import org.gcube.data.analysis.dataminermanagercl.shared.process.Operator; import org.gcube.data.analysis.dataminermanagercl.shared.process.OperatorsClassification; +import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.DataMinerWorkArea; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.portlets.widgets.dataminermanagerwidget.shared.exception.ServiceException; @@ -55,4 +56,6 @@ public interface DataMinerPortletService extends RemoteService { public ItemDescription getItemDescription(String itemId) throws ServiceException; + public ServiceInfo getServiceInfo() throws ServiceException; + } diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/rpc/DataMinerPortletServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/rpc/DataMinerPortletServiceAsync.java index d7276ef..1dba646 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/rpc/DataMinerPortletServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/rpc/DataMinerPortletServiceAsync.java @@ -10,6 +10,7 @@ import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; import org.gcube.data.analysis.dataminermanagercl.shared.process.ComputationStatus; import org.gcube.data.analysis.dataminermanagercl.shared.process.Operator; import org.gcube.data.analysis.dataminermanagercl.shared.process.OperatorsClassification; +import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.DataMinerWorkArea; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.portlets.widgets.dataminermanagerwidget.shared.session.UserInfo; @@ -59,5 +60,7 @@ public interface DataMinerPortletServiceAsync { void cancelComputation(ItemDescription itemDescription, AsyncCallback asyncCallback); void getItemDescription(String itemId, AsyncCallback asyncCallback); + + void getServiceInfo(AsyncCallback asyncCallback); } diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/util/ElementsHighlights.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/util/ElementsHighlights.java new file mode 100644 index 0000000..d603319 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/util/ElementsHighlights.java @@ -0,0 +1,271 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.util; + +import com.allen_sauer.gwt.log.client.Log; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class ElementsHighlights { + + public ElementsHighlights() { + + } + + public String createLinkFromText(String text) { + Log.info("Message: " + text); + if (text == null || text.isEmpty()) { + return text; + } + + boolean end = false; + StringBuilder result = new StringBuilder(); + String mes = new String(text); + + while (!end) { + if (mes != null && !mes.isEmpty()) { + if (mes.contains("http") || mes.contains("https")) { + int httpIndex = mes.indexOf("http"); + int httpsIndex = mes.indexOf("https"); + if (httpIndex == -1) { + if (httpsIndex == -1) { + result.append(mes); + end = true; + } else { + String prefix = mes.substring(0, httpsIndex); + result.append(prefix); + + String checkTerminator; + if (httpsIndex > 0) { + checkTerminator = mes.substring(httpsIndex - 1, httpsIndex); + if (checkTerminator.compareTo(" ") != 0 && checkTerminator.compareTo("\"") != 0 + && checkTerminator.compareTo("'") != 0) { + Log.debug("Terminator Found:" + checkTerminator); + checkTerminator = " "; + Log.debug("Terminator Set:" + checkTerminator); + + } else { + Log.debug("Terminator Set:" + checkTerminator); + } + } else { + checkTerminator = " "; + Log.debug("Terminator Set:" + checkTerminator); + } + + + mes = mes.substring(httpsIndex, mes.length()); + + int terminator = mes.indexOf(checkTerminator); + if (terminator == -1) { + if(mes.contains("" + extractedUrl + ""); + result.append(mes.substring(j)); + } else { + result.append("" + mes + ""); + } + end = true; + } else { + String extractedUrl; + if (checkTerminator == " ") { + extractedUrl = mes.substring(0, terminator+1); + } else { + extractedUrl = mes.substring(0, terminator); + } + + + if(extractedUrl.contains("" + extractedUrl + ""); + mes = mes.substring(terminator, mes.length()); + } + } + + } else { + if (httpsIndex == -1) { + String prefix = mes.substring(0, httpIndex); + result.append(prefix); + + String checkTerminator; + if (httpIndex > 0) { + checkTerminator = mes.substring(httpIndex - 1, httpIndex); + if (checkTerminator.compareTo(" ") != 0 && checkTerminator.compareTo("\"") != 0 + && checkTerminator.compareTo("'") != 0) { + Log.debug("Terminator Found:" + checkTerminator); + checkTerminator = " "; + Log.debug("Terminator Set:" + checkTerminator); + + } else { + Log.debug("Terminator Set:" + checkTerminator); + } + } else { + checkTerminator = " "; + Log.debug("Terminator Set:" + checkTerminator); + } + + mes = mes.substring(httpIndex, mes.length()); + int terminator = mes.indexOf(checkTerminator); + Log.debug("TerminatorCheck found: "+terminator); + if (terminator == -1) { + if(mes.contains("" + extractedUrl + ""); + result.append(mes.substring(j)); + } else { + result.append("" + mes + ""); + } + end = true; + } else { + String extractedUrl; + if (checkTerminator == " ") { + extractedUrl = mes.substring(0, terminator+1); + } else { + extractedUrl = mes.substring(0, terminator); + } + + + if(extractedUrl.contains("" + extractedUrl + ""); + mes = mes.substring(terminator, mes.length()); + } + } else { + if (httpsIndex <= httpIndex) { + String prefix = mes.substring(0, httpsIndex); + result.append(prefix); + + String checkTerminator; + if (httpsIndex > 0) { + checkTerminator = mes.substring(httpsIndex - 1, httpsIndex); + if (checkTerminator.compareTo(" ") != 0 && checkTerminator.compareTo("\"") != 0 + && checkTerminator.compareTo("'") != 0) { + Log.debug("Terminator Found:" + checkTerminator); + checkTerminator = " "; + Log.debug("Terminator Set:" + checkTerminator); + + } else { + Log.debug("Terminator Set:" + checkTerminator); + } + } else { + checkTerminator = " "; + Log.debug("Terminator Set:" + checkTerminator); + } + + + mes = mes.substring(httpsIndex, mes.length()); + int terminator = mes.indexOf(checkTerminator); + + if (terminator == -1) { + if(mes.contains("" + extractedUrl + ""); + result.append(mes.substring(j)); + } else { + result.append("" + mes + ""); + } + end = true; + } else { + String extractedUrl; + if (checkTerminator == " ") { + extractedUrl = mes.substring(0, terminator); + } else { + extractedUrl = mes.substring(0, terminator - 1); + } + + + if(extractedUrl.contains("" + extractedUrl + ""); + mes = mes.substring(terminator, mes.length()); + } + } else { + String prefix = mes.substring(0, httpIndex); + result.append(prefix); + + String checkTerminator; + if (httpIndex > 0) { + checkTerminator = mes.substring(httpIndex - 1, httpIndex); + if (checkTerminator.compareTo(" ") != 0 && checkTerminator.compareTo("\"") != 0 + && checkTerminator.compareTo("'") != 0) { + Log.debug("Terminator Found:" + checkTerminator); + checkTerminator = " "; + Log.debug("Terminator Set:" + checkTerminator); + + } else { + Log.debug("Terminator Set:" + checkTerminator); + } + } else { + checkTerminator = " "; + Log.debug("Terminator Set:" + checkTerminator); + } + + + mes = mes.substring(httpIndex, mes.length()); + int terminator = mes.indexOf(checkTerminator); + + if (terminator == -1) { + if(mes.contains("" + extractedUrl + ""); + result.append(mes.substring(j)); + } else { + result.append("" + mes + ""); + } + end = true; + } else { + String extractedUrl; + if (checkTerminator == " ") { + extractedUrl = mes.substring(0, terminator); + } else { + extractedUrl = mes.substring(0, terminator - 1); + } + + if(extractedUrl.contains("" + extractedUrl + ""); + mes = mes.substring(terminator, mes.length()); + + } + } + } + + } + + } else { + result.append(mes); + end = true; + } + } else { + end = true; + } + } + Log.info("New Message: " + result.toString()); + return result.toString(); + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/widgets/FileViewer.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/widgets/FileViewer.java index c7c6971..2c93caa 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/widgets/FileViewer.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/widgets/FileViewer.java @@ -7,11 +7,15 @@ import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.SelectVariable import org.gcube.portlets.widgets.netcdfbasicwidgets.client.event.SelectVariableEvent.SelectVariableEventHandler; import org.gcube.portlets.widgets.netcdfbasicwidgets.client.widgets.NetCDFPreviewDialog; -import com.google.gwt.core.client.GWT; +import com.google.gwt.core.shared.GWT; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.Window; import com.sencha.gxt.core.client.dom.XDOM; import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign; import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; import com.sencha.gxt.widget.core.client.container.SimpleContainer; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; @@ -37,6 +41,7 @@ public class FileViewer extends SimpleContainer { */ public FileViewer(ComputationId computationId, FileResource fileResource) { super(); + GWT.log("FileViewer: [computationId=" + computationId + ", fileResource=" + fileResource + "]"); this.fileResource = fileResource; // this.computationId = computationId; init(); @@ -50,16 +55,33 @@ public class FileViewer extends SimpleContainer { private void create() { VerticalLayoutContainer lc = new VerticalLayoutContainer(); final String fileName = fileResource.getName(); + String fileDescription = fileResource.getDescription(); final String fileUrl = fileResource.getUrl(); + + if(fileDescription==null||fileDescription.isEmpty()){ + fileDescription="Unknow"; + } HtmlLayoutContainer fileNameHtml = new HtmlLayoutContainer("

" - + new SafeHtmlBuilder().appendEscaped(fileName).toSafeHtml().asString() + "

"); + + new SafeHtmlBuilder().appendEscaped(fileDescription).toSafeHtml().asString() + "

"); lc.add(fileNameHtml, new VerticalLayoutData(-1, -1, new Margins(0))); - TextButton downloadBtn = new TextButton("Download File"); - downloadBtn.setIcon(DataMinerManagerPanel.resources.download()); - downloadBtn.addSelectHandler(new SelectEvent.SelectHandler() { + + TextButton showFileButton = new TextButton("Show"); + showFileButton.setIcon(DataMinerManagerPanel.resources.pageWhite()); + showFileButton.addSelectHandler(new SelectEvent.SelectHandler() { + @Override public void onSelect(SelectEvent event) { - com.google.gwt.user.client.Window.open(fileUrl, fileName, ""); + showFileCreate(); + } + }); + + TextButton downloadButton = new TextButton("Download"); + downloadButton.setIcon(DataMinerManagerPanel.resources.download()); + downloadButton.addSelectHandler(new SelectEvent.SelectHandler() { + @Override + public void onSelect(SelectEvent event) { + GWT.log("Download File url: " + fileUrl); + Window.open(fileUrl, fileName, ""); } }); @@ -74,13 +96,41 @@ public class FileViewer extends SimpleContainer { } }); - lc.add(downloadBtn, new VerticalLayoutData(-1, -1, new Margins(0))); - if (fileResource.isNetcdf()) { - lc.add(netcdfButton, new VerticalLayoutData(-1, -1, new Margins(0))); + HBoxLayoutContainer buttonsContainer = new HBoxLayoutContainer(); + buttonsContainer.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); + BoxLayoutData buttonBoxLayoutData = new BoxLayoutData(new Margins(2, 2, 2, 2)); + // HorizontalLayoutData buttonBoxLayoutData = new + // HorizontalLayoutData(-1, -1, new Margins(2)); + + if (fileName != null && !fileName.isEmpty()) { + String fileNameLowerCase = fileName.toLowerCase(); + if (fileNameLowerCase.endsWith(".html") || fileNameLowerCase.endsWith(".htm") + || fileNameLowerCase.endsWith(".pdf")|| fileNameLowerCase.endsWith(".log") || fileNameLowerCase.endsWith(".json") + || fileNameLowerCase.endsWith(".txt")) { + buttonsContainer.add(showFileButton, buttonBoxLayoutData); + } } + buttonsContainer.add(downloadButton, buttonBoxLayoutData); + if (fileResource.isNetcdf()) { + buttonsContainer.add(netcdfButton, buttonBoxLayoutData); + } + + lc.add(buttonsContainer); + add(lc); } + private void showFileCreate() { + if (fileResource != null && fileResource.getUrl() != null && !fileResource.getUrl().isEmpty()) { + GWT.log("ShowFileCreate"); + + ShowFileDialog showFileDialog = new ShowFileDialog(fileResource.getUrl()); + showFileDialog.setZIndex(XDOM.getTopZIndex()); + showFileDialog.show(); + + } + } + private void showNetCDFFile() { if (fileResource != null && fileResource.getUrl() != null && !fileResource.getUrl().isEmpty() && fileResource.isNetcdf()) { diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/widgets/ShowFileDialog.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/widgets/ShowFileDialog.java new file mode 100644 index 0000000..2e3e695 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/widgets/ShowFileDialog.java @@ -0,0 +1,67 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.widgets; + +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.logical.shared.ResizeEvent; +import com.google.gwt.event.logical.shared.ResizeHandler; +import com.google.gwt.user.client.ui.Frame; +import com.sencha.gxt.widget.core.client.Dialog; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; + +/** + * + * Simple file show dialog + * + * @author Giancarlo Panichi + * + * + */ +public class ShowFileDialog extends Dialog { + + private String url; + private Frame frame; + + public ShowFileDialog(String url) { + super(); + this.url = url; + init(); + create(); + } + + private void init() { + setWidth("640px"); + setHeight("480px"); + setResizable(true); + setHeadingText("View"); + setModal(true); + setMaximizable(true); + setPredefinedButtons(PredefinedButton.CLOSE); + setButtonAlign(BoxLayoutPack.CENTER); + } + + private void create() { + VerticalLayoutContainer vc = new VerticalLayoutContainer(); + vc.addResizeHandler(new ResizeHandler() { + + @Override + public void onResize(ResizeEvent event) { + manageResize(event); + } + }); + frame = new Frame(url+"?content-disposition=inline"); + + frame.getElement().setAttribute("style", "margin:auto;"); + frame.getElement().getStyle().setBorderWidth(0, Unit.PX); + frame.getElement().getStyle().setBackgroundColor("white"); + vc.add(frame, new VerticalLayoutData(-1,-1)); + add(vc); + } + + private void manageResize(ResizeEvent event){ + frame.setHeight(String.valueOf(event.getHeight())+"px"); + frame.setWidth(String.valueOf(event.getWidth())+"px"); + forceLayout(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/server/DataMinerManagerServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/server/DataMinerManagerServiceImpl.java index 898907f..32fde91 100644 --- a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/server/DataMinerManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/server/DataMinerManagerServiceImpl.java @@ -17,6 +17,7 @@ import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; import org.gcube.data.analysis.dataminermanagercl.shared.process.ComputationStatus; import org.gcube.data.analysis.dataminermanagercl.shared.process.Operator; import org.gcube.data.analysis.dataminermanagercl.shared.process.OperatorsClassification; +import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.DataMinerWorkArea; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.portlets.widgets.dataminermanagerwidget.server.storage.StorageUtil; @@ -436,4 +437,24 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements } } + @Override + public ServiceInfo getServiceInfo() throws ServiceException { + try { + HttpServletRequest httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); + + SClient smClient = SessionUtil.getSClient(httpRequest, serviceCredentials); + logger.debug("GetServiceInfo()"); + + ServiceInfo serviceInfo = smClient.getServiceInfo(); + return serviceInfo; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage(),e); + throw e; + } catch (Throwable e) { + logger.error("Error retrieving Service Info: " + e.getLocalizedMessage(), e); + throw new ServiceException(e.getLocalizedMessage(), e); + } + } + } diff --git a/src/test/java/org/gcube/portlets/widgets/dataminermanagerwidget/TestDataMinerService.java b/src/test/java/org/gcube/portlets/widgets/dataminermanagerwidget/TestDataMinerService.java index cc9f97f..d9438c0 100644 --- a/src/test/java/org/gcube/portlets/widgets/dataminermanagerwidget/TestDataMinerService.java +++ b/src/test/java/org/gcube/portlets/widgets/dataminermanagerwidget/TestDataMinerService.java @@ -16,8 +16,6 @@ import java.util.ArrayList; import java.util.List; import java.util.zip.GZIPInputStream; -import junit.framework.TestCase; - import org.apache.commons.codec.binary.Base64; import org.gcube.common.authorization.library.provider.UserInfo; import org.gcube.data.analysis.dataminermanagercl.server.is.InformationSystemUtils; @@ -26,6 +24,8 @@ import org.gcube.portlets.widgets.dataminermanagerwidget.shared.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import junit.framework.TestCase; + /** * * @author Giancarlo Panichi @@ -34,8 +34,7 @@ import org.slf4j.LoggerFactory; */ public class TestDataMinerService extends TestCase { - private static Logger logger = LoggerFactory - .getLogger(TestDataMinerService.class); + private static Logger logger = LoggerFactory.getLogger(TestDataMinerService.class); private String wpsToken; private String wpsUser; @@ -43,70 +42,64 @@ public class TestDataMinerService extends TestCase { private String scope; private void retrieveServicesInfo() throws Exception { - - logger.info("Use test user"); - // Remove comment for Test - wpsUser = Constants.DEFAULT_USER; - scope = Constants.DEFAULT_SCOPE; - - ServiceCredentials serviceCredentials=new ServiceCredentials(); - serviceCredentials.setUserName(wpsUser); - serviceCredentials.setScope(scope); - - List userRoles = new ArrayList<>(); - userRoles.add(Constants.DEFAULT_ROLE); - /* - * if (aslSession.getUsername().compareTo("lucio.lelii") == 0) - * userRoles.add("VRE-Manager"); - */ - - try { - wpsToken = authorizationService().generateUserToken( - new UserInfo(serviceCredentials.getUserName(), userRoles), - serviceCredentials.getScope()); - } catch (Exception e) { - logger.error("Error generating the token for test: " - + e.getLocalizedMessage()); - e.printStackTrace(); - throw new Exception("Error generating the token for test: " - + e.getLocalizedMessage()); - } - serviceCredentials.setToken(wpsToken); + logger.info("Use test user"); - List serviceAddress = InformationSystemUtils - .retrieveServiceAddress( - Constants.DATAMINER_SERVICE_CATEGORY, - Constants.DATA_MINER_SERVICE_NAME, serviceCredentials.getScope()); - logger.debug("Service Address retrieved:" + serviceAddress); - if (serviceAddress == null || serviceAddress.size() < 1) { - logger.error("No DataMiner service address available!"); - throw new Exception("No DataMiner service address available!"); - } else { - logger.info("DataMiner service address found: " - + serviceAddress.get(0)); - wpsProcessingServlet = serviceAddress.get(0); + // Remove comment for Test + wpsUser = Constants.DEFAULT_USER; + scope = Constants.DEFAULT_SCOPE; + + ServiceCredentials serviceCredentials = new ServiceCredentials(); + serviceCredentials.setUserName(wpsUser); + serviceCredentials.setScope(scope); + + List userRoles = new ArrayList<>(); + userRoles.add(Constants.DEFAULT_ROLE); + /* + * if (aslSession.getUsername().compareTo("lucio.lelii") == 0) + * userRoles.add("VRE-Manager"); + */ + + try { + wpsToken = authorizationService().generateUserToken( + new UserInfo(serviceCredentials.getUserName(), userRoles), serviceCredentials.getScope()); + } catch (Exception e) { + logger.error("Error generating the token for test: " + e.getLocalizedMessage(), e); + + throw new Exception("Error generating the token for test: " + e.getLocalizedMessage(), e); + } + serviceCredentials.setToken(wpsToken); + + String serviceAddress = InformationSystemUtils.retrieveServiceAddress(Constants.DATAMINER_SERVICE_CATEGORY, + Constants.DATA_MINER_SERVICE_NAME, serviceCredentials.getScope()); + logger.debug("Service Address retrieved:" + serviceAddress); + if (serviceAddress == null || serviceAddress.isEmpty()) { + logger.error("No DataMiner service address available!"); + throw new Exception("No DataMiner service address available!"); + } else { + logger.info("DataMiner service address found: " + serviceAddress); + wpsProcessingServlet = serviceAddress; + + } - } - } public void testExecuteProcess() { - if(Constants.TEST_ENABLE){ + if (Constants.TEST_ENABLE) { executeProcess(); } else { assertTrue(true); - + } } - - private void executeProcess(){ - + + private void executeProcess() { + try { - + retrieveServicesInfo(); - - String urlString=wpsProcessingServlet; + + String urlString = wpsProcessingServlet; logger.debug("RetrieveDataViaPost(): " + urlString); String authString = wpsUser + ":" + wpsToken; @@ -123,9 +116,9 @@ public class TestDataMinerService extends TestCase { conn.setRequestProperty("Content-Type", "text/xml"); conn.setDoOutput(true); OutputStream output = conn.getOutputStream(); - Path currentPath=Paths.get("."); - logger.info("CurrentPath:"+currentPath.toAbsolutePath().toString()); - + Path currentPath = Paths.get("."); + logger.info("CurrentPath:" + currentPath.toAbsolutePath().toString()); + Files.copy(Paths.get("TestDataMinerServiceDBSCAN.xml"), output); InputStream input = null; @@ -136,24 +129,23 @@ public class TestDataMinerService extends TestCase { input = conn.getInputStream(); } - BufferedReader r = new BufferedReader(new InputStreamReader(input, - StandardCharsets.UTF_8)); + BufferedReader r = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)); logger.info("Response:"); String str = null; while ((str = r.readLine()) != null) { logger.info(str); } - + logger.info("End Response!"); assertTrue(true); - + } catch (Exception e) { logger.debug(e.getLocalizedMessage()); e.printStackTrace(); fail(e.getLocalizedMessage()); - + } }