From 31e9589301376b24b600f173629b399d50c3d475 Mon Sep 17 00:00:00 2001 From: "massimiliano.assante" Date: Wed, 9 May 2018 15:55:33 +0000 Subject: [PATCH] The widget has been extended to support the Recent Files view feature so that we can remove the previous portlet. Additionally the VRE Folders folder has been removed from the root and added separately (When in the root VO) git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/workspace-widget-portlet@167383 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../user/wswidget/StorageHubServiceUtil.java | 75 ++++++++++++++++++- .../user/wswidget/WorkspaceWidget.java | 31 ++++++-- src/main/webapp/css/main.css | 4 + src/main/webapp/html/workspacewidget/view.jsp | 37 ++++++--- src/main/webapp/js/main.js | 2 +- 5 files changed, 130 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/wswidget/StorageHubServiceUtil.java b/src/main/java/org/gcube/portlets/user/wswidget/StorageHubServiceUtil.java index f1f041e..c7ce025 100644 --- a/src/main/java/org/gcube/portlets/user/wswidget/StorageHubServiceUtil.java +++ b/src/main/java/org/gcube/portlets/user/wswidget/StorageHubServiceUtil.java @@ -13,7 +13,14 @@ import org.gcube.common.portal.PortalContext; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; +import org.gcube.common.storagehub.model.Paths; +import org.gcube.common.storagehub.model.expressions.GenericSearchableItem; +import org.gcube.common.storagehub.model.expressions.SearchableItem; +import org.gcube.common.storagehub.model.expressions.logical.ISDescendant; +import org.gcube.common.storagehub.model.items.AbstractFileItem; import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.query.Queries; +import org.gcube.common.storagehub.model.query.Query; import org.gcube.portlets.user.wswidget.shared.AuthorizedUser; import org.gcube.portlets.user.wswidget.shared.WSItem; @@ -90,7 +97,46 @@ public class StorageHubServiceUtil { } return null; } - + /** + * + * @param authUser + * @param limit + * @return + */ + public static List getRecentItems(AuthorizedUser authUser, int limit, Item vreFolder) { + WSItem toReturn = new WSItem("recents", "Recent Documents", true); + _log.debug("getRecentItems "); + ArrayList children = new ArrayList<>(); + SecurityTokenProvider.instance.set(authUser.getSecurityToken()); + Query> query = Queries.queryFor(AbstractFileItem.class); + + //query.setExpression(new ISDescendant(Paths.getPath(vreFolder.getPath()))); + query.setExpression(new ISDescendant(Paths.getPath("/Home/"+authUser.getUser().getUsername()+"/Workspace/MySpecialFolders/"+vreFolder.getTitle()))); + + query.setLimit(limit); + query.setOrder(GenericSearchableItem.get().lastModification); + WorkspaceManagerClient wsclient = AbstractPlugin.workspace().build(); + List theChildren = wsclient.search(query, "hl:accounting", "jcr:content"); + + if (theChildren == null || theChildren.isEmpty()) { + toReturn.setChildren(children); + _log.debug("*** Returning empty "); + return new ArrayList<>(); + } + for (Item workspaceItem : theChildren) { + WSItem toAdd = ItemBuilder.getItem(toReturn, workspaceItem, workspaceItem.getPath(), authUser.getUser().getUsername()); + children.add(toAdd); + } + toReturn.setChildren(children); + Collections.sort(toReturn.getChildren(), new ItemComparator()); + _log.debug("*** Returning recents items size: "+toReturn.getChildren().size()); + return children; + } + /** + * + * @param request + * @return the id of the VRE Folder associated to the given context + */ public static String getWorkspaceFolderURL(HttpServletRequest request) { String userName = Utils.getCurrentUser(request).getUsername(); String scope = Utils.getCurrentContext(request); @@ -111,6 +157,33 @@ public class StorageHubServiceUtil { } return toReturn; } + /** + * + * @param request + * @return the VRE Folders Id + */ + public static String getVREFoldersId(HttpServletRequest request) { + String userName = Utils.getCurrentUser(request).getUsername(); + String scope = Utils.getCurrentContext(request); + String authorizationToken = Utils.getCurrentUserToken(scope, userName); + SecurityTokenProvider.instance.set(authorizationToken); + String toReturn = ""; + try { + WorkspaceManagerClient wsclient = AbstractPlugin.workspace().build(); + try { + List list = wsclient.getVreFolders("hl:accounting"); + toReturn =list.iterator().next().getParentId(); + } catch (Exception e) { + _log.info("This user has no VRE Folders", e); + return null; + } + }catch (Exception e) { + e.printStackTrace(); + } + return toReturn; + } + + diff --git a/src/main/java/org/gcube/portlets/user/wswidget/WorkspaceWidget.java b/src/main/java/org/gcube/portlets/user/wswidget/WorkspaceWidget.java index ca11c0a..02c3da3 100644 --- a/src/main/java/org/gcube/portlets/user/wswidget/WorkspaceWidget.java +++ b/src/main/java/org/gcube/portlets/user/wswidget/WorkspaceWidget.java @@ -39,6 +39,7 @@ import com.liferay.util.bridges.mvc.MVCPortlet; public class WorkspaceWidget extends MVCPortlet { private static com.liferay.portal.kernel.log.Log _log = LogFactoryUtil.getLog(WorkspaceWidget.class); public static String BREADCRUMB_ATTR = "BREADCRUMB_ATTR_name"; + public final static int LIMIT = 5; /** * all the AJAX calls are served by this method, to discriminate the operation we use the parameters: @@ -59,10 +60,9 @@ public class WorkspaceWidget extends MVCPortlet { ServletResponseUtil.sendFile(httpReq,httpRes, streamDescr.getFileName(), streamDescr.getStream(), "application/download"); streamDescr.getStream().close(); } - //the user is browsing the workspace + //the user is browsing the workspace or asking for recents else { String cmd = ParamUtil.getString(resourceRequest, "cmd", ""); - System.out.println("******** CMD="+cmd); String selectedItemId = "root"; String selectedItemName = ""; if (cmd != null && cmd.split("_selectedName").length > 1) { @@ -101,6 +101,16 @@ public class WorkspaceWidget extends MVCPortlet { toSet = new Breadcrumb(itemId, groupName+"\'s VRE home"); request.getPortletSession().setAttribute(BREADCRUMB_ATTR, toSet, PortletSession.APPLICATION_SCOPE); } + count = StorageHubServiceUtil.getItemChildrenCount(request, itemId); + } + else if (itemId.compareTo("recents") == 0) { //is in a VRE and asking for recents files + WorkspaceManagerClient wsclient = AbstractPlugin.workspace().build(); + Item vreFolder = wsclient.getVreFolder("hl:accounting"); + itemsList = StorageHubServiceUtil.getRecentItems(authUser, offset, vreFolder); + count = offset; + toSet = (Breadcrumb) request.getPortletSession().getAttribute(BREADCRUMB_ATTR, PortletSession.APPLICATION_SCOPE); + toSet.setChild(new Breadcrumb(vreFolder.getId(), "Recent")); + request.getPortletSession().setAttribute(BREADCRUMB_ATTR, toSet, PortletSession.APPLICATION_SCOPE); } else { _log.debug("non root"); @@ -108,8 +118,9 @@ public class WorkspaceWidget extends MVCPortlet { toSet = (Breadcrumb) request.getPortletSession().getAttribute(BREADCRUMB_ATTR, PortletSession.APPLICATION_SCOPE); clicked = new WSItem(itemId, itemName, true); computeBreadcrumb(clicked, toSet); + count = StorageHubServiceUtil.getItemChildrenCount(request, itemId); } - count = StorageHubServiceUtil.getItemChildrenCount(request, itemId); + JSONObject tableData = buildJSONResponse(itemsList, start, offset, draw, count, request); ServletResponseUtil.write(PortalUtil.getHttpServletResponse(resourceResponse),tableData.toString()); } catch (Exception e) { @@ -143,24 +154,28 @@ public class WorkspaceWidget extends MVCPortlet { private static String constructBreadcrumbHTML(Breadcrumb toSet, ResourceRequest request) { StringBuilder sb = new StringBuilder(""); return sb.toString(); } - - private static String getHREFJavascriptCall(Breadcrumb toSet) { + /** + * this method construct the breadcrumb server side, the resaulting code is added in the client DOM (once returned) + * @param toSet + * @return + */ + private static String getHREFJavascriptCall(Breadcrumb toSet, boolean hideVreFoldersDiv) { String escapedItemName = toSet.getName().replaceAll("\"", "\\\"").replaceAll("'", "\\\\'"); StringBuilder sb = new StringBuilder - ("") + ("") .append(toSet.getName()).append(""); return sb.toString(); } diff --git a/src/main/webapp/css/main.css b/src/main/webapp/css/main.css index 57fc66e..81943ea 100644 --- a/src/main/webapp/css/main.css +++ b/src/main/webapp/css/main.css @@ -58,6 +58,10 @@ .workspace-widget-portlet table.dataTable thead th, table.dataTable tfoot th { font-weight: 400; + font-size: 10px; +} + +.workspace-widget-portlet table.dataTable thead th:first-child { font-size: 12px; } diff --git a/src/main/webapp/html/workspacewidget/view.jsp b/src/main/webapp/html/workspacewidget/view.jsp index 98b2d15..c21a502 100644 --- a/src/main/webapp/html/workspacewidget/view.jsp +++ b/src/main/webapp/html/workspacewidget/view.jsp @@ -14,21 +14,30 @@ + - + @@ -52,7 +61,17 @@
+ <%pageContext.setAttribute("vreFoldersId", StorageHubServiceUtil.getVREFoldersId(request));%> + + + +