diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java index d90060c..899061d 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerController.java @@ -21,6 +21,7 @@ import org.gcube.portlets.widgets.wsexplorer.client.event.RootLoadedEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.RootLoadedEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.resources.WorkspaceExplorerResources; import org.gcube.portlets.widgets.wsexplorer.client.view.Breadcrumbs; +import org.gcube.portlets.widgets.wsexplorer.client.view.CreateFolderForm; import org.gcube.portlets.widgets.wsexplorer.client.view.Navigation; import org.gcube.portlets.widgets.wsexplorer.client.view.WorkspaceExplorer; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; @@ -35,6 +36,7 @@ import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.VerticalAlign; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; @@ -187,7 +189,40 @@ public class WorkspaceExplorerController implements EventHandler { @Override public void onClick(CreateFolderClickEvent createFolderClickEvent) { - // TODO Auto-generated method stub + CreateFolderForm createFolder = new CreateFolderForm() { + + @Override + public void subtmitHandler(String folderName) { + + WorkspaceExplorerConstants.workspaceNavigatorService.createFolder(folderName, "", breadcrumbs.getLastParent().getId(), new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + Window.alert(caught.getMessage()); + GWT.log(caught.getMessage()); + + } + + @Override + public void onSuccess(Item result) { + + if(result!=null){ + wsExplorer.addItemToExplorer(result); + clearMoreInfo(); + }else + Window.alert("Create folder error, Try again"); + } + }); + } + + @Override + public void closeHandler() { + workspaceExplorerPanel.getSouthPanel().remove(this); + } + }; + + workspaceExplorerPanel.getSouthPanel().add(createFolder); + } }); } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerService.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerService.java index 5396ea7..189cf4f 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerService.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerService.java @@ -147,7 +147,6 @@ public interface WorkspaceExplorerService extends RemoteService { * @throws Exception */ Item createFolder( - String nameFolder, String description, String parentId, - List showableTypes, FilterCriteria filterCriteria) + String nameFolder, String description, String parentId) throws Exception; } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerServiceAsync.java index 86a290e..90aa342 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/rpc/WorkspaceExplorerServiceAsync.java @@ -142,7 +142,6 @@ public interface WorkspaceExplorerServiceAsync { void createFolder( String nameFolder, String description, String parentId, - List showableTypes, FilterCriteria filterCriteria, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.java new file mode 100644 index 0000000..6e292b5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.java @@ -0,0 +1,212 @@ +/** + * + */ +package org.gcube.portlets.widgets.wsexplorer.client.view; + +import com.github.gwtbootstrap.client.ui.Alert; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.ControlGroup; +import com.github.gwtbootstrap.client.ui.FluidRow; +import com.github.gwtbootstrap.client.ui.Form; +import com.github.gwtbootstrap.client.ui.TextBox; +import com.github.gwtbootstrap.client.ui.constants.AlertType; +import com.github.gwtbootstrap.client.ui.constants.ControlGroupType; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HasHorizontalAlignment; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Widget; + + +/** + * The Class CreateFolderForm. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 1, 2016 + */ +public abstract class CreateFolderForm extends Composite { + + @UiField + TextBox input_folder_name; + + @UiField + Button close_dialog; + + @UiField + Button submit_create_folder; + + @UiField + FluidRow validator_field; + + @UiField + Form form_create_folder; + + @UiField + ControlGroup input_folder_name_group; + + @UiField + HorizontalPanel hp_form_actions; + + private Alert alertError = new Alert("Required Field"); + + private Alert alertSubmitResult = new Alert(""); + + private static AbstractFormReleaseUiBinder uiBinder = GWT.create(AbstractFormReleaseUiBinder.class); + + private int width = 300; + + /** + * Subtmit handler. + * + * @param folderName the folder name + */ + public abstract void subtmitHandler(String folderName); + + /** + * Close handler. + */ + public abstract void closeHandler(); + + + /** + * The Interface AbstractFormReleaseUiBinder. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 19, 2015 + */ + interface AbstractFormReleaseUiBinder extends UiBinder { + } + + /** + * Instantiates a new abstract form release. + */ + public CreateFolderForm() { + initWidget(uiBinder.createAndBindUi(this)); +// setSize(width+"px", "200px"); +// input_folder_name.setWidth(width-10+"px"); + +// input_layer_name.addStyleName("textbox-geo"); +// input_layer_title.addStyleName("textbox-geo"); +// input_WMS_URI.addStyleName("textbox-geo"); + + close_dialog.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + closeHandler(); + + } + }); + + submit_create_folder.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + if(validateForm()){ + subtmitHandler(input_folder_name.getValue()); + } + } + }); + + alertError.addStyleName("marginTop10"); + alertError.setType(AlertType.ERROR); + alertError.setVisible(false); + alertError.setClose(false); + validator_field.add(alertError); + +// alertSubmitResult.addStyleName("marginTop10"); + alertSubmitResult.setType(AlertType.INFO); + alertSubmitResult.setVisible(false); + alertSubmitResult.setClose(false); + + hp_form_actions.setCellHorizontalAlignment(close_dialog, HasHorizontalAlignment.ALIGN_RIGHT); + + showAlertSubmitResult(false, ""); + form_create_folder.add(alertSubmitResult); + } + + /** + * Validate form. + * + * @return true, if successful + */ + public boolean validateForm(){ + + boolean valid = true; +// input_layer_name.setType(ControlGroupType.NONE); + input_folder_name_group.setType(ControlGroupType.NONE); + + if(input_folder_name.getValue()==null || input_folder_name.getValue().isEmpty()){ + input_folder_name.setControlGroup(input_folder_name_group); + input_folder_name_group.setType(ControlGroupType.ERROR); + + valid = false; + } + +// alertError.setVisible(!valid); + setAlertErrorVisible(!valid); + return valid; + } + + /** + * Show alert submit result. + * + * @param visible the visible + * @param text the text + */ + public void showAlertSubmitResult(boolean visible, String text){ + alertSubmitResult.setText(text); + alertSubmitResult.setVisible(visible); + } + + /** + * Gets the submit_button. + * + * @return the submit_button + */ + public Button getSubmit_button() { + return submit_create_folder; + } + + /** + * Gets the validator_field. + * + * @return the validator_field + */ + public FluidRow getValidator_field() { + return validator_field; + } + + /** + * Gets the alert error. + * + * @return the alert error + */ + public Alert getAlertError() { + return alertError; + } + + /** + * Gets the alert submit result. + * + * @return the alert submit result + */ + public Alert getAlertSubmitResult() { + return alertSubmitResult; + } + + /** + * Sets the alert error visible. + * + * @param bool the new alert error visible + */ + public void setAlertErrorVisible(boolean bool){ + alertError.setVisible(bool); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.ui.xml b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.ui.xml new file mode 100644 index 0000000..3a61079 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/CreateFolderForm.ui.xml @@ -0,0 +1,23 @@ + + + + + + + New Folder + + + + + + + + Create + + Close + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java index 82b6cbb..afebe3e 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.java @@ -118,7 +118,6 @@ public class Navigation extends Composite{ } }); - new_folder.setActive(true); new_folder.setBaseIcon(WorkspaceExplorerResources.CustomIconType.new_folder); new_folder.addClickHandler(new ClickHandler() { diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.ui.xml b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.ui.xml index 6b19468..c488d96 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Navigation.ui.xml @@ -8,5 +8,8 @@ + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java index 27ef6fa..3b9a97b 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java @@ -1,6 +1,7 @@ package org.gcube.portlets.widgets.wsexplorer.client.view; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.gcube.portlets.widgets.wsexplorer.client.Util; @@ -33,11 +34,11 @@ import com.google.gwt.user.client.ui.ScrollPanel; * Aug 4, 2015 */ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ - + protected static final HorizontalPanel LOADING_PANEL = new HorizontalPanel(); protected static final Image LOADING_IMAGE = WorkspaceExplorerResources.getIconLoading().createImage(); - + static { LOADING_PANEL.getElement().getStyle().setMargin(5.0, Unit.PX); // LOADING_PANEL.setSpacing(3); @@ -46,7 +47,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ loading.getElement().getStyle().setPaddingLeft(5.0, Unit.PX); LOADING_PANEL.add(loading); } - + protected Alert alert = new Alert(); protected List selectableTypes = new ArrayList(); protected List showableTypes = new ArrayList(); @@ -128,9 +129,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ } boolean purgeEmpyFolders = !showEmptyFolders; - + GWT.log("loading workspace tree from server"); - + WorkspaceExplorerConstants.workspaceNavigatorService.getRoot(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback() { public void onFailure(Throwable caught) { @@ -146,7 +147,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ }); } - + /** * Load folder. * @@ -156,13 +157,13 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ public void loadFolder(final Item item) throws Exception { GWT.log("loading folder data"); setLoading(); - + if(!item.isFolder()) throw new Exception("Item is not a folder"); - + if(item.getId()==null || item.getId().isEmpty()) throw new Exception("Item id is null or empty"); - + // we make a copy of showable types List showableTypesParam = new ArrayList(showableTypes); @@ -189,19 +190,19 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ public void onSuccess(Item result) { if(item.getName()==null || item.getName().isEmpty()) item.setName(result.getName()); - + updateExplorer(result.getChildren()); } }); } - + /** * Load the Workspace Tree. */ public void loadMySpecialFolder() { GWT.log("loading folder data"); setLoading(); - + // we make a copy of showable types List showableTypesParam = new ArrayList(showableTypes); @@ -231,7 +232,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ } }); } - + /** * Update explorer. * @@ -245,7 +246,21 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ explorerPanel.add(itTables.getCellTable()); GWT.log("workspace explorer updated"); } - + + + /** + * Adds the item to explorer. + * + * @param items the items + */ + public void addItemToExplorer(Item item){ + GWT.log("workspace explorer add item.."+item); +// itTables = new ItemsTable(true, displayFields); + itTables.addItems(Arrays.asList(item)); + explorerPanel.add(itTables.getCellTable()); + GWT.log("workspace explorer updated"); + } + /** * Gets the panel. * @@ -254,8 +269,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ public ScrollPanel getPanel() { return explorerPanel; } - - + + /** * Gets the display fields. * @@ -285,8 +300,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ public ItemsTable getItTables() { return itTables; } - - + + /** * Gets the item selected. * @@ -295,9 +310,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ public Item getItemSelected(){ return itTables.getSelectedItem(); } - + /*public boolean itemIsSelectable(){ - + Item item = itTables.getSelectedItem(); if (item!=null){ boolean selectable = selectableTypes.contains(item.getType()); @@ -305,7 +320,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ } return false; }*/ - + /** * Gets the selectable types. * @@ -326,7 +341,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ this.selectableTypes.clear(); if (selectableTypes!=null) for (ItemType type:selectableTypes) this.selectableTypes.add(type); } - + /** * Gets the showable types. * diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/ItemsTable.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/ItemsTable.java index 42d4ddf..fce4026 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/ItemsTable.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/ItemsTable.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.widgets.wsexplorer.client.view.grid; @@ -37,17 +37,27 @@ import com.google.gwt.user.client.ui.Label; * Feb 19, 2015 */ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ - + private Column icon; private TextColumn name; private TextColumn owner; private Item selectedItem = null; + + /** + * The Enum DISPLAY_FIELD. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 1, 2016 + */ public static enum DISPLAY_FIELD{ICON, NAME, OWNER}; private List displayFields; /** * Instantiates a new items table. - * @param eventBus + * + * @param eventBus the event bus + * @param showMoreInfo the show more info + * @param fields the fields */ public ItemsTable(HandlerManager eventBus, boolean showMoreInfo, DISPLAY_FIELD[] fields) { super(eventBus, showMoreInfo); @@ -55,8 +65,9 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ initTable(cellTable, null, null); } + /* (non-Javadoc) - * @see org.gcube.portlets.admin.gcubereleases.client.view.AbstractPackageTable#addPackages(java.util.List) + * @see org.gcube.portlets.widgets.wsexplorer.client.view.grid.AbstractItemsCellTable#addItems(java.util.List) */ public void addItems(List packages) { dataProvider.getList().clear(); @@ -68,8 +79,9 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ cellTable.redraw(); } + /** - * Adds the package. + * Adds the item. * * @param pckg the pckg */ @@ -107,14 +119,14 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ @Override public void render(Context context, Item object, SafeHtmlBuilder sb) { super.render(context, object, sb); - + } }; icon.setSortable(false); packageTable.addColumn(icon, ""); packageTable.setColumnWidth(icon, 10.0, Unit.PCT); } - + if(this.displayFields.contains(DISPLAY_FIELD.NAME)){ //ARTIFACT ID name = new TextColumn() { @@ -126,10 +138,10 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ name.setSortable(true); packageTable.addColumn(name, "Name"); - + double width = displayFields.size()>1?50:90; packageTable.setColumnWidth(name, width, Unit.PCT); - + ListHandler nameColumnHandler = new ListHandler(dataProvider.getList()); nameColumnHandler.setComparator(name, new Comparator() { @Override @@ -137,25 +149,25 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ return o1.getName().compareTo(o2.getName()); } }); - + packageTable.addColumnSortHandler(nameColumnHandler); - + } - + if(this.displayFields.contains(DISPLAY_FIELD.OWNER)){ - + owner = new TextColumn() { @Override public String getValue(Item object) { return object.getOwner() != null ? object.getOwner() : ""; } }; - + owner.setSortable(true); packageTable.addColumn(owner, "Owner"); - double width = (displayFields.size()==2) ?90:40; + double width = displayFields.size()==2 ?90:40; packageTable.setColumnWidth(owner, width, Unit.PCT); - + ListHandler ownerColumnHandler = new ListHandler(dataProvider.getList()); ownerColumnHandler.setComparator(owner, new Comparator() { @Override @@ -164,9 +176,9 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ } }); packageTable.addColumnSortHandler(ownerColumnHandler); - + } - + /*final SingleSelectionModel selectionModel = new SingleSelectionModel(); selectionModel.addSelectionChangeHandler(new Handler() { @Override @@ -174,25 +186,38 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ } });*/ } - + /** - * @param displayFields the dispalyFields to set + * Sets the display fields. + * + * @param fields the new display fields */ public void setDisplayFields(DISPLAY_FIELD[] fields) { - this.displayFields = (fields!=null && fields.length>0)?Arrays.asList(fields):Arrays.asList(DISPLAY_FIELD.values()); + this.displayFields = fields!=null && fields.length>0?Arrays.asList(fields):Arrays.asList(DISPLAY_FIELD.values()); } /** + * Gets the display fields. + * * @return the displayFields */ public List getDisplayFields() { return displayFields; } - + + /** + * The Class ButtonImageCell. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 1, 2016 + */ public class ButtonImageCell extends ButtonCell{ - @Override - public void render(com.google.gwt.cell.client.Cell.Context context, + /* (non-Javadoc) + * @see com.google.gwt.cell.client.AbstractSafeHtmlCell#render(com.google.gwt.cell.client.Cell.Context, java.lang.Object, com.google.gwt.safehtml.shared.SafeHtmlBuilder) + */ + @Override + public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) { SafeHtml html = SafeHtmlUtils.fromTrustedString(new Image(value).toString()); sb.append(html); diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java index b3df96e..8bd1895 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java @@ -600,7 +600,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement } @Override - public Item createFolder(String nameFolder, String description, String parentId, List showableTypes,FilterCriteria filterCriteria) throws Exception { + public Item createFolder(String nameFolder, String description, String parentId) throws Exception { _log.trace("creating folder: "+nameFolder +" parent is null?"+parentId); @@ -615,10 +615,11 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement Workspace workspace = getWorkspace(); WorkspaceFolder wsFolder = workspace.createFolder(nameFolder, description, parentId); Item itemFolder = null; - if(wsFolder!=null){ - itemFolder = ItemBuilder.getItem(null, wsFolder, showableTypes, filterCriteria, false); + List allTypes = Arrays.asList(ItemType.values()); + Item parent = ItemBuilder.getItem(null, wsFolder.getParent(), allTypes, null, false); + if(parent!=null){ + itemFolder = ItemBuilder.getItem(parent, wsFolder, allTypes, null, false); } - return itemFolder; } catch(InsufficientPrivilegesException e){