diff --git a/pom.xml b/pom.xml index 7a75a3b..0a0d290 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ 4.0.0 org.gcube.portlets.widgets workspace-explorer - 1.1.1-SNAPSHOT + 1.2.0-SNAPSHOT gCube Workspace Explorer gCube Workspace Explorer widget allows to navigate (gcube) user workspace diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/explore/WorkspaceResourcesExplorerPanel.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/explore/WorkspaceResourcesExplorerPanel.java index 02dd1a4..5b91813 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/explore/WorkspaceResourcesExplorerPanel.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/explore/WorkspaceResourcesExplorerPanel.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.widgets.wsexplorer.client.explore; @@ -58,7 +58,7 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor private ScrollPanel southPanel = new ScrollPanel(); private String folderId; private String folderName; - + /** * Instantiates a new workspace folder explorer select panel. * @@ -83,12 +83,12 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor this.folderId = folderId; this.folderName = folderName; bindEvents(); - wsExplorer = new WorkspaceExplorer(eventBus, showableTypes, selectableTypes, new DISPLAY_FIELD[]{DISPLAY_FIELD.ICON, DISPLAY_FIELD.NAME}); + wsExplorer = new WorkspaceExplorer(eventBus, showableTypes, selectableTypes, new DISPLAY_FIELD[]{DISPLAY_FIELD.ICON, DISPLAY_FIELD.NAME, DISPLAY_FIELD.CREATION_DATE}); Item item = new Item(folderId, folderName, true); wsExplorer.loadFolder(item); initPanel(""); } - + /** * Instantiates a new workspace explorer select panel. * @@ -106,15 +106,15 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor initExplorer(folderId, "", ItemType.values(), ItemType.values()); } } - + /** * Bind events. */ private void bindEvents(){ - + eventBus.addHandler(ClickItemEvent.TYPE, new ClickItemEventHandler() { - + @Override public void onClick(final ClickItemEvent clickItemEvent) { isSelect = false; @@ -125,17 +125,17 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor notifyNotValidSelection(); return; } - + notifySelectedItem(wsExplorer.getItemSelected()); isSelect = true; } }); - + eventBus.addHandler(LoadFolderEvent.TYPE, new LoadFolderEventHandler() { - + @Override public void onLoadFolder(LoadFolderEvent loadFolderEvent) { - + if(loadFolderEvent.getTargetItem()!=null && loadFolderEvent.getTargetItem().isFolder()){ try { wsExplorer.loadFolder(loadFolderEvent.getTargetItem()); @@ -147,16 +147,16 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor } } }); - + eventBus.addHandler(BreadcrumbClickEvent.TYPE, new BreadcrumbClickEventHandler() { - + @Override public void onBreadcrumbClick(BreadcrumbClickEvent breadcrumbClickEvent) { eventBus.fireEvent(new LoadFolderEvent(breadcrumbClickEvent.getTargetItem())); } }); } - + /** * Load parent breadcrumb by item id. @@ -185,7 +185,7 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor } }); } - + /** * Refresh root folder view. @@ -194,14 +194,14 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor Item item = new Item(folderId, folderName, true); eventBus.fireEvent(new LoadFolderEvent(item)); } - + /** * Clear more info. */ private void clearMoreInfo(){ southPanel.clear(); } - + /** * Inits the panel. * @@ -211,20 +211,20 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor this.captionTxt = captionTxt; if(this.captionTxt!=null && !this.captionTxt.isEmpty()) setTitle(this.captionTxt); - + add(breadcrumbs, DockPanel.NORTH); // centerScrollable.setSize(width+"px", height); setAlertConfirm("", false, null); - + mainVP.add(wsExplorer.getPanel()); mainVP.add(footerHP); centerScrollable.add(mainVP); add(centerScrollable, DockPanel.CENTER); - + add(footerHP, DockPanel.SOUTH); } - - + + /** * Sets the alert confirm. * @@ -238,17 +238,17 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor }catch(Exception e){ //silent } - + alertConfirm = new Alert(); alertConfirm.setText(html); alertConfirm.setVisible(show); alertConfirm.setClose(true); alertConfirm.setType(AlertType.INFO); - + Button yes = new Button("Yes"); yes.setType(ButtonType.LINK); yes.addClickHandler(new ClickHandler() { - + @Override public void onClick(ClickEvent event) { if(item!=null){ @@ -257,11 +257,11 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor } } }); - + Button no = new Button("No"); no.setType(ButtonType.LINK); no.addClickHandler(new ClickHandler() { - + @Override public void onClick(ClickEvent event) { alertConfirm.close(); @@ -277,33 +277,33 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor * @param selected the selected */ private void notifySelectedItem(Item selected){ - + for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) { worskpaceExplorerNotificationListener.onSelectedItem(selected); } } - + /** * Notify aborted. */ private void notifyAborted(){ - + for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) { worskpaceExplorerNotificationListener.onAborted(); } } - - + + /** * Notify not valid selection. */ private void notifyNotValidSelection(){ - + for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) { worskpaceExplorerNotificationListener.onNotValidSelection(); } } - + /** * Notify failed. * @@ -311,12 +311,12 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor */ @SuppressWarnings("unused") private void notifyFailed(Throwable t){ - + for (WorskpaceExplorerSelectNotificationListener worskpaceExplorerNotificationListener : listeners) { worskpaceExplorerNotificationListener.onFailed(t); } } - + /** * Gets the caption txt. * @@ -334,7 +334,7 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor public boolean isValidHide() { return isSelect; } - + /* (non-Javadoc) * @see org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener#addWorkspaceExplorerNotificationListener(org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.WorskpaceExplorerNotificationListener) */ @@ -354,7 +354,7 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor listeners.remove(handler); } } - + /** * Item is selectable. * @@ -366,7 +366,7 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor GWT.log("item: "+item); if (item!=null){ boolean selectable = wsExplorer.getSelectableTypes().contains(item.getType()); - return (selectable)?true:false; + return selectable?true:false; } return false; } 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 dfd5e18..301770f 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 @@ -101,26 +101,6 @@ public abstract class AbstractItemsCellTable { } }, DoubleClickEvent.getType()); - /* - cellTable.addCellPreviewHandler(new CellPreviewEvent.Handler () { - long lastClick=-1000; - - @Override - public void onCellPreview(CellPreviewEvent event) { - long clictAt = System.currentTimeMillis(); - GWT.log("clickAt: "+(clictAt)); - GWT.log("lastClick: "+(lastClick)); - if(event.getNativeEvent().getType().contains("click")){ - GWT.log(""+(clictAt-lastClick)); - if(clictAt-lastClick < 300) { // dblclick on 2 clicks detected within 300 ms - Window.alert("I am a double click crafted event!"); - } - lastClick = System.currentTimeMillis(); - } - - } - }); */ - MenuBar options = new MenuBar(true); ScheduledCommand openCommand = new ScheduledCommand() { @@ -187,12 +167,6 @@ public abstract class AbstractItemsCellTable { cellTable.redraw(); } - /*private void addItem(Item pckg) { - dataProvider.getList().add(pckg); - dataProvider.flush(); - dataProvider.refresh(); - }*/ - /** * Gets the cell tables. * 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 3836761..cbcff52 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 @@ -5,6 +5,7 @@ package org.gcube.portlets.widgets.wsexplorer.client.view.grid; import java.util.Arrays; import java.util.Comparator; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -16,9 +17,11 @@ import org.gcube.portlets.widgets.wsexplorer.shared.Item; import com.github.gwtbootstrap.client.ui.Pagination; import com.google.gwt.cell.client.ButtonCell; import com.google.gwt.cell.client.Cell.Context; +import com.google.gwt.cell.client.DateCell; import com.google.gwt.cell.client.ImageResourceCell; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.i18n.shared.DateTimeFormat; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; @@ -41,7 +44,8 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ private Column icon; private TextColumn name; private TextColumn owner; - private Item selectedItem = null; + public DateTimeFormat dtformat = DateTimeFormat.getFormat("dd MMM hh:mm aaa yyyy"); +// private Item selectedItem = null; /** * The Enum DISPLAY_FIELD. @@ -49,8 +53,9 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Feb 1, 2016 */ - public static enum DISPLAY_FIELD{ICON, NAME, OWNER}; + public static enum DISPLAY_FIELD{ICON, NAME, OWNER, CREATION_DATE}; private List displayFields; + private Column dateColumn; /** * Instantiates a new items table. @@ -92,19 +97,19 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ * @see org.gcube.portlets.admin.gcubereleases.client.view.AbstractPackageTable#initTable(com.google.gwt.user.cellview.client.AbstractCellTable, com.google.gwt.user.cellview.client.SimplePager, com.github.gwtbootstrap.client.ui.Pagination) */ @Override - public void initTable(final AbstractCellTable packageTable, final SimplePager pager, final Pagination pagination) { - packageTable.setEmptyTableWidget(new Label("No data.")); - - //ICONS - ImageResourceCell iconResourceCell = new ImageResourceCell() { - public Set getConsumedEvents() { - HashSet events = new HashSet(); - events.add("click"); - return events; - } - }; + public void initTable(final AbstractCellTable abstractCellTable, final SimplePager pager, final Pagination pagination) { + abstractCellTable.setEmptyTableWidget(new Label("No data.")); if(this.displayFields.contains(DISPLAY_FIELD.ICON)){ + //ICONS + ImageResourceCell iconResourceCell = new ImageResourceCell() { + public Set getConsumedEvents() { + HashSet events = new HashSet(); + events.add("click"); + return events; + } + }; + icon = new Column(iconResourceCell) { @Override public ImageResource getValue(Item dataObj) { @@ -120,8 +125,8 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ } }; icon.setSortable(false); - packageTable.addColumn(icon, ""); - packageTable.setColumnWidth(icon, 10.0, Unit.PCT); + abstractCellTable.addColumn(icon, ""); + abstractCellTable.setColumnWidth(icon, 10.0, Unit.PCT); } if(this.displayFields.contains(DISPLAY_FIELD.NAME)){ @@ -134,10 +139,10 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ }; name.setSortable(true); - packageTable.addColumn(name, "Name"); + abstractCellTable.addColumn(name, "Name"); - double width = displayFields.size()>1?50:90; - packageTable.setColumnWidth(name, width, Unit.PCT); +// double width = displayFields.size()>1?50:90; +// abstractCellTable.setColumnWidth(name, width, Unit.PCT); ListHandler nameColumnHandler = new ListHandler(dataProvider.getList()); nameColumnHandler.setComparator(name, new Comparator() { @@ -147,7 +152,7 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ } }); - packageTable.addColumnSortHandler(nameColumnHandler); + abstractCellTable.addColumnSortHandler(nameColumnHandler); } @@ -161,9 +166,9 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ }; owner.setSortable(true); - packageTable.addColumn(owner, "Owner"); - double width = displayFields.size()==2 ?90:40; - packageTable.setColumnWidth(owner, width, Unit.PCT); + abstractCellTable.addColumn(owner, "Owner"); +// double width = displayFields.size()==2 ?90:40; +// abstractCellTable.setColumnWidth(owner, width, Unit.PCT); ListHandler ownerColumnHandler = new ListHandler(dataProvider.getList()); ownerColumnHandler.setComparator(owner, new Comparator() { @@ -172,10 +177,33 @@ public class ItemsTable extends AbstractItemsCellTable implements SelectionItem{ return o1.getOwner().compareTo(o2.getOwner()); } }); - packageTable.addColumnSortHandler(ownerColumnHandler); + abstractCellTable.addColumnSortHandler(ownerColumnHandler); } + if(this.displayFields.contains(DISPLAY_FIELD.CREATION_DATE)){ + + DateCell date = new DateCell(dtformat); + dateColumn = new Column(date){ + + @Override + public Date getValue(Item object) { + return object.getCreationDate(); + } + }; + + dateColumn.setSortable(true); + ListHandler dateColumnHandler = new ListHandler(dataProvider.getList()); + dateColumnHandler.setComparator(dateColumn, new Comparator() { + @Override + public int compare(Item o1, Item o2) { + return o1.getCreationDate().compareTo(o2.getCreationDate()); + } + }); + abstractCellTable.addColumnSortHandler(dateColumnHandler); + abstractCellTable.addColumn(dateColumn, "Created"); + } + /*final SingleSelectionModel selectionModel = new SingleSelectionModel(); selectionModel.addSelectionChangeHandler(new Handler() { @Override diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java index 63e994e..b0b52d5 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java @@ -3,6 +3,8 @@ */ package org.gcube.portlets.widgets.wsexplorer.server; +import java.util.Calendar; +import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -116,7 +118,7 @@ public class ItemBuilder { // if(workspaceItem instanceof FolderItem){ // storageID = workspaceItem.getStorageID(); // } - item = new Item(parent, workspaceItem.getId(), itemName, type, workspaceItemPath, UserUtil.getUserFullName(workspaceItem.getOwner().getPortalLogin()), isFolder, false); + item = new Item(parent, workspaceItem.getId(), itemName, type, workspaceItemPath, UserUtil.getUserFullName(workspaceItem.getOwner().getPortalLogin()), toDate(workspaceItem.getCreationTime()), isFolder, false); item.setSharedFolder(isSharedFolder); }catch(Exception e){ _log.error("Error on getting item: "+itemName+" with id: "+workspaceItem.getId()+", from HL, so skipping item"); @@ -353,7 +355,7 @@ public class ItemBuilder { //BUILDS A SIMPLE ITEM FOR BREADCRUMB String path = null; //wsFolder.getPath(); FORCED TO NULL BECAUSE IS SLOW CALL - Item item = new Item(null, wsFolder.getId(), name, ItemType.FOLDER, path, null, true, isRoot); + Item item = new Item(null, wsFolder.getId(), name, ItemType.FOLDER, path, null, null, true, isRoot); item.setSpecialFolder(isSpecialFolder); _log.debug("breadcrumb returning: "+item); @@ -375,6 +377,20 @@ public class ItemBuilder { return false; } } + + + /** + * To date. + * + * @param calendar the calendar + * @return the date + */ + public static Date toDate(Calendar calendar) + { + if (calendar == null) return null; + return calendar.getTime(); + + } /* public static void main(String[] args) { List allowedFileExtension = new ArrayList(); 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 1d2b1cf..e4503a4 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 @@ -217,12 +217,12 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement }else if(fullName.indexOf(".")>0){ fullName = fullName.substring(0, fullName.indexOf(".")); } - item = new Item(null, root.getId(), fullName+"'s", ItemType.FOLDER, root.getPath(), root.getOwner().getPortalLogin(), true, true); + item = new Item(null, root.getId(), fullName+"'s", ItemType.FOLDER, root.getPath(), root.getOwner().getPortalLogin(), null, true, true); break; } case VRE_FOLDER:{ WorkspaceItem folder = workspace.getMySpecialFolders(); - item = new Item(null, folder.getId(), WorkspaceExplorerConstants.VRE_FOLDERS_LABEL, ItemType.FOLDER, folder.getPath(), folder.getOwner().getPortalLogin(), true, false); + item = new Item(null, folder.getId(), WorkspaceExplorerConstants.VRE_FOLDERS_LABEL, ItemType.FOLDER, folder.getPath(), folder.getOwner().getPortalLogin(), null, true, false); //SET SPECIAL FOLDER /Workspace/MySpecialFolders item.setSpecialFolder(true); break; diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java index 36f6498..5d50adb 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/shared/Item.java @@ -4,6 +4,7 @@ package org.gcube.portlets.widgets.wsexplorer.shared; import java.util.ArrayList; +import java.util.Date; import com.google.gwt.user.client.rpc.IsSerializable; @@ -28,6 +29,7 @@ public class Item implements IsSerializable, ItemInterface{ private boolean isSpecialFolder = false; private boolean isSharedFolder = false; private boolean isRoot = false; + private Date creationDate; /** * Instantiates a new item. @@ -56,16 +58,18 @@ public class Item implements IsSerializable, ItemInterface{ * @param type the type * @param path the path * @param owner the owner + * @param creationDate the creation date * @param isFolder the is folder * @param isRoot the is root */ - public Item(Item parent, String id, String name, ItemType type, String path, String owner, boolean isFolder, boolean isRoot) { + public Item(Item parent, String id, String name, ItemType type, String path, String owner, Date creationDate, boolean isFolder, boolean isRoot) { this(id, name, isFolder); this.parent = parent; this.type = type; this.path = path; this.children = new ArrayList(); this.owner = owner; + this.creationDate = creationDate; this.isRoot = isRoot; } @@ -302,6 +306,16 @@ public class Item implements IsSerializable, ItemInterface{ return true; } + + + /** + * @return the creationDate + */ + public Date getCreationDate() { + + return creationDate; + } + /** * Sets the parent. * @@ -318,7 +332,7 @@ public class Item implements IsSerializable, ItemInterface{ public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("Item id="); + builder.append("Item [id="); builder.append(id); builder.append(", name="); builder.append(name); @@ -338,7 +352,10 @@ public class Item implements IsSerializable, ItemInterface{ builder.append(isSharedFolder); builder.append(", isRoot="); builder.append(isRoot); + builder.append(", creationDate="); + builder.append(creationDate); builder.append("]"); return builder.toString(); } + }