diff --git a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/WsTaskExecutorWidget.java b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/WsTaskExecutorWidget.java index 7a302f1..03095b6 100644 --- a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/WsTaskExecutorWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/WsTaskExecutorWidget.java @@ -174,7 +174,7 @@ public class WsTaskExecutorWidget { try { if(result){ - String msg = "Task configuration for Algorithm Id: "+dcEvent.getTaskConf().getTaskId() +"
removed correctly"; + String msg = "Task configuration for Algorithm: "+dcEvent.getTaskConf().getTaskName() +"

removed correctly"; new DialogResult(null, "Delete performed!",msg).center(); } showTaskConfigurations(dcEvent.getWsItem()); diff --git a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/dialog/DialogResult.java b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/dialog/DialogResult.java index 2e8aadb..d122860 100644 --- a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/dialog/DialogResult.java +++ b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/dialog/DialogResult.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.widgets.wstaskexecutor.client.dialog; @@ -20,13 +20,13 @@ import com.google.gwt.user.client.ui.Widget; * Jan 19, 2018 */ public class DialogResult extends DialogBox implements ClickHandler { - + /** The dock. */ private DockPanel dock = new DockPanel(); - + /** The close button. */ private Button closeButton; - + /** * Instantiates a new dialog result. * @@ -41,15 +41,42 @@ public class DialogResult extends DialogBox implements ClickHandler { dock.setSpacing(4); dock.setWidth("100%"); dock.add(new HTML(msg), DockPanel.CENTER); - + dock.add(closeButton, DockPanel.SOUTH); if(img!=null) dock.add(img, DockPanel.WEST); - + dock.setCellHorizontalAlignment(closeButton, DockPanel.ALIGN_RIGHT); setWidget(dock); } + /** + * Instantiates a new dialog result. + * + * @param img the img + * @param title the title + * @param widget the widget + * @param closeable the closeable + */ + public DialogResult(Image img, String title, Widget widget, boolean closeable) { + getElement().setClassName("gwt-DialogBoxNew"); + setText(title); + closeButton = new Button("Close", this); + dock.setSpacing(4); + dock.setWidth("100%"); + dock.add(widget, DockPanel.CENTER); + + dock.add(closeButton, DockPanel.SOUTH); + if(img!=null) + dock.add(img, DockPanel.WEST); + + dock.setCellHorizontalAlignment(closeButton, DockPanel.ALIGN_RIGHT); + setWidget(dock); + + closeButton.setVisible(closeable); + + } + /** * Gets the close button. @@ -67,9 +94,9 @@ public class DialogResult extends DialogBox implements ClickHandler { @Override public void onClick(ClickEvent event) { hide(); - + } - + /** * Adds the to center panel. * diff --git a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/rpc/WsTaskExecutorWidgetServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/rpc/WsTaskExecutorWidgetServiceAsync.java index 3fb38ca..d036b44 100644 --- a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/rpc/WsTaskExecutorWidgetServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/rpc/WsTaskExecutorWidgetServiceAsync.java @@ -145,7 +145,7 @@ public interface WsTaskExecutorWidgetServiceAsync { * @return the list operators per scope * @throws Exception the exception */ - void getListOperatorsPerScope(String scope, AsyncCallback> asyncCallback) throws Exception; + void getListOperatorsPerScope(String scope, AsyncCallback> asyncCallback); } diff --git a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/WsTaskExecutorWidgetViewManager.java b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/WsTaskExecutorWidgetViewManager.java index 23bad1a..813acc8 100644 --- a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/WsTaskExecutorWidgetViewManager.java +++ b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/WsTaskExecutorWidgetViewManager.java @@ -351,6 +351,7 @@ public class WsTaskExecutorWidgetViewManager { TaskConfiguration conf = new TaskConfiguration(); conf.setScope(getSelectedScope().getScopeName()); conf.setTaskId(getTaskId()); + conf.setTaskName(getTaskName()); conf.setTaskDescription(getDescription()); conf.setWorkspaceItemId(wsItem.getItemId()); conf.setListParameters(getParameters()); diff --git a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CreateTaskConfigurationView.java b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CreateTaskConfigurationView.java index d026b85..ea2ccd9 100644 --- a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CreateTaskConfigurationView.java +++ b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CreateTaskConfigurationView.java @@ -6,13 +6,16 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.gcube.common.workspacetaskexecutor.shared.TaskOperator; import org.gcube.common.workspacetaskexecutor.shared.TaskParameter; import org.gcube.common.workspacetaskexecutor.shared.TaskParameterType; import org.gcube.common.workspacetaskexecutor.shared.dataminer.TaskConfiguration; import org.gcube.portlets.widgets.wstaskexecutor.client.WsTaskExecutorWidget; +import org.gcube.portlets.widgets.wstaskexecutor.client.dialog.DialogResult; import org.gcube.portlets.widgets.wstaskexecutor.client.event.DeleteCustomFieldEvent; import org.gcube.portlets.widgets.wstaskexecutor.client.event.DeleteCustomFieldEventHandler; import org.gcube.portlets.widgets.wstaskexecutor.client.event.ShowListOfTaskConfigurationsEvent; +import org.gcube.portlets.widgets.wstaskexecutor.client.view.LoaderIcon; import org.gcube.portlets.widgets.wstaskexecutor.shared.GcubeScope; import org.gcube.portlets.widgets.wstaskexecutor.shared.WSItem; @@ -23,10 +26,11 @@ import com.github.gwtbootstrap.client.ui.Fieldset; import com.github.gwtbootstrap.client.ui.ListBox; import com.github.gwtbootstrap.client.ui.Pager; import com.github.gwtbootstrap.client.ui.TextArea; -import com.github.gwtbootstrap.client.ui.TextBox; import com.github.gwtbootstrap.client.ui.constants.ControlGroupType; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.DomEvent; @@ -34,6 +38,7 @@ import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; @@ -70,20 +75,21 @@ public abstract class CreateTaskConfigurationView extends Composite { ListBox field_select_scope; @UiField - ControlGroup cg_input_task_id; + ListBox field_select_task_id; + @UiField ControlGroup cg_select_vre; + @UiField + ControlGroup cg_select_task_id; + @UiField ControlGroup cg_parameters_control; @UiField Fieldset form_unit_fields; - @UiField - TextBox field_task_id; - @UiField Controls task_parameters_control; @@ -100,6 +106,8 @@ public abstract class CreateTaskConfigurationView extends Composite { /** The map VR es. */ private Map mapScopes = new HashMap(); + private Map> mapOperators = new HashMap>(); + private String currentScope; public final static HandlerManager eventBus = new HandlerManager(null); @@ -166,6 +174,185 @@ public abstract class CreateTaskConfigurationView extends Composite { bindEvents(); + if(isEditConfiguration){ + + String vreName = editConfiguration.getScope().substring(editConfiguration.getScope().lastIndexOf("/")+1, editConfiguration.getScope().length()); + field_select_scope.addItem(vreName, editConfiguration.getScope()); + field_select_scope.setSelectedValue(editConfiguration.getScope()); + + field_select_task_id.addItem(editConfiguration.getTaskName(), editConfiguration.getTaskId()); + field_select_task_id.setSelectedValue(editConfiguration.getTaskId()); + //field_task_id.setValue(editConfiguration.getTaskId()); + field_task_description.setValue(editConfiguration.getTaskDescription()); + + List params = editConfiguration.getListParameters(); + for (TaskParameter taskParameter : params) { + appendCustomField(taskParameter.getKey(), taskParameter.getValue(), taskParameter.getType().getType(), false); + } + + pager.getRight().setText("Update Configuration"); + } + else{ + + WsTaskExecutorWidget.wsTaskService.getListOfScopesForLoggedUser(new AsyncCallback>() { + + @Override + public void onSuccess(List result) { + + + for (GcubeScope gcubeScope : result) { + String toValue = gcubeScope.getScopeTitle(); + mapScopes.put(gcubeScope.getScopeName(), gcubeScope); + field_select_scope.addItem(toValue, gcubeScope.getScopeName()); + + } + + if(result.size()>0){ + +// if(isEditConfiguration){ +// //String vreName = FormatUtil.toVREName(editConfiguration.getScope()); +// field_select_scope.setSelectedValue(editConfiguration.getScope()); +// } +// else + field_select_scope.setSelectedValue(result.get(0).getScopeName()); + + //field_select_vre.setSelectedIndex(0); + //field_select_vre.fireEvent(DomEvent.fireNativeEvent(nativeEvent, handlerSource);); + DomEvent.fireNativeEvent(Document.get().createChangeEvent(), field_select_scope); + } + } + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + + } + }); + + addEmptyCustomFieldEvent(null); + } + + } + + /** + * Adds the empty custom field event. + * + * @param e the e + */ + @UiHandler("addCustomFieldButton") + void addEmptyCustomFieldEvent(ClickEvent e){ + + appendCustomField(null, null, null, true); + } + + /** + * Append custom field. + * + * @param key the key + * @param value the value + * @param parameterType the parameter type + * @param removable the removable + */ + private void appendCustomField(String key, String value, String parameterType, boolean removable){ + + CustomFieldEntry toAdd = new CustomFieldEntry(eventBus, key, value, parameterType, removable); + customFieldEntriesList.add(toAdd); + cg_parameters_control.add(toAdd); + } + + /** + * @param taskOperator + */ + private void fillParametersToOperator(TaskOperator taskOperator) { + + customFieldEntriesList.clear(); + cg_parameters_control.clear(); + + for (TaskParameter operator : taskOperator.getInputOperators()) { + appendCustomField(operator.getKey(), operator.getValue(), operator.getType().getType(), false); + } + + } + + private void loadAlgorithmsForSelectedScope(){ + + final GcubeScope selScope = getSelectedScope(); + + if(selScope==null) + return; + + List operators = mapOperators.get(selScope.getScopeName()); + + if(operators!=null){ + fillSelectOperator(operators); + return; + } + + LoaderIcon loader = new LoaderIcon("Please wait, loading Algorithms..."); + final DialogResult loaderBox = new DialogResult(null, "Please wait", loader, false); + loaderBox.getElement().getStyle().setZIndex(Integer.MAX_VALUE-5000); + pager.getRight().setVisible(false); + + WsTaskExecutorWidget.wsTaskService.getListOperatorsPerScope(selScope.getScopeName(), new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + loaderBox.hide(); + field_select_task_id.setEnabled(false); + Window.alert("Error: "+caught.getMessage()); + pager.getRight().setVisible(false); + + } + + @Override + public void onSuccess(List result) { + loaderBox.hide(); + field_select_task_id.setEnabled(true); + if(result==null || result.size()==0){ + new DialogResult(null, "Warning", "No operator available in the scope: "+selScope.getScopeName()).center(); + return; + } + + pager.getRight().setVisible(true); + mapOperators.put(selScope.getScopeName(), result); + fillSelectOperator(result); + } + }); + + loaderBox.center(); + + } + + private void fillSelectOperator(List operators){ + field_select_task_id.clear(); + for (TaskOperator taskOperator : operators) { + field_select_task_id.addItem(taskOperator.getName(), taskOperator.getId()); + } + + if(isEditConfiguration){ + //String vreName = FormatUtil.toVREName(editConfiguration.getScope()); + field_select_task_id.setSelectedValue(editConfiguration.getTaskId()); + } + + DomEvent.fireNativeEvent(Document.get().createChangeEvent(), field_select_task_id); + } + + + /** + * Bind events. + */ + private void bindEvents() { + + // when a custom field is removed, remove it from the list + eventBus.addHandler(DeleteCustomFieldEvent.TYPE, new DeleteCustomFieldEventHandler() { + + @Override + public void onRemoveEntry(DeleteCustomFieldEvent event) { + customFieldEntriesList.remove(event.getRemovedEntry()); + cg_parameters_control.remove(event.getRemovedEntry()); + } + }); + pager.getLeft().addClickHandler(new ClickHandler() { @Override @@ -187,110 +374,54 @@ public abstract class CreateTaskConfigurationView extends Composite { } }); - - WsTaskExecutorWidget.wsTaskService.getListOfScopesForLoggedUser(new AsyncCallback>() { + field_select_scope.addChangeHandler(new ChangeHandler() { @Override - public void onSuccess(List result) { + public void onChange(ChangeEvent event) { + loadAlgorithmsForSelectedScope(); + } + }); - for (GcubeScope gcubeScope : result) { - String toValue = gcubeScope.getScopeTitle(); - mapScopes.put(gcubeScope.getScopeName(), gcubeScope); - field_select_scope.addItem(toValue, gcubeScope.getScopeName()); + field_select_task_id.addChangeHandler(new ChangeHandler() { - } + @Override + public void onChange(ChangeEvent event) { - if(result.size()>0){ - - if(isEditConfiguration){ - //String vreName = FormatUtil.toVREName(editConfiguration.getScope()); - field_select_scope.setSelectedValue(editConfiguration.getScope()); + setValueDescription(""); + String taskId = getTaskId(); + GWT.log("Task Id: "+taskId); + GcubeScope selScope = getSelectedScope(); + List operators = mapOperators.get(selScope.getScopeName()); + GWT.log("Operatos for scope '"+selScope.getScopeName() +"' are: "+operators); + for (TaskOperator taskOperator : operators) { + if(taskId.compareTo(taskOperator.getId())==0){ + setValueDescription(taskOperator.getBriefDescription()); + fillParametersToOperator(taskOperator); } - else - field_select_scope.setSelectedValue(result.get(0).getScopeName()); - - //field_select_vre.setSelectedIndex(0); - //field_select_vre.fireEvent(DomEvent.fireNativeEvent(nativeEvent, handlerSource);); - DomEvent.fireNativeEvent(Document.get().createChangeEvent(), field_select_scope); } - } - - @Override - public void onFailure(Throwable caught) { - // TODO Auto-generated method stub } }); - if(isEditConfiguration){ - - field_task_id.setValue(editConfiguration.getTaskId()); - field_task_description.setValue(editConfiguration.getTaskDescription()); - - List params = editConfiguration.getListParameters(); - for (TaskParameter taskParameter : params) { - appendCustomField(taskParameter.getKey(), taskParameter.getValue(), taskParameter.getType().getType()); - } - - pager.getRight().setText("Update Configuration"); - } - else - addEmptyCustomFieldEvent(null); - } /** - * Adds the empty custom field event. * - * @param e the e */ - @UiHandler("addCustomFieldButton") - void addEmptyCustomFieldEvent(ClickEvent e){ + private void setValueDescription(String value) { - appendCustomField(null, null, null); + field_task_description.setValue(value); } - /** - * Append custom field. - * - * @param key the key - * @param value the value - * @param parameterType the parameter type - */ - private void appendCustomField(String key, String value, String parameterType){ - - CustomFieldEntry toAdd = new CustomFieldEntry(eventBus, key, value, parameterType); - customFieldEntriesList.add(toAdd); - cg_parameters_control.add(toAdd); - } - - /** - * Bind events. - */ - private void bindEvents() { - - // when a custom field is removed, remove it from the list - eventBus.addHandler(DeleteCustomFieldEvent.TYPE, new DeleteCustomFieldEventHandler() { - - @Override - public void onRemoveEntry(DeleteCustomFieldEvent event) { - customFieldEntriesList.remove(event.getRemovedEntry()); - cg_parameters_control.remove(event.getRemovedEntry()); - } - }); - - } - - /** * Validate submit. * * @return true, if successful */ protected boolean validateSubmit() { - cg_input_task_id.setType(ControlGroupType.NONE); + cg_select_task_id.setType(ControlGroupType.NONE); //cg_parameters_control.setType(ControlGroupType.NONE); //cg_remote_path.setType(ControlGroupType.NONE); @@ -300,9 +431,9 @@ public abstract class CreateTaskConfigurationView extends Composite { return false; } - if(field_task_id.getValue() == null || field_task_id.getValue().isEmpty()){ - cg_input_task_id.setType(ControlGroupType.ERROR); - setError(true, "You must type an Algorithm Identifier!"); + if(field_select_scope.getSelectedItemText() == null || field_select_scope.getSelectedItemText().isEmpty()){ + cg_select_task_id.setType(ControlGroupType.ERROR); + setError(true, "You must select an Algorithm!"); return false; } @@ -338,10 +469,22 @@ public abstract class CreateTaskConfigurationView extends Composite { * @return the task id */ public String getTaskId(){ - return field_task_id.getValue(); + String taskId = field_select_task_id.getSelectedValue(); + GWT.log("Selected task Id: "+taskId); + return taskId; } + + /** + * Gets the task name. + * + * @return the task name + */ + public String getTaskName(){ + return field_select_task_id.getSelectedItemText(); + } + /** * Gets the parameters. * @@ -369,7 +512,6 @@ public abstract class CreateTaskConfigurationView extends Composite { - /** * @return the isEditConfiguration */ @@ -386,4 +528,5 @@ public abstract class CreateTaskConfigurationView extends Composite { return editConfiguration; } + } diff --git a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CreateTaskConfigurationView.ui.xml b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CreateTaskConfigurationView.ui.xml index b44f756..47f7757 100644 --- a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CreateTaskConfigurationView.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CreateTaskConfigurationView.ui.xml @@ -20,14 +20,24 @@ - - The Algorithm Id + + The Algorithm - + + + + + + + + + + + + Description diff --git a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CustomFieldEntry.java b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CustomFieldEntry.java index 49523f8..c3ff64b 100644 --- a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CustomFieldEntry.java +++ b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/client/view/binder/CustomFieldEntry.java @@ -72,7 +72,7 @@ public class CustomFieldEntry extends Composite { * @param value the value * @param parameterType the parameter type */ - public CustomFieldEntry(HandlerManager eventBus, String key, String value, final String parameterType) { + public CustomFieldEntry(HandlerManager eventBus, String key, String value, final String parameterType, boolean removable) { initWidget(uiBinder.createAndBindUi(this)); this.getElement().getStyle().setMarginTop(10, Unit.PX); this.getElement().getStyle().setMarginBottom(20, Unit.PX); @@ -127,6 +127,8 @@ public class CustomFieldEntry extends Composite { field_select_parameter.setEnabled(false); + removeCustomField.setVisible(removable); + } /** diff --git a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/server/WsTaskExecutorWidgetServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/server/WsTaskExecutorWidgetServiceImpl.java index 453b4a0..e3cfd19 100644 --- a/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/server/WsTaskExecutorWidgetServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/wstaskexecutor/server/WsTaskExecutorWidgetServiceImpl.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.workspacetaskexecutor.dataminer.WorkspaceDataMinerTaskExecutor; @@ -322,21 +323,25 @@ public class WsTaskExecutorWidgetServiceImpl extends RemoteServiceServlet implem WorkspaceDataMinerTaskExecutor exec = getTaskExecutor(); String originalScope = ScopeProvider.instance.get(); + String originalToken = SecurityTokenProvider.instance.get(); try{ - + GCubeUser user = PortalContextUtil.getUserLogged(this.getThreadLocalRequest()); + String token = PortalContextUtil.getTokenFor(scope, user.getUsername()); ScopeProvider.instance.set(scope); + SecurityTokenProvider.instance.set(token); return exec.getListOperators(); }catch(Exception e){ - + logger.error("Error on getting list of Operators for scope: "+scope,e); + throw new Exception("It is not possible to get list of Operators in the scope: "+scope +". Please, check if a DataMiner is available for this scope"); }finally{ if(originalScope!=null) ScopeProvider.instance.set(originalScope); + + if(originalToken!=null) + SecurityTokenProvider.instance.set(originalToken); } - - return null; - } }