256: Workspace explorer
Task-Url: https://support.d4science.org/issues/256 Added LoadMySpecialFolder git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@115555 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
40a4f9c4d0
commit
bebfa3e47d
|
@ -7,6 +7,8 @@ import java.util.List;
|
|||
|
||||
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.rpc.WorkspaceExplorerService;
|
||||
|
@ -21,8 +23,10 @@ import com.google.gwt.event.shared.EventHandler;
|
|||
import com.google.gwt.event.shared.HandlerManager;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* The Class WorkspaceExplorerController.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 25, 2015
|
||||
*/
|
||||
|
@ -35,11 +39,17 @@ public class WorkspaceExplorerController implements EventHandler{
|
|||
private Navigation navigation = new Navigation();
|
||||
public static final WorkspaceExplorerServiceAsync workspaceNavigatorService = GWT.create(WorkspaceExplorerService.class);
|
||||
|
||||
/**
|
||||
* Instantiates a new workspace explorer controller.
|
||||
*/
|
||||
public WorkspaceExplorerController(){
|
||||
bindEvents();
|
||||
workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getExplorerPanel(), breadcrumbs, navigation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind events.
|
||||
*/
|
||||
private void bindEvents() {
|
||||
|
||||
eventBus.addHandler(LoadFolderEvent.TYPE, new LoadFolderEventHandler() {
|
||||
|
@ -47,7 +57,7 @@ public class WorkspaceExplorerController implements EventHandler{
|
|||
@Override
|
||||
public void onLoadFolder(LoadFolderEvent loadFolderEvent) {
|
||||
|
||||
if(loadFolderEvent.getTargetItem()!=null){
|
||||
if(loadFolderEvent.getTargetItem()!=null && loadFolderEvent.getTargetItem().isFolder()){
|
||||
wsExplorer.loadFolder(loadFolderEvent.getTargetItem());
|
||||
loadParentBreadcrumbByItemId(loadFolderEvent.getTargetItem().getId(), true);
|
||||
}
|
||||
|
@ -58,13 +68,27 @@ public class WorkspaceExplorerController implements EventHandler{
|
|||
|
||||
@Override
|
||||
public void onLoadRoot(LoadRootEvent loadRootEvent) {
|
||||
|
||||
wsExplorer.loadTree();
|
||||
breadcrumbs.init();
|
||||
}
|
||||
});
|
||||
|
||||
eventBus.addHandler(LoadMySpecialFolderEvent.TYPE, new LoadMySpecialFolderEventHandler() {
|
||||
|
||||
@Override
|
||||
public void onLoadMySpecialFolder(LoadMySpecialFolderEvent loadMySpecialFolderEvent) {
|
||||
wsExplorer.loadMySpecialFolder();
|
||||
breadcrumbs.init();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load parent breadcrumb by item id.
|
||||
*
|
||||
* @param itemIdentifier the item identifier
|
||||
* @param includeItemAsParent the include item as parent
|
||||
*/
|
||||
protected void loadParentBreadcrumbByItemId(final String itemIdentifier, boolean includeItemAsParent){
|
||||
|
||||
GWT.log("Reload Parent Breadcrumb: [Item id: "+itemIdentifier+"]");
|
||||
|
@ -87,6 +111,8 @@ public class WorkspaceExplorerController implements EventHandler{
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets the workspace explorer panel.
|
||||
*
|
||||
* @return the workspaceExplorerPanel
|
||||
*/
|
||||
public WorkspaceExplorerPanel getWorkspaceExplorerPanel() {
|
||||
|
|
|
@ -7,7 +7,7 @@ import com.google.gwt.event.shared.GwtEvent;
|
|||
|
||||
|
||||
/**
|
||||
* The Class DoubleClickEvent.
|
||||
* The Class LoadFolderEvent.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 25, 2015
|
||||
|
@ -17,8 +17,9 @@ public class LoadFolderEvent extends GwtEvent<LoadFolderEventHandler> {
|
|||
private Item targetItem;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Instantiates a new double click event.
|
||||
* Instantiates a new load folder event.
|
||||
*
|
||||
* @param target the target
|
||||
*/
|
||||
|
@ -43,6 +44,8 @@ public class LoadFolderEvent extends GwtEvent<LoadFolderEventHandler> {
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets the target item.
|
||||
*
|
||||
* @return the targetItem
|
||||
*/
|
||||
public Item getTargetItem() {
|
||||
|
@ -50,6 +53,8 @@ public class LoadFolderEvent extends GwtEvent<LoadFolderEventHandler> {
|
|||
}
|
||||
|
||||
/**
|
||||
* Sets the target item.
|
||||
*
|
||||
* @param targetItem the targetItem to set
|
||||
*/
|
||||
public void setTargetItem(Item targetItem) {
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
package org.gcube.portlets.widgets.wsexplorer.client.event;
|
||||
|
||||
import com.google.gwt.event.shared.GwtEvent;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class LoadMySpecialFolderEvent extends GwtEvent<LoadMySpecialFolderEventHandler> {
|
||||
|
||||
public static Type<LoadMySpecialFolderEventHandler> TYPE = new Type<LoadMySpecialFolderEventHandler>();
|
||||
|
||||
/**
|
||||
* Instantiates a new double click event.
|
||||
*
|
||||
* @param target the target
|
||||
*/
|
||||
public LoadMySpecialFolderEvent() {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
|
||||
*/
|
||||
@Override
|
||||
public Type<LoadMySpecialFolderEventHandler> getAssociatedType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler)
|
||||
*/
|
||||
@Override
|
||||
protected void dispatch(LoadMySpecialFolderEventHandler handler) {
|
||||
handler.onLoadMySpecialFolder(this);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package org.gcube.portlets.widgets.wsexplorer.client.event;
|
||||
|
||||
import com.google.gwt.event.shared.EventHandler;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The Interface LoadMySpecialFolderEventHandler.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 25, 2015
|
||||
*/
|
||||
public interface LoadMySpecialFolderEventHandler extends EventHandler {
|
||||
|
||||
/**
|
||||
* On load my special folder.
|
||||
*
|
||||
* @param loadMySpecialFolderEvent the load my special folder event
|
||||
*/
|
||||
void onLoadMySpecialFolder(LoadMySpecialFolderEvent loadMySpecialFolderEvent);
|
||||
}
|
|
@ -3,17 +3,15 @@ package org.gcube.portlets.widgets.wsexplorer.client.event;
|
|||
import com.google.gwt.event.shared.GwtEvent;
|
||||
|
||||
/**
|
||||
*
|
||||
* The Class LoadRootEvent.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jun 25, 2015
|
||||
*/
|
||||
public class LoadRootEvent extends GwtEvent<LoadRootEventHandler> {
|
||||
|
||||
public static Type<LoadRootEventHandler> TYPE = new Type<LoadRootEventHandler>();
|
||||
|
||||
/**
|
||||
* Instantiates a new double click event.
|
||||
*
|
||||
* @param target the target
|
||||
*/
|
||||
public LoadRootEvent() {
|
||||
}
|
||||
|
||||
|
|
|
@ -52,8 +52,8 @@ public abstract class AbstractItemsCellTable {
|
|||
cellTable = new CellTable<Item>(1, CellTableResources.INSTANCE);
|
||||
cellTable.addStyleName("table-overflow");
|
||||
cellTable.setStriped(true);
|
||||
cellTable.setBordered(true);
|
||||
// cellTable.setCondensed(true);
|
||||
// cellTable.setBordered(true);
|
||||
cellTable.setCondensed(true);
|
||||
cellTable.setWidth("99%", true);
|
||||
dataProvider.addDataDisplay(cellTable);
|
||||
initTable(cellTable, null, null);
|
||||
|
|
|
@ -95,14 +95,14 @@ public class ItemsTable extends AbstractItemsCellTable{
|
|||
return Util.getImage(dataObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBrowserEvent(Context context, Element elem, Item object, NativeEvent event) {
|
||||
super.onBrowserEvent(context, elem, object, event);
|
||||
if ("click".equals(event.getType())) {
|
||||
// Window.open(object.getURL(), "_blank", "");
|
||||
// GcubeReleasesAppController.eventBus.fireEvent(new PackageClickEvent(object, AccoutingReference.DOWNLOAD));
|
||||
}
|
||||
}
|
||||
// @Override
|
||||
// public void onBrowserEvent(Context context, Element elem, Item object, NativeEvent event) {
|
||||
// super.onBrowserEvent(context, elem, object, event);
|
||||
// if ("click".equals(event.getType())) {
|
||||
//// Window.open(object.getURL(), "_blank", "");
|
||||
//// GcubeReleasesAppController.eventBus.fireEvent(new PackageClickEvent(object, AccoutingReference.DOWNLOAD));
|
||||
// }
|
||||
// }
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.google.gwt.user.cellview.client.Column#render(com.google.gwt.cell.client.Cell.Context, java.lang.Object, com.google.gwt.safehtml.shared.SafeHtmlBuilder)
|
||||
|
@ -113,7 +113,7 @@ public class ItemsTable extends AbstractItemsCellTable{
|
|||
|
||||
}
|
||||
};
|
||||
icon.setCellStyleNames("img-centered-clickable");
|
||||
// icon.setCellStyleNames("img-centered-clickable");
|
||||
icon.setSortable(false);
|
||||
packageTable.addColumn(icon, "");
|
||||
packageTable.setColumnWidth(icon, 10.0, Unit.PCT);
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 12 KiB |
|
@ -54,4 +54,15 @@ public interface WorkspaceExplorerService extends RemoteService {
|
|||
Item getRoot(List<ItemType> showableTypes, boolean purgeEmpyFolders,
|
||||
FilterCriteria filterCriteria)
|
||||
throws WorkspaceNavigatorServiceException;
|
||||
|
||||
/**
|
||||
* @param showableTypes
|
||||
* @param purgeEmpyFolders
|
||||
* @param filterCriteria
|
||||
* @return
|
||||
* @throws WorkspaceNavigatorServiceException
|
||||
*/
|
||||
Item getMySpecialFolder(List<ItemType> showableTypes,
|
||||
boolean purgeEmpyFolders, FilterCriteria filterCriteria)
|
||||
throws WorkspaceNavigatorServiceException;
|
||||
}
|
||||
|
|
|
@ -75,4 +75,9 @@ public interface WorkspaceExplorerServiceAsync {
|
|||
public void getListParentsByItemIdentifier(String itemIdentifier,
|
||||
boolean includeItemAsParent, AsyncCallback<List<Item>> asyncCallback);
|
||||
|
||||
/**
|
||||
* @param asyncCallback
|
||||
*/
|
||||
public void getMySpecialFolder(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria, AsyncCallback<Item> asyncCallback);
|
||||
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ public class Breadcrumbs extends Composite {
|
|||
* the parent
|
||||
*/
|
||||
public void addNavigationLink(Item parent) {
|
||||
if (parent != null && parent.getParent() != null) {
|
||||
if (parent != null && parent.getParent() != null && !parent.isSpecialFolder()) {
|
||||
final NavLink navLink = new NavLink(parent.getName());
|
||||
navLink.setName(parent.getId());
|
||||
breadcrumbs.add(navLink);
|
||||
|
@ -101,11 +101,10 @@ public class Breadcrumbs extends Composite {
|
|||
public void onClick(ClickEvent event) {
|
||||
|
||||
Item target = hashListItems.get(navLink.getName());
|
||||
|
||||
WorkspaceExplorerController.eventBus.fireEvent(new LoadFolderEvent(target));
|
||||
}
|
||||
});
|
||||
} else { // is Root
|
||||
} else { //IS ROOT OR SPECIAL FOLDER
|
||||
// final NavLink navLink = new NavLink("");
|
||||
NavLink navLink = new NavLink("");
|
||||
breadcrumbs.add(navLink);// INIT
|
||||
|
|
|
@ -5,6 +5,7 @@ package org.gcube.portlets.widgets.wsexplorer.client.view;
|
|||
|
||||
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants;
|
||||
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController;
|
||||
import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEvent;
|
||||
import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent;
|
||||
|
||||
import com.github.gwtbootstrap.client.ui.NavWidget;
|
||||
|
@ -63,5 +64,13 @@ public class Navigation extends Composite{
|
|||
vre_folder.setActive(true);
|
||||
vre_folder.setText(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL);
|
||||
vre_folder.setIcon(IconType.FOLDER_CLOSE);
|
||||
|
||||
vre_folder.addClickHandler(new ClickHandler() {
|
||||
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
WorkspaceExplorerController.eventBus.fireEvent(new LoadMySpecialFolderEvent());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -104,13 +104,7 @@ public class WorkspaceExplorer {
|
|||
}
|
||||
|
||||
public void onSuccess(Item item) {
|
||||
GWT.log("workspace tree retrieved.");
|
||||
// then we remove the loading icon
|
||||
explorerPanel.clear();
|
||||
ItemsTable itTables = new ItemsTable();
|
||||
itTables.addItems(item.getChildren());
|
||||
explorerPanel.add(itTables.getCellTable());
|
||||
GWT.log("workspace tree loaded");
|
||||
updateExplorer(item.getChildren());
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -147,17 +141,57 @@ public class WorkspaceExplorer {
|
|||
|
||||
@Override
|
||||
public void onSuccess(Item result) {
|
||||
GWT.log("workspace folder retrieved.");
|
||||
explorerPanel.clear();
|
||||
ItemsTable itTables = new ItemsTable();
|
||||
itTables.addItems(result.getChildren());
|
||||
explorerPanel.add(itTables.getCellTable());
|
||||
GWT.log("workspace folder loaded");
|
||||
updateExplorer(result.getChildren());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the Workspace Tree.
|
||||
*/
|
||||
public void loadMySpecialFolder() {
|
||||
GWT.log("loading folder data");
|
||||
setLoading();
|
||||
|
||||
|
||||
// we make a copy of showable types
|
||||
List<ItemType> showableTypesParam = new ArrayList<ItemType>(showableTypes);
|
||||
|
||||
// we get sure that folders are displayed
|
||||
for (ItemType folder : Util.FOLDERS) {
|
||||
if (!showableTypesParam.contains(folder))
|
||||
showableTypesParam.add(folder);
|
||||
}
|
||||
|
||||
boolean purgeEmpyFolders = !showEmptyFolders;
|
||||
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties);
|
||||
|
||||
GWT.log("loading workspace tree from server");
|
||||
WorkspaceExplorerController.workspaceNavigatorService.getMySpecialFolder(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback<Item>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
GWT.log("Error loading workspace folder from server",
|
||||
caught);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Item items) {
|
||||
updateExplorer(items.getChildren());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateExplorer(ArrayList<Item> items){
|
||||
GWT.log("workspace explorer updating..");
|
||||
explorerPanel.clear();
|
||||
ItemsTable itTables = new ItemsTable();
|
||||
itTables.addItems(items);
|
||||
explorerPanel.add(itTables.getCellTable());
|
||||
GWT.log("workspace explorer updated");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the explorerPanel
|
||||
*/
|
||||
|
|
|
@ -16,6 +16,7 @@ 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.exceptions.WorkspaceFolderNotFoundException;
|
||||
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;
|
||||
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
|
||||
|
@ -186,6 +187,50 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
|
|||
throw new WorkspaceNavigatorServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Item getMySpecialFolder(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException {
|
||||
_log.trace("GetMySpecialFolder showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+filterCriteria);
|
||||
|
||||
try {
|
||||
|
||||
Workspace workspace = getWorkspace();
|
||||
WorkspaceItem folder = workspace.getMySpecialFolders();
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
_log.trace("start time - " + startTime);
|
||||
|
||||
|
||||
Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true);
|
||||
itemFolder.setName(WorkspaceExplorerConstants.SPECIAL_FOLDERS_LABEL);
|
||||
itemFolder.setSpecialFolder(true);
|
||||
|
||||
_log.trace("Only showable types:");
|
||||
//printName("", folderItem);
|
||||
|
||||
if (purgeEmpyFolders) itemFolder = ItemBuilder.purgeEmptyFolders(itemFolder);
|
||||
|
||||
_log.trace("Returning:");
|
||||
|
||||
Long endTime = System.currentTimeMillis() - startTime;
|
||||
String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime));
|
||||
_log.trace("end time - " + time);
|
||||
|
||||
//printName("", folderItem);
|
||||
|
||||
Collections.sort(itemFolder.getChildren(), new ItemComparator());
|
||||
|
||||
return itemFolder;
|
||||
|
||||
} catch (Exception e) {
|
||||
_log.error("Error during special folders retrieving", e);
|
||||
throw new WorkspaceNavigatorServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
|
|
|
@ -26,7 +26,8 @@ public class Item implements IsSerializable{
|
|||
protected ArrayList<Item> children;
|
||||
private String owner;
|
||||
private boolean isFolder;
|
||||
|
||||
private boolean isSpecialFolder;
|
||||
|
||||
/**
|
||||
* Instantiates a new item.
|
||||
*/
|
||||
|
@ -191,6 +192,19 @@ public class Item implements IsSerializable{
|
|||
children.remove(child);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the isSpecialFolder
|
||||
*/
|
||||
public boolean isSpecialFolder() {
|
||||
return isSpecialFolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param isSpecialFolder the isSpecialFolder to set
|
||||
*/
|
||||
public void setSpecialFolder(boolean isSpecialFolder) {
|
||||
this.isSpecialFolder = isSpecialFolder;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -253,7 +267,9 @@ public class Item implements IsSerializable{
|
|||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("Item [id=");
|
||||
builder.append("Item [parent=");
|
||||
builder.append(parent);
|
||||
builder.append(", id=");
|
||||
builder.append(id);
|
||||
builder.append(", name=");
|
||||
builder.append(name);
|
||||
|
@ -261,14 +277,14 @@ public class Item implements IsSerializable{
|
|||
builder.append(type);
|
||||
builder.append(", path=");
|
||||
builder.append(path);
|
||||
builder.append(", shared=");
|
||||
builder.append(", isSharedFolder=");
|
||||
builder.append(isSharedFolder);
|
||||
builder.append(", children=");
|
||||
builder.append(children);
|
||||
builder.append(", owner=");
|
||||
builder.append(owner);
|
||||
builder.append(", isFolder=");
|
||||
builder.append(isFolder);
|
||||
builder.append(", isSpecialFolder=");
|
||||
builder.append(isSpecialFolder);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue