onModuleLoad()
.
+ */
+public class DataMinerManager implements EntryPoint {
+ public static final Resources resources = GWT.create(Resources.class);
+
+ private static final String SM_DIV = "contentDiv";
+ private DataMinerManagerController dataMinerManagerController;
+
+ private Header header;
+ private HomePanel homePanel;
+ private DataSpacePanel dataSpacePanel;
+ private ExperimentPanel experimentPanel;
+ private ComputationsPanel computationsPanel;
+
+ private SimpleContainer previousPanel;
+ private SimpleContainer centerPanel;
+
+ /**
+ * {@inheritDoc}
+ */
+ public void onModuleLoad() {
+
+ /*
+ * Install an UncaughtExceptionHandler which will produce
+ * FATAL
log messages
+ */
+ Log.setUncaughtExceptionHandler();
+
+ // use deferred command to catch initialization exceptions in
+ // onModuleLoad2
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ public void execute() {
+ //loadScope();
+ loadMainPanel();
+ }
+ });
+
+ }
+
+ /*private void loadScope() {
+ ClientScopeHelper.getService().setScope(Location.getHref(),
+ new AsyncCallback" + + new SafeHtmlBuilder().appendEscaped(fileName) + .toSafeHtml().asString() + "
" + + new SafeHtmlBuilder().appendEscaped("NoName") + .toSafeHtml().asString() + "
{intro} {produced}.
Computation of " + + operatorName + "
" + new Date().toString() + + * "
Created, the id is " + + computationId.getId() + " [link]
")); + + 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"); + equivalentRequestLabel.setLabelWidth(140); + 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))); + + 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))); + forceLayout(); + timer.scheduleRepeating(Constants.TIME_UPDATE_COMPUTATION_STATUS_PANEL); + } + + private void showEquivalentRequestDialog() { + EquivalentRequestDialog equivalentRequestDialog = new EquivalentRequestDialog( + computationId); + equivalentRequestDialog.show(); + } + + private void cancelComputation() { + CancelComputationExecutionRequestEvent event = new CancelComputationExecutionRequestEvent( + computationId); + EventBusProvider.INSTANCE.fireEvent(event); + } + + /** + * @param computationId + * @param operator + * + */ + private void computationTerminated(ComputationId computationId, + ComputationStatus computationStatus) { + Log.debug("Computation Terminated"); + 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 " + + computationId.getOperatorName() + + " is terminated correctly."); + int index = vert.getWidgetIndex(progressBar); + vert.remove(index); + // TODO + progressBar = new GreenProgressBar(); + progressBar.updateProgress(1, "Computation Complete"); + vert.insert(progressBar, index, new VerticalLayoutData(1, -1, + new Margins(20))); + showComputationCompletedOutput(); + } else if (computationStatus.isFailed()) { + Log.debug("Computation is Failed"); + String errorMessage; + if (computationStatus.getError() == null) { + errorMessage = new String("Computation Failed!"); + } else { + errorMessage = computationStatus.getError() + .getLocalizedMessage(); + } + Info.display("Failed", + "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + + " is failed."); + UtilsGXT3.alert("Failed", + "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + + " has failed." + errorMessage); + int index = vert.getWidgetIndex(progressBar); + vert.remove(index); + // TODO + progressBar = new RedProgressBar(); + progressBar.updateProgress(1, "Computation Fail"); + progressBar.getElement().getStyle() + .setMarginBottom(36, Unit.PX); + vert.insert(progressBar, index, new VerticalLayoutData(1, -1, + new Margins(20))); + } else if (computationStatus.isCancelled()) { + Log.debug("Computation Cancelled"); + String errorMessage; + errorMessage = new String("Computation Cancelled!"); + Info.display("Info", "The computation " + computationId.getId() + + " of " + computationId.getOperatorName() + + " has been cancelled."); + UtilsGXT3.info("Info", + "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + + " has been cancelled." + errorMessage); + 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))); + } + + } + + forceLayout(); + } + + /** + * + */ + private void showComputationCompletedOutput() { + HtmlLayoutContainer computationEndMessage = new HtmlLayoutContainer( + "The computation " + computationId.getOperatorName() + + " finished.
"); + vert.add(computationEndMessage, new VerticalLayoutData(-1, -1, + new Margins(0))); + ComputationOutputPanel computationOutputPanel = new ComputationOutputPanel( + computationId); + computationOutputPanel.getElement().getStyle() + .setMarginBottom(36, Unit.PX); + vert.add(computationOutputPanel, new VerticalLayoutData(1, -1, + new Margins(0))); + + } + + /** + * @param computationStatus + */ + private void updateStatus(ComputationStatus computationStatus) { + 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) { + progressBar.updateText("Running, 0% Complete"); + } else { + progressBar.updateProgress(percentage / 100, "Running, " + + percentage + "% Complete"); + } + } + forceLayout(); + } + + private class ComputationTimer extends Timer { + + @Override + public void run() { + Log.debug("Timer run ....."); + DataMinerPortletServiceAsync.INSTANCE.getComputationStatus( + computationId, new AsyncCallback" + + p.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + horiz.add(listBox, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + /** + * + */ + @Override + public String getValue() { + return listBox.getCurrentValue(); + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + return listBox.isValid(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ColumnFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ColumnFld.java new file mode 100644 index 0000000..41c2a66 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ColumnFld.java @@ -0,0 +1,184 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import java.util.ArrayList; + +import org.gcube.data.analysis.dataminermanagercl.shared.data.ColumnItem; +import org.gcube.data.analysis.dataminermanagercl.shared.data.TableItemSimple; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ColumnParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.TabularFldChangeEvent; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.TabularFldChangeEvent.TabularFldChangeEventHandler; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.properties.ColumnItemPropertiesCombo; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction; +import com.sencha.gxt.core.client.util.Format; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.shared.ListStore; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.form.ComboBox; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class ColumnFld extends AbstractFld implements + TabularFldChangeEventHandler { + + private String defaultColumn; + private ComboBox" + + columnParameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + vContainer = new SimpleContainer(); + showNoSelectionField(); + horiz.add(vContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + private void showNoSelectionField() { + vContainer.clear(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer( + "Select table from parameter " + + Format.ellipse(referredTabularParameterName, 30) + + "
Columns of Table " + + Format.ellipse(tableItem.getName(), 30) + + "
" + + columnListParameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + vContainer = new SimpleContainer(); + showNoSelectionField(); + horiz.add(vContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + private void createGrid() { + ColumnItemProperties props = GWT.create(ColumnItemProperties.class); + + ColumnConfigSelect table from parameter " + + Format.ellipse(columnListParameter + .getReferredTabularParameterName(), 30) + + "
Columns of Table " + + Format.ellipse(tableItem.getName(), 30) + + "
" + + p.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + SimpleContainer vContainer = new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer( + "Date Value"); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + vField.add(dateField, new VerticalLayoutData(-1, -1, new Margins(0))); + vField.add(typeDescription, new VerticalLayoutData(-1, -1, new Margins( + 0))); + vContainer.add(vField); + + fieldContainer = new SimpleContainer(); + HBoxLayoutContainer horiz = new HBoxLayoutContainer(); + horiz.setPack(BoxLayoutPack.START); + horiz.setEnableOverflow(false); + + horiz.add(vContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + /** + * + */ + @Override + public String getValue() { + String dateS = dateFormat.format(dateField.getCurrentValue()); + return dateS; + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + return dateField.isValid(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/DoubleFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/DoubleFld.java new file mode 100644 index 0000000..5ef3228 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/DoubleFld.java @@ -0,0 +1,102 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; + +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.form.DoubleField; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class DoubleFld extends AbstractFld { + + private SimpleContainer fieldContainer; + private DoubleField numberField; + + /** + * @param operator + */ + public DoubleFld(Parameter parameter) { + super(parameter); + fieldContainer=new SimpleContainer(); + HBoxLayoutContainer horiz = new HBoxLayoutContainer(); + horiz.setPack(BoxLayoutPack.START); + horiz.setEnableOverflow(false); + + ObjectParameter p = (ObjectParameter) parameter; + + numberField = new DoubleField(); + + if (p.getDefaultValue() != null) + numberField.setValue(Double.parseDouble(p.getDefaultValue())); + numberField.setAllowBlank(false); + + HtmlLayoutContainer descr; + + if (p.getDescription() == null) { + descr = new HtmlLayoutContainer(""); + descr.addStyleName("workflow-fieldDescription"); + + } else { + //numberField.setToolTip(p.getDescription()); + descr = new HtmlLayoutContainer("" + + p.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + SimpleContainer vContainer=new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer( + "Double Value"); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + vField.add(numberField, new VerticalLayoutData(-1,-1,new Margins(0))); + vField.add(typeDescription, new VerticalLayoutData(-1,-1,new Margins(0))); + vContainer.add(vField); + + horiz.add(vContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + + fieldContainer.forceLayout(); + } + + /** + * + */ + @Override + public String getValue() { + return numberField.getCurrentValue().toString(); + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + /** + * + */ + @Override + public boolean isValid() { + return numberField.isValid(); + } + + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/EnumFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/EnumFld.java new file mode 100644 index 0000000..17d0fd2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/EnumFld.java @@ -0,0 +1,95 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.EnumParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; + +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.shared.StringLabelProvider; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.form.SimpleComboBox; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class EnumFld extends AbstractFld { + + private SimpleContainer fieldContainer; + private SimpleComboBox" + + p.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + horiz.add(listBox, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + /** + * + */ + @Override + public String getValue() { + return listBox.getCurrentValue(); + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + return listBox.isValid(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/FileFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/FileFld.java new file mode 100644 index 0000000..ae110cc --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/FileFld.java @@ -0,0 +1,312 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.FileParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.DataMinerManager; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusProvider; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.SessionExpiredEvent; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.rpc.DataMinerPortletServiceAsync; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.UtilsGXT3; +import org.gcube.portlets.widgets.dataminermanagerwidget.shared.exception.SessionExpiredServiceException; +import org.gcube.portlets.widgets.dataminermanagerwidget.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.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.core.client.dom.XDOM; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.form.TextField; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class FileFld extends AbstractFld { + + private VerticalLayoutContainer vp; + + // FileSelector fileSelector; + private WorkspaceExplorerSelectDialog wselectDialog; + private TextButton selectButton, selectButton2, cancelButton; + private ItemDescription selectedFileItem = null; + + private FileParameter fileParameter; + + private SimpleContainer fieldContainer; + + private HBoxLayoutContainer horiz; + + private TextButton downloadButton; + + /** + * @param parameter + */ + public FileFld(Parameter parameter) { + super(parameter); + fileParameter = (FileParameter) parameter; + + SimpleContainer tabContainer = new SimpleContainer(); + vp = new VerticalLayoutContainer(); + init(); + tabContainer.add(vp, new MarginData(new Margins(0))); + + fieldContainer = new SimpleContainer(); + horiz = new HBoxLayoutContainer(); + horiz.setPack(BoxLayoutPack.START); + horiz.setEnableOverflow(false); + + HtmlLayoutContainer descr; + + if (fileParameter.getDescription() == null) { + descr = new HtmlLayoutContainer(""); + descr.addStyleName("workflow-fieldDescription"); + + } else { + descr = new HtmlLayoutContainer("" + + fileParameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + horiz.add(tabContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + showNoSelectionField(); + + } + + private void init() { + + List" + + p.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + SimpleContainer vContainer = new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer( + "Float Value"); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + vField.add(numberField, new VerticalLayoutData(-1, -1, new Margins(0))); + vField.add(typeDescription, new VerticalLayoutData(-1, -1, new Margins( + 0))); + vContainer.add(vField); + + horiz.add(vContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + /** + * + */ + @Override + public String getValue() { + Float f = numberField.getCurrentValue(); + return f.toString(); + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + return numberField.isValid(); + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/IntFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/IntFld.java new file mode 100644 index 0000000..6adef8e --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/IntFld.java @@ -0,0 +1,100 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; + +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.form.IntegerField; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class IntFld extends AbstractFld { + + private SimpleContainer fieldContainer; + private IntegerField numberField; + + /** + * @param operator + */ + public IntFld(Parameter parameter) { + super(parameter); + fieldContainer = new SimpleContainer(); + HBoxLayoutContainer horiz = new HBoxLayoutContainer(); + horiz.setPack(BoxLayoutPack.START); + horiz.setEnableOverflow(false); + + ObjectParameter p = (ObjectParameter) parameter; + + numberField = new IntegerField(); + + if (p.getDefaultValue() != null) + numberField.setValue(Integer.parseInt(p.getDefaultValue())); + numberField.setAllowBlank(false); + + HtmlLayoutContainer descr; + + if (p.getDescription() == null) { + descr = new HtmlLayoutContainer(""); + descr.addStyleName("workflow-fieldDescription"); + + } else { + //numberField.setToolTip(p.getDescription()); + descr = new HtmlLayoutContainer("" + + p.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + SimpleContainer vContainer=new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer( + "Integer Value"); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + vField.add(numberField, new VerticalLayoutData(-1,-1,new Margins(0))); + vField.add(typeDescription, new VerticalLayoutData(-1,-1,new Margins(0))); + vContainer.add(vField); + + horiz.add(vContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + /** + * + */ + @Override + public String getValue() { + Integer i = numberField.getCurrentValue(); + return i.toString(); + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + + @Override + public boolean isValid() { + return numberField.isValid(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ListIntFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ListIntFld.java new file mode 100644 index 0000000..3824ed9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ListIntFld.java @@ -0,0 +1,238 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ListParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.DataMinerManager; + +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.form.IntegerField; + +/** + * + * @author Giancarlo Panichi + * email: g.panichi@isti.cnr.it + * + */ +public class ListIntFld extends AbstractFld { + + private List" + + listParameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + horiz.add(listContainer, new BoxLayoutData(new Margins(0))); + horiz.add(descr, new BoxLayoutData(new Margins(0))); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + + } + + private void addField(Item upperItem) { + + ObjectParameter objPar = new ObjectParameter(listParameter.getName(), + listParameter.getDescription(), listParameter.getType(), null); + + if (upperItem == null) { + Item item = new Item(objPar, true); + items.add(item); + vp.add(item, new VerticalLayoutData(1, -1, new Margins())); + } else { + // search the position of the upper item + int pos = 0; + for (int i = 0; i < items.size(); i++) + if (items.get(i) == upperItem) { + pos = i; + break; + } + + upperItem.showCancelButton(); + Item item = new Item(objPar, false); + items.add(pos + 1, item); + vp.insert(item, pos + 1); + } + + } + + /** + * @param item + */ + private void removeField(Item item) { + items.remove(item); + + vp.remove(item); + + if (items.size() == 1) { + items.get(0).hideCancelButton(); + } + + simpleContainer.forceLayout(); + + } + + /** + * + */ + @Override + public String getValue() { + String separator = listParameter.getSeparator(); + String value = ""; + boolean first = true; + for (Item item : items) { + Integer itemValue = item.getValue(); + if (itemValue != null) { + value += (first ? "" : separator) + itemValue; + first = false; + } + } + return value; + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + /** + * + */ + @Override + public boolean isValid() { + for (Item item : items) + if (!item.isValid()) { + return false; + } + return true; + } + + private class Item extends HBoxLayoutContainer { + + private IntegerField field; + private TextButton addBtn; + private TextButton removeBtn; + + /** + * @param objPar + */ + public Item(ObjectParameter objectParameter, boolean first) { + super(); + + field = new IntegerField(); + field.setAllowBlank(false); + + addBtn = new TextButton(""); + + addBtn.setIcon(DataMinerManager.resources.add()); + + addBtn.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + addField(Item.this); + forceLayout(); + vp.forceLayout(); + fieldContainer.forceLayout(); + } + }); + + removeBtn = new TextButton(""); + + removeBtn.setIcon(DataMinerManager.resources.cancel()); + + removeBtn.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + removeField(Item.this); + forceLayout(); + vp.forceLayout(); + fieldContainer.forceLayout(); + + } + }); + + removeBtn.setVisible(!first); + + setPack(BoxLayoutPack.START); + setEnableOverflow(false); + add(field, new BoxLayoutData(new Margins())); + add(addBtn, new BoxLayoutData(new Margins())); + add(removeBtn, new BoxLayoutData(new Margins())); + + forceLayout(); + } + + public void showCancelButton() { + removeBtn.setVisible(true); + } + + public void hideCancelButton() { + removeBtn.setVisible(false); + } + + public Integer getValue() { + return field.getCurrentValue(); + } + + public boolean isValid() { + return field.isValid(); + } + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ListStringFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ListStringFld.java new file mode 100644 index 0000000..80a3b99 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/ListStringFld.java @@ -0,0 +1,173 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ListParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; + +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class ListStringFld extends AbstractFld { + + private SimpleContainer fieldContainer; + private HBoxLayoutContainer horiz; + private SimpleContainer listContainer; + private VerticalLayoutContainer vp; + private List" + + listParameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + horiz.add(listContainer, new BoxLayoutData(new Margins(0))); + horiz.add(descr, new BoxLayoutData(new Margins(0))); + + fieldContainer.add(horiz); + addField(null); + } + + protected void addField(StringItem upperItem) { + + ObjectParameter objPar = new ObjectParameter(listParameter.getName(), + listParameter.getDescription(), listParameter.getType(), null); + + if (upperItem == null) { + StringItem item = new StringItem(this, objPar, true); + items.add(item); + vp.add(item); + } else { + // search the position of the upper item + int pos = items.indexOf(upperItem); + if (pos > -1) { + upperItem.showCancelButton(); + upperItem.forceLayout(); + StringItem item = new StringItem(this, objPar, false); + items.add(pos + 1, item); + vp.insert(item, pos + 1);//don't use new VerticalLayoutData(1, -1,new Margins(0)) + } else { + upperItem.forceLayout(); + StringItem item = new StringItem(this, objPar, true); + items.add(item); + vp.add(item);//don't use new VerticalLayoutData(-1, -1, new Margins(0)) + } + } + + forceLayout(); + + + } + + protected void forceLayout(){ + vp.forceLayout(); + horiz.forceLayout(); + fieldContainer.forceLayout(); + } + + + /** + * @param item + */ + protected void removeField(StringItem item) { + items.remove(item); + + vp.remove(item); + + if (items.size() == 1) { + items.get(0).hideCancelButton(); + items.get(0).forceLayout(); + } + + forceLayout(); + } + + /** + * + */ + @Override + public String getValue() { + String separator = listParameter.getSeparator(); + String value = ""; + boolean first = true; + for (StringItem item : items) { + String itemValue = item.getValue(); + if (itemValue != null && !itemValue.contentEquals("")) { + value += (first ? "" : separator) + itemValue; + first = false; + } + } + return value; + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + /** + * + */ + @Override + public boolean isValid() { + boolean valid = false; + for (StringItem item : items) + if (item.isValid()) { + valid = true; + break; + } + return valid; + } + + + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/OperatorFieldWidget.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/OperatorFieldWidget.java new file mode 100644 index 0000000..df17640 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/OperatorFieldWidget.java @@ -0,0 +1,173 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ListParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; + +import com.allen_sauer.gwt.log.client.Log; +import com.sencha.gxt.widget.core.client.form.FieldLabel; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class OperatorFieldWidget { + + private Parameter parameter; + private AbstractFld field; + private FieldLabel parameterLabel; + + /** + */ + public OperatorFieldWidget(Parameter p) { + super(); + this.parameter = p; + + try { + if (p.getTypology() != null) { + switch (p.getTypology()) { + case COLUMN: + field = new ColumnFld(p); + break; + case COLUMN_LIST: + field = new ColumnListFld(p); + break; + case ENUM: + field = new EnumFld(p); + break; + case FILE: + field = new FileFld(p); + break; + case LIST: + field = createListField(p); + break; + case OBJECT: + field = createObjectField(p); + break; + case TABULAR: + field = new TabularFld(p); + break; + case TABULAR_LIST: + field = new TabularListFld(p); + break; + case WKT: + field = new WKTFld(p); + break; + case DATE: + field = new DateFld(p); + break; + case TIME: + field = new TimeFld(p); + break; + default: + break; + + } + } + + if (field == null) { + parameterLabel = new FieldLabel(null, p.getName()); + parameterLabel.setLabelWidth(200); + parameterLabel.setLabelWordWrap(true); + + } else { + parameterLabel = new FieldLabel(field.getWidget(), p.getName()); + parameterLabel.setLabelWidth(200); + parameterLabel.setLabelWordWrap(true); + } + } catch (Throwable e) { + Log.error("Error: " + e.getLocalizedMessage()); + e.printStackTrace(); + } + + } + + /** + * @return the parameter + */ + public Parameter getParameter() { + return parameter; + } + + public String getFieldValue() { + return field.getValue(); + } + + public String getValue() { + return getFieldValue(); + } + + public FieldLabel getParameterLabel() { + return parameterLabel; + } + + /** + * @param p + * @return + */ + private AbstractFld createObjectField(Parameter p) { + ObjectParameter objectParameter = (ObjectParameter) p; + String type = objectParameter.getType(); + if (type.contentEquals(Integer.class.getName())) { + return new IntFld(objectParameter); + } else if (type.contentEquals(String.class.getName())) { + return new StringFld(objectParameter); + } else if (type.contentEquals(Boolean.class.getName())) { + return new BooleanFld(objectParameter); + } else if (type.contentEquals(Double.class.getName())) { + return new DoubleFld(objectParameter); + } else if (type.contentEquals(Float.class.getName())) { + return new FloatFld(objectParameter); + } else + return null; + } + + /** + * + */ + private AbstractFld createListField(Parameter p) { + ListParameter listParameter = (ListParameter) p; + String type = listParameter.getType(); + + if (type.contentEquals(String.class.getName()) + || type.contentEquals("STRING")) { // TODO REMOVE "STRING" + return new ListStringFld(listParameter); + } else if (type.contentEquals(Integer.class.getName()) + || type.contentEquals("NUMBER")) { + return new ListIntFld(listParameter); + } + // } else if (type.contentEquals(Boolean.class.getName())) { + // return new ListBooleanField(p); + // } else if (type.contentEquals(Double.class.getName())) { + // return new ListDoubleField(p); + // } else if (type.contentEquals(Float.class.getName())) { + // return new ListFloatField(p); + // } + else + return null; + } + + /** + * + */ + public void updateOperatorParameterValue() { + this.parameter.setValue(this.getFieldValue()); + } + + public AbstractFld getField() { + return field; + } + + public boolean isValid() { + if (field != null) + return field.isValid(); + else + return false; + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/StringFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/StringFld.java new file mode 100644 index 0000000..8447318 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/StringFld.java @@ -0,0 +1,102 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; + +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.form.TextField; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class StringFld extends AbstractFld { + + private SimpleContainer fieldContainer; + private TextField textField; + + /** + * @param parameter + */ + public StringFld(Parameter parameter) { + super(parameter); + + ObjectParameter p = (ObjectParameter) parameter; + + textField = new TextField(); + textField.setValue(p.getDefaultValue()); + + if (p.getDefaultValue() == null) + textField.setAllowBlank(false); + + HtmlLayoutContainer descr; + + if (p.getDescription() == null) { + descr=new HtmlLayoutContainer(""); + descr.addStyleName("workflow-fieldDescription"); + + } else { + //textField.setToolTip(p.getDescription()); + descr=new HtmlLayoutContainer(""+p.getDescription()+"
"); + descr.addStyleName("workflow-fieldDescription"); + } + + SimpleContainer vContainer=new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer( + "String Value"); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + vField.add(textField, new VerticalLayoutData(-1,-1,new Margins(0))); + vField.add(typeDescription, new VerticalLayoutData(-1,-1,new Margins(0))); + vContainer.add(vField); + + fieldContainer = new SimpleContainer(); + HBoxLayoutContainer horiz = new HBoxLayoutContainer(); + horiz.setPack(BoxLayoutPack.START); + horiz.setEnableOverflow(false); + + + horiz.add(vContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + /** + * + */ + @Override + public String getValue() { + return textField.getValue(); + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + return textField.isValid(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/StringItem.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/StringItem.java new file mode 100644 index 0000000..2d12c99 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/StringItem.java @@ -0,0 +1,92 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.DataMinerManager; + +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.form.TextField; + +/** + * + * @author Giancarlo Panichi + * email: g.panichi@isti.cnr.it + * + */ +public class StringItem extends HBoxLayoutContainer { + private ListStringFld parent; + private TextField field; + private TextButton addBtn; + private TextButton removeBtn; + + /** + * @param objPar + */ + public StringItem(ListStringFld parent, ObjectParameter objectParameter, boolean first) { + super(); + this.parent=parent; + create(objectParameter,first); + } + + private void create( ObjectParameter objectParameter, boolean first){ + field = new TextField(); + field.setAllowBlank(false); + + addBtn = new TextButton(""); + + addBtn.setIcon(DataMinerManager.resources.add()); + + addBtn.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + parent.addField(StringItem.this); + + + } + }); + + removeBtn = new TextButton(""); + + removeBtn.setIcon(DataMinerManager.resources.cancel()); + + removeBtn.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + parent.removeField(StringItem.this); + + + } + }); + + removeBtn.setVisible(!first); + + setPack(BoxLayoutPack.START); + setEnableOverflow(false); + add(field, new BoxLayoutData(new Margins())); + add(addBtn, new BoxLayoutData(new Margins())); + add(removeBtn, new BoxLayoutData(new Margins())); + + forceLayout(); + } + + public void showCancelButton() { + removeBtn.setVisible(true); + } + + public void hideCancelButton() { + removeBtn.setVisible(false); + } + + public String getValue() { + return field.getCurrentValue(); + } + + public boolean isValid() { + return field.isValid(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/TabItem.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/TabItem.java new file mode 100644 index 0000000..57df57d --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/TabItem.java @@ -0,0 +1,325 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.gcube.data.analysis.dataminermanagercl.shared.data.TableItemSimple; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.TabularParameter; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.DataMinerManager; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusProvider; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.SessionExpiredEvent; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.rpc.DataMinerPortletServiceAsync; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.UtilsGXT3; +import org.gcube.portlets.widgets.dataminermanagerwidget.shared.exception.SessionExpiredServiceException; +import org.gcube.portlets.widgets.dataminermanagerwidget.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; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.form.TextField; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class TabItem extends HBoxLayoutContainer { + + private TabularListFld parent; + private TextButton selectButton; + private TextButton selectButton2; + private TableItemSimple selectedTableItem; + private TextButton addBtn; + private TextButton removeBtn; + private TextField tableDescription; + private WorkspaceExplorerSelectDialog wselectDialog; + private TextButton downloadButton; + private ItemDescription itemDescriptionSelected; + + /** + * + * @param tabularListFld + * @param tabularParameter + * @param first + */ + public TabItem(TabularListFld parent, TabularParameter tabularParameter, + boolean first) { + super(); + this.parent = parent; + initDialog(); + create(tabularParameter, first); + } + + private void create(TabularParameter tabularParameter, boolean first) { + + tableDescription = new TextField(); + tableDescription.setReadOnly(true); + tableDescription.setVisible(false); + + selectButton = new TextButton("Select Data Set"); + selectButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + wselectDialog.show(); + } + }); + + selectButton.setIcon(DataMinerManager.resources.folderExplore()); + 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 + public void onSelect(SelectEvent event) { + wselectDialog.show(); + } + }); + selectButton2.setVisible(false); + + + downloadButton = new TextButton(""); + downloadButton.setIcon(DataMinerManager.resources.download()); + 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 + public void onSelect(SelectEvent event) { + parent.addField(TabItem.this); + + } + }); + + removeBtn = new TextButton(""); + removeBtn.setIcon(DataMinerManager.resources.cancel()); + removeBtn.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + selectedTableItem = null; + parent.removeField(TabItem.this); + + } + }); + 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(); + + } + + private void initDialog() { + + ListSuitable Data Set Templates:
" + list + "
" + + tabularParameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + horiz.add(tabContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + } + + private void init() throws Exception { + try { + ListSuitable Data Set Templates:
" +
+ * list+"
" + + tabularListParameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + horiz.add(listContainer); + horiz.add(descr); + + fieldContainer.add(horiz, new MarginData(new Margins(0))); + fieldContainer.forceLayout(); + addField(null); + } + + protected void addField(TabItem upperItem) { + try { + + TabularParameter tabPar = new TabularParameter( + tabularListParameter.getName(), + tabularListParameter.getDescription(), null, + tabularListParameter.getTemplates(), + tabularListParameter.getDefaultMimeType(), + tabularListParameter.getSupportedMimeTypes()); + + if (upperItem == null) { + TabItem item = new TabItem(this, tabPar, true); + items.add(item); + vp.add(item);// don't use new VerticalLayoutData(1, -1, new + // Margins(0)) + } else { + // search the position of the upper item + int pos = items.indexOf(upperItem); + if (pos > -1) { + upperItem.showCancelButton(); + upperItem.forceLayout(); + TabItem item = new TabItem(this, tabPar, false); + items.add(pos + 1, item); + vp.insert(item, pos + 1);// don't use new + // VerticalLayoutData(-1, -1,new + // Margins(0)) + } else { + upperItem.forceLayout(); + TabItem item = new TabItem(this, tabPar, true); + items.add(item); + vp.add(item);// don't use new VerticalLayoutData(-1, -1, new + // Margins(0)) + } + } + + forceLayout(); + + } catch (Throwable e) { + Log.error(e.getLocalizedMessage()); + e.printStackTrace(); + } + } + + /** + * + * @param item + */ + protected void removeField(TabItem item) { + items.remove(item); + + if (items.size() == 1) { + items.get(0).hideCancelButton(); + items.get(0).forceLayout(); + } + vp.remove(item); + forceLayout(); + } + + /** + * + */ + protected void forceLayout() { + vp.forceLayout(); + listContainer.forceLayout(); + horiz.forceLayout(); + fieldContainer.forceLayout(); + } + + /** + * + */ + @Override + public String getValue() { + String separator = tabularListParameter.getSeparator(); + // String separator=""; + String value = ""; + boolean first = true; + for (TabItem item : items) { + String itemValue = item.getValue(); + if (itemValue != null && !itemValue.contentEquals("")) { + value += (first ? "" : separator) + itemValue; + first = false; + } + } + return value; + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + boolean valid = false; + for (TabItem item : items) + if (item.isValid()) { + valid = true; + break; + } + return valid; + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/TimeFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/TimeFld.java new file mode 100644 index 0000000..0e91c14 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/TimeFld.java @@ -0,0 +1,120 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import java.util.Date; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.TimeParameter; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.form.TimeField; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class TimeFld extends AbstractFld { + + private SimpleContainer fieldContainer; + private TimeField timeField; + private DateTimeFormat timeFormat; + + /** + * @param parameter + */ + public TimeFld(Parameter parameter) { + super(parameter); + + TimeParameter p = (TimeParameter) parameter; + + timeField = new TimeField(); + timeField.setTriggerAction(TriggerAction.ALL); + timeField.setFormat(DateTimeFormat.getFormat("HH:mm:ss")); + timeFormat = DateTimeFormat.getFormat("HH:mm:ss"); + + try { + Date defaultDate = timeFormat.parse(p.getDefaultValue()); + timeField.setValue(defaultDate); + } catch (Throwable e) { + Log.error("DateFld invalid default value" + p.getDefaultValue()); + } + + if (p.getDefaultValue() == null || p.getDefaultValue().isEmpty()) + timeField.setAllowBlank(false); + + HtmlLayoutContainer descr; + + if (p.getDescription() == null) { + descr = new HtmlLayoutContainer( + ""); + descr.addStyleName("workflow-fieldDescription"); + + } else { + // textField.setToolTip(p.getDescription()); + descr = new HtmlLayoutContainer( + "" + + p.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + SimpleContainer vContainer = new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer( + "Time Value"); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + vField.add(timeField, new VerticalLayoutData(-1, -1, new Margins(0))); + vField.add(typeDescription, new VerticalLayoutData(-1, -1, new Margins( + 0))); + vContainer.add(vField); + + fieldContainer = new SimpleContainer(); + HBoxLayoutContainer horiz = new HBoxLayoutContainer(); + horiz.setPack(BoxLayoutPack.START); + horiz.setEnableOverflow(false); + + horiz.add(vContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + fieldContainer.forceLayout(); + + } + + /** + * + */ + @Override + public String getValue() { + String timeS = timeFormat.format(timeField.getCurrentValue()); + return timeS; + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + return timeField.isValid(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/WKTFld.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/WKTFld.java new file mode 100644 index 0000000..27794e4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/parametersfield/WKTFld.java @@ -0,0 +1,249 @@ +/** + * + */ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.parametersfield; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.WKTParameter; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.DataMinerManager; +import org.gcube.portlets.widgets.dataminermanagerwidget.client.util.UtilsGXT3; +import org.gcube.portlets.widgets.openlayerbasicwidgets.client.event.SelectAreaDialogEvent; +import org.gcube.portlets.widgets.openlayerbasicwidgets.client.event.SelectAreaDialogEvent.SelectAreaDialogEventHandler; +import org.gcube.portlets.widgets.openlayerbasicwidgets.client.widgets.AreaSelectionDialog; +import org.gcube.portlets.widgets.openlayerbasicwidgets.client.widgets.GeometryType; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.shared.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.sencha.gxt.core.client.dom.XDOM; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; +import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; +import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.SimpleContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.form.TextField; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class WKTFld extends AbstractFld { + + private VerticalLayoutContainer vp; + + // FileSelector fileSelector; + private AreaSelectionDialog areaSelectionDialog; + private TextButton selectButton, selectButton2, cancelButton; + private String selectedArea = null; + + private WKTParameter wktParameter; + + private SimpleContainer fieldContainer; + + private HBoxLayoutContainer horiz; + + private TextField selectedAreaField; + + /** + * @param parameter + */ + public WKTFld(Parameter parameter) { + super(parameter); + wktParameter = (WKTParameter) parameter; + + SimpleContainer wktContainer = new SimpleContainer(); + vp = new VerticalLayoutContainer(); + init(); + wktContainer.add(vp, new MarginData(new Margins(0))); + + fieldContainer = new SimpleContainer(); + horiz = new HBoxLayoutContainer(); + horiz.setPack(BoxLayoutPack.START); + horiz.setEnableOverflow(false); + + HtmlLayoutContainer descr; + + if (wktParameter.getDescription() == null) { + descr = new HtmlLayoutContainer( + ""); + descr.addStyleName("workflow-fieldDescription"); + + } else { + descr = new HtmlLayoutContainer( + "" + + wktParameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + } + + horiz.add(wktContainer, new BoxLayoutData(new Margins())); + horiz.add(descr, new BoxLayoutData(new Margins())); + + fieldContainer.add(horiz); + showNoSelectionField(); + + } + + private GeometryType getGeometryType() { + if (wktParameter.getWktGeometryType() == null) { + return GeometryType.Polygon; + } + + switch (wktParameter.getWktGeometryType()) { + case Box: + return GeometryType.Box; + case Circle: + return GeometryType.Circle; + case Hexagon: + return GeometryType.Hexagon; + case LineString: + return GeometryType.LineString; + case Pentagon: + return GeometryType.Pentagon; + case Point: + return GeometryType.Point; + case Polygon: + return GeometryType.Polygon; + case Square: + return GeometryType.Square; + case Triangle: + return GeometryType.Triangle; + default: + return GeometryType.Polygon; + + } + } + + private void drawAGeometry() { + SelectAreaDialogEventHandler handler = new SelectAreaDialogEventHandler() { + + @Override + public void onResponse(SelectAreaDialogEvent event) { + GWT.log("SelectAreaDialog Response: " + event); + switch (event.getSelectAreaDialogEventType()) { + case Aborted: + Log.debug("No area selected!"); + break; + case Completed: + selectedArea = event.getArea(); + Log.debug("SelectedFileItem: " + selectedArea); + showFieldWithSelection(); + break; + case Failed: + Log.error("Error during area selection: " + + event.getException()); + UtilsGXT3.alert("Error", event.getErrorMessage()); + break; + default: + break; + + } + } + }; + + areaSelectionDialog = new AreaSelectionDialog(getGeometryType()); + areaSelectionDialog.setZIndex(XDOM.getTopZIndex()); + areaSelectionDialog.addSelectAreaDialogEventHandler(handler); + areaSelectionDialog.show(); + + } + + private void init() { + selectButton = new TextButton("Draw a " + + wktParameter.getWktGeometryType().getLabel()); + selectButton.setIcon(DataMinerManager.resources.drawGeometry()); + selectButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + drawAGeometry(); + + } + }); + //selectButton.setToolTip("Draw a " + // + wktParameter.getWktGeometryType().getLabel()); + + selectButton2 = new TextButton(""); + selectButton2.setIcon(DataMinerManager.resources.folderExplore()); + selectButton2.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + drawAGeometry(); + } + }); + //selectButton2.setToolTip("Select Another " + // + wktParameter.getWktGeometryType().getLabel()); + + cancelButton = new TextButton(""); + cancelButton.setIcon(DataMinerManager.resources.cancel()); + cancelButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + selectedArea = null; + showNoSelectionField(); + } + }); + + } + + private void showNoSelectionField() { + vp.clear(); + vp.add(selectButton); + vp.forceLayout(); + fieldContainer.forceLayout(); + } + + private void showFieldWithSelection() { + if (selectedArea == null || selectedArea.isEmpty()) { + selectedArea = ""; + } + + selectedAreaField = new TextField(); + if (selectedArea != null && !selectedArea.isEmpty()) { + selectedAreaField.setValue(selectedArea); + } + selectedAreaField.setReadOnly(true); + + HBoxLayoutContainer h = new HBoxLayoutContainer(); + h.add(selectedAreaField, new BoxLayoutData(new Margins())); + h.add(selectButton2, new BoxLayoutData(new Margins())); + h.add(cancelButton, new BoxLayoutData(new Margins())); + vp.clear(); + vp.add(h); + vp.forceLayout(); + fieldContainer.forceLayout(); + + } + + @Override + public String getValue() { + if (selectedAreaField != null) { + return selectedAreaField.getCurrentValue(); + } else { + return wktParameter.getDefaultValue(); + } + } + + @Override + public boolean isValid() { + if (selectedAreaField != null) { + return selectedAreaField.isValid(); + } else { + return true; + } + } + + @Override + public Widget getWidget() { + return fieldContainer; + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/properties/ColumnItemProperties.java b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/properties/ColumnItemProperties.java new file mode 100644 index 0000000..fdd8188 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/dataminermanagerwidget/client/properties/ColumnItemProperties.java @@ -0,0 +1,25 @@ +package org.gcube.portlets.widgets.dataminermanagerwidget.client.properties; + + + +import org.gcube.data.analysis.dataminermanagercl.shared.data.ColumnItem; + +import com.google.gwt.editor.client.Editor.Path; +import com.sencha.gxt.core.client.ValueProvider; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.PropertyAccess; + +/** + * + * @author Giancarlo Panichi + * email: g.panichi@isti.cnr.it + * + */ +public interface ColumnItemProperties extends PropertyAccess