256: Workspace explorer

Task-Url: https://support.d4science.org/issues/256

Added alerts and ItemCategory

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@115640 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2015-06-30 10:31:49 +00:00
parent c8db931eac
commit fffde66498
8 changed files with 141 additions and 34 deletions

View File

@ -1,5 +1,11 @@
package org.gcube.portlets.widgets.wsexplorer.client; package org.gcube.portlets.widgets.wsexplorer.client;
/**
* The Class WorkspaceExplorerConstants.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 30, 2015
*/
public class WorkspaceExplorerConstants { public class WorkspaceExplorerConstants {
public static final String SPECIAL_FOLDERS_LABEL = "MySpecialFolders"; public static final String SPECIAL_FOLDERS_LABEL = "MySpecialFolders";

View File

@ -4,6 +4,7 @@ import java.util.List;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException; import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException;
@ -65,4 +66,11 @@ public interface WorkspaceExplorerService extends RemoteService {
Item getMySpecialFolder(List<ItemType> showableTypes, Item getMySpecialFolder(List<ItemType> showableTypes,
boolean purgeEmpyFolders, FilterCriteria filterCriteria) boolean purgeEmpyFolders, FilterCriteria filterCriteria)
throws WorkspaceNavigatorServiceException; throws WorkspaceNavigatorServiceException;
/**
* @param category
* @return
* @throws WorkspaceNavigatorServiceException
*/
Item getItemByCategory(ItemCategory category)throws WorkspaceNavigatorServiceException;
} }

View File

@ -7,13 +7,15 @@ import java.util.List;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback;
/** /**
* * The Interface WorkspaceExplorerServiceAsync.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 24, 2015 * Jun 24, 2015
*/ */
@ -76,8 +78,23 @@ public interface WorkspaceExplorerServiceAsync {
boolean includeItemAsParent, AsyncCallback<List<Item>> asyncCallback); boolean includeItemAsParent, AsyncCallback<List<Item>> asyncCallback);
/** /**
* @param asyncCallback * Gets the my special folder.
*
* @param showableTypes the showable types
* @param purgeEmpyFolders the purge empy folders
* @param filterCriteria the filter criteria
* @param asyncCallback the async callback
* @return the my special folder
*/ */
public void getMySpecialFolder(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria, AsyncCallback<Item> asyncCallback); public void getMySpecialFolder(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria, AsyncCallback<Item> asyncCallback);
/**
* Gets the item by category.
*
* @param category the category
* @param asyncCallback the async callback
* @return the item by category
*/
public void getItemByCategory(ItemCategory category, AsyncCallback<Item> asyncCallback);
} }

View File

@ -8,6 +8,8 @@ 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.LoadMySpecialFolderEvent;
import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent;
import org.gcube.portlets.widgets.wsexplorer.client.resources.WorkspaceExplorerResources; import org.gcube.portlets.widgets.wsexplorer.client.resources.WorkspaceExplorerResources;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import com.github.gwtbootstrap.client.ui.NavWidget; import com.github.gwtbootstrap.client.ui.NavWidget;
import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT;
@ -16,6 +18,7 @@ import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField; 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.Composite;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
@ -50,10 +53,24 @@ public class Navigation extends Composite{
initWidget(uiBinder.createAndBindUi(this)); initWidget(uiBinder.createAndBindUi(this));
getElement().getStyle().setMarginLeft(5.0, Unit.PX); getElement().getStyle().setMarginLeft(5.0, Unit.PX);
home.setActive(true); home.setActive(true);
home.setText(WorkspaceExplorerConstants.HOME_LABEL);
WorkspaceExplorerController.workspaceNavigatorService.getItemByCategory(ItemCategory.HOME, new AsyncCallback<Item>() {
@Override
public void onSuccess(Item result) {
home.setText(result.getName());
}
@Override
public void onFailure(Throwable caught) {
GWT.log(caught.getMessage());
home.setText(WorkspaceExplorerConstants.HOME_LABEL);
}
});
home.setBaseIcon(WorkspaceExplorerResources.CustomIconType.home); home.setBaseIcon(WorkspaceExplorerResources.CustomIconType.home);
home.addClickHandler(new ClickHandler() { home.addClickHandler(new ClickHandler() {
@Override @Override
@ -63,9 +80,24 @@ public class Navigation extends Composite{
}); });
vre_folder.setActive(true); vre_folder.setActive(true);
vre_folder.setText(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL);
vre_folder.setBaseIcon(WorkspaceExplorerResources.CustomIconType.vre_folder); vre_folder.setBaseIcon(WorkspaceExplorerResources.CustomIconType.vre_folder);
WorkspaceExplorerController.workspaceNavigatorService.getItemByCategory(ItemCategory.VRE_FOLDER, new AsyncCallback<Item>() {
@Override
public void onSuccess(Item result) {
vre_folder.setText(result.getName());
}
@Override
public void onFailure(Throwable caught) {
GWT.log(caught.getMessage());
vre_folder.setText(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL);
}
});
vre_folder.addClickHandler(new ClickHandler() { vre_folder.addClickHandler(new ClickHandler() {
@Override @Override

View File

@ -1,7 +1,7 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:b="urn:import:com.github.gwtbootstrap.client.ui"> xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
<g:FlowPanel> <g:FlowPanel ui:field="navigation">
<b:NavWidget ui:field="home"> <b:NavWidget ui:field="home">
</b:NavWidget> </b:NavWidget>
<b:NavWidget ui:field="vre_folder"> <b:NavWidget ui:field="vre_folder">

View File

@ -13,8 +13,11 @@ import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; 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.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.HorizontalPanel;
@ -41,6 +44,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
loading.getElement().getStyle().setPaddingLeft(5.0, Unit.PX); loading.getElement().getStyle().setPaddingLeft(5.0, Unit.PX);
LOADING_PANEL.add(loading); LOADING_PANEL.add(loading);
} }
protected Alert alert = new Alert();
protected List<ItemType> selectableTypes = new ArrayList<ItemType>(); protected List<ItemType> selectableTypes = new ArrayList<ItemType>();
protected List<ItemType> showableTypes = new ArrayList<ItemType>(); protected List<ItemType> showableTypes = new ArrayList<ItemType>();
protected List<String> allowedMimeTypes = new ArrayList<String>(); protected List<String> allowedMimeTypes = new ArrayList<String>();
@ -69,6 +74,14 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
explorerPanel = new ScrollPanel(); explorerPanel = new ScrollPanel();
} }
protected void setAlert(String html, AlertType type){
explorerPanel.clear();
alert.setHTML(html);
alert.setType(type);
alert.setClose(false);
explorerPanel.add(alert);
}
/** /**
* Set the panel in loading mode. * Set the panel in loading mode.
@ -103,6 +116,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
WorkspaceExplorerController.workspaceNavigatorService.getRoot(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback<Item>() { WorkspaceExplorerController.workspaceNavigatorService.getRoot(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback<Item>() {
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace tree from server",caught); GWT.log("Error loading workspace tree from server",caught);
} }
@ -140,8 +155,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
GWT.log("Error loading workspace folder from server", Window.alert(caught.getMessage());
caught); setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace folder from server",caught);
} }
@Override @Override
@ -177,8 +193,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
GWT.log("Error loading workspace folder from server", Window.alert(caught.getMessage());
caught); setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace folder from server",caught);
} }
@Override @Override

View File

@ -20,6 +20,7 @@ import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants;
import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException; import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -100,40 +101,29 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
try { try {
Workspace workspace = getWorkspace(); Workspace workspace = getWorkspace();
_log.trace("Start getRoot..."); _log.trace("Start getRoot...");
// WorkspaceFolder specials = workspace.getMySpecialFolders();
WorkspaceItem root = workspace.getRoot(); WorkspaceItem root = workspace.getRoot();
_log.trace("GetRoot - Replyiing root"); _log.trace("GetRoot - Replyiing root");
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
_log.trace("start time - " + startTime); _log.trace("start time - " + startTime);
Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, true); Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, true);
rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL);
/* SPECIAL FOLDERS /* SPECIAL FOLDERS
Item specialFolders = ItemBuilder.getItem(null, specials, showableTypes, filterCriteria, 2); Item specialFolders = ItemBuilder.getItem(null, specials, showableTypes, filterCriteria, 2);
specialFolders.setShared(true); specialFolders.setShared(true);
rootItem.addChild(specialFolders); rootItem.addChild(specialFolders);
*/ */
if(rootItem==null)
_log.trace("############ rootItem null");
_log.trace("Only showable types:");
//printName("", rootItem);
if (purgeEmpyFolders) rootItem = ItemBuilder.purgeEmptyFolders(rootItem); if (purgeEmpyFolders) rootItem = ItemBuilder.purgeEmptyFolders(rootItem);
_log.trace("Returning:"); _log.trace("Returning:");
Long endTime = System.currentTimeMillis() - startTime; Long endTime = System.currentTimeMillis() - startTime;
String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime)); String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime));
_log.trace("end time - " + time); _log.trace("end time - " + time);
//printName("", rootItem);
Collections.sort(rootItem.getChildren(), new ItemComparator()); Collections.sort(rootItem.getChildren(), new ItemComparator());
_log.info("Returning children size: "+rootItem.getChildren().size()); _log.info("Returning children size: "+rootItem.getChildren().size());
@ -141,7 +131,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
} catch (Exception e) { } catch (Exception e) {
_log.error("Error during root retrieving", e); _log.error("Error during root retrieving", e);
throw new WorkspaceNavigatorServiceException(e.getMessage()); throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get root");
} }
} }
@ -158,33 +148,53 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
WorkspaceItem folder = workspace.getItem(folderId); WorkspaceItem folder = workspace.getItem(folderId);
_log.trace("GetFolder - Replyiing folder"); _log.trace("GetFolder - Replyiing folder");
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
_log.trace("start time - " + startTime); _log.trace("start time - " + startTime);
Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true); Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true);
_log.trace("Only showable types:"); _log.trace("Only showable types:");
//printName("", folderItem);
if (purgeEmpyFolders) itemFolder = ItemBuilder.purgeEmptyFolders(itemFolder); if (purgeEmpyFolders) itemFolder = ItemBuilder.purgeEmptyFolders(itemFolder);
_log.trace("Returning:"); _log.trace("Returning:");
Long endTime = System.currentTimeMillis() - startTime; Long endTime = System.currentTimeMillis() - startTime;
String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime)); String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime));
_log.trace("end time - " + time); _log.trace("end time - " + time);
//printName("", folderItem);
Collections.sort(itemFolder.getChildren(), new ItemComparator()); Collections.sort(itemFolder.getChildren(), new ItemComparator());
return itemFolder; return itemFolder;
} catch (Exception e) { } catch (Exception e) {
_log.error("Error during folder retrieving", e); _log.error("Error during folder retrieving", e);
throw new WorkspaceNavigatorServiceException(e.getMessage()); throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get folder");
}
}
@Override
public Item getItemByCategory(ItemCategory category) throws WorkspaceNavigatorServiceException{
_log.trace("GetItemByCategory category: "+category);
try {
Workspace workspace = getWorkspace();
Item item = null;
switch(category){
case HOME:{
WorkspaceItem root = workspace.getRoot();
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
item = new Item(null, root.getId(), session.getUsername()+"'s", ItemType.ROOT, root.getPath(), root.getOwner().getPortalLogin(), root.isFolder());
break;
}
case VRE_FOLDER:{
WorkspaceItem folder = workspace.getMySpecialFolders();
item = new Item(null, folder.getId(), WorkspaceExplorerConstants.VRE_FOLDERS_LABEL, ItemType.ROOT, folder.getPath(), folder.getOwner().getPortalLogin(), folder.isFolder());
break;
}
}
return item;
} catch (Exception e) {
_log.error("Error during get item by category", e);
throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get item by category");
} }
} }
@ -229,7 +239,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
} catch (Exception e) { } catch (Exception e) {
_log.error("Error during special folders retrieving", e); _log.error("Error during special folders retrieving", e);
throw new WorkspaceNavigatorServiceException(e.getMessage()); throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get My Special Folder");
} }
} }

View File

@ -0,0 +1,17 @@
/**
*
*/
package org.gcube.portlets.widgets.wsexplorer.shared;
/**
* The Enum ItemCategory.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 30, 2015
*/
public enum ItemCategory {
HOME,
VRE_FOLDER;
}