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;
/**
* The Class WorkspaceExplorerConstants.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 30, 2015
*/
public class WorkspaceExplorerConstants {
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.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException;
@ -65,4 +66,11 @@ public interface WorkspaceExplorerService extends RemoteService {
Item getMySpecialFolder(List<ItemType> showableTypes,
boolean purgeEmpyFolders, FilterCriteria filterCriteria)
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.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
*
* The Interface WorkspaceExplorerServiceAsync.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 24, 2015
*/
@ -76,8 +78,23 @@ public interface WorkspaceExplorerServiceAsync {
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);
/**
* 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.LoadRootEvent;
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.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.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.Widget;
@ -50,10 +53,24 @@ public class Navigation extends Composite{
initWidget(uiBinder.createAndBindUi(this));
getElement().getStyle().setMarginLeft(5.0, Unit.PX);
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.addClickHandler(new ClickHandler() {
@Override
@ -63,9 +80,24 @@ public class Navigation extends Composite{
});
vre_folder.setActive(true);
vre_folder.setText(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL);
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() {
@Override

View File

@ -1,7 +1,7 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<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">
<g:FlowPanel>
<g:FlowPanel ui:field="navigation">
<b:NavWidget ui:field="home">
</b:NavWidget>
<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.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.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HTML;
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_PANEL.add(loading);
}
protected Alert alert = new Alert();
protected List<ItemType> selectableTypes = new ArrayList<ItemType>();
protected List<ItemType> showableTypes = new ArrayList<ItemType>();
protected List<String> allowedMimeTypes = new ArrayList<String>();
@ -69,6 +74,14 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
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.
@ -103,6 +116,8 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
WorkspaceExplorerController.workspaceNavigatorService.getRoot(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback<Item>() {
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace tree from server",caught);
}
@ -140,8 +155,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
@Override
public void onFailure(Throwable caught) {
GWT.log("Error loading workspace folder from server",
caught);
Window.alert(caught.getMessage());
setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace folder from server",caught);
}
@Override
@ -177,8 +193,9 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
@Override
public void onFailure(Throwable caught) {
GWT.log("Error loading workspace folder from server",
caught);
Window.alert(caught.getMessage());
setAlert(caught.getMessage(), AlertType.ERROR);
GWT.log("Error loading workspace folder from server",caught);
}
@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.shared.FilterCriteria;
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.WorkspaceNavigatorServiceException;
import org.slf4j.Logger;
@ -100,40 +101,29 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
try {
Workspace workspace = getWorkspace();
_log.trace("Start getRoot...");
// WorkspaceFolder specials = workspace.getMySpecialFolders();
WorkspaceItem root = workspace.getRoot();
_log.trace("GetRoot - Replyiing root");
long startTime = System.currentTimeMillis();
_log.trace("start time - " + startTime);
Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, true);
rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL);
/* SPECIAL FOLDERS
Item specialFolders = ItemBuilder.getItem(null, specials, showableTypes, filterCriteria, 2);
specialFolders.setShared(true);
rootItem.addChild(specialFolders);
*/
if(rootItem==null)
_log.trace("############ rootItem null");
_log.trace("Only showable types:");
//printName("", rootItem);
if (purgeEmpyFolders) rootItem = ItemBuilder.purgeEmptyFolders(rootItem);
_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("", rootItem);
Collections.sort(rootItem.getChildren(), new ItemComparator());
_log.info("Returning children size: "+rootItem.getChildren().size());
@ -141,7 +131,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
} catch (Exception 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);
_log.trace("GetFolder - Replyiing folder");
long startTime = System.currentTimeMillis();
_log.trace("start time - " + startTime);
Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, 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 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) {
_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;
}