From 65a2f0da4163db99a1b16877dce1b433cd7d4cb0 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Tue, 30 Jun 2015 12:52:40 +0000 Subject: [PATCH] 256: Workspace explorer Task-Url: https://support.d4science.org/issues/256 Fixed breadcrumbs Added user full name and pom dependency git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@115683 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 8 ++ .../client/WorkspaceExplorerController.java | 45 ++++-- .../client/WorkspaceExplorerPanel.java | 2 +- .../load/WorkspaceExplorerLoadDialog.java | 136 ++++++++---------- .../client/rpc/WorkspaceExplorerService.java | 2 +- .../rpc/WorkspaceExplorerServiceAsync.java | 9 +- .../wsexplorer/client/view/Breadcrumbs.java | 71 +++++---- .../client/view/WorkspaceExplorer.java | 2 +- .../wsexplorer/server/ItemBuilder.java | 23 ++- .../widgets/wsexplorer/server/UserUtil.java | 82 +++++++++++ .../server/WorkspaceExplorerServiceImpl.java | 29 ++-- 11 files changed, 268 insertions(+), 141 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/wsexplorer/server/UserUtil.java diff --git a/pom.xml b/pom.xml index 278279b..6cd3566 100644 --- a/pom.xml +++ b/pom.xml @@ -110,6 +110,12 @@ + + org.gcube.dvos + usermanagement-core + provided + + log4j @@ -131,6 +137,8 @@ test + + 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 a412d06..f0f7d9a 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 @@ -17,8 +17,10 @@ import org.gcube.portlets.widgets.wsexplorer.client.view.Breadcrumbs; import org.gcube.portlets.widgets.wsexplorer.client.view.Navigation; import org.gcube.portlets.widgets.wsexplorer.client.view.WorkspaceExplorer; 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.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.HandlerManager; @@ -50,9 +52,9 @@ public class WorkspaceExplorerController implements EventHandler { workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getPanel(), breadcrumbs, navigation); } - public void loadRoot(){ - wsExplorer.loadRoot(); - } +// public void loadRoot(){ +// wsExplorer.loadRoot(); +// } /** * Bind events. @@ -76,7 +78,22 @@ public class WorkspaceExplorerController implements EventHandler { @Override public void onLoadRoot(LoadRootEvent loadRootEvent) { wsExplorer.loadRoot(); - breadcrumbs.init(); + + workspaceNavigatorService.getItemByCategory(ItemCategory.HOME, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + GWT.log(caught.getMessage()); + breadcrumbs.clear(); + + } + + @Override + public void onSuccess(Item result) { + result.setName(WorkspaceExplorerConstants.HOME_LABEL); //FORCE SET NAME LIKE "HOME_LABEL" + breadcrumbs.init(result); + } + }); } }); @@ -85,7 +102,19 @@ public class WorkspaceExplorerController implements EventHandler { @Override public void onLoadMySpecialFolder(LoadMySpecialFolderEvent loadMySpecialFolderEvent) { wsExplorer.loadMySpecialFolder(); - breadcrumbs.init(); + + workspaceNavigatorService.getItemByCategory(ItemCategory.VRE_FOLDER, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + GWT.log(caught.getMessage()); + } + + @Override + public void onSuccess(Item result) { + breadcrumbs.init(result); + } + }); } }); } @@ -100,12 +129,12 @@ public class WorkspaceExplorerController implements EventHandler { GWT.log("Reload Parent Breadcrumb: [Item id: "+itemIdentifier+"]"); - workspaceNavigatorService.getListParentsByItemIdentifier(itemIdentifier, includeItemAsParent, new AsyncCallback>() { + workspaceNavigatorService.getBreadcrumbsByItemIdentifier(itemIdentifier, includeItemAsParent, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { - // TODO Auto-generated method stub - + GWT.log(caught.getMessage()); + wsExplorer.setAlert(caught.getMessage(), AlertType.ERROR); } @Override 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 3ecdaf0..f932378 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 @@ -18,7 +18,7 @@ public class WorkspaceExplorerPanel extends DockPanel{ public int width = 550; public int height = 400; - public int west_width = 130; + public int west_width = 150; private ScrollPanel westPanel = new ScrollPanel(); private ScrollPanel centerScrollable = new ScrollPanel(); diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/load/WorkspaceExplorerLoadDialog.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/load/WorkspaceExplorerLoadDialog.java index 1d7880c..658ac7d 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/load/WorkspaceExplorerLoadDialog.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/load/WorkspaceExplorerLoadDialog.java @@ -8,6 +8,7 @@ import java.util.List; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController; +import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent; import org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener; import org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.WorskpaceExplorerNotificationListener; import org.gcube.portlets.widgets.wsexplorer.shared.Item; @@ -23,17 +24,18 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; - /** * The Class WorkspaceExplorerLoadDialog. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Jun 29, 2015 - * - * + * Jun 30, 2015 */ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceExplorerNotificationListener{ + public static final String SELECT = "Select"; + public static final String MAX_HEIGHT_DIALOG = "500px"; + public static final int WIDHT_DIALOG = 720; + private Button selectButton; private WorkspaceExplorerLoadDialog INSTANCE = this; private boolean isSelect = false; @@ -42,15 +44,61 @@ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceEx private WorkspaceExplorerController controller = new WorkspaceExplorerController(); private List listeners = new ArrayList(); + /** - * Instantiates a new worspace navigator dialog. + * Instantiates a new workspace explorer load dialog. * - * @param captionTxt sets the text inside the caption, if null sets "Workspace Explorer" - * - * Add {@link WorskpaceExplorerNotificationListener} to receive events + * @param captionTxt the caption txt + * You can implement {@link WorskpaceExplorerNotificationListener} to receive events */ public WorkspaceExplorerLoadDialog(String captionTxt) { - controller.loadRoot(); + WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent()); + initDialog(captionTxt); + } + + /** + * Instantiates a new workspace explorer load dialog. + * + * @param captionTxt the caption txt + * @param showOnlyFolders the show only folders + */ + public WorkspaceExplorerLoadDialog(String captionTxt, boolean showOnlyFolders) { + + if(showOnlyFolders){ + ItemType[] itemsType = new ItemType[2]; + itemsType[0] = ItemType.ROOT; + itemsType[1] = ItemType.FOLDER; + setSelectableTypes(itemsType); + setShowableTypes(itemsType); + } + + WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent()); + initDialog(captionTxt); + } + + /** + * Instantiates a new workspace explorer load dialog. + * + * @param captionTxt captionTxt sets the text inside the caption, if null sets "Workspace Explorer" + * @param selectableTypes the selectable types + * @param showableTypes the showable types + * + * You can implement {@link WorskpaceExplorerNotificationListener} to receive events + */ + public WorkspaceExplorerLoadDialog(String captionTxt, List selectableTypes, List showableTypes) { + if(selectableTypes!=null){ + ItemType[] itemsType = new ItemType[selectableTypes.size()]; + itemsType = selectableTypes.toArray(itemsType); + setSelectableTypes(selectableTypes.toArray(itemsType)); + } + + if(showableTypes!=null){ + ItemType[] itemsType = new ItemType[showableTypes.size()]; + itemsType = showableTypes.toArray(itemsType); + setShowableTypes(showableTypes.toArray(itemsType)); + } + + WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent()); initDialog(captionTxt); } @@ -65,11 +113,10 @@ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceEx setAnimation(false); setCloseVisible(true); setTitle(this.captionTxt); - selectButton = new Button("Select"); + selectButton = new Button(SELECT); selectButton.setType(ButtonType.PRIMARY); - setWidth(710); -// setHeight("650px"); - setMaxHeigth("500px"); + setWidth(WIDHT_DIALOG); + setMaxHeigth(MAX_HEIGHT_DIALOG); hide(false); addHideHandler(new HideHandler() { @@ -80,41 +127,8 @@ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceEx notifyAborted(); } }); - - -// DockPanel dock = new DockPanel(); -// dock.setSpacing(5); - // dock.add(okButton, DockPanel.SOUTH); - // dock.add(cancel, DockPanel.SOUTH); - -// HorizontalPanel hp = new HorizontalPanel(); -// hp.setStyleName("margin-auto"); -////// hp.add(okButton); -//// hp.setWidth("50%"); -//// hp.setStyleAttribute("margin", "0 auto"); -// hp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); -// cancel.getElement().getStyle().setMarginTop(5.0, Unit.PX); -//// cancel.getElement().getStyle().setMarginBottom(5.0, Unit.PX); -//// hp.getElement().getStyle().setMarginLeft("0 auto", Unit.PCT); -// hp.add(cancel); -// dock.add(hp, DockPanel.SOUTH); -// -// dock.add(controller.getWorkspaceExplorerPanel(), DockPanel.CENTER); -// -// dock.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); -// dock.setWidth("100%"); - - add(controller.getWorkspaceExplorerPanel()); - -// okButton.addClickHandler(new ClickHandler() { -// -// @Override -// public void onClick(ClickEvent event) { -// -// } -// }); selectButton.addClickHandler(new ClickHandler() { @Override @@ -131,37 +145,7 @@ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceEx }); footer.add(selectButton); - add(footer); - - } - - - /** - * Instantiates a new workspace explorer load dialog. - * - * @param captionTxt captionTxt sets the text inside the caption, if null sets "Workspace Explorer" - * @param selectableTypes the selectable types - * @param showableTypes the showable types - * - * Add {@link WorskpaceExplorerNotificationListener} to receive events - */ - public WorkspaceExplorerLoadDialog(String captionTxt, List selectableTypes, List showableTypes) { - if(selectableTypes!=null){ - ItemType[] itemsType = new ItemType[selectableTypes.size()]; - itemsType = selectableTypes.toArray(itemsType); - setSelectableTypes(selectableTypes.toArray(itemsType)); - } - - if(showableTypes!=null){ - ItemType[] itemsType = new ItemType[showableTypes.size()]; - itemsType = showableTypes.toArray(itemsType); - setShowableTypes(showableTypes.toArray(itemsType)); - } - - controller.loadRoot(); - initDialog(captionTxt); - } /** * Notify selected item. 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 77a8f3d..38b946d 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 @@ -23,7 +23,7 @@ public interface WorkspaceExplorerService extends RemoteService { * @return * @throws Exception */ - List getListParentsByItemIdentifier(String itemIdentifier, + List getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent) 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 2e35d93..6716301 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 @@ -66,15 +66,16 @@ public interface WorkspaceExplorerServiceAsync { boolean purgeEmpyFolders, FilterCriteria filterCriteria, AsyncCallback callback); + /** - * Gets the list parents by item identifier. + * Gets the breadcrumbs by item identifier. * * @param itemIdentifier the item identifier * @param includeItemAsParent the include item as parent - * @param asyncCallback the callback - * @return the list parents by item identifier + * @param asyncCallback the async callback + * @return the breadcrumbs by item identifier */ - public void getListParentsByItemIdentifier(String itemIdentifier, + public void getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent, AsyncCallback> asyncCallback); /** diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Breadcrumbs.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Breadcrumbs.java index 97daf52..a7c901b 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Breadcrumbs.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/Breadcrumbs.java @@ -45,14 +45,11 @@ public class Breadcrumbs extends Composite { /** * Instantiates a new breadcrumbs. - * - * @param rootName - * the root name */ public Breadcrumbs() { initWidget(uiBinder.createAndBindUi(this)); breadcrumbs.setDivider(DIVIDER); - init(); +// init(); // initBreadcrumb(true); this.addStyleName("breadcrumbs-navigator"); } @@ -66,18 +63,27 @@ public class Breadcrumbs extends Composite { public void setPath(List parents) { resetBreadcrumbs(); if (parents != null && parents.size() > 0) { - hashListItems = new LinkedHashMap(); for (Item parent : parents) { +// if(!isRootOrSpecialFolder(parent)){ //SKIP ROOT AND SPECIAL FOLDER +// addNavigationLink(parent); +// hashListItems.put(parent.getId(), parent); +// } - if(!isRootOrSpecialFolder(parent)){ //SKIP ROOT AND SPECIAL FOLDER +// if(!isRootOrSpecialFolder(parent)){ //SKIP ROOT AND SPECIAL FOLDER addNavigationLink(parent); hashListItems.put(parent.getId(), parent); - } +// } } lastParent = parents.get(parents.size() - 1); } } + /** + * Checks if is root or special folder. + * + * @param item the item + * @return true, if is root or special folder + */ private boolean isRootOrSpecialFolder(Item item){ GWT.log(item.getName() +" is root "+(item.getParent()==null)); GWT.log(item.getName() +" is special folder "+item.isSpecialFolder()); @@ -89,35 +95,29 @@ public class Breadcrumbs extends Composite { */ private void resetBreadcrumbs() { breadcrumbs.clear(); + hashListItems.clear(); } // @UiHandler("add") + /** * Adds the navigation link. * - * @param parent - * the parent + * @param parent the parent */ - public void addNavigationLink(Item parent) { -// if (parent != null && parent.getParent() != null && !parent.isSpecialFolder() && !parent.getParent().isSpecialFolder()) { - final NavLink navLink = new NavLink(parent.getName()); - navLink.setName(parent.getId()); - breadcrumbs.add(navLink); + private void addNavigationLink(Item parent) { + final NavLink navLink = new NavLink(parent.getName()); + navLink.setName(parent.getId()); + breadcrumbs.add(navLink); + navLink.addClickHandler(new ClickHandler() { - navLink.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { - @Override - public void onClick(ClickEvent event) { - - Item target = hashListItems.get(navLink.getName()); - WorkspaceExplorerController.eventBus.fireEvent(new LoadFolderEvent(target)); - } - }); -// } else { //IS ROOT OR SPECIAL FOLDER -// // final NavLink navLink = new NavLink(""); -// NavLink navLink = new NavLink(""); -// breadcrumbs.add(navLink);// INIT -// } + Item target = hashListItems.get(navLink.getName()); + WorkspaceExplorerController.eventBus.fireEvent(new LoadFolderEvent(target)); + } + }); } /** @@ -142,12 +142,23 @@ public class Breadcrumbs extends Composite { return lastParent; } + /** - * + * Inits the. + * + * @param item the item */ - public void init() { + public void init(Item item) { resetBreadcrumbs(); - breadcrumbs.add(new NavLink("/")); + addNavigationLink(item); + hashListItems.put(item.getId(), item); } + + /** + * Clear. + */ + public void clear() { + resetBreadcrumbs(); + } } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java index cd2ae55..99cdb61 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/client/view/WorkspaceExplorer.java @@ -75,7 +75,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{ } - protected void setAlert(String html, AlertType type){ + public void setAlert(String html, AlertType type){ explorerPanel.clear(); alert.setHTML(html); alert.setType(type); 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 8ad8103..8218e4f 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 @@ -89,7 +89,7 @@ public class ItemBuilder { itemName = "My VRE Folders"; } - Item item = new Item(parent, workspaceItem.getId(), itemName, type, workspaceItem.getPath(), workspaceItem.getOwner().getPortalLogin(), workspaceItem.isFolder()); + Item item = new Item(parent, workspaceItem.getId(), itemName, type, workspaceItem.getPath(), UserUtil.getUserFullName(workspaceItem.getOwner().getPortalLogin()), workspaceItem.isFolder()); item.setSharedFolder(workspaceItem.getType()==WorkspaceItemType.SHARED_FOLDER); /* @@ -146,9 +146,7 @@ public class ItemBuilder { * @param item the item * @return the folder item type */ - protected static ItemType getFolderItemType(FolderItem item) - { - //System.out.println("getFolderItemType "+item.getFolderItemType().toString()); + protected static ItemType getFolderItemType(FolderItem item){ return ItemType.valueOf(item.getFolderItemType().toString()); } @@ -161,8 +159,7 @@ public class ItemBuilder { * @return true, if successful * @throws InternalErrorException the internal error exception */ - protected static boolean filterItem(ItemType type, WorkspaceItem item, FilterCriteria filterCriteria) throws InternalErrorException - { + protected static boolean filterItem(ItemType type, WorkspaceItem item, FilterCriteria filterCriteria) throws InternalErrorException { boolean mimeTypeCheck = checkAllowedMimeTypes(type, item, filterCriteria.getAllowedMimeTypes()); if (!mimeTypeCheck) return false; @@ -178,8 +175,7 @@ public class ItemBuilder { * @param allowedMimeTypes the allowed mime types * @return true, if successful */ - protected static boolean checkAllowedMimeTypes(ItemType type, WorkspaceItem item, List allowedMimeTypes) - { + protected static boolean checkAllowedMimeTypes(ItemType type, WorkspaceItem item, List allowedMimeTypes){ if (allowedMimeTypes.size()==0) return true; if (type == ItemType.EXTERNAL_FILE || type == ItemType.EXTERNAL_IMAGE || type == ItemType.EXTERNAL_PDF_FILE) { @@ -228,8 +224,10 @@ public class ItemBuilder { String name = ""; boolean isSpecialFolder = false; - //MANAGEMENT SHARED FOLDER NAME - if(wsFolder.isShared() && wsFolder.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ + + if(wsFolder.isRoot()){ //IS ROOT + name = WorkspaceExplorerConstants.HOME_LABEL; + }else if(wsFolder.isShared() && wsFolder.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ //MANAGEMENT SHARED FOLDER NAME WorkspaceSharedFolder shared = (WorkspaceSharedFolder) wsFolder; name = shared.isVreFolder()?shared.getDisplayName():wsFolder.getName(); //MANAGEMENT SPECIAL FOLDER @@ -238,8 +236,9 @@ public class ItemBuilder { isSpecialFolder = true; }else name = wsFolder.getName(); - - Item item = new Item(null, wsFolder.getId(), name, ItemType.FOLDER, "", wsFolder.getOwner().getPortalLogin(), wsFolder.isFolder()); + + //BUILDS A SIMPLE ITEM FOR BREADCRUMB + Item item = new Item(null, wsFolder.getId(), name, ItemType.FOLDER, "", null, true); item.setSpecialFolder(isSpecialFolder); return item; 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 new file mode 100644 index 0000000..4643cc0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/UserUtil.java @@ -0,0 +1,82 @@ +package org.gcube.portlets.widgets.wsexplorer.server; + +import org.gcube.vomanagement.usermanagement.UserManager; +import org.gcube.vomanagement.usermanagement.exception.UserManagementPortalException; +import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; +import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault; +import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayUserManager; +import org.gcube.vomanagement.usermanagement.model.UserModel; +import org.slf4j.Logger; + +import com.liferay.portal.service.UserLocalServiceUtil; + + + +/** + * The Class UserUtil. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 30, 2015 + */ +public class UserUtil { + + private static UserManager um = new LiferayUserManager(); + private static Logger logger = org.slf4j.LoggerFactory.getLogger(UserUtil.class); + + /** + * Gets the user full name. + * + * @param portalLogin the portal login + * @return the user full name + */ + public static String getUserFullName(String portalLogin){ + logger.trace("Get user full name for: "+portalLogin); + if(portalLogin==null) + return ""; + + if (isWithinPortal()) { //INTO PORTAL + UserModel curr = null; + try { + try { + curr = um.getUserByScreenName(portalLogin); + } catch (UserManagementSystemException e) { + logger.error("An error occurred in getUserFullName "+e,e); + } catch (UserRetrievalFault e) { + logger.error("An error occurred in getUserFullName "+e,e); + } + } catch (UserManagementPortalException ume) { + logger.error("An error occurred in getUserFullName "+ume,ume); + }catch (Exception e) { + logger.error("An error occurred in getUserFullName "+e,e); + logger.warn("Return portal login "+portalLogin); + return portalLogin; + } + + if (curr != null) + return curr.getFullname(); + }else{ + logger.trace("DEVELOPEMENT MODE ON"); + logger.trace("Returning portal login: "+portalLogin); + return portalLogin; + } + + logger.trace("Returning portal login: "+portalLogin); + return portalLogin; + } + + /** + * Checks if is within portal. + * + * @return true if you're running into the portal, false if in development + */ + public static boolean isWithinPortal() { + try { + UserLocalServiceUtil.getService(); + return true; + } + catch (Exception ex) { + logger.trace("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 bac428f..392467e 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 @@ -42,6 +42,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement */ public static final Logger _log = LoggerFactory.getLogger(WorkspaceExplorerServiceImpl.class); public static final String USERNAME_ATTRIBUTE = "username"; + public static final String TEST_USER = "francesco.mangiacrapa"; /** @@ -65,7 +66,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement //for test only // user = "test.user"; - user = "francesco.mangiacrapa"; + user = TEST_USER; httpSession.setAttribute(USERNAME_ATTRIBUTE, user); ASLSession session = SessionManager.getInstance().getASLSession(sessionID, user); session.setScope("/gcube/devsec/devVRE"); @@ -182,7 +183,13 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement 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()); + String fullName = UserUtil.getUserFullName(session.getUsername()); + if(fullName.indexOf(" ")>0){ + fullName = fullName.substring(0, fullName.indexOf(" ")); + }else if(fullName.indexOf(".")>0){ + fullName = fullName.substring(0, fullName.indexOf(".")); + } + item = new Item(null, root.getId(), fullName+"'s", ItemType.ROOT, root.getPath(), root.getOwner().getPortalLogin(), root.isFolder()); break; } case VRE_FOLDER:{ @@ -269,7 +276,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement }*/ /** - * Gets the list parents by item identifier. + * Gets Breadcrumbs (the list of parents) by item identifier. * * @param itemIdentifier the item identifier * @param includeItemAsParent - if parameter is true and item passed in input is a folder, the folder is included in path returned as last parent @@ -277,29 +284,35 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement * @throws Exception the exception */ @Override - public List getListParentsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent) throws Exception { + public List getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent) throws Exception { List listParents = new ArrayList(); _log.trace("ListParents By Item Identifier "+ itemIdentifier); try { + Workspace workspace = getWorkspace(); - WorkspaceItem wsItem = workspace.getItem(itemIdentifier); _log.trace("workspace retrieve item name: "+wsItem.getName()); -// String nameSpecialFolder = getNameForSpecialFolder(); - if(includeItemAsParent==true && wsItem.isFolder()){ listParents.add(ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) wsItem, null)); } while(wsItem!=null && wsItem.getParent()!=null){ WorkspaceFolder wsFolder = wsItem.getParent(); - listParents.add(ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) wsFolder, null)); + Item parent = ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) wsFolder, null); + listParents.add(parent); + if(parent.isSpecialFolder()) //SKIP HOME PARENT TO MY_SPECIAL_FOLDER + break; wsItem = wsFolder; } Collections.reverse(listParents); + + System.out.println("Parent's:"); + for (Item item : listParents) { + System.out.println(item); + } //SET PARENTS for(int i=0; i