onModuleLoad()
.
+ */
+public class DataMinerExecutor implements EntryPoint {
+ public static final Resources resources = GWT.create(Resources.class);
+
+ private static final String SM_DIV = "contentDiv";
+ private DataMinerExecutorController dataMinerExecutorController;
+
+ private Header header;
+ //private HomePanel homePanel;
+ private ExperimentPanel experimentPanel;
+
+ //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{intro} {produced}.
Computation of " + + operatorName + "
" + new Date().toString() + + * "
Created, the id is " + + computationId.getId() + "
")); + + 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(); + ElementsHighlights el=new ElementsHighlights(); + errorMessage=el.createLinkFromText(errorMessage); + + } + Info.display("Failed", + "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + + " is failed."); + UtilsGXT3.alert("Failed", + "The computation " + computationId.getId() + " of " + + computationId.getOperatorName() + + " has failed." + errorMessage); + 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 ....."); + DataMinerExecutorServiceAsync.INSTANCE.getComputationStatus( + computationId, new AsyncCallback" + + 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) + + "
" + parameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + + String typology = "Columns of Table "+columnListParameter.getReferredTabularParameterName(); + + SimpleContainer vContainer = new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer(typology); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + + HtmlLayoutContainer val = new HtmlLayoutContainer(columnListHtml.toString()); + val.addStyleName("workflow-fieldValue"); + + vField.add(val, 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 value; + + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + if (value != null && !value.isEmpty()) { + return true; + } else { + return false; + } + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/EnumFld.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/EnumFld.java new file mode 100644 index 0000000..77beb85 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/EnumFld.java @@ -0,0 +1,94 @@ +/** + * + */ +package org.gcube.portlets.user.dataminerexecutor.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 + * + * + */ +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/user/dataminerexecutor/client/parametersfield/FileFld.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/FileFld.java new file mode 100644 index 0000000..3ad9038 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/FileFld.java @@ -0,0 +1,109 @@ +/** + * + */ +package org.gcube.portlets.user.dataminerexecutor.client.parametersfield; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; + +import com.allen_sauer.gwt.log.client.Log; +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; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class FileFld extends AbstractFld { + + private SimpleContainer fieldContainer; + //private TextField textField; + private String value; + + + /** + * @param parameter + * parameter + */ + public FileFld(Parameter parameter) { + super(parameter); + + //ObjectParameter p = (ObjectParameter) parameter; + Log.debug("Create File field: "+parameter.getName()); + value=parameter.getValue(); + + HtmlLayoutContainer descr; + + descr = new HtmlLayoutContainer(""); + descr.addStyleName("workflow-fieldDescription"); + + descr = new HtmlLayoutContainer("" + parameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + + SimpleContainer vContainer = new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer("File Value"); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + + //textField = new TextField(); + //textField.setValue(p.getValue()); + //textField.isReadOnly(); + + HtmlLayoutContainer val = new HtmlLayoutContainer("File"); + val.addStyleName("workflow-fieldValue"); + + + vField.add(val, 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 value; + + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + if(value!=null&&!value.isEmpty()){ + return true; + } else { + return false; + } + } +} diff --git a/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/ListIntFld.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/ListIntFld.java new file mode 100644 index 0000000..fa94ad8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/ListIntFld.java @@ -0,0 +1,238 @@ +/** + * + */ +package org.gcube.portlets.user.dataminerexecutor.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.user.dataminerexecutor.client.DataMinerExecutor; + +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 + * + * + */ +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(DataMinerExecutor.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(DataMinerExecutor.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/user/dataminerexecutor/client/parametersfield/ListStringFld.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/ListStringFld.java new file mode 100644 index 0000000..60f9169 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/ListStringFld.java @@ -0,0 +1,169 @@ +/** + * + */ +package org.gcube.portlets.user.dataminerexecutor.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 + * + * + */ +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(); + } + + 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/user/dataminerexecutor/client/parametersfield/OperatorFieldWidget.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/OperatorFieldWidget.java new file mode 100644 index 0000000..4113a08 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/OperatorFieldWidget.java @@ -0,0 +1,115 @@ +/** + * + */ +package org.gcube.portlets.user.dataminerexecutor.client.parametersfield; + +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 + * + * + */ +public class OperatorFieldWidget { + + private Parameter parameter; + private AbstractFld field; + private FieldLabel parameterLabel; + + /** + * + * @param parameter + * parameter + */ + public OperatorFieldWidget(Parameter parameter) { + super(); + this.parameter = parameter; + + try { + field = new StringFld(parameter); + + if (parameter.getTypology() != null) { + switch (parameter.getTypology()) { + case COLUMN: + case WKT: + case DATE: + case TIME: + case ENUM: + case OBJECT: + field = new StringFld(parameter); + break; + case FILE: + field = new FileFld(parameter); + break; + case TABULAR: + field = new TabularFld(parameter); + break; + case COLUMN_LIST: + field = new ColumnListFld(parameter); + break; + case LIST: + field = new ListStringFld(parameter); + break; + case TABULAR_LIST: + field = new TabularListFld(parameter); + break; + default: + break; + + } + } + + + + if (field == null) { + parameterLabel = new FieldLabel(null, parameter.getName()); + parameterLabel.setLabelWidth(200); + parameterLabel.setLabelWordWrap(true); + + } else { + parameterLabel = new FieldLabel(field.getWidget(), parameter.getName()); + parameterLabel.setLabelWidth(200); + parameterLabel.setLabelWordWrap(true); + } + } catch (Throwable e) { + Log.error("Error: " + e.getLocalizedMessage(),e); + } + + } + + /** + * @return the parameter + */ + public Parameter getParameter() { + return parameter; + } + + public String getFieldValue() { + return field.getValue(); + } + + public String getValue() { + return getFieldValue(); + } + + public FieldLabel getParameterLabel() { + return parameterLabel; + } + + + 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/user/dataminerexecutor/client/parametersfield/StringFld.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/StringFld.java new file mode 100644 index 0000000..7c106e4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/StringFld.java @@ -0,0 +1,145 @@ +/** + * + */ +package org.gcube.portlets.user.dataminerexecutor.client.parametersfield; + +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.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 + * + * + */ +public class StringFld extends AbstractFld { + + private SimpleContainer fieldContainer; + // private TextField textField; + private String value; + + /** + * @param parameter + * parameter + */ + public StringFld(Parameter parameter) { + super(parameter); + + // ObjectParameter p = (ObjectParameter) parameter; + Log.debug("Create String field: " + parameter.getName()); + value = parameter.getValue(); + + HtmlLayoutContainer descr; + + descr = new HtmlLayoutContainer(""); + descr.addStyleName("workflow-fieldDescription"); + + descr = new HtmlLayoutContainer( + "" + parameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + + String typology; + switch (parameter.getTypology()) { + case COLUMN: + typology="Column Value"; + case WKT: + typology="Wkt Value"; + case DATE: + typology="Date Value"; + case TIME: + typology="Time Value"; + case ENUM: + typology="Enum Value"; + case OBJECT: + typology=getObjectParameterTypology(); + break; + default: + typology="Value"; + break; + } + + SimpleContainer vContainer = new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer(typology); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + + HtmlLayoutContainer val = new HtmlLayoutContainer( + "" + parameter.getValue() + ""); + val.addStyleName("workflow-fieldValue"); + + vField.add(val, 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(); + + } + + + private String getObjectParameterTypology(){ + ObjectParameter objectParameter = (ObjectParameter) parameter; + String type = objectParameter.getType(); + if (type.contentEquals(Integer.class.getName())) { + return "Integer Value"; + } else if (type.contentEquals(String.class.getName())) { + return "String Value"; + } else if (type.contentEquals(Boolean.class.getName())) { + return "Boolean Value"; + } else if (type.contentEquals(Double.class.getName())) { + return "Double Value"; + } else if (type.contentEquals(Float.class.getName())) { + return "Float Value"; + } else + return "Value"; + } + + /** + * + */ + @Override + public String getValue() { + + return value; + + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + if (value != null && !value.isEmpty()) { + return true; + } else { + return false; + } + } + +} diff --git a/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/StringItem.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/StringItem.java new file mode 100644 index 0000000..a7f4639 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/StringItem.java @@ -0,0 +1,95 @@ +package org.gcube.portlets.user.dataminerexecutor.client.parametersfield; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ObjectParameter; +import org.gcube.portlets.user.dataminerexecutor.client.DataMinerExecutor; + +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 + * + * + */ +public class StringItem extends HBoxLayoutContainer { + private ListStringFld parent; + private TextField field; + private TextButton addBtn; + private TextButton removeBtn; + + /** + * + * @param parent parend + * @param objectParameter object parameter + * @param first true if is first + */ + 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(DataMinerExecutor.resources.add()); + + addBtn.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + parent.addField(StringItem.this); + + + } + }); + + removeBtn = new TextButton(""); + + removeBtn.setIcon(DataMinerExecutor.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/user/dataminerexecutor/client/parametersfield/TabItem.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/TabItem.java new file mode 100644 index 0000000..9e1b136 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/TabItem.java @@ -0,0 +1,264 @@ +package org.gcube.portlets.user.dataminerexecutor.client.parametersfield; + +import org.gcube.data.analysis.dataminermanagercl.shared.data.TableItemSimple; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.TabularParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; +import org.gcube.portlets.user.dataminerexecutor.client.DataMinerExecutor; +import org.gcube.portlets.user.dataminerexecutor.client.rpc.DataMinerExecutorServiceAsync; +import org.gcube.portlets.user.dataminerexecutor.client.util.UtilsGXT3; +import org.gcube.portlets.user.dataminerexecutor.client.workspace.DownloadWidget; +import org.gcube.portlets.user.dataminerexecutor.shared.exception.SessionExpiredServiceException; +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.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 + * + * + */ +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 parent + * parent + * @param tabularParameter + * tabular parameter + * @param first + * true if is 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(DataMinerExecutor.resources.folderExplore()); + selectButton.setToolTip("Select Data Set"); + + selectButton2 = new TextButton(""); + selectButton2.setIcon(DataMinerExecutor.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(DataMinerExecutor.resources.download()); + downloadButton.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + downloadFile(); + } + }); + downloadButton.setVisible(false); + + addBtn = new TextButton(""); + addBtn.setIcon(DataMinerExecutor.resources.add()); + addBtn.addSelectHandler(new SelectEvent.SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + parent.addField(TabItem.this); + + } + }); + + removeBtn = new TextButton(""); + removeBtn.setIcon(DataMinerExecutor.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() { + + + wselectDialog = new WorkspaceExplorerSelectDialog("Select CSV", false); + + WorskpaceExplorerSelectNotificationListener handler = new WorskpaceExplorerSelectNotificationListener() { + + @Override + public void onSelectedItem(Item item) { + + if (item == null || item.getType() == ItemType.FOLDER + || item.getType() == ItemType.PRIVATE_FOLDER + || item.getType() == ItemType.SHARED_FOLDER + || item.getType() == ItemType.VRE_FOLDER) { + UtilsGXT3.info("Attention", "Select a valid csv!"); + + } else { + TabItem.this.retrieveTableInformation(item); + + } + + } + + @Override + public void onFailed(Throwable throwable) { + Log.error("Error in create project: " + throwable.getLocalizedMessage()); + UtilsGXT3.alert("Error", throwable.getLocalizedMessage()); + throwable.printStackTrace(); + } + + @Override + public void onAborted() { + + } + + @Override + public void onNotValidSelection() { + UtilsGXT3.info("Attention", "Select a valid csv!"); + } + }; + + wselectDialog.addWorkspaceExplorerSelectNotificationListener(handler); + wselectDialog.setZIndex(XDOM.getTopZIndex()); + + } + + private void retrieveTableInformation(Item item) { + Log.debug("Retrieved: " + item); + itemDescriptionSelected = new ItemDescription(item.getId(), item.getName(), item.getOwner(), item.getPath(), + item.getType().name()); + + DataMinerExecutorServiceAsync.INSTANCE.retrieveTableInformation(itemDescriptionSelected, new AsyncCallback" + parameter.getDescription() + "
"); + descr.addStyleName("workflow-fieldDescription"); + + SimpleContainer vContainer = new SimpleContainer(); + VerticalLayoutContainer vField = new VerticalLayoutContainer(); + HtmlLayoutContainer typeDescription = new HtmlLayoutContainer("Table Value"); + typeDescription.setStylePrimaryName("workflow-parameters-description"); + + //textField = new TextField(); + //textField.setValue(p.getValue()); + //textField.isReadOnly(); + + HtmlLayoutContainer val = new HtmlLayoutContainer("Table"); + val.addStyleName("workflow-fieldValue"); + + + vField.add(val, 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 value; + + } + + /** + * + */ + @Override + public Widget getWidget() { + return fieldContainer; + } + + @Override + public boolean isValid() { + if(value!=null&&!value.isEmpty()){ + return true; + } else { + return false; + } + } +} diff --git a/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/TabularListFld.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/TabularListFld.java new file mode 100644 index 0000000..a19d03e --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/parametersfield/TabularListFld.java @@ -0,0 +1,191 @@ +/** + * + */ +package org.gcube.portlets.user.dataminerexecutor.client.parametersfield; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.TabularListParameter; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.TabularParameter; + +import com.allen_sauer.gwt.log.client.Log; +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.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 + * + * + */ +public class TabularListFld extends AbstractFld { + + private SimpleContainer fieldContainer; + private HBoxLayoutContainer horiz; + private SimpleContainer listContainer; + private 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(); + } + } + + 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/user/dataminerexecutor/client/properties/ColumnItemProperties.java b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/properties/ColumnItemProperties.java new file mode 100644 index 0000000..2b0cf51 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/dataminerexecutor/client/properties/ColumnItemProperties.java @@ -0,0 +1,24 @@ +package org.gcube.portlets.user.dataminerexecutor.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 + * + * + */ +public interface ColumnItemProperties extends PropertyAccess" + + new SafeHtmlBuilder().appendEscaped(fileName).toSafeHtml().asString() + "
" + entry.getKey() + " | " + "" + entry.getValue() + + " | " + "
" + or.getName() + " | " + "" + or.getValue() + " | " + + "