(store, cm);
+
+ sm.setSelectionMode(SelectionMode.MULTI);
+ grid.setSelectionModel(sm);
+ // grid.getView().setAutoExpandColumn(labelCol);
+ grid.setSize("150px", "150px");
+ grid.getView().setStripeRows(true);
+ grid.getView().setColumnLines(true);
+ grid.getView().setAutoFill(true);
+ grid.setBorders(false);
+ grid.setLoadMask(true);
+ grid.setColumnReordering(true);
+ grid.setColumnResize(false);
+ grid.disable();
+
+ }
+
+ /**
+ *
+ */
+ private void showNoSelectionField() {
+ vp.clear();
+ vp.add(grid);
+ vp.add(new HTML(
+ "Select table from parameter "
+ + this.columnListParameter
+ .getReferredTabularParameterName() + "
"));
+ vp.forceLayout();
+ }
+
+ /**
+ *
+ */
+ private void showFieldWithSelection(TableItemSimple tableItem) {
+ vp.clear();
+ vp.add(grid);
+ vp.add(new HTML(
+ "Columns of Data Set "
+ + tableItem.getName() + "
"));
+ vp.forceLayout();
+ }
+
+
+ /**
+ *
+ */
+ @Override
+ public String getValue() {
+ String separator = columnListParameter.getSeparator();
+ String value = "";
+ boolean first = true;
+
+ for (ColumnItem columnItem : sm.getSelection()) {
+ String columnName = columnItem.getName();
+ value += (first ? "" : separator) + columnName;
+ first = false;
+ }
+ return value;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return vp;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public void fireEvent(Object message) {
+ if (message == null) {
+ store.clear();
+ store.commitChanges();
+ grid.disable();
+ showNoSelectionField();
+ } else {
+ TableItemSimple tableItem = (TableItemSimple) message;
+ store.clear();
+ store.commitChanges();
+ store.addAll(tableItem.getColumns());
+ store.commitChanges();
+ grid.enable();
+ showFieldWithSelection(tableItem);
+ }
+ }
+
+ /**
+ *
+ */
+ @Override
+ public boolean isValid() {
+ return store.size() > 0;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/DoubleFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/DoubleFld.java
new file mode 100644
index 0000000..bd2e27e
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/DoubleFld.java
@@ -0,0 +1,53 @@
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ObjectParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.widget.core.client.form.DoubleField;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class DoubleFld extends AbstractFld {
+
+ private DoubleField numberField;
+
+ /**
+ * @param operator
+ */
+ public DoubleFld(Parameter parameter) {
+ super(parameter);
+
+ ObjectParameter p = (ObjectParameter) parameter;
+
+ numberField = new DoubleField();
+
+ if (p.getDefaultValue() != null)
+ numberField.setValue(Double.parseDouble(p.getDefaultValue()));
+
+ if (p.getDescription() != null)
+ numberField.setTitle(p.getDescription());
+
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String getValue() {
+ return numberField.getCurrentValue().toString();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return numberField;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/EnumFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/EnumFld.java
new file mode 100644
index 0000000..d254549
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/EnumFld.java
@@ -0,0 +1,61 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.EnumParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction;
+import com.sencha.gxt.data.shared.StringLabelProvider;
+import com.sencha.gxt.widget.core.client.form.SimpleComboBox;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ * email: g.panichi@isti.cnr.it
+ *
+ */
+public class EnumFld extends AbstractFld {
+
+ private SimpleComboBox listBox;
+
+ /**
+ * @param parameter
+ */
+ public EnumFld(Parameter parameter) {
+ super(parameter);
+
+ EnumParameter p = (EnumParameter) parameter;
+
+ listBox = new SimpleComboBox(new StringLabelProvider<>());
+ listBox.add(p.getValues());
+ listBox.setAllowBlank(false);
+ listBox.setForceSelection(true);
+ listBox.setEditable(false);
+ listBox.setTriggerAction(TriggerAction.ALL);
+ if (p.getDescription() != null)
+ listBox.setTitle(p.getDescription());
+ if (p.getDefaultValue() != null)
+ listBox.setValue(p.getDefaultValue());
+
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String getValue() {
+ return listBox.getCurrentValue();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return listBox;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/FileFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/FileFld.java
new file mode 100644
index 0000000..a83fbd8
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/FileFld.java
@@ -0,0 +1,223 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.gcube.portlets.user.dataminermanager.client.DataMinerManager;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync;
+import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3;
+import org.gcube.portlets.user.dataminermanager.shared.exception.ExpiredSessionServiceException;
+import org.gcube.portlets.user.dataminermanager.shared.workspace.ItemDescription;
+import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener;
+import org.gcube.portlets.widgets.wsexplorer.client.select.WorkspaceExplorerSelectDialog;
+import org.gcube.portlets.widgets.wsexplorer.shared.Item;
+import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.core.client.dom.XDOM;
+import com.sencha.gxt.core.client.util.Format;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
+import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
+import com.sencha.gxt.widget.core.client.event.SelectEvent;
+
+/**
+ *
+ * @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;
+
+ /**
+ * @param parameter
+ */
+ public FileFld(Parameter parameter) {
+ super(parameter);
+ vp=new VerticalLayoutContainer();
+ /*
+ * fileSelector = new FileSelector() {
+ *
+ * @Override public void fireSelection(TableItemSimple fileItem) {
+ * super.fireSelection(fileItem); selectedFileItem = fileItem;
+ * showFieldWithSelection(); } };
+ */
+
+ List selectableTypes = new ArrayList();
+ selectableTypes.add(ItemType.EXTERNAL_FILE);
+ List showableTypes = new ArrayList();
+ showableTypes.addAll(Arrays.asList(ItemType.values()));
+
+ wselectDialog = new WorkspaceExplorerSelectDialog("Select CSV", false);
+ // filterCriteria, selectableTypes);
+
+ WorskpaceExplorerSelectNotificationListener handler = new WorskpaceExplorerSelectNotificationListener() {
+
+ @Override
+ public void onSelectedItem(Item item) {
+
+ if (item.isFolder() || item.isRoot()) {
+ UtilsGXT3.info("Attention", "Select a valid csv!");
+
+ } else {
+ retrieveFileInformation(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());
+
+ selectButton = new TextButton("Select File");
+ selectButton.setIcon(DataMinerManager.resources.folderExplore());
+ selectButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ wselectDialog.show();
+
+ }
+ });
+ selectButton.setToolTip("Select File");
+
+
+
+ selectButton2 = new TextButton("");
+ selectButton2.setIcon(DataMinerManager.resources.folderExplore());
+ selectButton2.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ wselectDialog.show();
+ }
+ });
+ selectButton2.setToolTip("Select Another File");
+
+ cancelButton = new TextButton("");
+ cancelButton.setIcon(DataMinerManager.resources.cancel());
+ cancelButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ selectedFileItem = null;
+ showNoSelectionField();
+ }
+ });
+
+ showNoSelectionField();
+ }
+
+ private void retrieveFileInformation(final Item item) {
+ Log.debug("Retrieved: " + item);
+ final ItemDescription itemDescription = new ItemDescription(item.getId(),
+ item.getName(), item.getOwner(), item.getPath(), item.getType()
+ .name());
+
+ DataMinerPortletServiceAsync.INSTANCE.getPublicLink(itemDescription,
+ new AsyncCallback() {
+
+ @Override
+ public void onFailure(Throwable caught) {
+ Log.error("Error in retrieveFileInformation: "
+ + caught.getMessage());
+ if (caught instanceof ExpiredSessionServiceException) {
+ UtilsGXT3.alert("Error", "Expired Session");
+ // sessionExpiredShowDelayed();
+
+ } else {
+ UtilsGXT3.alert(
+ "Error",
+ "Error retrieving file informations: "
+ + caught.getLocalizedMessage());
+ }
+
+ }
+
+ @Override
+ public void onSuccess(String result) {
+ itemDescription.setPublicLink(result);
+ selectedFileItem = itemDescription;
+ Log.debug("SelectedFileItem: " + selectedFileItem);
+ showFieldWithSelection();
+
+ }
+ });
+
+
+
+ }
+
+ private void showNoSelectionField() {
+ vp.clear();
+ vp.add(selectButton);
+ vp.forceLayout();
+ }
+
+ private void showFieldWithSelection() {
+ // final String fileId = selectedFileItem.getId();
+ final String fileName = selectedFileItem.getName();
+
+ vp.clear();
+ HorizontalLayoutContainer hp = new HorizontalLayoutContainer();
+ hp.add(new HTML(""
+ + Format.ellipse(fileName, 30) + "
"));
+ hp.add(selectButton2);
+ hp.add(cancelButton);
+ vp.add(hp);
+ vp.forceLayout();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public boolean isValid() {
+ return (selectedFileItem != null);
+ }
+
+ @Override
+ public Widget getWidget() {
+ return vp;
+ }
+
+ @Override
+ public String getValue() {
+ return (selectedFileItem == null) ? null : selectedFileItem.getPublicLink();
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/FloatFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/FloatFld.java
new file mode 100644
index 0000000..d984f28
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/FloatFld.java
@@ -0,0 +1,53 @@
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ObjectParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.widget.core.client.form.FloatField;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ * email: g.panichi@isti.cnr.it
+ *
+ */
+public class FloatFld extends AbstractFld {
+
+ private FloatField numberField;
+
+ /**
+ * @param operator
+ */
+ public FloatFld(Parameter parameter) {
+ super(parameter);
+
+ ObjectParameter p = (ObjectParameter) parameter;
+
+ numberField = new FloatField();
+
+ if (p.getDefaultValue() != null)
+ numberField.setValue(Float.parseFloat(p.getDefaultValue()));
+
+ if (p.getDescription() != null)
+ numberField.setTitle(p.getDescription());
+
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String getValue() {
+ Float f = numberField.getCurrentValue();
+ return f.toString();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return numberField;
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/IntFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/IntFld.java
new file mode 100644
index 0000000..12784c2
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/IntFld.java
@@ -0,0 +1,59 @@
+
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ObjectParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.widget.core.client.form.IntegerField;
+
+
+/**
+ *
+ * @author Giancarlo Panichi
+ * email: g.panichi@isti.cnr.it
+ *
+ */
+public class IntFld extends AbstractFld {
+
+
+ private IntegerField numberField;
+
+ /**
+ * @param operator
+ */
+ public IntFld(Parameter parameter) {
+ super(parameter);
+
+ ObjectParameter p = (ObjectParameter) parameter;
+
+
+ numberField = new IntegerField();
+
+ if (p.getDefaultValue() != null)
+ numberField.setValue(Integer.parseInt(p.getDefaultValue()));
+
+ if (p.getDescription() != null)
+ numberField.setTitle(p.getDescription());
+ numberField.setAllowBlank(false);
+
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String getValue() {
+ Integer i = numberField.getCurrentValue();
+ return i.toString();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return numberField;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/ListIntFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/ListIntFld.java
new file mode 100644
index 0000000..20594f7
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/ListIntFld.java
@@ -0,0 +1,191 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gcube.portlets.user.dataminermanager.client.DataMinerManager;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ListParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ObjectParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
+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;
+
+/**
+ * @author ceras
+ *
+ */
+public class ListIntFld extends AbstractFld {
+
+ private List- items;
+ private SimpleContainer simpleContainer;
+ private VerticalLayoutContainer vp;
+ private ListParameter listParameter;
+
+ /**
+ * @param parameter
+ */
+ public ListIntFld(Parameter parameter) {
+ super(parameter);
+ this.listParameter = (ListParameter) parameter;
+ simpleContainer=new SimpleContainer();
+ vp = new VerticalLayoutContainer();
+ simpleContainer.add(vp);
+ items = new ArrayList
- ();
+ addField(null);
+ }
+
+ 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);
+ } 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);
+ }
+
+ simpleContainer.forceLayout();
+ }
+
+ /**
+ * @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) {
+ String itemValue = item.getValue();
+ if (itemValue != null && !itemValue.contentEquals("")) {
+ value += (first ? "" : separator) + itemValue;
+ first = false;
+ }
+ }
+ return value;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return simpleContainer;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public boolean isValid() {
+ boolean valid = false;
+ for (Item item : items)
+ if (item.getField().getValue() != null) {
+ valid = true;
+ break;
+ }
+ return valid;
+ }
+
+ private class Item extends HorizontalLayoutContainer {
+
+ private IntFld field;
+ private TextButton addButton;
+ private TextButton removeButton;
+
+ /**
+ * @param objPar
+ */
+ public Item(ObjectParameter objectParameter, boolean first) {
+ super();
+ this.field = new IntFld(objectParameter);
+ this.add(field.getWidget());
+
+ addButton = new TextButton("");
+
+ addButton.setIcon(DataMinerManager.resources.add());
+
+ addButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ addField(Item.this);
+
+ }
+ });
+
+ removeButton = new TextButton("");
+
+ removeButton.setIcon(DataMinerManager.resources.cancel());
+
+ removeButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ removeField(Item.this);
+
+ }
+ });
+
+ removeButton.setVisible(!first);
+
+ this.add(addButton);
+ this.add(removeButton);
+ }
+
+ public void showCancelButton() {
+ removeButton.setVisible(true);
+ }
+
+ public void hideCancelButton() {
+ removeButton.setVisible(false);
+ }
+
+ public String getValue() {
+ return field.getValue();
+ }
+
+ public IntFld getField() {
+ return field;
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/ListStringFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/ListStringFld.java
new file mode 100644
index 0000000..8d95c35
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/ListStringFld.java
@@ -0,0 +1,191 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gcube.portlets.user.dataminermanager.client.DataMinerManager;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ListParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ObjectParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
+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;
+
+/**
+ * @author ceras
+ *
+ */
+public class ListStringFld extends AbstractFld {
+
+ private List
- items;
+ private SimpleContainer simpleContainer;
+ private VerticalLayoutContainer vp;
+ private ListParameter listParameter;
+
+ /**
+ * @param parameter
+ */
+ public ListStringFld(Parameter parameter) {
+ super(parameter);
+ this.listParameter = (ListParameter) parameter;
+ simpleContainer = new SimpleContainer();
+ vp = new VerticalLayoutContainer();
+ simpleContainer.add(vp);
+ items = new ArrayList
- ();
+ addField(null);
+ }
+
+ 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);
+ } 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);
+ }
+
+ simpleContainer.forceLayout();
+ }
+
+ /**
+ * @param item
+ */
+ protected 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) {
+ String itemValue = item.getValue();
+ if (itemValue != null && !itemValue.contentEquals("")) {
+ value += (first ? "" : separator) + itemValue;
+ first = false;
+ }
+ }
+ return value;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return simpleContainer;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public boolean isValid() {
+ boolean valid = false;
+ for (Item item : items)
+ if (item.getField().getValue() != null) {
+ valid = true;
+ break;
+ }
+ return valid;
+ }
+
+ private class Item extends HorizontalLayoutContainer {
+
+ private StringFld field;
+ private TextButton addButton;
+ private TextButton removeButton;
+
+ /**
+ * @param objPar
+ */
+ public Item(ObjectParameter objectParameter, boolean first) {
+ super();
+ this.field = new StringFld(objectParameter);
+ this.add(field.getWidget());
+
+ addButton = new TextButton("");
+
+ addButton.setIcon(DataMinerManager.resources.add());
+
+ addButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ addField(Item.this);
+
+ }
+ });
+
+ removeButton = new TextButton("");
+
+ removeButton.setIcon(DataMinerManager.resources.cancel());
+
+ removeButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ removeField(Item.this);
+
+ }
+ });
+
+ removeButton.setVisible(!first);
+
+ this.add(addButton);
+ this.add(removeButton);
+ }
+
+ public void showCancelButton() {
+ removeButton.setVisible(true);
+ }
+
+ public void hideCancelButton() {
+ removeButton.setVisible(false);
+ }
+
+ public String getValue() {
+ return field.getValue();
+ }
+
+ public StringFld getField() {
+ return field;
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/OpenTableButton.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/OpenTableButton.java
new file mode 100644
index 0000000..846bcdc
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/OpenTableButton.java
@@ -0,0 +1,84 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import org.gcube.portlets.user.dataminermanager.client.DataMinerManager;
+import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple;
+
+import com.sencha.gxt.widget.core.client.Dialog;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.event.HideEvent;
+import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler;
+import com.sencha.gxt.widget.core.client.event.SelectEvent;
+
+/**
+ * @author ceras
+ *
+ */
+public abstract class OpenTableButton extends TextButton {
+
+ protected TableItemSimple tableItem=null;
+ protected boolean added = false;
+
+ public abstract void onOpenTable();
+
+ public abstract void onHideTable();
+
+ public OpenTableButton() {
+ super("Open Data Set", DataMinerManager.resources.table());
+ this.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ //TabularData tabularData = DataMinerManager.getTabularData();
+ //TabularDataGridPanel gridPanel = tabularData.getGridPanel();
+
+ Dialog dialog = new Dialog();
+ dialog.setMaximizable(true);
+ dialog.setBodyBorder(false);
+ dialog.setExpanded(true);
+ dialog.setHeadingText("Data Set "+tableItem.getName());
+ dialog.setWidth(700);
+ dialog.setHeight(500);
+ dialog.setHideOnButtonClick(true);
+ dialog.setModal(true);
+ //dialog.add(gridPanel);
+ dialog.show();
+
+ dialog.addHideHandler(new HideHandler() {
+ @Override
+ public void onHide(HideEvent event) {
+ onHideTable();
+ }
+ });
+
+ onOpenTable();
+
+ //tabularData.openTable(tableItem.getId());
+ //gridPanel.setHeaderVisible(false);
+ }
+ });
+
+ }
+
+ public void setTable(TableItemSimple tableItem) {
+ this.tableItem = tableItem;
+ }
+
+
+ /**
+ * @return the added
+ */
+ public boolean isAdded() {
+ return added;
+ }
+
+ /**
+ * @param added the added to set
+ */
+ public void setAdded(boolean added) {
+ this.added = added;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/OperatorFieldWidget.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/OperatorFieldWidget.java
new file mode 100644
index 0000000..bac6d6f
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/OperatorFieldWidget.java
@@ -0,0 +1,155 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ListParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ObjectParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.user.client.ui.HTML;
+import com.sencha.gxt.core.client.util.Margins;
+import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
+import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer.HorizontalLayoutData;
+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.form.FieldLabel;
+
+/**
+ * @author ceras
+ *
+ */
+public class OperatorFieldWidget extends SimpleContainer {
+
+ private Parameter parameter;
+
+ private AbstractFld field;
+ private HorizontalLayoutContainer horiz;
+
+ // private Field generalParameterField;
+ // private SimpleComboBox inputDataParameterField;
+ // private TextField outputDataParameterField;
+
+ /**
+ *
+ */
+ public OperatorFieldWidget(Parameter p) {
+ super();
+ this.parameter = p;
+ horiz = new HorizontalLayoutContainer();
+
+ try {
+ // this.setStyleAttribute("margin", "10px");
+ if (p.isObject())
+ field = createObjectField((ObjectParameter) p);
+ else if (p.isEnum())
+ field = new EnumFld(p);
+ else if (p.isTabular())
+ field = new TabularFld(p);
+ else if (p.isTabularList())
+ field = new TabularListFld(p);
+ else if (p.isColumn())
+ field = new ColumnFld(p);
+ else if (p.isColumnList())
+ field = new ColumnListFld(p);
+ else if (p.isList())
+ field = createListField((ListParameter) p);
+ else if (p.isFile())
+ field = new FileFld(p);
+
+ FieldLabel label = new FieldLabel(field.getWidget(), p.getName());
+ horiz.add(label, new HorizontalLayoutData(-1, 1, new Margins(0)));
+
+ if (p.getDescription() != null) {
+ HTML descr = new HTML(p.getDescription());
+ descr.addStyleName("workflow-fieldDescription");
+ horiz.add(descr);
+ }
+
+ } catch (Throwable e) {
+ Log.error("Error: " + e.getLocalizedMessage());
+ e.printStackTrace();
+ horiz.add(new FieldLabel(new HTML("Error in field retrieving!"),p.getName()));
+ }
+
+ add(horiz, new MarginData(0));
+ }
+
+ /**
+ * @return the parameter
+ */
+ public Parameter getParameter() {
+ return parameter;
+ }
+
+ public String getFieldValue() {
+ return field.getValue();
+ }
+
+ public String getValue() {
+ return getFieldValue();
+ }
+
+ /**
+ * @param p
+ * @return
+ */
+ private AbstractFld createObjectField(ObjectParameter p) {
+ String type = p.getType();
+ if (type.contentEquals(Integer.class.getName())) {
+ return new IntFld(p);
+ } else if (type.contentEquals(String.class.getName())) {
+ return new StringFld(p);
+ } else if (type.contentEquals(Boolean.class.getName())) {
+ return new BooleanFld(p);
+ } else if (type.contentEquals(Double.class.getName())) {
+ return new DoubleFld(p);
+ } else if (type.contentEquals(Float.class.getName())) {
+ return new FloatFld(p);
+ } else
+ return null;
+ }
+
+ /**
+ *
+ */
+ private AbstractFld createListField(ListParameter p) {
+ String type = p.getType();
+
+ if (type.contentEquals(String.class.getName())
+ || type.contentEquals("STRING")) { // TODO REMOVE "STRING"
+ return new ListStringFld(p);
+ } else if (type.contentEquals(Integer.class.getName())
+ || type.contentEquals("NUMBER")) {
+ return new ListIntFld(p);
+ }
+ // } 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/user/dataminermanager/client/form/StringFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/StringFld.java
new file mode 100644
index 0000000..1949c6e
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/StringFld.java
@@ -0,0 +1,55 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.ObjectParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.widget.core.client.form.TextField;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ * email: g.panichi@isti.cnr.it
+ *
+ */
+public class StringFld extends AbstractFld {
+
+ private TextField textField;
+
+ /**
+ * @param parameter
+ */
+ public StringFld(Parameter parameter) {
+ super(parameter);
+
+ textField = new TextField();
+ ObjectParameter p = (ObjectParameter) parameter;
+ textField.setValue(p.getDefaultValue());
+
+ if (p.getDefaultValue() == null)
+ textField.setAllowBlank(false);
+ if (p.getDescription() != null)
+ textField.setToolTip(p.getDescription());
+
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String getValue() {
+ return textField.getValue();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return textField;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/TabularFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/TabularFld.java
new file mode 100644
index 0000000..7975ef4
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/TabularFld.java
@@ -0,0 +1,355 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.gcube.portlets.user.dataminermanager.client.DataMinerManager;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.TabularParameter;
+import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync;
+import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3;
+import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple;
+import org.gcube.portlets.user.dataminermanager.shared.exception.ExpiredSessionServiceException;
+import org.gcube.portlets.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.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.core.client.dom.XDOM;
+import com.sencha.gxt.core.client.util.Format;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
+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;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ * email: g.panichi@isti.cnr.it
+ *
+ */
+public class TabularFld extends AbstractFld {
+
+ private SimpleContainer sc;
+ private VerticalLayoutContainer vp;
+
+ // TableSelector tableSelector;
+ private WorkspaceExplorerSelectDialog wselectDialog;
+ private TextButton selectButton, selectButton2, cancelButton;
+ private HTML templatesList;
+ private TableItemSimple selectedTableItem = null;
+ private List listeners = new ArrayList();
+
+ /**
+ * @param parameter
+ */
+ public TabularFld(Parameter parameter) {
+ super(parameter);
+ Log.debug("TabularField");
+ vp=new VerticalLayoutContainer();
+ init();
+ sc=new SimpleContainer();
+ sc.add(vp, new MarginData(0));
+ showNoSelectionField();
+ }
+
+
+ private void init() {
+ TabularParameter p = (TabularParameter) parameter;
+ List templates = p.getTemplates();
+
+ /*
+ * tableSelector = new TableSelector(templates) {
+ *
+ * @Override public void fireSelection(TableItemSimple tableItem) {
+ * super.fireSelection(tableItem); selectedTableItem = tableItem;
+ * showFieldWithSelection();
+ *
+ * loadTableMetadata(tableItem); // send change message to all listeners
+ * // it will be managed by all columnFields and columnListField that
+ * depends by tabular field } };
+ */
+ List selectableTypes = new ArrayList();
+ selectableTypes.add(ItemType.EXTERNAL_FILE);
+ List showableTypes = new ArrayList();
+ showableTypes.addAll(Arrays.asList(ItemType.values()));
+
+ /*
+ "application/zip", "application/x-zip",
+ "application/x-zip-compressed", "application/octet-stream",
+ "application/x-compress", "application/x-compressed",
+ "multipart/x-zip"
+ */
+ //List allowedMimeTypes = Arrays.asList("text/csv","text/plain","text/plain; charset=ISO-8859-1");
+
+ /**
+ * "zip"
+ */
+
+ /*List allowedFileExtensions = Arrays.asList("csv");
+
+ FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,
+ allowedFileExtensions, new HashMap());
+ */
+ wselectDialog = new WorkspaceExplorerSelectDialog("Select CSV",false);
+ // filterCriteria, selectableTypes);
+
+ WorskpaceExplorerSelectNotificationListener handler = new WorskpaceExplorerSelectNotificationListener() {
+
+ @Override
+ public void onSelectedItem(Item item) {
+
+ if (item.isFolder() || item.isRoot()) {
+ UtilsGXT3.info("Attention", "Select a valid csv!");
+
+ } else {
+ 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());
+
+ 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.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ wselectDialog.show();
+ }
+ });
+
+ selectButton2.setIcon(DataMinerManager.resources.folderExplore());
+ selectButton2.setToolTip("Select Another Data Set");
+
+ cancelButton = new TextButton("");
+ cancelButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ selectedTableItem = null;
+ showNoSelectionField();
+ updateListeners(null);
+ }
+ });
+
+ cancelButton.setIcon(DataMinerManager.resources.cancel());
+
+
+ String list = "";
+ boolean first = true;
+ for (String template : templates) {
+ list += (first ? "" : ", ") + template;
+ first = false;
+ }
+ templatesList = new HTML("Suitable Data Set Templates:
" + list);
+ templatesList.addStyleName("workflow-templatesList");
+
+
+ }
+
+ private void retrieveTableInformation(Item item) {
+ DataMinerPortletServiceAsync.INSTANCE.retrieveTableInformation(item, new AsyncCallback() {
+
+ @Override
+ public void onFailure(Throwable caught) {
+ Log.error("Error in retrieveTableInformation " + caught.getMessage());
+ if (caught instanceof ExpiredSessionServiceException) {
+ UtilsGXT3.alert("Error", "Expired Session");
+ //sessionExpiredShowDelayed();
+
+ } else {
+ UtilsGXT3.alert(
+ "Error",
+ "Error retrieving table information: "
+ + caught.getLocalizedMessage());
+ }
+
+ }
+
+ @Override
+ public void onSuccess(TableItemSimple result) {
+ Log.debug("Retrieved: "+result);
+ selectedTableItem=result;
+ showFieldWithSelection();
+ //loadTableMetadata(selectedTableItem);
+ updateListeners(selectedTableItem);
+ }
+ });
+ }
+
+ /**
+ * @param tableItem
+
+ protected void loadTableMetadata(final TableItemSimple tableItem) {
+ //TabularData tabularData = DataMinerManager.getTabularData();
+ String tableId = tableItem.getId();
+
+ tabularData.getTableDefinition(tableId,
+ new AsyncCallback() {
+
+ @Override
+ public void onFailure(Throwable caught) {
+ vp.unmask();
+ Info.display("ERROR", "");
+ }
+
+ @Override
+ public void onSuccess(TableDefinition tableDefinition) {
+ vp.unmask();
+ List columns = tableDefinition
+ .getColumnsAsList();
+ Collections.sort(columns, new ColumnPositionComparator(
+ false));
+ for (ColumnDefinition column : columns)
+ tableItem.addColumnName(column.getLabel());
+ updateListeners(tableItem);
+ }
+
+ });
+
+ vp.mask("Load Data Set Metadata...", Constants.maskLoadingStyle);
+ }*/
+
+ /**
+ * @param id
+ */
+ protected void updateListeners(TableItemSimple tableItem) {
+ for (AbstractFld abstractField : listeners) {
+ abstractField.fireEvent(tableItem);
+ }
+ }
+
+ /**
+ *
+ */
+ private void showNoSelectionField() {
+ vp.clear();
+ vp.add(selectButton);
+ vp.add(templatesList);
+ sc.forceLayout();
+ }
+
+ /**
+ *
+ */
+ private void showFieldWithSelection() {
+ //final String tableId = selectedTableItem.getId();
+ final String tableName = selectedTableItem.getName();
+
+ vp.clear();
+ HorizontalLayoutContainer hp = new HorizontalLayoutContainer();
+ hp.add(new HTML(""
+ + Format.ellipse(tableName, 30) + "
"));
+ hp.add(selectButton2);
+ hp.add(cancelButton);
+
+ TextButton openTableButton = new TextButton("Open Data Set");
+ openTableButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ /*TabularData tabularData = DataMinerManager
+ .getTabularData();
+ TabularDataGridPanel gridPanel = tabularData
+ .getGridPanel();
+ gridPanel.setExpanded(true);
+ gridPanel.setBorders(true);
+
+ Dialog dialog = new Dialog();
+ dialog.setMaximizable(true);
+ dialog.setBodyBorder(false);
+ dialog.setExpanded(true);
+
+ dialog.setHeadingText("Data Set " + tableName);
+ dialog.setWidth(640);
+ dialog.setHeight(480);
+ dialog.setHideOnButtonClick(true);
+ dialog.setModal(true);
+ dialog.add(gridPanel);
+ dialog.show();
+
+ tabularData.openTable(tableId);
+ gridPanel.setHeaderVisible(false);*/
+
+ }
+ });
+
+ hp.add(openTableButton);
+ vp.add(hp);
+ vp.add(templatesList);
+ sc.forceLayout();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String getValue() {
+ return (selectedTableItem == null) ? null : selectedTableItem.getId();
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return sc;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public boolean isValid() {
+ return (selectedTableItem != null);
+ }
+
+ public void addChangeListener(AbstractFld abstractField) {
+ this.listeners.add(abstractField);
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/TabularListFld.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/TabularListFld.java
new file mode 100644
index 0000000..c8cc0f0
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/form/TabularListFld.java
@@ -0,0 +1,191 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.dataminermanager.client.form;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gcube.portlets.user.dataminermanager.client.DataMinerManager;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.TabularListParameter;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.TabularParameter;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.user.client.ui.Widget;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
+import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
+import com.sencha.gxt.widget.core.client.event.SelectEvent;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ * email: g.panichi@isti.cnr.it
+ *
+ */
+public class TabularListFld extends AbstractFld {
+
+ private List- items = new ArrayList
- ();
+ private VerticalLayoutContainer vp;
+ private TabularListParameter tabularListParameter;
+
+ /**
+ * @param parameter
+ */
+ public TabularListFld(Parameter parameter) {
+ super(parameter);
+ Log.debug("TabularListField");
+ this.tabularListParameter = (TabularListParameter) parameter;
+ vp = new VerticalLayoutContainer();
+ addField(null);
+ }
+
+ private void addField(Item upperItem) {
+
+ TabularParameter tabPar = new TabularParameter(
+ tabularListParameter.getName(),
+ tabularListParameter.getDescription(),null,
+ tabularListParameter.getTemplates());
+
+ if (upperItem == null) {
+ Item item = new Item(tabPar, true);
+ items.add(item);
+ vp.add(item);
+ } 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(tabPar, false);
+ items.add(pos + 1, item);
+ vp.insert(item, pos + 1);
+ }
+
+ vp.forceLayout();
+ }
+
+ /**
+ * @param item
+ */
+ protected void removeField(Item item) {
+ items.remove(item);
+
+ vp.remove(item);
+ vp.forceLayout();
+
+ if (items.size() == 1) {
+ items.get(0).hideCancelButton();
+ }
+
+ }
+
+ /**
+ *
+ */
+ @Override
+ public String getValue() {
+ String separator = tabularListParameter.getSeparator();
+ String value = "";
+ boolean first = true;
+ for (Item item : items) {
+ String itemValue = item.getValue();
+ if (itemValue != null && !itemValue.contentEquals("")) {
+ value += (first ? "" : separator) + itemValue;
+ first = false;
+ }
+ }
+ return value;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public Widget getWidget() {
+ return vp;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public boolean isValid() {
+ boolean valid = false;
+ for (Item item : items)
+ if (item.getField().getValue() != null) {
+ valid = true;
+ break;
+ }
+ return valid;
+ }
+
+ private class Item extends HorizontalLayoutContainer {
+
+ private TabularFld field;
+ private TextButton addButton;
+
+ private TextButton removeButton;
+
+
+ /**
+ *
+ * @param tabularParameter
+ * @param first
+ */
+ public Item(TabularParameter tabularParameter, boolean first) {
+ super();
+ this.field = new TabularFld(tabularParameter);
+ this.add(field.getWidget());
+
+ addButton= new TextButton("");
+ addButton.setIcon(DataMinerManager.resources.add());
+ addButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ addField(Item.this);
+ }
+ });
+
+
+ removeButton= new TextButton("");
+ removeButton.setIcon(DataMinerManager.resources.cancel());
+
+ removeButton.addSelectHandler(new SelectEvent.SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ removeField(Item.this);
+ }
+ });
+
+ removeButton.setVisible(!first);
+
+ this.add(addButton);
+ this.add(removeButton);
+ }
+
+ public void showCancelButton() {
+ removeButton.setVisible(true);
+ }
+
+ public void hideCancelButton() {
+ removeButton.setVisible(false);
+ }
+
+ public String getValue() {
+ return field.getValue();
+ }
+
+ public TabularFld getField() {
+ return field;
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/properties/ColumnItemProperties.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/properties/ColumnItemProperties.java
new file mode 100644
index 0000000..2064087
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/properties/ColumnItemProperties.java
@@ -0,0 +1,24 @@
+package org.gcube.portlets.user.dataminermanager.client.properties;
+
+
+import org.gcube.portlets.user.dataminermanager.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 {
+
+ @Path("id")
+ ModelKeyProvider id();
+
+ ValueProvider label();
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/properties/ColumnItemPropertiesCombo.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/properties/ColumnItemPropertiesCombo.java
new file mode 100644
index 0000000..397ec08
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/properties/ColumnItemPropertiesCombo.java
@@ -0,0 +1,23 @@
+package org.gcube.portlets.user.dataminermanager.client.properties;
+
+import org.gcube.portlets.user.dataminermanager.shared.data.ColumnItem;
+
+import com.google.gwt.editor.client.Editor.Path;
+import com.sencha.gxt.data.shared.LabelProvider;
+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 ColumnItemPropertiesCombo extends PropertyAccess {
+
+ @Path("id")
+ ModelKeyProvider id();
+
+ LabelProvider label();
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Images.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Images.java
new file mode 100644
index 0000000..f57b096
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Images.java
@@ -0,0 +1,101 @@
+package org.gcube.portlets.user.dataminermanager.client.resources;
+
+import org.gcube.portlets.user.dataminermanager.client.DataMinerManager;
+
+import com.google.gwt.user.client.ui.AbstractImagePrototype;
+
+public class Images {
+
+ public static AbstractImagePrototype logo() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.logo());
+ }
+
+ public static AbstractImagePrototype logoLittle() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.logoLittle());
+ }
+
+ public static AbstractImagePrototype computationIcon() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.computationIcon());
+ }
+
+ public static AbstractImagePrototype inputSpaceIcon() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.inputSpaceIcon());
+ }
+
+ public static AbstractImagePrototype addOperator() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.addOperator());
+ }
+
+ public static AbstractImagePrototype startComputation() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.startComputation());
+ }
+
+ public static AbstractImagePrototype removeAll() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.removeAll());
+ }
+
+ public static AbstractImagePrototype showAllOperators() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.sortAscending());
+ }
+
+ public static AbstractImagePrototype showCategories() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.tree());
+ }
+
+ public static AbstractImagePrototype folderExplore() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.folderExplore());
+ }
+
+ public static AbstractImagePrototype cancel() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.cancel());
+ }
+
+ public static AbstractImagePrototype addl() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.add());
+ }
+
+ public static AbstractImagePrototype table() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.table());
+ }
+
+ public static AbstractImagePrototype refresh() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.refresh());
+ }
+
+ public static AbstractImagePrototype fileDownload() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.fileDownload());
+ }
+
+ public static AbstractImagePrototype loader() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.loader());
+ }
+
+ public static AbstractImagePrototype save() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.save());
+ }
+
+ public static AbstractImagePrototype expand() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.expand());
+ }
+
+ public static AbstractImagePrototype collapse() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.collapse());
+ }
+
+ public static AbstractImagePrototype groupBy() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.groupBy());
+ }
+
+ public static AbstractImagePrototype map() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.map());
+ }
+
+ public static AbstractImagePrototype userPerspective() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.userPerspective());
+ }
+
+ public static AbstractImagePrototype computationPerspective() {
+ return AbstractImagePrototype.create(DataMinerManager.resources.computationPerspective());
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Resources.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Resources.java
new file mode 100644
index 0000000..89ad626
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/Resources.java
@@ -0,0 +1,123 @@
+package org.gcube.portlets.user.dataminermanager.client.resources;
+
+
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+
+public interface Resources extends ClientBundle {
+
+ @Source("logo.png")
+ ImageResource logo();
+
+ @Source("logoLittle.png")
+ ImageResource logoLittle();
+
+ @Source("goBack.png")
+ ImageResource goBack();
+
+ @Source("computation.png")
+ ImageResource computationIcon();
+
+ @Source("computations.png")
+ ImageResource jobsIcon();
+
+ @Source("inputSpace.png")
+ ImageResource inputSpaceIcon();
+
+ @Source("application_side_expand.png")
+ ImageResource addOperator();
+
+ @Source("connector1.png")
+ ImageResource workflowConnector1();
+
+ @Source("connector2.png")
+ ImageResource workflowConnector2();
+
+ @Source("triangle.png")
+ ImageResource startComputation();
+
+ @Source("delete.png")
+ ImageResource removeAll();
+
+ @Source("sort_asc.gif")
+ ImageResource sortAscending();
+
+ @Source("tree.gif")
+ ImageResource tree();
+
+ @Source("folder_explore.png")
+ ImageResource folderExplore();
+
+ @Source("cancel_icon.png")
+ ImageResource cancel();
+
+ @Source("add.png")
+ ImageResource add();
+
+ @Source("table.png")
+ ImageResource table();
+
+ @Source("refresh.png")
+ ImageResource refresh();
+
+ @Source("details.png")
+ ImageResource details();
+
+ @Source("tableResult.png")
+ ImageResource tableResult();
+
+ @Source("menuItemComputations.png")
+ ImageResource menuItemComputations();
+
+ @Source("menuItemExperiment.png")
+ ImageResource menuItemExperiment();
+
+ @Source("menuItemDataspace.png")
+ ImageResource menuItemInputspace();
+
+ @Source("table.png")
+ ImageResource fileDownload(); // TODO change
+
+ @Source("ajax-loader.gif")
+ ImageResource loader();
+
+ @Source("ajax-loader-big.gif")
+ ImageResource loaderBig();
+
+ @Source("ajax-complete.gif")
+ ImageResource loadingComplete();
+
+ @Source("inputSpaceImporter.png")
+ ImageResource inputSpaceImporter();
+
+ @Source("inputSpaceMonitor.png")
+ ImageResource inputSpaceMonitor();
+
+ @Source("save.png")
+ ImageResource save();
+
+ @Source("alert.png")
+ ImageResource error();
+
+ @Source("arrow_out.png")
+ ImageResource expand();
+
+ @Source("arrow_in.png")
+ ImageResource collapse();
+
+ @Source("application_view_list.png")
+ ImageResource groupBy();
+
+ @Source("map.png")
+ ImageResource map();
+
+ @Source("user_green.png")
+ ImageResource userPerspective();
+
+ @Source("monitor.png")
+ ImageResource computationPerspective();
+
+ @Source("arrow_redo.png")
+ ImageResource resubmit();
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/add.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/add.png
new file mode 100644
index 0000000..6332fef
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/add.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-complete.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-complete.gif
new file mode 100644
index 0000000..ca17bcd
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-complete.gif differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-error.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-error.gif
new file mode 100644
index 0000000..8dadfb9
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-error.gif differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-loader-big.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-loader-big.gif
new file mode 100644
index 0000000..b3d6d3f
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-loader-big.gif differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-loader.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-loader.gif
new file mode 100644
index 0000000..6bdc3b5
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/ajax-loader.gif differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.gif
new file mode 100644
index 0000000..024e2a9
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.gif differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.png
new file mode 100644
index 0000000..5177258
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/alert.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_side_expand.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_side_expand.png
new file mode 100644
index 0000000..030cf7c
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_side_expand.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_view_list.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_view_list.png
new file mode 100644
index 0000000..acc30b8
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/application_view_list.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_in.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_in.png
new file mode 100644
index 0000000..745c651
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_in.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_out.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_out.png
new file mode 100644
index 0000000..2e9bc42
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_out.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_redo.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_redo.png
new file mode 100644
index 0000000..fdc394c
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_redo.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_right.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_right.png
new file mode 100644
index 0000000..b1a1819
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/arrow_right.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/cancel.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/cancel.png
new file mode 100644
index 0000000..c149c2b
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/cancel.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/cancel_icon.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/cancel_icon.png
new file mode 100644
index 0000000..158b8b1
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/cancel_icon.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/computation.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/computation.png
new file mode 100644
index 0000000..97ed5ee
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/computation.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/computations.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/computations.png
new file mode 100644
index 0000000..5236b20
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/computations.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector1.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector1.png
new file mode 100644
index 0000000..fb70243
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector1.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector2.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector2.png
new file mode 100644
index 0000000..2f77b2f
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/connector2.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/delete.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/delete.png
new file mode 100644
index 0000000..70c8035
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/delete.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/detach.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/detach.png
new file mode 100644
index 0000000..f4db43e
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/detach.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/details.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/details.png
new file mode 100644
index 0000000..8200ce8
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/details.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/folder_explore.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/folder_explore.png
new file mode 100644
index 0000000..0ba9391
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/folder_explore.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/goBack.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/goBack.png
new file mode 100644
index 0000000..57dd7e0
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/goBack.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpace.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpace.png
new file mode 100644
index 0000000..5084c44
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpace.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceImporter.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceImporter.png
new file mode 100644
index 0000000..281d218
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceImporter.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceMonitor.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceMonitor.png
new file mode 100644
index 0000000..9b394e7
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/inputSpaceMonitor.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logo.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logo.png
new file mode 100644
index 0000000..d2313dc
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logo.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logoLittle.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logoLittle.png
new file mode 100644
index 0000000..982965f
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/logoLittle.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/map.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/map.png
new file mode 100644
index 0000000..f90ef25
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/map.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemComputations.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemComputations.png
new file mode 100644
index 0000000..10618b3
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemComputations.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemDataspace.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemDataspace.png
new file mode 100644
index 0000000..bbb33ee
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemDataspace.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemExperiment.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemExperiment.png
new file mode 100644
index 0000000..a5333d5
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemExperiment.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemInputspace.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemInputspace.png
new file mode 100644
index 0000000..071293e
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/menuItemInputspace.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/monitor.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/monitor.png
new file mode 100644
index 0000000..d040bd0
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/monitor.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/refresh.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/refresh.png
new file mode 100644
index 0000000..1f23890
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/refresh.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/save.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/save.png
new file mode 100644
index 0000000..99d532e
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/save.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/sort_asc.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/sort_asc.gif
new file mode 100644
index 0000000..986c1c9
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/sort_asc.gif differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/table.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/table.png
new file mode 100644
index 0000000..abcd936
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/table.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/tableResult.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/tableResult.png
new file mode 100644
index 0000000..8b195b6
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/tableResult.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/tree.gif b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/tree.gif
new file mode 100644
index 0000000..e9dd8e0
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/tree.gif differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/triangle.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/triangle.png
new file mode 100644
index 0000000..7937431
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/triangle.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/user_green.png b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/user_green.png
new file mode 100644
index 0000000..30383c2
Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/dataminermanager/client/resources/user_green.png differ
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java
new file mode 100644
index 0000000..52209f6
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletService.java
@@ -0,0 +1,105 @@
+package org.gcube.portlets.user.dataminermanager.client.rpc;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.gcube.portlets.user.dataminermanager.client.bean.ComputationStatus;
+import org.gcube.portlets.user.dataminermanager.client.bean.CsvMetadata;
+import org.gcube.portlets.user.dataminermanager.client.bean.FileMetadata;
+import org.gcube.portlets.user.dataminermanager.client.bean.ImportStatus;
+import org.gcube.portlets.user.dataminermanager.client.bean.Operator;
+import org.gcube.portlets.user.dataminermanager.client.bean.OperatorsClassification;
+import org.gcube.portlets.user.dataminermanager.client.bean.ResourceItem;
+import org.gcube.portlets.user.dataminermanager.client.bean.output.ImagesResource;
+import org.gcube.portlets.user.dataminermanager.client.bean.output.MapResource;
+import org.gcube.portlets.user.dataminermanager.client.bean.output.Resource;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+import org.gcube.portlets.user.dataminermanager.shared.data.ComputationId;
+import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple;
+import org.gcube.portlets.user.dataminermanager.shared.exception.ServiceException;
+import org.gcube.portlets.user.dataminermanager.shared.session.UserInfo;
+import org.gcube.portlets.user.dataminermanager.shared.workspace.DataMinerWorkArea;
+import org.gcube.portlets.user.dataminermanager.shared.workspace.ItemDescription;
+import org.gcube.portlets.widgets.wsexplorer.shared.Item;
+
+import com.google.gwt.user.client.rpc.RemoteService;
+import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
+
+/**
+ * The client side stub for the RPC service.
+ */
+@RemoteServiceRelativePath("dataminerman")
+public interface DataMinerPortletService extends RemoteService {
+
+ public UserInfo hello() throws ServiceException;
+
+ // get all operators and categories
+ public List getOperatorsClassifications()
+ throws Exception;
+
+ // get parameters for a given operator
+ public List getParameters(Operator operator) throws Exception;
+
+ public ComputationId startComputation(Operator op, String computationTitle,
+ String computationDescription) throws Exception;
+
+ // get a status for a computation
+ public ComputationStatus getComputationStatus(ComputationId computationId)
+ throws Exception;
+
+ // get tables info belongs to a given templates set (for relative user)
+ public List getTableItems(List templates)
+ throws Exception;
+
+ public List getFileItems(List templates)
+ throws Exception;
+
+ public Resource getResourceByComputationId(ComputationId computationId);
+
+ public Map getParametersMapByComputationId(ComputationId computationId) throws ServiceException;
+
+ public String importTable(CsvMetadata csvMetadata) throws Exception;
+
+ public CsvMetadata getCsvMetadataFromCsvImporterWizard() throws Exception;
+
+ public List getImportsStatus(Date todayDate)
+ throws ServiceException;
+
+ // get a status for an import
+ public ImportStatus getImportStatusById(String id) throws ServiceException;
+
+
+ public Map getMapFromMapResource(MapResource mapResource)
+ throws Exception;
+
+ // Map getImagesInfoFromImagesResource(ImagesResource
+ // imgsRes) throws Exception;
+
+ public String saveImage(ComputationId computationId, ImagesResource imageResource)
+ throws Exception;
+
+ public void removeResource(String id) throws Exception;
+
+ public void removeImport(String id) throws Exception;
+
+ public String exportResource(String folderId, String fileName,
+ ResourceItem resourceItem) throws Exception;
+
+ public ComputationId resubmit(ComputationId computationId) throws ServiceException;
+
+ public FileMetadata getFilePathFromImporterWizard() throws Exception;
+
+ public String importFile(FileMetadata fileMetadata) throws Exception;
+
+ public TableItemSimple retrieveTableInformation(Item item)
+ throws ServiceException;
+
+ public DataMinerWorkArea getDataMinerWorkArea() throws ServiceException;
+
+ public String getPublicLink(ItemDescription itemDescription)
+ throws ServiceException;
+
+ public String cancelComputation(ComputationId computationId) throws ServiceException;
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java
new file mode 100644
index 0000000..3a65c0e
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/rpc/DataMinerPortletServiceAsync.java
@@ -0,0 +1,107 @@
+package org.gcube.portlets.user.dataminermanager.client.rpc;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.gcube.portlets.user.dataminermanager.client.bean.ComputationStatus;
+import org.gcube.portlets.user.dataminermanager.client.bean.CsvMetadata;
+import org.gcube.portlets.user.dataminermanager.client.bean.FileMetadata;
+import org.gcube.portlets.user.dataminermanager.client.bean.ImportStatus;
+import org.gcube.portlets.user.dataminermanager.client.bean.Operator;
+import org.gcube.portlets.user.dataminermanager.client.bean.OperatorsClassification;
+import org.gcube.portlets.user.dataminermanager.client.bean.ResourceItem;
+import org.gcube.portlets.user.dataminermanager.client.bean.output.ImagesResource;
+import org.gcube.portlets.user.dataminermanager.client.bean.output.MapResource;
+import org.gcube.portlets.user.dataminermanager.client.bean.output.Resource;
+import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
+import org.gcube.portlets.user.dataminermanager.shared.data.ComputationId;
+import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple;
+import org.gcube.portlets.user.dataminermanager.shared.session.UserInfo;
+import org.gcube.portlets.user.dataminermanager.shared.workspace.DataMinerWorkArea;
+import org.gcube.portlets.user.dataminermanager.shared.workspace.ItemDescription;
+import org.gcube.portlets.widgets.wsexplorer.shared.Item;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ * email: g.panichi@isti.cnr.it
+ *
+ */
+public interface DataMinerPortletServiceAsync {
+
+ public static DataMinerPortletServiceAsync INSTANCE = (DataMinerPortletServiceAsync) GWT
+ .create(DataMinerPortletService.class);
+
+
+ void hello(AsyncCallback callback);
+
+ void getOperatorsClassifications(
+ AsyncCallback
> callback);
+
+ void getParameters(Operator operator,
+ AsyncCallback> callback);
+
+ void startComputation(Operator op, String computationTitle,
+ String computationDescription,
+ AsyncCallback asyncCallback);
+
+ void getComputationStatus(ComputationId computationId,
+ AsyncCallback asyncCallback);
+
+ void getTableItems(List templates,
+ AsyncCallback> callback);
+
+ void getFileItems(List templates,
+ AsyncCallback> callback);
+
+
+ void getResourceByComputationId(ComputationId computationId,
+ AsyncCallback callback);
+
+ void importTable(CsvMetadata csvMetadata, AsyncCallback callback);
+
+ void getImportsStatus(Date todayDate,
+ AsyncCallback> callback);
+
+ void getImportStatusById(String id, AsyncCallback callback);
+
+ void getMapFromMapResource(MapResource mapResource,
+ AsyncCallback