From 898be623c724824c212cd4450b4748a54ed3ae20 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Mon, 6 Jul 2015 15:18:23 +0000 Subject: [PATCH] 256: Workspace explorer Task-Url: https://support.d4science.org/issues/256 Enhancemetns on view details git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@117042 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../widgets/wsexplorer/client/Util.java | 22 +++ .../client/WorkspaceExplorerController.java | 103 +++++++++++-- .../client/WorkspaceExplorerPanel.java | 2 +- ...InfoShowEvent.java => ClickItemEvent.java} | 24 +-- .../client/event/ClickItemEventHandler.java | 20 +++ .../event/MoreInfoShowEventHandler.java | 17 --- .../client/rpc/WorkspaceExplorerService.java | 21 +++ .../rpc/WorkspaceExplorerServiceAsync.java | 19 +++ .../wsexplorer/client/view/Navigation.java | 1 - .../view/grid/AbstractItemsCellTable.java | 15 +- .../client/view/grid/ItemsTable.java | 139 ------------------ .../wsexplorer/public/workspace-explorer.css | 6 + .../widgets/wsexplorer/server/UserUtil.java | 2 +- .../server/WorkspaceExplorerServiceImpl.java | 113 ++++++++++++++ 14 files changed, 314 insertions(+), 190 deletions(-) rename src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/{MoreInfoShowEvent.java => ClickItemEvent.java} (55%) create mode 100644 src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/ClickItemEventHandler.java delete mode 100644 src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/MoreInfoShowEventHandler.java diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/Util.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/Util.java index 107d2a0..6b55d9a 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/Util.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/Util.java @@ -15,6 +15,8 @@ import com.google.gwt.resources.client.ImageResource; * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jun 18, 2015 */ public class Util { + +// public static final NumberFormat numberFormatterKB = NumberFormat.getFormat("#,##0 KB;(#,##0 KB)"); public static final ItemType[] FOLDERS = new ItemType[] { ItemType.ROOT, ItemType.FOLDER }; @@ -95,4 +97,24 @@ public class Util { } } } + + /** + * + * @param value + * @return + */ + public static String getFormattedSize(long value){ + + if(value>0){ + double kb = value/1024; + if(kb<1) + kb=1; +// return numberFormatterKB.format(kb); + return kb+"KB"; + }else if(value==0){ + return "EMPTY"; + }else + return ""; + } + } 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 f154ea6..8cca6c0 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 @@ -5,14 +5,15 @@ package org.gcube.portlets.widgets.wsexplorer.client; import java.util.List; +import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEvent; +import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEventHandler; -import org.gcube.portlets.widgets.wsexplorer.client.event.MoreInfoShowEvent; -import org.gcube.portlets.widgets.wsexplorer.client.event.MoreInfoShowEventHandler; +import org.gcube.portlets.widgets.wsexplorer.client.resources.WorkspaceExplorerResources; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerServiceAsync; import org.gcube.portlets.widgets.wsexplorer.client.view.Breadcrumbs; @@ -25,9 +26,12 @@ import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.github.gwtbootstrap.client.ui.Alert; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Label; /** @@ -72,6 +76,7 @@ public class WorkspaceExplorerController implements EventHandler { if(loadFolderEvent.getTargetItem()!=null && loadFolderEvent.getTargetItem().isFolder()){ wsExplorer.loadFolder(loadFolderEvent.getTargetItem()); loadParentBreadcrumbByItemId(loadFolderEvent.getTargetItem().getId(), true); + clearMoreInfo(); } } }); @@ -95,25 +100,20 @@ public class WorkspaceExplorerController implements EventHandler { public void onSuccess(Item result) { result.setName(WorkspaceExplorerConstants.HOME_LABEL); //FORCE SET NAME LIKE "HOME_LABEL" breadcrumbs.init(result); + clearMoreInfo(); } }); } }); - eventBus.addHandler(MoreInfoShowEvent.TYPE, new MoreInfoShowEventHandler() { + eventBus.addHandler(ClickItemEvent.TYPE, new ClickItemEventHandler() { @Override - public void onMoreInfo(MoreInfoShowEvent moreInfoShowEvent) { + public void onClick(final ClickItemEvent clickItemEvent) { - if(moreInfoShowEvent.getItem()!=null){ - workspaceExplorerPanel.getSouthPanel().clear(); - Alert alert = new Alert(); - alert.setText(moreInfoShowEvent.getItem().toString()); - alert.setType(AlertType.INFO); - alert.setClose(true); - workspaceExplorerPanel.getSouthPanel().add(alert); -// GWT.log("onMoreInfo"); -// setupPopover(navigation.getMoreInfoPanel(), moreInfoShowEvent.getItem().getName(), "Info "+moreInfoShowEvent.getItem().getName()).show(); + Item item = clickItemEvent.getItem(); + if(item!=null){ + updateMoreInfo(item); } } @@ -135,6 +135,7 @@ public class WorkspaceExplorerController implements EventHandler { @Override public void onSuccess(Item result) { breadcrumbs.init(result); + clearMoreInfo(); } }); } @@ -161,11 +162,85 @@ public class WorkspaceExplorerController implements EventHandler { @Override public void onSuccess(List result) { - if(result!=null) + if(result!=null){ breadcrumbs.setPath(result); + clearMoreInfo(); + } } }); + } + + private void clearMoreInfo(){ + workspaceExplorerPanel.getSouthPanel().clear(); + } + + private void updateMoreInfo(Item item){ + + if(item!=null){ + workspaceExplorerPanel.getSouthPanel().clear(); + Alert alert = new Alert(); + alert.addStyleName("alert-custom"); + + final HorizontalPanel hp = new HorizontalPanel(); + hp.add(WorkspaceExplorerResources.getIconInfo().createImage()); + final Label labelName = new Label("Name: "+item.getName()); + double marginValue = 10.0; + labelName.getElement().getStyle().setMarginLeft(marginValue, Unit.PX); + labelName.getElement().getStyle().setMarginRight(marginValue, Unit.PX); + final Label labelSize = new Label("Size: "); + labelSize.getElement().getStyle().setMarginRight(marginValue, Unit.PX); + final Label labelMime = new Label("Mime Type: "); + labelMime.getElement().getStyle().setMarginRight(marginValue, Unit.PX); + final Label labelACL = new Label("Rights: "); + labelACL.getElement().getStyle().setMarginRight(marginValue, Unit.PX); + hp.add(labelName); + hp.add(labelSize); + if(!item.isFolder()) + hp.add(labelMime); + hp.add(labelACL); + workspaceNavigatorService.loadSizeByItemId(item.getId(), new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + } + + @Override + public void onSuccess(Long result) { + labelSize.setText("Size: " +Util.getFormattedSize(result)); + labelSize.getElement().getStyle().setMarginLeft(10.0, Unit.PX); + } + }); + + if(!item.isFolder()){ + workspaceNavigatorService.getMimeType(item.getId(), new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + } + + @Override + public void onSuccess(String result) { + if(result!=null) + labelMime.setText("Mime Type: "+result); + } + }); + } + + workspaceNavigatorService.getUserACLForFolderId(item.getId(), new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + } + + @Override + public void onSuccess(String result) { + labelACL.setText("Rights: "+result); + } + }); + alert.add(hp); + alert.setType(AlertType.DEFAULT); + alert.setClose(false); + workspaceExplorerPanel.getSouthPanel().add(alert); } } /** diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerPanel.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerPanel.java index d66b97b..58bf966 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerPanel.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/WorkspaceExplorerPanel.java @@ -41,7 +41,7 @@ public class WorkspaceExplorerPanel extends DockPanel{ add(breadcrumbs, DockPanel.NORTH); southPanel.ensureDebugId("SouthPanelWEP"); add(southPanel, DockPanel.SOUTH); - + westPanel.setWidth(west_width+"px"); westPanel.add(navigation); add(westPanel, DockPanel.WEST); diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/MoreInfoShowEvent.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/ClickItemEvent.java similarity index 55% rename from src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/MoreInfoShowEvent.java rename to src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/ClickItemEvent.java index 25c8548..0f81a52 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/MoreInfoShowEvent.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/ClickItemEvent.java @@ -4,22 +4,24 @@ import org.gcube.portlets.widgets.wsexplorer.shared.Item; import com.google.gwt.event.shared.GwtEvent; + /** - * The Class DisplaySelectedReleaseEvent. + * The Class ClickItemEvent. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Feb 19, 2015 + * Jul 6, 2015 */ -public class MoreInfoShowEvent extends GwtEvent { - public static Type TYPE = new Type(); +public class ClickItemEvent extends GwtEvent { + public static Type TYPE = new Type(); private Item item; + /** - * Instantiates a new display selected release event. + * Instantiates a new click item event. * - * @param release the release + * @param item the item */ - public MoreInfoShowEvent(Item item) { + public ClickItemEvent(Item item) { this.item = item; } @@ -27,7 +29,7 @@ public class MoreInfoShowEvent extends GwtEvent { * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() */ @Override - public Type getAssociatedType() { + public Type getAssociatedType() { return TYPE; } @@ -35,11 +37,13 @@ public class MoreInfoShowEvent extends GwtEvent { * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) */ @Override - protected void dispatch(MoreInfoShowEventHandler handler) { - handler.onMoreInfo(this); + protected void dispatch(ClickItemEventHandler handler) { + handler.onClick(this); } /** + * Gets the item. + * * @return the item */ public Item getItem() { diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/ClickItemEventHandler.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/ClickItemEventHandler.java new file mode 100644 index 0000000..21b19cf --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/ClickItemEventHandler.java @@ -0,0 +1,20 @@ +package org.gcube.portlets.widgets.wsexplorer.client.event; + +import com.google.gwt.event.shared.EventHandler; + + +/** + * The Interface ClickItemEventHandler. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jul 6, 2015 + */ +public interface ClickItemEventHandler extends EventHandler { + + /** + * On click. + * + * @param moreInfoShowEvent the more info show event + */ + void onClick(ClickItemEvent moreInfoShowEvent); +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/MoreInfoShowEventHandler.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/MoreInfoShowEventHandler.java deleted file mode 100644 index 8c33a98..0000000 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/event/MoreInfoShowEventHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.gcube.portlets.widgets.wsexplorer.client.event; - -import com.google.gwt.event.shared.EventHandler; - -/** - * The Interface DisplaySelectedReleaseEventHandler. - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Feb 19, 2015 - */ -public interface MoreInfoShowEventHandler extends EventHandler { - - /** - * @param moreInfoShowEvent - */ - void onMoreInfo(MoreInfoShowEvent moreInfoShowEvent); -} \ No newline at end of file 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 38b946d..bf2fb8d 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 @@ -73,4 +73,25 @@ public interface WorkspaceExplorerService extends RemoteService { * @throws WorkspaceNavigatorServiceException */ Item getItemByCategory(ItemCategory category)throws WorkspaceNavigatorServiceException; + + /** + * @param itemId + * @return + * @throws Exception + */ + Long loadSizeByItemId(String itemId) throws Exception; + + /** + * @param itemId + * @return + * @throws Exception + */ + String getMimeType(String itemId) throws Exception; + + /** + * @param folderId + * @return + * @throws Exception + */ + String getUserACLForFolderId(String folderId) 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 6716301..b0b30cf 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 @@ -98,4 +98,23 @@ public interface WorkspaceExplorerServiceAsync { */ public void getItemByCategory(ItemCategory category, AsyncCallback asyncCallback); + /** + * @param id + * @param asyncCallback + */ + public void loadSizeByItemId(String id, AsyncCallback asyncCallback); + + /** + * @param id + * @param asyncCallback + */ + public void getMimeType(String id, AsyncCallback asyncCallback); + + /** + * @param id + * @param asyncCallback + */ + public void getUserACLForFolderId(String id, + AsyncCallback asyncCallback); + } 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 c9ef9cf..1ec3410 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 @@ -20,7 +20,6 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Widget; /** diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java index 18a5fb7..9160576 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/grid/AbstractItemsCellTable.java @@ -3,6 +3,7 @@ package org.gcube.portlets.widgets.wsexplorer.client.view.grid; import java.util.List; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; +import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEvent; import org.gcube.portlets.widgets.wsexplorer.client.resources.CellTableResources; import org.gcube.portlets.widgets.wsexplorer.client.view.SelectionItem; import org.gcube.portlets.widgets.wsexplorer.shared.Item; @@ -52,16 +53,14 @@ public abstract class AbstractItemsCellTable implements SelectionItem{ */ public abstract void initTable(AbstractCellTable ItemTable, final SimplePager pager, final Pagination pagination); + /** - * Instantiates a new abstract Item table. - * @param showMoreInfo - * @param showMoreInfo + * Instantiates a new abstract items cell table. * - * @param showGroupId - * the show group id + * @param fireMoreInfo the fire more info */ - public AbstractItemsCellTable(boolean showMoreInfo) { - this.showMoreInfo = showMoreInfo; + public AbstractItemsCellTable(boolean fireOnClick) { + this.showMoreInfo = fireOnClick; cellTable = new CellTable(1, CellTableResources.INSTANCE); cellTable.addStyleName("table-overflow"); cellTable.setStriped(true); @@ -81,6 +80,8 @@ public abstract class AbstractItemsCellTable implements SelectionItem{ if(selectedObject!=null){ GWT.log("Clicked: "+selectedObject); selectedItem(selectedObject); + if(showMoreInfo) + WorkspaceExplorerController.eventBus.fireEvent(new ClickItemEvent(selectedObject)); } } }); 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 903cfa0..cf1e30a 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 @@ -9,24 +9,12 @@ import java.util.List; import java.util.Set; import org.gcube.portlets.widgets.wsexplorer.client.Util; -import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; -import org.gcube.portlets.widgets.wsexplorer.client.event.MoreInfoShowEvent; -import org.gcube.portlets.widgets.wsexplorer.client.resources.WorkspaceExplorerResources; import org.gcube.portlets.widgets.wsexplorer.shared.Item; import com.github.gwtbootstrap.client.ui.Pagination; -import com.github.gwtbootstrap.client.ui.Popover; -import com.github.gwtbootstrap.client.ui.Tooltip; -import com.github.gwtbootstrap.client.ui.constants.Placement; -import com.github.gwtbootstrap.client.ui.constants.Trigger; import com.google.gwt.cell.client.ButtonCell; import com.google.gwt.cell.client.Cell.Context; -import com.google.gwt.cell.client.FieldUpdater; -import com.google.gwt.cell.client.ImageCell; import com.google.gwt.cell.client.ImageResourceCell; -import com.google.gwt.core.shared.GWT; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtml; @@ -37,10 +25,8 @@ import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; import com.google.gwt.user.cellview.client.SimplePager; import com.google.gwt.user.cellview.client.TextColumn; -import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.Widget; /** * The Class PackagesTable. * @@ -161,121 +147,6 @@ public class ItemsTable extends AbstractItemsCellTable { } }); packageTable.addColumnSortHandler(ownerColumnHandler); - - if(showMoreInfo){ - /* - // ButtonCell. - final ButtonCell buttonCell = new ButtonCell(); - - final Column column = new Column(buttonCell) { - @Override - public String getValue(Item dataObj) { - return "Info"; - } - - @Override - public void render(Context context, Item object, SafeHtmlBuilder sb) { - super.render(context, object, sb); - - } - }; - - column.setFieldUpdater(new FieldUpdater() { - - @Override - public void update(int index, Item object, String value) { - GWT.log("mouseover mouseover mouseover"); - Popover pop = new Popover(); - pop.setHeading("Info"); - pop.setText("MouseOver on"); - pop.setPlacement(Placement.RIGHT); - pop.setHtml(true); - pop.setTrigger(Trigger.HOVER); -// pop.setWidget(buttonCell); - setupPopover(packageTable.asWidget(), "MouseOver", "title"); - } - }); - - column.setSortable(false); - packageTable.addColumn(column, ""); - packageTable.setColumnWidth(column, 10.0, Unit.PCT); - - */ - - - /* - final Column buttonImageCellTest = new Column(new ButtonImageCell()) { - - private HorizontalPanel widget; - - @Override - public String getValue(Item row) { - //url to image - return WorkspaceExplorerResources.ICONS.info().getSafeUri().toString(); - } - - @Override - public void render(Context context, Item object, SafeHtmlBuilder sb) { - // TODO Auto-generated method stub - super.render(context, object, sb); - widget = new HorizontalPanel(); - sb.appendEscaped(widget.getElement().getInnerHTML()); - } - - @Override - public void setFieldUpdater( - FieldUpdater fieldUpdater) { - // TODO Auto-generated method stub - super.setFieldUpdater(fieldUpdater); - setupPopover(widget, "", "").show(); - } - }; - - packageTable.addColumn(buttonImageCellTest, ""); - packageTable.setColumnWidth(buttonImageCellTest, 10.0, Unit.PCT); - - */ - - //ICONS - ImageResourceCell moreInfoResourceCell = new ImageResourceCell() { - public Set getConsumedEvents() { - HashSet events = new HashSet(); - events.add("click"); - return events; - } - }; - - moreInfo = new Column(moreInfoResourceCell) { - - @Override - public ImageResource getValue(Item dataObj) { - return WorkspaceExplorerResources.ICONS.info(); - } - - @Override - public void onBrowserEvent(Context context, Element elem, Item object, NativeEvent event) { - super.onBrowserEvent(context, elem, object, event); - if ("click".equals(event.getType())) { - WorkspaceExplorerController.eventBus.fireEvent(new MoreInfoShowEvent(object)); - } - } - - }; - - moreInfo.setFieldUpdater(new FieldUpdater() { - - @Override - public void update(int index, Item object, ImageResource value) { - // TODO Auto-generated method stub - - } - }); - // icon.setCellStyleNames("img-centered-clickable"); - moreInfo.setSortable(false); - packageTable.addColumn(moreInfo, ""); - packageTable.setColumnWidth(moreInfo, 10.0, Unit.PCT); - - } /*final SingleSelectionModel selectionModel = new SingleSelectionModel(); selectionModel.addSelectionChangeHandler(new Handler() { @@ -285,16 +156,6 @@ public class ItemsTable extends AbstractItemsCellTable { });*/ } - private Tooltip setupPopover(Widget w, String message, String heading) { - Tooltip popover = new Tooltip(); - popover.setWidget(w); - popover.setText(message); -// popover.setHeading(heading); - popover.setPlacement(Placement.RIGHT); - popover.reconfigure(); - return popover; - } - public class ButtonImageCell extends ButtonCell{ @Override diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/public/workspace-explorer.css b/src/main/java/org/gcube/portlets/widgets/wsexplorer/public/workspace-explorer.css index baf0e1f..408ea15 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/public/workspace-explorer.css +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/public/workspace-explorer.css @@ -17,4 +17,10 @@ .moreinfo{ margin-top: 60%; +} + +.alert-custom { + margin-top: 10px; + margin-bottom: 0 !important; + padding: 2px !important; } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/UserUtil.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/UserUtil.java index 4643cc0..e4d78e9 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/UserUtil.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/UserUtil.java @@ -75,7 +75,7 @@ public class UserUtil { return true; } catch (Exception ex) { - logger.trace("Development Mode ON"); + logger.trace("Is within portal: no! Development Mode ON"); return false; } } 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 6d7c9d8..bc3416c 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 @@ -9,13 +9,16 @@ import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; import org.gcube.common.homelibrary.home.HomeLibrary; import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; import org.gcube.common.homelibrary.home.workspace.Workspace; import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; +import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder; import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; +import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; @@ -172,6 +175,9 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement } } + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService#getItemByCategory(org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory) + */ @Override public Item getItemByCategory(ItemCategory category) throws WorkspaceNavigatorServiceException{ _log.trace("GetItemByCategory category: "+category); @@ -338,4 +344,111 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement return listParents; } + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService#loadSizeByItemId(java.lang.String) + */ + @Override + public Long loadSizeByItemId(String itemId) throws Exception { + + _log.info("get Size By ItemId "+ itemId); + try { + + Workspace workspace = getWorkspace(); + WorkspaceItem wsItem = workspace.getItem(itemId); + Long size = new Long(-1); + + if(wsItem instanceof FolderItem){ //ITEM + FolderItem folderItem = (FolderItem) wsItem; + size = new Long(folderItem.getLength()); + } else if (wsItem instanceof WorkspaceFolder ){ //FOLDER + WorkspaceFolder theFolder = (WorkspaceFolder) wsItem; + size = theFolder.getSize(); + } else if (wsItem instanceof WorkspaceSharedFolder){ //SHARED FOLDER + WorkspaceSharedFolder theFolder = (WorkspaceSharedFolder) wsItem; + size = theFolder.getSize(); + } + _log.info("returning size: " +size); + return size; + + } catch (Exception e) { + _log.error("get Size By ItemId ", e); + throw new Exception(e.getMessage()); + } + } + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService#getMimeType(java.lang.String) + */ + @Override + public String getMimeType(String itemId) throws Exception { + + _log.info("get MimeType By ItemId "+ itemId); + try { + + Workspace workspace = getWorkspace(); + WorkspaceItem wsItem = workspace.getItem(itemId); + + if(!wsItem.getType().equals(WorkspaceItemType.FOLDER_ITEM)) + return null; + + FolderItem folderItem = (FolderItem) wsItem; + + return folderItem.getMimeType(); + + } catch (Exception e) { + _log.error("get MimeType By ItemId ", e); + throw new Exception(e.getMessage()); + } + } + + + /** + * Gets the user acl for folder id. + * + * @param folderId the folder id + * @return the user acl for folder id + * @throws Exception the exception + */ + @Override + public String getUserACLForFolderId(String folderId) throws Exception{ + try { + _log.info("Get user ACL to FOLDER id: "+folderId); + Workspace workspace = getWorkspace(); + WorkspaceItem wsItem = workspace.getItem(folderId); + + if(!isASharedFolder(wsItem, false)) + return "OWNER"; + else //IS A SHARED FOLDER + return wsItem.getACLUser().toString(); + } catch (Exception e) { + _log.error("Error in server get UserACLForFolderId", e); + String error = "An error occurred when getting ACL rules for selected folder. "+e.getMessage(); + throw new Exception(error); + } + } + + + /** + * Checks if is a shared folder. + * + * @param item the item + * @param asRoot the as root + * @return true, if is a shared folder + */ + private boolean isASharedFolder(WorkspaceItem item, boolean asRoot){ + try { + + if(item!=null && item.isFolder() && item.isShared()){ //IS A SHARED SUB-FOLDER + if(asRoot) + return item.getType().equals(WorkspaceItemType.SHARED_FOLDER); //IS ROOT? + + return true; + } + return false; + }catch(Exception e){ + _log.error("Error in server isASharedFolder", e); + return false; + } + } }