From 6b3f4ebff16a5fac03d0b5d9bf4ff1363fa25f31 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Mon, 9 May 2016 16:57:18 +0000 Subject: [PATCH] 2521: Explore the possibility to port the StatMan interface onto Dataminer https://support.d4science.org/issues/2521 Added shows results for computations that are successful git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/data-miner-manager@128532 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/DataMinerManagerController.java | 219 +++++++++++++--- .../events/DataMinerWorkAreaRequestEvent.java | 70 +++++ .../client/events/OutputResourceEvent.java | 63 +++++ .../events/OutputResourceRequestEvent.java | 65 +++++ .../client/events/OutputShowEvent.java | 64 +++++ .../client/events/OutputShowRequestEvent.java | 65 +++++ .../ResubmitComputationExecutionEvent.java | 18 +- .../ComputationExecutionPanel.java | 49 +++- .../experiments/ComputationOutputPanel.java | 52 ++-- .../experiments/ComputationStatusPanel.java | 241 ++++++++++-------- .../client/monitor/StatusMonitor.java | 63 +++++ .../client/rpc/DataMinerPortletService.java | 3 +- .../rpc/DataMinerPortletServiceAsync.java | 3 + .../DataMinerWorkAreaRequestEventType.java | 11 + .../type/OutputResourceRequestEventType.java | 11 + .../server/DataMinerManagerServiceImpl.java | 76 ++++-- .../server/smservice/SClient.java | 3 + .../server/smservice/SClient4WPS.java | 61 +++-- .../smservice/wps/StatWPSClientSession.java | 18 +- .../shared/data/ComputationId.java | 26 +- 20 files changed, 957 insertions(+), 224 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/events/DataMinerWorkAreaRequestEvent.java create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputResourceEvent.java create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputResourceRequestEvent.java create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputShowEvent.java create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputShowRequestEvent.java create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/monitor/StatusMonitor.java create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/type/DataMinerWorkAreaRequestEventType.java create mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/type/OutputResourceRequestEventType.java diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManagerController.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManagerController.java index ff0adc8..69aa4b1 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManagerController.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManagerController.java @@ -2,22 +2,28 @@ package org.gcube.portlets.user.dataminermanager.client; import java.util.List; -import org.gcube.portlets.user.dataminermanager.client.bean.ComputationItem; import org.gcube.portlets.user.dataminermanager.client.bean.OperatorsClassification; +import org.gcube.portlets.user.dataminermanager.client.bean.output.Resource; import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; import org.gcube.portlets.user.dataminermanager.client.events.CancelComputationExecutionRequestEvent; import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaEvent; +import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaRequestEvent; import org.gcube.portlets.user.dataminermanager.client.events.DeleteItemRequestEvent; import org.gcube.portlets.user.dataminermanager.client.events.MenuEvent; import org.gcube.portlets.user.dataminermanager.client.events.MenuSwitchEvent; import org.gcube.portlets.user.dataminermanager.client.events.OperatorsClassificationEvent; import org.gcube.portlets.user.dataminermanager.client.events.OperatorsClassificationRequestEvent; +import org.gcube.portlets.user.dataminermanager.client.events.OutputResourceEvent; +import org.gcube.portlets.user.dataminermanager.client.events.OutputResourceRequestEvent; +import org.gcube.portlets.user.dataminermanager.client.events.OutputShowEvent; +import org.gcube.portlets.user.dataminermanager.client.events.OutputShowRequestEvent; import org.gcube.portlets.user.dataminermanager.client.events.RefreshDataMinerWorkAreaEvent; import org.gcube.portlets.user.dataminermanager.client.events.ResubmitComputationExecutionEvent; import org.gcube.portlets.user.dataminermanager.client.events.ResubmitComputationExecutionRequestEvent; import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; import org.gcube.portlets.user.dataminermanager.client.events.StartComputationExecutionEvent; import org.gcube.portlets.user.dataminermanager.client.events.StartComputationExecutionRequestEvent; +import org.gcube.portlets.user.dataminermanager.client.monitor.StatusMonitor; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaElementType; import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaEventType; @@ -44,6 +50,7 @@ public class DataMinerManagerController { private DataMinerWorkArea dataMinerWorkArea; private List operatorsClassifications; private MenuType currentVisualization; + private StatusMonitor monitor; public DataMinerManagerController() { init(); @@ -73,18 +80,15 @@ public class DataMinerManagerController { } /* - private void sessionExpiredShowDelayed() { - Timer timeoutTimer = new Timer() { - public void run() { - sessionExpiredShow(); - - } - }; - int TIMEOUT = 3; // 3 second timeout - - timeoutTimer.schedule(TIMEOUT * 1000); // timeout is in milliseconds - - }*/ + * private void sessionExpiredShowDelayed() { Timer timeoutTimer = new + * Timer() { public void run() { sessionExpiredShow(); + * + * } }; int TIMEOUT = 3; // 3 second timeout + * + * timeoutTimer.schedule(TIMEOUT * 1000); // timeout is in milliseconds + * + * } + */ private void bind() { @@ -156,6 +160,39 @@ public class DataMinerManagerController { }); + EventBusProvider.INSTANCE + .addHandler( + OutputResourceRequestEvent.TYPE, + new OutputResourceRequestEvent.OutputResourceRequestEventHandler() { + + @Override + public void onOutputRequest( + OutputResourceRequestEvent event) { + Log.debug("Catch OutputResourceRequestEvent: " + + event); + manageOutputResourceRequestEvent(event); + + } + + }); + + EventBusProvider.INSTANCE + .addHandler( + OutputShowRequestEvent.TYPE, + new OutputShowRequestEvent.OutputShowRequestEventHandler() { + + + @Override + public void onOutputShowRequest(OutputShowRequestEvent event) { + Log.debug("Catch OutputShowRequestEvent: " + + event); + manageOutputShowRequestEvent(event); + + + } + + }); + EventBusProvider.INSTANCE .addHandler( OperatorsClassificationRequestEvent.TYPE, @@ -184,9 +221,26 @@ public class DataMinerManagerController { }); + EventBusProvider.INSTANCE + .addHandler( + DataMinerWorkAreaRequestEvent.TYPE, + new DataMinerWorkAreaRequestEvent.DataMinerWorkAreaRequestEventHandler() { + + @Override + public void onRequest( + DataMinerWorkAreaRequestEvent event) { + Log.debug("Catch DataMinerWorkAreaRequestEvent: " + + event); + retrieveDataMinerWorkArea(); + + } + + }); + } private void callHello() { + DataMinerPortletServiceAsync.INSTANCE .hello(new AsyncCallback() { @@ -233,36 +287,39 @@ public class DataMinerManagerController { private void startComputationRequest( final StartComputationExecutionRequestEvent event) { - + monitor = new StatusMonitor(); DataMinerPortletServiceAsync.INSTANCE.startComputation(event.getOp(), new AsyncCallback() { - @Override - public void onSuccess(ComputationId computationId) { - if (computationId == null) - UtilsGXT3.alert("Error", - "Failed to start computation " - + event.getOp().getName() - + ", the computation id is null!"); - else { - startComputation(computationId, - event.getComputationStatusPanelIndex()); - } - } @Override public void onFailure(Throwable caught) { + monitor.hide(); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session!"); EventBusProvider.INSTANCE .fireEvent(new SessionExpiredEvent()); } else { UtilsGXT3.alert("Error", - "Failed to start computation " + "Failed start computation " + event.getOp().getName() + "! " + caught.getLocalizedMessage()); caught.printStackTrace(); } } + + @Override + public void onSuccess(ComputationId computationId) { + monitor.hide(); + if (computationId == null) + UtilsGXT3.alert("Error", + "Failed start computation " + + event.getOp().getName() + + ", the computation id is null!"); + else { + startComputation(computationId, + event.getComputationStatusPanelIndex()); + } + } }); } @@ -277,12 +334,13 @@ public class DataMinerManagerController { private void cancelComputationRequest( CancelComputationExecutionRequestEvent event) { final ComputationId computationId = event.getComputationId(); - + monitor = new StatusMonitor(); DataMinerPortletServiceAsync.INSTANCE.cancelComputation(computationId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { + monitor.hide(); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session!"); EventBusProvider.INSTANCE @@ -298,6 +356,7 @@ public class DataMinerManagerController { @Override public void onSuccess(String result) { + monitor.hide(); Log.debug("Computation Deleted!"); } @@ -306,11 +365,13 @@ public class DataMinerManagerController { private void resubmitComputationRequest( final ResubmitComputationExecutionRequestEvent event) { + monitor = new StatusMonitor(); DataMinerPortletServiceAsync.INSTANCE.resubmit( event.getItemDescription(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { + monitor.hide(); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session!"); EventBusProvider.INSTANCE @@ -325,6 +386,7 @@ public class DataMinerManagerController { @Override public void onSuccess(ComputationId result) { + monitor.hide(); if (result == null) UtilsGXT3 .alert("Error", @@ -338,10 +400,8 @@ public class DataMinerManagerController { } private void resubmitComputation(ComputationId computationId) { - ComputationItem computationItem = new ComputationItem(computationId, - null); ResubmitComputationExecutionEvent event = new ResubmitComputationExecutionEvent( - computationItem); + computationId); EventBusProvider.INSTANCE.fireEvent(event); } @@ -436,11 +496,13 @@ public class DataMinerManagerController { } private void retrieveDataMinerWorkArea() { + monitor = new StatusMonitor(); DataMinerPortletServiceAsync.INSTANCE .getDataMinerWorkArea(new AsyncCallback() { @Override public void onFailure(Throwable caught) { + monitor.hide(); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session"); EventBusProvider.INSTANCE @@ -454,6 +516,7 @@ public class DataMinerManagerController { @Override public void onSuccess(DataMinerWorkArea result) { + monitor.hide(); Log.debug("DataMinerWorkArea: " + result); fireDataMinerWorkAreaEventRetrieved(result); @@ -471,11 +534,13 @@ public class DataMinerManagerController { } private void deleteItemRequest(final DeleteItemRequestEvent event) { + monitor = new StatusMonitor(); DataMinerPortletServiceAsync.INSTANCE.deleteItem( event.getItemDescription(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { + monitor.hide(); if (caught instanceof ExpiredSessionServiceException) { UtilsGXT3.alert("Error", "Expired Session"); EventBusProvider.INSTANCE @@ -489,6 +554,7 @@ public class DataMinerManagerController { @Override public void onSuccess(Void result) { + monitor.hide(); Log.debug("Deleted Item!"); fireRefreshDataMinerWorkAreaEvent(event .getDataMinerWorkAreaElementType()); @@ -507,4 +573,93 @@ public class DataMinerManagerController { } -} + private void manageOutputResourceRequestEvent( + OutputResourceRequestEvent event) { + if (event == null) { + UtilsGXT3.alert("Error", "Invalid output request!"); + } else { + if (event.getComputationId() == null + || event.getComputationId().getId() == null + || event.getComputationId().getId().isEmpty()) { + UtilsGXT3.alert( + "Error", + "Invalid output request, computation id: " + + event.getComputationId()); + } else { + monitor = new StatusMonitor(); + DataMinerPortletServiceAsync.INSTANCE + .getResourceByComputationId(event.getComputationId(), + new AsyncCallback() { + @Override + public void onSuccess(Resource resource) { + monitor.hide(); + fireOutputResourceEvent(resource); + } + + @Override + public void onFailure(Throwable caught) { + monitor.hide(); + Log.error("Error in getResourceByComputationId: " + + caught.getLocalizedMessage()); + UtilsGXT3 + .alert("Error", + "Impossible to retrieve output info. " + + caught.getLocalizedMessage()); + + } + }); + } + } + } + + private void fireOutputResourceEvent(Resource resource) { + OutputResourceEvent event = new OutputResourceEvent(resource); + EventBusProvider.INSTANCE.fireEvent(event); + + } + + private void manageOutputShowRequestEvent(OutputShowRequestEvent event) { + if (event == null) { + UtilsGXT3.alert("Error", "Invalid show output request!"); + } else { + if (event.getItemDescription() == null + || event.getItemDescription().getId() == null + || event.getItemDescription().getId().isEmpty()) { + UtilsGXT3.alert( + "Error", + "Invalid show output request, item description: " + + event.getItemDescription()); + } else { + monitor = new StatusMonitor(); + DataMinerPortletServiceAsync.INSTANCE + .getResourceByComputationItem( + event.getItemDescription(), + new AsyncCallback() { + @Override + public void onSuccess(Resource resource) { + monitor.hide(); + fireOutputShowEvent(resource); + } + + @Override + public void onFailure(Throwable caught) { + monitor.hide(); + Log.error("Error in getResourceByComputationItem: " + + caught.getLocalizedMessage()); + UtilsGXT3 + .alert("Error", + "Impossible to retrieve output info. " + + caught.getLocalizedMessage()); + + } + }); + } + } + } + + protected void fireOutputShowEvent(Resource resource) { + OutputShowEvent event = new OutputShowEvent(resource); + EventBusProvider.INSTANCE.fireEvent(event); + + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/DataMinerWorkAreaRequestEvent.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/DataMinerWorkAreaRequestEvent.java new file mode 100644 index 0000000..862c041 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/DataMinerWorkAreaRequestEvent.java @@ -0,0 +1,70 @@ +package org.gcube.portlets.user.dataminermanager.client.events; + +import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaRequestEventType; + +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; + +/** + * Data Miner Work Area Request Event + * + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class DataMinerWorkAreaRequestEvent + extends + GwtEvent { + + public static Type TYPE = new Type(); + private DataMinerWorkAreaRequestEventType dataMinerWorkAreaRequestEventType; + + public interface DataMinerWorkAreaRequestEventHandler extends EventHandler { + void onRequest(DataMinerWorkAreaRequestEvent event); + } + + public interface HasDataMinerWorkAreaRequestEventHandler extends + HasHandlers { + public HandlerRegistration addDataMinerWorkAreaRequestEventHandler( + DataMinerWorkAreaRequestEventHandler handler); + } + + public DataMinerWorkAreaRequestEvent( + DataMinerWorkAreaRequestEventType dataMinerWorkAreaRequestEventType) { + this.dataMinerWorkAreaRequestEventType = dataMinerWorkAreaRequestEventType; + + } + + @Override + protected void dispatch(DataMinerWorkAreaRequestEventHandler handler) { + handler.onRequest(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, + DataMinerWorkAreaRequestEvent event) { + source.fireEvent(event); + } + + public DataMinerWorkAreaRequestEventType getDataMinerWorkAreaRequestEventType() { + return dataMinerWorkAreaRequestEventType; + } + + @Override + public String toString() { + return "DataMinerWorkAreaRequestEvent [dataMinerWorkAreaRequestEventType=" + + dataMinerWorkAreaRequestEventType + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputResourceEvent.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputResourceEvent.java new file mode 100644 index 0000000..a7bbd97 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputResourceEvent.java @@ -0,0 +1,63 @@ +package org.gcube.portlets.user.dataminermanager.client.events; + +import org.gcube.portlets.user.dataminermanager.client.bean.output.Resource; + +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; + +/** + * Output Resource Event + * + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class OutputResourceEvent extends + GwtEvent { + public static Type TYPE = new Type(); + private Resource resource; + + public interface OutputResourceEventHandler extends EventHandler { + void onOutput(OutputResourceEvent event); + } + + public interface HasOutputResourceEventHandler extends HasHandlers { + public HandlerRegistration addOutputResourceEventHandler( + OutputResourceEventHandler handler); + } + + public OutputResourceEvent(Resource resource) { + this.resource = resource; + } + + @Override + protected void dispatch(OutputResourceEventHandler handler) { + handler.onOutput(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, OutputResourceEvent event) { + source.fireEvent(event); + } + + public Resource getResource() { + return resource; + } + + @Override + public String toString() { + return "OutputResourceEvent [resource=" + resource + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputResourceRequestEvent.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputResourceRequestEvent.java new file mode 100644 index 0000000..d10376b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputResourceRequestEvent.java @@ -0,0 +1,65 @@ +package org.gcube.portlets.user.dataminermanager.client.events; + +import org.gcube.portlets.user.dataminermanager.shared.data.ComputationId; + +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; + +/** + * Output Resource Request Event + * + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class OutputResourceRequestEvent extends + GwtEvent { + + public static Type TYPE = new Type(); + private ComputationId computationId; + + public interface OutputResourceRequestEventHandler extends EventHandler { + void onOutputRequest(OutputResourceRequestEvent event); + } + + public interface HasOutputResourceRequestEventHandler extends HasHandlers { + public HandlerRegistration addOutputResourceRequestEventHandler( + OutputResourceRequestEventHandler handler); + } + + public OutputResourceRequestEvent(ComputationId computationId) { + this.computationId = computationId; + } + + @Override + protected void dispatch(OutputResourceRequestEventHandler handler) { + handler.onOutputRequest(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, OutputResourceRequestEvent event) { + source.fireEvent(event); + } + + public ComputationId getComputationId() { + return computationId; + } + + @Override + public String toString() { + return "OutputResourceRequestEvent [computationId=" + computationId + + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputShowEvent.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputShowEvent.java new file mode 100644 index 0000000..258baee --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputShowEvent.java @@ -0,0 +1,64 @@ +package org.gcube.portlets.user.dataminermanager.client.events; + +import org.gcube.portlets.user.dataminermanager.client.bean.output.Resource; + +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; + +/** + * Output Show Event + * + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class OutputShowEvent extends + GwtEvent { + + public static Type TYPE = new Type(); + private Resource resource; + + public interface OutputShowEventHandler extends EventHandler { + void onOutputShow(OutputShowEvent event); + } + + public interface HasOutputShowResourceEventHandler extends HasHandlers { + public HandlerRegistration addOutputShowResourceEventHandler( + OutputShowEventHandler handler); + } + + public OutputShowEvent(Resource resource) { + this.resource = resource; + } + + @Override + protected void dispatch(OutputShowEventHandler handler) { + handler.onOutputShow(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, OutputShowEvent event) { + source.fireEvent(event); + } + + public Resource getResource() { + return resource; + } + + @Override + public String toString() { + return "OutputShowEvent [resource=" + resource + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputShowRequestEvent.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputShowRequestEvent.java new file mode 100644 index 0000000..8add2d3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/OutputShowRequestEvent.java @@ -0,0 +1,65 @@ +package org.gcube.portlets.user.dataminermanager.client.events; + +import org.gcube.portlets.user.dataminermanager.shared.workspace.ItemDescription; + +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; + +/** + * Output Show Request Event + * + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class OutputShowRequestEvent extends + GwtEvent { + + public static Type TYPE = new Type(); + private ItemDescription itemDescription; + + public interface OutputShowRequestEventHandler extends EventHandler { + void onOutputShowRequest(OutputShowRequestEvent event); + } + + public interface HasOutputShowResourceRequestEventHandler extends HasHandlers { + public HandlerRegistration addOutputShowResourceRequestEventHandler( + OutputShowRequestEventHandler handler); + } + + public OutputShowRequestEvent(ItemDescription itemDescription) { + this.itemDescription = itemDescription; + } + + @Override + protected void dispatch(OutputShowRequestEventHandler handler) { + handler.onOutputShowRequest(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, OutputShowRequestEvent event) { + source.fireEvent(event); + } + + public ItemDescription getItemDescription() { + return itemDescription; + } + + @Override + public String toString() { + return "OutputShowRequestEvent [itemDescription=" + itemDescription + + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/ResubmitComputationExecutionEvent.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/ResubmitComputationExecutionEvent.java index 6d734fd..3890d00 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/ResubmitComputationExecutionEvent.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/events/ResubmitComputationExecutionEvent.java @@ -1,6 +1,6 @@ package org.gcube.portlets.user.dataminermanager.client.events; -import org.gcube.portlets.user.dataminermanager.client.bean.ComputationItem; +import org.gcube.portlets.user.dataminermanager.shared.data.ComputationId; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.GwtEvent; @@ -20,7 +20,7 @@ public class ResubmitComputationExecutionEvent GwtEvent { public static Type TYPE = new Type(); - private ComputationItem computationItem; + private ComputationId computationId; public interface ResubmitComputationExecutionEventHandler extends EventHandler { @@ -33,8 +33,8 @@ public class ResubmitComputationExecutionEvent ResubmitComputationExecutionEventHandler handler); } - public ResubmitComputationExecutionEvent(ComputationItem computationItem) { - this.computationItem = computationItem; + public ResubmitComputationExecutionEvent(ComputationId computationId) { + this.computationId = computationId; } @Override @@ -56,14 +56,16 @@ public class ResubmitComputationExecutionEvent source.fireEvent(event); } - public ComputationItem getComputationItem() { - return computationItem; + public ComputationId getComputationId() { + return computationId; } @Override public String toString() { - return "ResubmitComputationExecutionEvent [computationItem=" - + computationItem + "]"; + return "ResubmitComputationExecutionEvent [computationId=" + + computationId + "]"; } + + } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationExecutionPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationExecutionPanel.java index d20ae1c..d11d315 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationExecutionPanel.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationExecutionPanel.java @@ -6,6 +6,8 @@ import java.util.List; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; import org.gcube.portlets.user.dataminermanager.client.bean.Operator; import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; +import org.gcube.portlets.user.dataminermanager.client.events.OutputResourceEvent; +import org.gcube.portlets.user.dataminermanager.client.events.OutputShowEvent; import org.gcube.portlets.user.dataminermanager.client.events.ResubmitComputationExecutionEvent; import org.gcube.portlets.user.dataminermanager.client.events.StartComputationExecutionEvent; import org.gcube.portlets.user.dataminermanager.client.events.StartComputationExecutionRequestEvent; @@ -96,12 +98,30 @@ public class ComputationExecutionPanel extends FramedPanel { } }); + + EventBusProvider.INSTANCE + .addHandler( + OutputShowEvent.getType(), + new OutputShowEvent.OutputShowEventHandler() { + + @Override + public void onOutputShow(OutputShowEvent event) { + showOutput(event); + + } + + }); + + + } + + public void startNewComputation(final Operator operator) { Log.debug("Computation Panel: start new computation "); ComputationStatusPanel statusPanel = new ComputationStatusPanel( - operator); + operator.getName()); computationStatusPanels.add(statusPanel); int index = computationStatusPanels.indexOf(statusPanel); statusPanel.setItemId("ComputationStatusPanel" + String.valueOf(index)); @@ -141,9 +161,9 @@ public class ComputationExecutionPanel extends FramedPanel { } } - public void resubmitComputation(ResubmitComputationExecutionEvent event) { + private void resubmitComputation(ResubmitComputationExecutionEvent event) { final ComputationStatusPanel statusPanel = new ComputationStatusPanel( - event.getComputationItem().getOperator()); + event.getComputationId().getOperatorName()); computationStatusPanels.add(statusPanel); if (v.getWidgetCount() == 0) { v.add(statusPanel, new VerticalLayoutData(1, -1, new Margins(20))); @@ -153,13 +173,32 @@ public class ComputationExecutionPanel extends FramedPanel { } removeAllButton.setEnabled(true); - statusPanel.computationStarted(event.getComputationItem() - .getComputationId()); + statusPanel.computationStarted(event.getComputationId()); forceLayout(); } + + private void showOutput(OutputShowEvent event) { + /* + final ComputationStatusPanel statusPanel = new ComputationStatusPanel( + event.getComputationId().getOperatorName()); + computationStatusPanels.add(statusPanel); + if (v.getWidgetCount() == 0) { + v.add(statusPanel, new VerticalLayoutData(1, -1, new Margins(20))); + } else { + v.insert(statusPanel, 0, new VerticalLayoutData(1, -1, new Margins( + 20))); + } + removeAllButton.setEnabled(true); + + statusPanel.computationStarted(event.getComputationId()); + + forceLayout(); + */ + } + /** * */ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationOutputPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationOutputPanel.java index 6b16aa2..9184a09 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationOutputPanel.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationOutputPanel.java @@ -14,8 +14,9 @@ import org.gcube.portlets.user.dataminermanager.client.bean.output.ObjectResourc import org.gcube.portlets.user.dataminermanager.client.bean.output.Resource; import org.gcube.portlets.user.dataminermanager.client.bean.output.Resource.ResourceType; import org.gcube.portlets.user.dataminermanager.client.bean.output.TableResource; -import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; -import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; +import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; +import org.gcube.portlets.user.dataminermanager.client.events.OutputResourceEvent; +import org.gcube.portlets.user.dataminermanager.client.events.OutputResourceRequestEvent; import org.gcube.portlets.user.dataminermanager.client.widgets.ImagesViewer; import org.gcube.portlets.user.dataminermanager.client.widgets.ResourceViewer; import org.gcube.portlets.user.dataminermanager.shared.data.ComputationId; @@ -24,7 +25,6 @@ import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.user.client.rpc.AsyncCallback; import com.sencha.gxt.core.client.XTemplates; import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.widget.core.client.button.TextButton; @@ -49,40 +49,44 @@ public class ComputationOutputPanel extends SimpleContainer { super(); this.computationId = computationId; Log.debug("ComputationOutputPanel"); + bind(); init(); + } private void init() { v = new VerticalLayoutContainer(); add(v); - - // request resource by ComputationId - DataMinerPortletServiceAsync.INSTANCE.getResourceByComputationId(computationId, - new AsyncCallback() { - @Override - public void onSuccess(Resource result) { - showOutputInfo(result); - } - - @Override - public void onFailure(Throwable caught) { - Log.error("Error in getResourceByComputationId: " - + caught.getLocalizedMessage()); - UtilsGXT3.alert( - "Error", - "Impossible to retrieve output info. " - + caught.getLocalizedMessage()); - - } - }); + OutputResourceRequestEvent event=new OutputResourceRequestEvent(computationId); + EventBusProvider.INSTANCE.fireEvent(event); } + + private void bind(){ + EventBusProvider.INSTANCE.addHandler( + OutputResourceEvent.TYPE, + new OutputResourceEvent.OutputResourceEventHandler() { + @Override + public void onOutput( + OutputResourceEvent event) { + Log.debug("Catch OutputResourceEvent: " + + event); + showOutputInfo(event); + + } + }); + + } + + + /** * * @param resource */ - private void showOutputInfo(Resource resource) { + private void showOutputInfo(OutputResourceEvent event) { try { + Resource resource=event.getResource(); Log.info("Show Output Info on: " + resource); if (resource == null) return; diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java index df9816d..f004a3d 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/ComputationStatusPanel.java @@ -7,12 +7,13 @@ import java.util.Date; import org.gcube.portlets.user.dataminermanager.client.bean.ComputationStatus; import org.gcube.portlets.user.dataminermanager.client.bean.ComputationStatus.Status; -import org.gcube.portlets.user.dataminermanager.client.bean.Operator; import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; import org.gcube.portlets.user.dataminermanager.client.custom.progress.GreenProgressBar; import org.gcube.portlets.user.dataminermanager.client.custom.progress.RedProgressBar; import org.gcube.portlets.user.dataminermanager.client.events.CancelComputationExecutionRequestEvent; +import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaRequestEvent; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; +import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaRequestEventType; import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; import org.gcube.portlets.user.dataminermanager.shared.Constants; import org.gcube.portlets.user.dataminermanager.shared.data.ComputationId; @@ -35,193 +36,231 @@ import com.sencha.gxt.widget.core.client.info.Info; /** * - * @author Giancarlo Panichi - * email: g.panichi@isti.cnr.it + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it * */ public class ComputationStatusPanel extends SimpleContainer { - + private ProgressBar progressBar; private ComputationId computationId; - private Operator operator; - private boolean terminated=false; - private ComputationTimer timer = new ComputationTimer(); + private String operatorName; + private boolean terminated = false; + private ComputationTimer timer = new ComputationTimer(); private TextButton cancelComputationBtn; private VerticalLayoutContainer vert; - + /** * */ - public ComputationStatusPanel(Operator operator) { + public ComputationStatusPanel(String operatorName) { super(); - this.operator=operator; + this.operatorName = operatorName; init(); create(); } - private void init(){ + private void init() { setStylePrimaryName("computationStatusPanel"); - - + } - - private void create(){ - vert=new VerticalLayoutContainer(); - HtmlLayoutContainer title = new HtmlLayoutContainer("

Computation of " + operator.getName() + "

"); - HtmlLayoutContainer date = new HtmlLayoutContainer("

" + new Date().toString() + "

"); - + + private void create() { + vert = new VerticalLayoutContainer(); + HtmlLayoutContainer title = new HtmlLayoutContainer( + "

Computation of " + + operatorName + "

"); + HtmlLayoutContainer date = new HtmlLayoutContainer( + "

" + + new Date().toString() + "

"); + vert.add(title, new VerticalLayoutData(-1, -1, new Margins(0))); - vert.add(date,new VerticalLayoutData(-1, -1, new Margins(0))); - + vert.add(date, new VerticalLayoutData(-1, -1, new Margins(0))); + add(vert); forceLayout(); } - + /** - * @param computationId the computationId to set + * @param computationId + * the computationId to set */ public void computationStarted(ComputationId computationId) { this.computationId = computationId; - vert.add(new HtmlLayoutContainer("

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

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

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

")); progressBar = new ProgressBar(); - progressBar.updateProgress(0, "Starting..."); - vert.add(progressBar,new VerticalLayoutData(1, -1, new Margins(20))); - + progressBar.updateProgress(0, "Starting..."); + vert.add(progressBar, new VerticalLayoutData(1, -1, new Margins(20))); + cancelComputationBtn = new TextButton("Cancel"); - + cancelComputationBtn.addSelectHandler(new SelectHandler() { - + @Override public void onSelect(SelectEvent event) { cancelComputationBtn.disable(); cancelComputation(); - + } }); - - - - cancelComputationBtn.getElement().getStyle().setMarginBottom(36, Unit.PX); - vert.add(cancelComputationBtn,new VerticalLayoutData(-1, -1, new Margins(0))); + cancelComputationBtn.getElement().getStyle() + .setMarginBottom(36, Unit.PX); + + vert.add(cancelComputationBtn, new VerticalLayoutData(-1, -1, + new Margins(0))); forceLayout(); timer.scheduleRepeating(Constants.TIME_UPDATE_COMPUTATION_STATUS_PANEL); } - - - private void cancelComputation(){ - CancelComputationExecutionRequestEvent event=new CancelComputationExecutionRequestEvent(computationId); + + private void cancelComputation() { + CancelComputationExecutionRequestEvent event = new CancelComputationExecutionRequestEvent( + computationId); EventBusProvider.INSTANCE.fireEvent(event); } - - /** - * @param computationId - * @param operator + * @param computationId + * @param operator * */ - protected void computationTerminated(ComputationId computationId, Operator operator, ComputationStatus computationStatus) { + protected void computationTerminated(ComputationId computationId, + ComputationStatus computationStatus) { Log.debug("Computation Terminated"); - Log.debug("Computation Status:"+computationStatus); + Log.debug("Computation Status:" + computationStatus); if (terminated == false) { terminated = true; cancelComputationBtn.setVisible(false); if (computationStatus.isComplete()) { Log.debug("Computation is Complete"); - Info.display("Terminated", "The computation "+computationId.getId()+" of "+operator.getName()+" is terminated correctly."); - int index=vert.getWidgetIndex(progressBar); + 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(); + // 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))); showOutput(); - + fireDataMinerWorkAreareRequestUpdate(); } else if (computationStatus.isFailed()) { Log.debug("Computation is Failed"); String errorMessage; - if(computationStatus.getErrResource()==null||computationStatus.getErrResource().getDescription()==null ){ - errorMessage=new String("Computation Failed!"); + if (computationStatus.getErrResource() == null + || computationStatus.getErrResource().getDescription() == null) { + errorMessage = new String("Computation Failed!"); } else { - errorMessage=computationStatus.getErrResource().getDescription(); + errorMessage = computationStatus.getErrResource() + .getDescription(); } - - UtilsGXT3.alert("Failed", "The computation "+computationId.getId()+" of "+operator.getName()+" has failed.
" - +"Message: "+errorMessage); - int index=vert.getWidgetIndex(progressBar); + 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(); + // TODO + progressBar = new RedProgressBar(); progressBar.updateProgress(1, "Computation Fail"); - 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))); + fireDataMinerWorkAreareRequestUpdate(); } - + } + forceLayout(); } - - + + private void fireDataMinerWorkAreareRequestUpdate() { + DataMinerWorkAreaRequestEvent event = new DataMinerWorkAreaRequestEvent( + DataMinerWorkAreaRequestEventType.UPDATE); + EventBusProvider.INSTANCE.fireEvent(event); + } + /** * */ private void showOutput() { - HtmlLayoutContainer computationEndMessage=new HtmlLayoutContainer("

The computation "+operator.getName()+" 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))); - + 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))); + } /** * @param computationStatus */ protected void updateStatus(ComputationStatus computationStatus) { - Log.debug("Conputation Status Panel ::Update Status "); + Log.debug("Conputation Status Panel ::Update Status "); if (computationStatus.getStatus() == Status.PENDING) progressBar.updateText("Pending..."); else { double percentage = computationStatus.getPercentage(); - progressBar.updateProgress(percentage/100, - "Running, " + NumberFormat.getFormat("0.00").format(percentage) + "% Complete"); + progressBar.updateProgress(percentage / 100, "Running, " + + NumberFormat.getFormat("0.00").format(percentage) + + "% Complete"); } } - private class ComputationTimer extends Timer { @Override public void run() { - Log.debug("Timer run ....."); - DataMinerPortletServiceAsync.INSTANCE.getComputationStatus(computationId, new AsyncCallback() { + Log.debug("Timer run ....."); + DataMinerPortletServiceAsync.INSTANCE.getComputationStatus( + computationId, new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - int index=vert.getWidgetIndex(progressBar); - 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))); - - } + @Override + public void onFailure(Throwable caught) { + int index = vert.getWidgetIndex(progressBar); + 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))); - @Override - public void onSuccess(ComputationStatus computationStatus) { - if (computationStatus.isTerminated()) { - ComputationTimer.this.cancel(); - computationTerminated(computationId, operator, computationStatus); - } else - updateStatus(computationStatus); - } - }); + } + + @Override + public void onSuccess( + ComputationStatus computationStatus) { + if (computationStatus.isTerminated()) { + ComputationTimer.this.cancel(); + computationTerminated(computationId, + computationStatus); + } else + updateStatus(computationStatus); + } + }); } - - } + } /** * @@ -229,9 +268,9 @@ public class ComputationStatusPanel extends SimpleContainer { public void stopTimer() { try { timer.cancel(); - } catch (Exception e) { + } catch (Exception e) { } vert.clear(); - + } } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/monitor/StatusMonitor.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/monitor/StatusMonitor.java new file mode 100644 index 0000000..cd3e91f --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/monitor/StatusMonitor.java @@ -0,0 +1,63 @@ +package org.gcube.portlets.user.dataminermanager.client.monitor; + +import com.google.gwt.safehtml.shared.SafeHtml; +import com.sencha.gxt.widget.core.client.box.AutoProgressMessageBox; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class StatusMonitor extends AutoProgressMessageBox { + + public StatusMonitor() { + super("Waiting", "Please wait..."); + create(); + } + + /** + * + * @param headingHtml + * @param messageHtml + */ + public StatusMonitor(SafeHtml headingHtml, SafeHtml messageHtml) { + super(headingHtml, messageHtml); + create(); + } + + /** + * + * @param headingHtml + */ + public StatusMonitor(SafeHtml headingHtml) { + super(headingHtml); + create(); + } + + /** + * + * @param headingHtml + * @param messageHtml + */ + public StatusMonitor(String headingHtml, String messageHtml) { + super(headingHtml, messageHtml); + create(); + } + + /** + * + * @param headingHtml + */ + public StatusMonitor(String headingHtml) { + super(headingHtml); + create(); + } + + private void create() { + setProgressText("In progress..."); + auto(); + show(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java index 360d53f..6a20c5a 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java @@ -36,7 +36,6 @@ public interface DataMinerPortletService extends RemoteService { public ComputationStatus getComputationStatus(ComputationId computationId) throws ServiceException; - public ComputationId resubmit(ItemDescription itemDescription) throws ServiceException; @@ -55,4 +54,6 @@ public interface DataMinerPortletService extends RemoteService { public Resource getResourceByComputationId(ComputationId computationId) throws ServiceException; + public Resource getResourceByComputationItem(ItemDescription itemDescription) throws ServiceException; + } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java index a953425..f4039a0 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java @@ -61,5 +61,8 @@ public interface DataMinerPortletServiceAsync { void getResourceByComputationId(ComputationId computationId, AsyncCallback callback); + + void getResourceByComputationItem(ItemDescription itemDescription, + AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/type/DataMinerWorkAreaRequestEventType.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/type/DataMinerWorkAreaRequestEventType.java new file mode 100644 index 0000000..994fad3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/type/DataMinerWorkAreaRequestEventType.java @@ -0,0 +1,11 @@ +package org.gcube.portlets.user.dataminermanager.client.type; + +/** + * + * @author Giancarlo Panichi + * email: g.panichi@isti.cnr.it + * + */ +public enum DataMinerWorkAreaRequestEventType { + OPEN,UPDATE; +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/type/OutputResourceRequestEventType.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/type/OutputResourceRequestEventType.java new file mode 100644 index 0000000..a638b3b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/type/OutputResourceRequestEventType.java @@ -0,0 +1,11 @@ +package org.gcube.portlets.user.dataminermanager.client.type; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public enum OutputResourceRequestEventType { + ComputationId, ItemDescription; +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DataMinerManagerServiceImpl.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DataMinerManagerServiceImpl.java index 123b550..46929fa 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/DataMinerManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/DataMinerManagerServiceImpl.java @@ -155,7 +155,7 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements logger.debug("Resubmit(): " + itemDescription); Map properties = StorageUtil.getProperties( aslSession.getUsername(), itemDescription.getId()); - logger.debug(properties.toString()); + logger.debug("Properties: " + properties); SClient smClient = SessionUtil.getSClient(session, aslSession); return smClient.resubmitComputation(properties); } catch (ServiceException e) { @@ -190,30 +190,7 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements } } - @Override - public Resource getResourceByComputationId(ComputationId computationId) - throws ServiceException { - try { - Log.debug("getResourceByComputationId: " + computationId); - HttpSession session = this.getThreadLocalRequest().getSession(); - ASLSession aslSession = SessionUtil.getASLSession(session); - - SClient smClient = SessionUtil.getSClient(session, aslSession); - Resource resource = smClient - .getResourceByComputationId(computationId); - Log.debug("Resoure: " + resource); - return resource; - } catch (ServiceException e) { - logger.error(e.getLocalizedMessage()); - throw e; - } catch (Throwable e) { - logger.error("Error in getResourceByComputationId: " - + e.getLocalizedMessage()); - e.printStackTrace(); - throw new ServiceException(e.getLocalizedMessage(), e); - } - - } + @Override public void deleteItem(ItemDescription itemDescription) @@ -317,4 +294,53 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements } } + @Override + public Resource getResourceByComputationId(ComputationId computationId) + throws ServiceException { + try { + Log.debug("getResourceByComputationId: " + computationId); + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getASLSession(session); + + SClient smClient = SessionUtil.getSClient(session, aslSession); + Resource resource = smClient + .getResourceByComputationId(computationId); + Log.debug("Resoure: " + resource); + return resource; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + throw e; + } catch (Throwable e) { + logger.error("Error in getResourceByComputationId: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage(), e); + } + + } + + + @Override + public Resource getResourceByComputationItem(ItemDescription itemDescription) + throws ServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getASLSession(session); + logger.debug("ResourceByComputationItemt(): " + itemDescription); + Map properties = StorageUtil.getProperties( + aslSession.getUsername(), itemDescription.getId()); + logger.debug("Properties: " + properties); + SClient smClient = SessionUtil.getSClient(session, aslSession); + return smClient.getResourceByComputationProperties(properties); + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + throw e; + } catch (Throwable e) { + logger.error("Error retrieving resource by computation item: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + } + } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient.java index 8f0165c..f39fee1 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient.java @@ -39,6 +39,9 @@ public abstract class SClient { public abstract Resource getResourceByComputationId( ComputationId computationId) throws Exception; + public abstract Resource getResourceByComputationProperties( + Map computationProperties) throws Exception; + public abstract String cancelComputation(ComputationId computationId) throws Exception; diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java index 00a2513..1092b7b 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/SClient4WPS.java @@ -278,7 +278,8 @@ public class SClient4WPS extends SClient { processDescription = wpsClient.getProcessDescription( wpsProcessingServlet, processId); } catch (Throwable e) { - logger.error("Error getProcessDescription for process "+processId+" with WPS URL: " + logger.error("Error getProcessDescription for process " + + processId + " with WPS URL: " + wpsProcessingServlet); if (k == 3) throw e; @@ -294,7 +295,7 @@ public class SClient4WPS extends SClient { processDescription.set(XmlString.Factory .parse(processDescriptionURL)); - logger.debug("ProcessDescription: "+processDescription); + logger.debug("ProcessDescription: " + processDescription); InputDescriptionType[] inputList = processDescription .getDataInputs().getInputArray(); @@ -704,7 +705,8 @@ public class SClient4WPS extends SClient { logger.error("Invalid processLocation: " + processUrl); throw new Exception("Invalid processLocation: " + processUrl); } - ComputationId computationId = new ComputationId(id, processUrl); + ComputationId computationId = new ComputationId(id, processUrl, + operator.getId(), operator.getName()); logger.debug("ComputationId: " + computationId); runningProcess.put(computationId, processInformations); @@ -1143,11 +1145,16 @@ public class SClient4WPS extends SClient { } @Override - public ComputationId resubmitComputation(Map computationProperties) - throws Exception { + public ComputationId resubmitComputation( + Map computationProperties) throws Exception { ProcessInformations processInformations; + if (computationProperties == null || computationProperties.isEmpty()) { + throw new Exception("Invalid computation properties: " + + computationProperties); + } try { - processInformations = describeProcess(computationProperties.get("operator_name")); + processInformations = describeProcess(computationProperties + .get("operator_id")); } catch (Throwable e) { logger.error("GetParameters: " + e.getLocalizedMessage()); e.printStackTrace(); @@ -1163,19 +1170,30 @@ public class SClient4WPS extends SClient { inputParameters.put(inputParameter.getName(), inputParameter); } - Map userInputs = new LinkedHashMap<>(); - for(Map.Entry entry:computationProperties.entrySet()){ - if(entry.getKey().startsWith("input")){ - int inputSeparatorIndex=entry.getKey().indexOf("_"); - String inputKey=entry.getKey().substring(inputSeparatorIndex+1); - userInputs.put(inputKey, entry.getValue()); - logger.debug("UserInputs[key=" + inputKey + ", value=" - + entry.getValue() + "]"); - + for (Map.Entry entry : computationProperties.entrySet()) { + if (entry.getKey().startsWith("input")) { + int inputSeparatorIndex = entry.getKey().indexOf("_"); + String inputKey = entry.getKey().substring( + inputSeparatorIndex + 1); + if (inputKey.compareToIgnoreCase("user.name") != 0 + && inputKey.compareToIgnoreCase("scope") != 0) { + userInputs.put(inputKey, entry.getValue()); + logger.debug("UserInputs[key=" + inputKey + ", value=" + + entry.getValue() + "]"); + } + } } - + + if (userInputs.isEmpty()) { + logger.error("Attention no imputs parameters retrieved for this computation: " + + computationProperties); + throw new Exception( + "Attention no imputs parameters retrieved for this computation: " + + computationProperties); + } + String processUrl = compute(processInformations, userInputs, inputParameters); logger.debug("Stated Computation ProcessLocation:" + processUrl); @@ -1188,7 +1206,9 @@ public class SClient4WPS extends SClient { logger.error("Invalid processLocation: " + processUrl); throw new Exception("Invalid processLocation: " + processUrl); } - ComputationId computationId = new ComputationId(id, processUrl); + ComputationId computationId = new ComputationId(id, processUrl, + computationProperties.get("operator_id"), + computationProperties.get("operator_name")); logger.debug("ComputationId: " + computationId); runningProcess.put(computationId, processInformations); @@ -1196,4 +1216,11 @@ public class SClient4WPS extends SClient { return computationId; } + @Override + public Resource getResourceByComputationProperties( + Map computationProperties) throws Exception { + // TODO Auto-generated method stub + return null; + } + } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/wps/StatWPSClientSession.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/wps/StatWPSClientSession.java index ffbf741..cf130f0 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/wps/StatWPSClientSession.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/smservice/wps/StatWPSClientSession.java @@ -338,10 +338,10 @@ public class StatWPSClientSession { url = req.getRequest(url); try { String authString = user + ":" + password; - System.out.println("auth string: " + authString); + logger.debug("auth string: " + authString); byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); String encoded = new String(authEncBytes); - System.out.println("Base64 encoded auth string: " + encoded); + logger.debug("Base64 encoded auth string: " + encoded); URL urlObj = new URL(url); HttpURLConnection connection = (HttpURLConnection) urlObj @@ -370,17 +370,17 @@ public class StatWPSClientSession { private ProcessDescriptionsDocument retrieveDescriptionViaGET( String[] processIDs, String url) throws WPSClientException { try { - System.out.println("RetrieveDescriptio: " + processIDs + " url:" + logger.debug("RetrieveDescription GET: " + processIDs + " url:" + url); StatClientDescribeProcessRequest req = new StatClientDescribeProcessRequest(); req.setIdentifier(processIDs); String requestURL = req.getRequest(url); String authString = user + ":" + password; - System.out.println("auth string: " + authString); + logger.debug("auth string: " + authString); byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); String encoded = new String(authEncBytes); - System.out.println("Base64 encoded auth string: " + encoded); + logger.debug("Base64 encoded auth string: " + encoded); URL urlObj = new URL(requestURL); HttpURLConnection connection = (HttpURLConnection) urlObj @@ -419,10 +419,10 @@ public class StatWPSClientSession { try { logger.debug("RetrieveDataViaPost(): " + urlString); String authString = user + ":" + password; - System.out.println("auth string: " + authString); + logger.debug("auth string: " + authString); byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); String encoded = new String(authEncBytes); - System.out.println("Base64 encoded auth string: " + encoded); + logger.debug("Base64 encoded auth string: " + encoded); URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); @@ -609,10 +609,10 @@ public class StatWPSClientSession { try { String authString = user + ":" + password; - System.out.println("auth string: " + authString); + logger.debug("auth string: " + authString); byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); String encoded = new String(authEncBytes); - System.out.println("Base64 encoded auth string: " + encoded); + logger.debug("Base64 encoded auth string: " + encoded); url+="?id="+computationId; URL urlObj = new URL(url); diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/shared/data/ComputationId.java b/src/main/java/org/gcube/portlets/user/dataminermanager/shared/data/ComputationId.java index fd78e08..329bc67 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/shared/data/ComputationId.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/shared/data/ComputationId.java @@ -13,15 +13,20 @@ public class ComputationId implements Serializable { private static final long serialVersionUID = 7898676192287822723L; private String id; private String urlId; + private String operatorId; + private String operatorName; public ComputationId() { super(); } - public ComputationId(String id, String urlId) { + public ComputationId(String id, String urlId, String operatorId, + String operatorName) { super(); this.id = id; this.urlId = urlId; + this.operatorId = operatorId; + this.operatorName = operatorName; } public String getId() { @@ -40,9 +45,26 @@ public class ComputationId implements Serializable { this.urlId = urlId; } + public String getOperatorId() { + return operatorId; + } + + public void setOperatorId(String operatorId) { + this.operatorId = operatorId; + } + + public String getOperatorName() { + return operatorName; + } + + public void setOperatorName(String operatorName) { + this.operatorName = operatorName; + } + @Override public String toString() { - return "ComputationId [id=" + id + ", urlId=" + urlId + "]"; + return "ComputationId [id=" + id + ", urlId=" + urlId + ", operatorId=" + + operatorId + ", operatorName=" + operatorName + "]"; } }