diff --git a/pom.xml b/pom.xml index 52e2121..17355ad 100644 --- a/pom.xml +++ b/pom.xml @@ -106,7 +106,8 @@ home-library-model runtime - + + org.gcube.common common-authorization diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/bean/ComputationStatus.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/bean/ComputationStatus.java index 6ac53ad..177ef99 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/bean/ComputationStatus.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/bean/ComputationStatus.java @@ -16,7 +16,7 @@ public class ComputationStatus implements Serializable { private static final long serialVersionUID = -1943128398882978439L; public enum Status { - ACCEPTED, RUNNING, COMPLETE, FAILED + ACCEPTED, RUNNING, COMPLETE, FAILED, CANCELLED; }; private double percentage; @@ -40,12 +40,12 @@ public class ComputationStatus implements Serializable { this.percentage = percentage; this.status = status; } - + public ComputationStatus(DataMinerServiceException error) { super(); this.percentage = 100f; this.status = Status.FAILED; - this.error=error; + this.error = error; } public boolean isComplete() { @@ -63,14 +63,19 @@ public class ComputationStatus implements Serializable { public boolean isAccepted() { return this.status == Status.ACCEPTED; } - + + public boolean isCancelled() { + return this.status == Status.CANCELLED; + } + public boolean isPaused() { return false; - //return this.status == Status.FAILED; + // return this.status == Status.FAILED; } public boolean isTerminated() { - return status == Status.COMPLETE || status == Status.FAILED; + return status == Status.COMPLETE || status == Status.FAILED + || status == Status.CANCELLED; } public double getPercentage() { diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationValueImagePanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationValueImagePanel.java index da61dbd..8c054d3 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationValueImagePanel.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationValueImagePanel.java @@ -65,7 +65,7 @@ public class ComputationValueImagePanel extends SimpleContainer { v.add(saveImageBtn, new VerticalLayoutData(-1, -1, new Margins(0))); final Image img = new Image(computationValueImage.getValue()); - img.setPixelSize(480, 320); + img.setPixelSize(640, 480); v.add(img, new VerticalLayoutData(1, -1, new Margins(0))); } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.css b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.css new file mode 100644 index 0000000..f98a880 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.css @@ -0,0 +1,50 @@ +/** +* +*/ +.progressWrapOrange { + border: 1px solid #ffd075; + overflow: hidden; +} + +@sprite .progressInnerOrange { + background-color: #f3ede0; + gwt-image: 'innerBarOrange'; + height: auto; + position: relative; +} + +@sprite .progressBarOrange { + background-color: #ffdf9f; + gwt-image: 'barOrange'; + background-repeat: repeat-x; + background-position: left center; + height: 18px; + border-top-color: #fdefd1; + border-bottom-color: #f9d793; + border-right-color: #ffdd97; +} + +.progressTextOrange { + color: #fff; + text-align: center; + font-size: 11px; + font-weight: bold; + font-family: sans-serif; + padding: 1px 5px; + overflow: hidden; + position: absolute; + z-index: 99; +} + +.progressTextBackOrange { + color: #ffaf0d!important; + z-index: 9 !important; +} + +@if user.agent ie6 ie8 ie9 { + .progressTextBackOrange { + line-height: 15px; + color: #ffaa00!important; + z-index: 9 !important; + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.html b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.html new file mode 100644 index 0000000..cfefcb6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.html @@ -0,0 +1,12 @@ +
+
+
+
+
{text}
+
+
+
{text}
+
+
+
+
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.java new file mode 100644 index 0000000..5210840 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBar.java @@ -0,0 +1,18 @@ +package org.gcube.portlets.user.dataminermanager.client.custom.progress; + +import com.sencha.gxt.cell.core.client.ProgressBarCell; +import com.sencha.gxt.widget.core.client.ProgressBar; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class OrangeProgressBar extends ProgressBar { + + public OrangeProgressBar() { + super(new ProgressBarCell(new OrangeProgressBarAppearance())); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBarAppearance.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBarAppearance.java new file mode 100644 index 0000000..e71feeb --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/OrangeProgressBarAppearance.java @@ -0,0 +1,132 @@ +package org.gcube.portlets.user.dataminermanager.client.custom.progress; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.resources.client.ImageResource.ImageOptions; +import com.google.gwt.resources.client.ImageResource.RepeatStyle; +import com.google.gwt.safecss.shared.SafeStyles; +import com.google.gwt.safecss.shared.SafeStylesUtils; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; +import com.sencha.gxt.cell.core.client.ProgressBarCell.ProgressBarAppearance; +import com.sencha.gxt.cell.core.client.ProgressBarCell.ProgressBarAppearanceOptions; +import com.sencha.gxt.core.client.GXT; +import com.sencha.gxt.core.client.XTemplates; +import com.sencha.gxt.core.client.util.Format; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class OrangeProgressBarAppearance implements ProgressBarAppearance { + + public interface OrangeProgressBarResources { + + ImageResource barOrange(); + + ImageResource innerBarOrange(); + + OrangeProgressBarStyle style(); + + } + + public interface OrangeProgressBarStyle extends CssResource { + + String progressBarOrange(); + + String progressInnerOrange(); + + String progressTextOrange(); + + String progressTextBackOrange(); + + String progressWrapOrange(); + + } + + public interface OrangeProgressBarTemplate extends XTemplates { + + @XTemplate(source = "OrangeProgressBar.html") + SafeHtml render(SafeHtml text, OrangeProgressBarStyle style, + SafeStyles wrapStyles, SafeStyles progressBarStyles, + SafeStyles progressTextStyles, SafeStyles widthStyles); + + } + + public interface OrangeProgressBarDefaultResources extends + OrangeProgressBarResources, ClientBundle { + + @Source({ "OrangeProgressBar.css" }) + @Override + OrangeProgressBarStyle style(); + + @Source("orange-progress-bg.gif") + @ImageOptions(repeatStyle = RepeatStyle.Horizontal) + @Override + ImageResource barOrange(); + + @Source("orange-bg.gif") + @ImageOptions(repeatStyle = RepeatStyle.Horizontal) + @Override + ImageResource innerBarOrange(); + } + + private final OrangeProgressBarStyle style; + private OrangeProgressBarTemplate template; + + + public OrangeProgressBarAppearance() { + this( + GWT. create(OrangeProgressBarDefaultResources.class), + GWT. create(OrangeProgressBarTemplate.class)); + } + + public OrangeProgressBarAppearance(OrangeProgressBarResources resources, + OrangeProgressBarTemplate template) { + this.style = resources.style(); + this.style.ensureInjected(); + this.template = template; + } + + @Override + public void render(SafeHtmlBuilder sb, Double value, + ProgressBarAppearanceOptions options) { + value = value == null ? 0 : value; + double valueWidth = value * options.getWidth(); + + int vw = new Double(valueWidth).intValue(); + + String text = options.getProgressText(); + + if (text != null) { + int v = (int) Math.round(value * 100); + text = Format.substitute(text, v); + } + + SafeHtml txt; + if (text == null) { + txt = SafeHtmlUtils.fromSafeConstant(" "); + } else { + txt = SafeHtmlUtils.fromString(text); + } + + int adj = GXT.isIE() ? 4 : 2; + + SafeStyles wrapStyles = SafeStylesUtils.fromTrustedString("width:" + + (options.getWidth() - adj) + "px;"); + SafeStyles progressBarStyles = SafeStylesUtils + .fromTrustedString("width:" + vw + "px;"); + SafeStyles progressTextStyles = SafeStylesUtils + .fromTrustedString("width:" + Math.max(vw - 8, 0) + "px;"); + SafeStyles widthStyles = SafeStylesUtils.fromTrustedString("width:" + + (Math.max(0, options.getWidth() - adj)) + "px;"); + sb.append(template.render(txt, style, wrapStyles, progressBarStyles, + progressTextStyles, widthStyles)); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/orange-bg.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/orange-bg.gif new file mode 100644 index 0000000..9bc56ad Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/orange-bg.gif differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/orange-progress-bg.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/orange-progress-bg.gif new file mode 100644 index 0000000..8806af1 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/custom/progress/orange-progress-bg.gif differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/InputDataSetsPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/InputDataSetsPanel.java index ee565bc..f661762 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/InputDataSetsPanel.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/dataspace/InputDataSetsPanel.java @@ -379,7 +379,7 @@ public class InputDataSetsPanel extends FramedPanel { } } catch (Throwable e) { - Log.error("Error in ImputDataSetsPanel: " + e.getLocalizedMessage()); + Log.error("Error in InputDataSetsPanel: " + e.getLocalizedMessage()); e.printStackTrace(); } } 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 ae47435..7f7dfa3 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,6 +7,7 @@ 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.common.EventBusProvider; import org.gcube.portlets.user.dataminermanager.client.custom.progress.GreenProgressBar; +import org.gcube.portlets.user.dataminermanager.client.custom.progress.OrangeProgressBar; 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.rpc.DataMinerPortletServiceAsync; @@ -86,24 +87,25 @@ public class ComputationStatusPanel extends SimpleContainer { vert.add(new HtmlLayoutContainer("

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

")); - - TextButton equivalentRequestBtn=new TextButton(); + + TextButton equivalentRequestBtn = new TextButton(); equivalentRequestBtn.setText("Show"); equivalentRequestBtn.addSelectHandler(new SelectHandler() { - + @Override public void onSelect(SelectEvent event) { showEquivalentRequestDialog(); - + } - }); - - FieldLabel equivalentRequestLabel=new FieldLabel(equivalentRequestBtn,"Equivalent Get Request"); + + FieldLabel equivalentRequestLabel = new FieldLabel( + equivalentRequestBtn, "Equivalent Get Request"); equivalentRequestLabel.setLabelWidth(140); - vert.add(equivalentRequestLabel, new VerticalLayoutData(-1, -1, new Margins(0))); - + vert.add(equivalentRequestLabel, new VerticalLayoutData(-1, -1, + new Margins(0))); + progressBar = new ProgressBar(); progressBar.updateProgress(0, "Starting..."); vert.add(progressBar, new VerticalLayoutData(1, -1, new Margins(20))); @@ -130,8 +132,9 @@ public class ComputationStatusPanel extends SimpleContainer { } private void showEquivalentRequestDialog() { - EquivalentRequestDialog equivalentRequestDialog=new EquivalentRequestDialog(computationId); - equivalentRequestDialog.show(); + EquivalentRequestDialog equivalentRequestDialog = new EquivalentRequestDialog( + computationId); + equivalentRequestDialog.show(); } private void cancelComputation() { @@ -172,7 +175,8 @@ public class ComputationStatusPanel extends SimpleContainer { if (computationStatus.getError() == null) { errorMessage = new String("Computation Failed!"); } else { - errorMessage = computationStatus.getError().getLocalizedMessage(); + errorMessage = computationStatus.getError() + .getLocalizedMessage(); } Info.display("Failed", "The computation " + computationId.getId() + " of " @@ -191,6 +195,26 @@ public class ComputationStatusPanel extends SimpleContainer { .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); + 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))); } } @@ -198,8 +222,6 @@ public class ComputationStatusPanel extends SimpleContainer { forceLayout(); } - - /** * */ @@ -218,23 +240,21 @@ public class ComputationStatusPanel extends SimpleContainer { } - - /** * @param computationStatus */ private void updateStatus(ComputationStatus computationStatus) { - Log.debug("Conputation Status Panel ::Update Status "+computationStatus); - if (computationStatus.getStatus().compareTo(Status.ACCEPTED)==0) + Log.debug("Conputation Status Panel ::Update Status " + + computationStatus); + if (computationStatus.getStatus().compareTo(Status.ACCEPTED) == 0) progressBar.updateText("Accepted..."); else { double percentage = computationStatus.getPercentage(); - if(percentage==0){ + if (percentage == 0) { progressBar.updateText("Running, 0% Complete"); } else { - progressBar.updateProgress(percentage/100, "Running, " - + percentage - + "% Complete"); + progressBar.updateProgress(percentage / 100, "Running, " + + percentage + "% Complete"); } } forceLayout(); @@ -267,12 +287,15 @@ public class ComputationStatusPanel extends SimpleContainer { @Override public void onSuccess( ComputationStatus computationStatus) { - if (computationStatus.isTerminated()) { - ComputationTimer.this.cancel(); - computationTerminated(computationId, - computationStatus); - } else - updateStatus(computationStatus); + Log.debug("ComputationStatus: "+computationStatus); + if (computationStatus != null) { + if (computationStatus.isTerminated()) { + ComputationTimer.this.cancel(); + computationTerminated(computationId, + computationStatus); + } else + updateStatus(computationStatus); + } } }); } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/FileFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/FileFld.java index e187fda..97eb1ed 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/FileFld.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/FileFld.java @@ -8,6 +8,8 @@ import java.util.Arrays; import java.util.List; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; +import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; +import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; import org.gcube.portlets.user.dataminermanager.shared.exception.ExpiredSessionServiceException; @@ -20,6 +22,7 @@ import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.core.client.dom.XDOM; @@ -37,8 +40,8 @@ import com.sencha.gxt.widget.core.client.form.TextField; /** * - * @author Giancarlo Panichi - * email: g.panichi@isti.cnr.it + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it * */ public class FileFld extends AbstractFld { @@ -56,23 +59,25 @@ public class FileFld extends AbstractFld { private HBoxLayoutContainer horiz; + private TextButton downloadButton; + /** * @param parameter */ public FileFld(Parameter parameter) { - super(parameter); + super(parameter); fileParameter = (FileParameter) parameter; - - SimpleContainer tabContainer=new SimpleContainer(); - vp=new VerticalLayoutContainer(); + + 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 (fileParameter.getDescription() == null) { @@ -90,11 +95,10 @@ public class FileFld extends AbstractFld { fieldContainer.add(horiz); showNoSelectionField(); - + } - - - private void init(){ + + private void init() { List selectableTypes = new ArrayList(); selectableTypes.add(ItemType.EXTERNAL_FILE); @@ -114,7 +118,6 @@ public class FileFld extends AbstractFld { } else { retrieveFileInformation(item); - } } @@ -142,23 +145,21 @@ public class FileFld extends AbstractFld { wselectDialog.setZIndex(XDOM.getTopZIndex()); selectButton = new TextButton("Select File"); - selectButton.setIcon(DataMinerManager.resources.folderExplore()); + selectButton.setIcon(DataMinerManager.resources.folderExplore()); selectButton.addSelectHandler(new SelectEvent.SelectHandler() { - + @Override public void onSelect(SelectEvent event) { wselectDialog.show(); - + } }); selectButton.setToolTip("Select File"); - - - selectButton2 = new TextButton(""); + selectButton2 = new TextButton(""); selectButton2.setIcon(DataMinerManager.resources.folderExplore()); selectButton2.addSelectHandler(new SelectEvent.SelectHandler() { - + @Override public void onSelect(SelectEvent event) { wselectDialog.show(); @@ -169,21 +170,31 @@ public class FileFld extends AbstractFld { cancelButton = new TextButton(""); cancelButton.setIcon(DataMinerManager.resources.cancel()); cancelButton.addSelectHandler(new SelectEvent.SelectHandler() { - + @Override public void onSelect(SelectEvent event) { selectedFileItem = null; showNoSelectionField(); } }); - + + downloadButton = new TextButton(""); + downloadButton.setIcon(DataMinerManager.resources.fileDownload()); + downloadButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + downloadFile(); + } + }); + } private void retrieveFileInformation(final Item item) { Log.debug("Retrieved: " + item); - final ItemDescription itemDescription = new ItemDescription(item.getId(), - item.getName(), item.getOwner(), item.getPath(), item.getType() - .name()); + final ItemDescription itemDescription = new ItemDescription( + item.getId(), item.getName(), item.getOwner(), item.getPath(), + item.getType().name()); DataMinerPortletServiceAsync.INSTANCE.getPublicLink(itemDescription, new AsyncCallback() { @@ -196,8 +207,7 @@ public class FileFld extends AbstractFld { UtilsGXT3.alert("Error", "Expired Session"); } else { - UtilsGXT3.alert( - "Error", + UtilsGXT3.alert("Error", "Error retrieving file informations: " + caught.getLocalizedMessage()); } @@ -214,10 +224,41 @@ public class FileFld extends AbstractFld { } }); - - } + private void downloadFile() { + if (selectedFileItem != null) { + DataMinerPortletServiceAsync.INSTANCE.getPublicLink( + selectedFileItem, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof ExpiredSessionServiceException) { + EventBusProvider.INSTANCE + .fireEvent(new SessionExpiredEvent()); + } else { + Log.error("Error downloading file: " + + caught.getLocalizedMessage()); + UtilsGXT3.alert("Error", + caught.getLocalizedMessage()); + } + caught.printStackTrace(); + + } + + @Override + public void onSuccess(String link) { + Log.debug("Retrieved link: " + link); + Window.open(link, selectedFileItem.getName(), ""); + } + + }); + + } else { + UtilsGXT3.info("Attention", "Select a file!"); + } + + } private void showNoSelectionField() { vp.clear(); @@ -228,24 +269,25 @@ public class FileFld extends AbstractFld { private void showFieldWithSelection() { String fileName = selectedFileItem.getName(); - - if(fileName==null|| fileName.isEmpty()){ - fileName="NoName"; + + if (fileName == null || fileName.isEmpty()) { + fileName = "NoName"; } - - TextField tableDescription=new TextField(); + + 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(cancelButton,new BoxLayoutData(new Margins())); + + 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(); - + } /** @@ -263,7 +305,8 @@ public class FileFld extends AbstractFld { @Override public String getValue() { - return (selectedFileItem == null) ? null : selectedFileItem.getPublicLink(); + return (selectedFileItem == null) ? null : selectedFileItem + .getPublicLink(); } } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabItem.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabItem.java index ccf362d..1d940dd 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabItem.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabItem.java @@ -5,17 +5,21 @@ import java.util.Arrays; import java.util.List; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; +import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; +import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple; import org.gcube.portlets.user.dataminermanager.shared.exception.ExpiredSessionServiceException; import org.gcube.portlets.user.dataminermanager.shared.parameters.TabularParameter; +import org.gcube.portlets.user.dataminermanager.shared.workspace.ItemDescription; 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 org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sencha.gxt.core.client.dom.XDOM; import com.sencha.gxt.core.client.util.Margins; @@ -40,6 +44,8 @@ public class TabItem extends HBoxLayoutContainer { private TextButton removeBtn; private TextField tableDescription; private WorkspaceExplorerSelectDialog wselectDialog; + private TextButton downloadButton; + private ItemDescription itemDescriptionSelected; /** * @@ -74,6 +80,8 @@ public class TabItem extends HBoxLayoutContainer { selectButton.setToolTip("Select Data Set"); selectButton2 = new TextButton(""); + selectButton2.setIcon(DataMinerManager.resources.folderExplore()); + selectButton2.setToolTip("Select Another Data Set"); selectButton2.addSelectHandler(new SelectEvent.SelectHandler() { @Override @@ -81,15 +89,23 @@ public class TabItem extends HBoxLayoutContainer { wselectDialog.show(); } }); - - selectButton2.setIcon(DataMinerManager.resources.folderExplore()); - selectButton2.setToolTip("Select Another Data Set"); selectButton2.setVisible(false); + + + downloadButton = new TextButton(""); + downloadButton.setIcon(DataMinerManager.resources.fileDownload()); + downloadButton.addSelectHandler(new SelectEvent.SelectHandler() { + @Override + public void onSelect(SelectEvent event) { + downloadFile(); + } + }); + downloadButton.setVisible(false); + + addBtn = new TextButton(""); - addBtn.setIcon(DataMinerManager.resources.add()); - addBtn.addSelectHandler(new SelectEvent.SelectHandler() { @Override @@ -101,7 +117,6 @@ public class TabItem extends HBoxLayoutContainer { removeBtn = new TextButton(""); removeBtn.setIcon(DataMinerManager.resources.cancel()); - removeBtn.addSelectHandler(new SelectEvent.SelectHandler() { @Override @@ -113,18 +128,18 @@ public class TabItem extends HBoxLayoutContainer { }); removeBtn.setVisible(!first); + + setPack(BoxLayoutPack.START); setEnableOverflow(false); add(tableDescription, new BoxLayoutData(new Margins())); add(selectButton, new BoxLayoutData(new Margins())); add(selectButton2, new BoxLayoutData(new Margins())); + add(downloadButton, new BoxLayoutData(new Margins())); add(addBtn, new BoxLayoutData(new Margins())); add(removeBtn, new BoxLayoutData(new Margins())); - - - - + forceLayout(); } @@ -198,6 +213,11 @@ public class TabItem extends HBoxLayoutContainer { } private void retrieveTableInformation(Item item) { + Log.debug("Retrieved: " + item); + itemDescriptionSelected = new ItemDescription( + item.getId(), item.getName(), item.getOwner(), item.getPath(), + item.getType().name()); + DataMinerPortletServiceAsync.INSTANCE.retrieveTableInformation(item, new AsyncCallback() { @@ -226,6 +246,41 @@ public class TabItem extends HBoxLayoutContainer { }); } + + private void downloadFile() { + if (itemDescriptionSelected != null) { + DataMinerPortletServiceAsync.INSTANCE.getPublicLink( + itemDescriptionSelected, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof ExpiredSessionServiceException) { + EventBusProvider.INSTANCE + .fireEvent(new SessionExpiredEvent()); + } else { + Log.error("Error downloading table: " + + caught.getLocalizedMessage()); + UtilsGXT3.alert("Error", + caught.getLocalizedMessage()); + } + caught.printStackTrace(); + + } + + @Override + public void onSuccess(String link) { + Log.debug("Retrieved link: " + link); + Window.open(link, itemDescriptionSelected.getName(), ""); + } + + }); + + } else { + UtilsGXT3.info("Attention", "Select a Table!"); + } + + } + /** * */ @@ -242,6 +297,7 @@ public class TabItem extends HBoxLayoutContainer { tableDescription.setVisible(true); selectButton.setVisible(false); selectButton2.setVisible(true); + downloadButton.setVisible(true); parent.forceLayout(); } catch (Throwable e) { diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabularFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabularFld.java index cce29ce..00c0e57 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabularFld.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/parametersfield/TabularFld.java @@ -8,6 +8,8 @@ import java.util.Arrays; import java.util.List; import org.gcube.portlets.user.dataminermanager.client.DataMinerManager; +import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; +import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; import org.gcube.portlets.user.dataminermanager.client.events.TabularFldChangeEvent; import org.gcube.portlets.user.dataminermanager.client.events.TabularFldChangeEvent.HasTabularFldChangeEventHandler; import org.gcube.portlets.user.dataminermanager.client.events.TabularFldChangeEvent.TabularFldChangeEventHandler; @@ -17,6 +19,7 @@ import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple; import org.gcube.portlets.user.dataminermanager.shared.exception.ExpiredSessionServiceException; import org.gcube.portlets.user.dataminermanager.shared.parameters.Parameter; import org.gcube.portlets.user.dataminermanager.shared.parameters.TabularParameter; +import org.gcube.portlets.user.dataminermanager.shared.workspace.ItemDescription; 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; @@ -25,6 +28,7 @@ import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.core.client.dom.XDOM; @@ -55,10 +59,13 @@ public class TabularFld extends AbstractFld implements private VerticalLayoutContainer vp; private WorkspaceExplorerSelectDialog wselectDialog; - private TextButton selectButton, selectButton2, cancelButton; + private TextButton selectButton, selectButton2, cancelButton, + downloadButton; private HtmlLayoutContainer templatesList; private TableItemSimple selectedTableItem = null; + private ItemDescription itemDescriptionSelected; private TabularParameter tabularParameter; + /** * @param parameter @@ -78,7 +85,8 @@ public class TabularFld extends AbstractFld implements showNoSelectionField(); } catch (Throwable e) { Log.error("TabularField: " + e.getLocalizedMessage()); - UtilsGXT3.alert("Error", "Error creating Tabular Field: "+e.getLocalizedMessage()); + UtilsGXT3.alert("Error", + "Error creating Tabular Field: " + e.getLocalizedMessage()); e.printStackTrace(); } } @@ -231,6 +239,7 @@ public class TabularFld extends AbstractFld implements selectButton2.setToolTip("Select Another Data Set"); cancelButton = new TextButton(""); + cancelButton.setIcon(DataMinerManager.resources.cancel()); cancelButton.addSelectHandler(new SelectEvent.SelectHandler() { @Override @@ -241,7 +250,15 @@ public class TabularFld extends AbstractFld implements } }); - cancelButton.setIcon(DataMinerManager.resources.cancel()); + downloadButton = new TextButton(""); + downloadButton.setIcon(DataMinerManager.resources.fileDownload()); + downloadButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + downloadFile(); + } + }); } catch (Throwable e) { Log.error("TabularField init: " + e.getLocalizedMessage()); e.printStackTrace(); @@ -250,6 +267,12 @@ public class TabularFld extends AbstractFld implements } private void retrieveTableInformation(Item item) { + Log.debug("Retrieved: " + item); + itemDescriptionSelected = new ItemDescription( + item.getId(), item.getName(), item.getOwner(), item.getPath(), + item.getType().name()); + + DataMinerPortletServiceAsync.INSTANCE.retrieveTableInformation(item, new AsyncCallback() { @@ -277,6 +300,40 @@ public class TabularFld extends AbstractFld implements } }); } + + private void downloadFile() { + if (itemDescriptionSelected != null) { + DataMinerPortletServiceAsync.INSTANCE.getPublicLink( + itemDescriptionSelected, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof ExpiredSessionServiceException) { + EventBusProvider.INSTANCE + .fireEvent(new SessionExpiredEvent()); + } else { + Log.error("Error downloading table: " + + caught.getLocalizedMessage()); + UtilsGXT3.alert("Error", + caught.getLocalizedMessage()); + } + caught.printStackTrace(); + + } + + @Override + public void onSuccess(String link) { + Log.debug("Retrieved link: " + link); + Window.open(link, itemDescriptionSelected.getName(), ""); + } + + }); + + } else { + UtilsGXT3.info("Attention", "Select a Table!"); + } + + } /** * @@ -306,6 +363,7 @@ public class TabularFld extends AbstractFld implements 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); diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Resources.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Resources.java index cb33929..adc9f33 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Resources.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Resources.java @@ -1,23 +1,19 @@ package org.gcube.portlets.user.dataminermanager.client.resources; - import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.ImageResource; /** * - * @author Giancarlo Panichi - * email: g.panichi@isti.cnr.it + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it * */ public interface Resources extends ClientBundle { - - @Source("logo.png") - ImageResource logo(); @Source("logoLittle.png") ImageResource logoLittle(); - + @Source("goBack.png") ImageResource goBack(); @@ -30,15 +26,9 @@ public interface Resources extends ClientBundle { @Source("inputSpace.png") ImageResource inputSpaceIcon(); - @Source("application_side_expand.png") - ImageResource addOperator(); - @Source("connector1.png") ImageResource workflowConnector1(); - @Source("connector2.png") - ImageResource workflowConnector2(); - @Source("triangle.png") ImageResource startComputation(); @@ -60,70 +50,31 @@ public interface Resources extends ClientBundle { @Source("add.png") ImageResource add(); - @Source("table.png") - ImageResource table(); - - @Source("refresh.png") - ImageResource refresh(); - - @Source("details.png") - ImageResource details(); - - @Source("tableResult.png") - ImageResource tableResult(); - @Source("menuItemComputations.png") ImageResource menuItemComputations(); - + @Source("menuItemExperiment.png") ImageResource menuItemExperiment(); - + @Source("menuItemDataspace.png") ImageResource menuItemInputspace(); @Source("table.png") ImageResource fileDownload(); // TODO change - @Source("ajax-loader.gif") - ImageResource loader(); - @Source("ajax-loader-big.gif") ImageResource loaderBig(); - + @Source("ajax-complete.gif") ImageResource loadingComplete(); - - @Source("inputSpaceImporter.png") - ImageResource inputSpaceImporter(); - - @Source("inputSpaceMonitor.png") - ImageResource inputSpaceMonitor(); @Source("save.png") ImageResource save(); - @Source("alert.png") - ImageResource error(); - - @Source("arrow_out.png") - ImageResource expand(); - - @Source("arrow_in.png") - ImageResource collapse(); - - @Source("application_view_list.png") - ImageResource groupBy(); - - @Source("map.png") - ImageResource map(); - @Source("user_green.png") ImageResource userPerspective(); - + @Source("monitor.png") ImageResource computationPerspective(); - @Source("arrow_redo.png") - ImageResource resubmit(); - } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.png deleted file mode 100644 index 5177258..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_side_expand.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_side_expand.png deleted file mode 100644 index 030cf7c..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_side_expand.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_view_list.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_view_list.png deleted file mode 100644 index acc30b8..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_view_list.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_in.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_in.png deleted file mode 100644 index 745c651..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_in.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_out.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_out.png deleted file mode 100644 index 2e9bc42..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_out.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_redo.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_redo.png deleted file mode 100644 index fdc394c..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_redo.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector2.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector2.png deleted file mode 100644 index 2f77b2f..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector2.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceImporter.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceImporter.png deleted file mode 100644 index 281d218..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceImporter.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceMonitor.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceMonitor.png deleted file mode 100644 index 9b394e7..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceMonitor.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logo.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logo.png deleted file mode 100644 index ba6819f..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logo.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/map.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/map.png deleted file mode 100644 index f90ef25..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/map.png and /dev/null differ diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/refresh.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/refresh.png deleted file mode 100644 index 1f23890..0000000 Binary files a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/refresh.png and /dev/null differ 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 85b05e5..f32ec7e 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 @@ -368,10 +368,7 @@ public class DataMinerManagerServiceImpl extends RemoteServiceServlet implements HttpSession session = this.getThreadLocalRequest().getSession(); ASLSession aslSession = SessionUtil.getASLSession(session); logger.debug("CancelComputation(): " + itemDescription); - Map properties = StorageUtil.getProperties( - aslSession.getUsername(), itemDescription.getId()); - logger.debug("Properties: " + properties); - String compId = properties.get("computation_id"); + String compId = itemDescription.getName(); if(compId==null){ throw new ServiceException("Computation Id not found!"); } else { 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 dc674ec..35604b3 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 @@ -868,8 +868,7 @@ public class SClient4WPS extends SClient { .getExecuteResponse().getStatus(); if (statusType == null) { logger.debug("WPS FAILURE: Status Type is null"); - computationStatus = new ComputationStatus( - Status.FAILED, 100f); + computationStatus = null; } else { String failure = statusType.getProcessFailed() == null ? null @@ -935,9 +934,20 @@ public class SClient4WPS extends SClient { Status.RUNNING, statusd); } else { - logger.debug("WPS STATUS: Not Started, " - + statusType - .getProcessStarted()); + if (status == -1) { + logger.debug("WPS STATUS: Computation cancelled, " + + statusType + .getProcessStarted()); + computationStatus = new ComputationStatus( + Status.CANCELLED, + -1); + + } else { + + logger.debug("WPS STATUS: Not Started, " + + statusType + .getProcessStarted()); + } } } } @@ -1234,10 +1244,10 @@ public class SClient4WPS extends SClient { } if (userInputs.isEmpty()) { - logger.error("Attention no imputs parameters retrieved for this computation: " + logger.error("Attention no inputs parameters retrieved for this computation: " + computationProperties); throw new Exception( - "Attention no imputs parameters retrieved for this computation: " + "Attention no inputs parameters retrieved for this computation: " + computationProperties); } diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java b/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java index 1f6784c..e566c28 100644 --- a/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java +++ b/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java @@ -43,7 +43,7 @@ public class StorageUtil { public static InputStream getStorageClientInputStream(String url) throws Exception { /* - * try { logger.debug("Get ImputStream from: "+url); SMPUrl smsHome = + * try { logger.debug("Get InputStream from: "+url); SMPUrl smsHome = * new SMPUrl(url); logger.debug("smsHome: [host:" + smsHome.getHost() + * " path:" + smsHome.getPath() + " ref:" + smsHome.getRef() + * " userinfo:" + smsHome.getUserInfo() + " ]"); URLConnection uc = @@ -51,9 +51,9 @@ public class StorageUtil { * uc.getInputStream(); return is; * * } catch (Exception e) { - * logger.error("Error retrieving imput stream from storage: ", e); + * logger.error("Error retrieving input stream from storage: ", e); * e.printStackTrace(); throw new Exception( - * "Error retrieving imput stream from storage: " + + * "Error retrieving input stream from storage: " + * e.getLocalizedMessage(), e); } */ @@ -150,7 +150,7 @@ public class StorageUtil { throw new ServiceException("Folder is not valid!"); } - return getImputStream(user, workSpaceItem); + return getInputStream(user, workSpaceItem); } catch (WorkspaceFolderNotFoundException | InternalErrorException | HomeNotFoundException | ItemNotFoundException e) { @@ -169,7 +169,7 @@ public class StorageUtil { * @return InputStream * @throws StatAlgoImporterServiceException */ - private static InputStream getImputStream(String user, WorkspaceItem wi) + private static InputStream getInputStream(String user, WorkspaceItem wi) throws ServiceException { InputStream is = null; try {