diff --git a/src/main/java/org/gcube/portlets/user/accountingdashboard/server/accounting/PortalContextTreeProvider.java b/src/main/java/org/gcube/portlets/user/accountingdashboard/server/accounting/PortalContextTreeProvider.java index 1a02c1d..8345265 100644 --- a/src/main/java/org/gcube/portlets/user/accountingdashboard/server/accounting/PortalContextTreeProvider.java +++ b/src/main/java/org/gcube/portlets/user/accountingdashboard/server/accounting/PortalContextTreeProvider.java @@ -1,5 +1,16 @@ package org.gcube.portlets.user.accountingdashboard.server.accounting; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map.Entry; + +import javax.servlet.http.HttpServletRequest; + +import org.gcube.common.portal.GCubePortalConstants; +import org.gcube.common.portal.PortalContext; import org.gcube.data.access.accounting.summary.access.impl.ContextTreeProvider; import org.gcube.data.access.accounting.summary.access.model.ScopeDescriptor; import org.gcube.vomanagement.usermanagement.GroupManager; @@ -7,7 +18,18 @@ import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault; import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; import org.gcube.vomanagement.usermanagement.model.GCubeGroup; +import org.gcube.vomanagement.usermanagement.model.GCubeUser; +import org.gcube.vomanagement.usermanagement.model.VirtualGroup; +import com.liferay.portal.kernel.exception.PortalException; +import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.model.Group; +import com.liferay.portal.model.VirtualHost; +import com.liferay.portal.service.LayoutSetLocalServiceUtil; +import com.liferay.portal.service.VirtualHostLocalServiceUtil; + +import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -15,23 +37,57 @@ public class PortalContextTreeProvider implements ContextTreeProvider { private static GroupManager groupsManager; + @AllArgsConstructor + @Getter + private class VRECategory{ + private long categoryID; + private String name; + private String description; + } + + @AllArgsConstructor + @Getter + private class VRE implements Comparable{ + private String name; + private String description; + private long id; + private String url; + private String scope; + + @Override + public int compareTo(VRE vre) { + return this.getName().compareTo(vre.getName()); + } + } + + static { groupsManager = new LiferayGroupManager(); } @Override public ScopeDescriptor getTree(Object context) throws Exception { - // if(context == null) throw new Exception("Unable to get tree, Request - // is null."); - // if(!(context instanceof HttpServletRequest)) throw new - // Exception("Invalid request object : "+context); - // HttpServletRequest request=(HttpServletRequest) context; + if(context == null) throw new Exception("Unable to get tree, Request is null."); + if(!(context instanceof HttpServletRequest)) throw new + Exception("Invalid request object : "+context); + HttpServletRequest request=(HttpServletRequest) context; // PARSE TREE + LinkedHashMap> gatewayTree=getPortalSitesMappedToVRE(request); + + LinkedList rootChildren=new LinkedList<>(); + for(Entry> entry:gatewayTree.entrySet()) { + ScopeDescriptor rootChild=new ScopeDescriptor(entry.getKey().name, entry.getKey().categoryID+""); + for(VRE vre:entry.getValue()) + rootChild.getChildren().add(new ScopeDescriptor(vre.name, vre.scope)); + } + + Group rootGroup=getSiteFromServletRequest(request); + ScopeDescriptor root=new ScopeDescriptor(rootGroup.getDescriptiveName(),rootGroup.getGroupId()+""); + root.setChildren(rootChildren); + - GCubeGroup rootGroupVO = groupsManager.getRootVO(); - - return asScopeDescriptor(rootGroupVO); + return root; } private ScopeDescriptor asScopeDescriptor(GCubeGroup group) @@ -46,123 +102,114 @@ public class PortalContextTreeProvider implements ContextTreeProvider { return toReturn; } - // - // - // /** - // * - // * @return the Virtual groups with their VREs in the order estabilished in - // the LR Control Panel - // * @throws SystemException - // * @throws PortalException - // */ - // private LinkedHashMap> - // getPortalSitesMappedToVRE(HttpServletRequest request) throws Exception { - // - // Group site=getSiteFromServletRequest(request); - // - // ScopeDescriptor root=new - // ScopeDescriptor(site.getDescriptiveName(),site.getUuid()); - // - // LinkedList groups=new LinkedList<>(); - // - // long currentSiteGroupId = site.getGroupId(); - // - //// List currentSiteVGroups = - // groupsManager.getVirtualGroups(currentSiteGroupId); - //// - //// for (VirtualGroup vg : currentSiteVGroups) { - //// ScopeDescriptor groupDescriptor=new ScopeDescriptor(vg.getName(),); - //// VRECategory cat = new VRECategory(1L, vg.getName(), - // vg.getDescription()); - //// toReturn.put(cat, toCreate); - //// } - // - // GCubeGroup rootGroupVO = groupsManager.getRootVO(); - //// - //// try { - //// log.debug("root: " + rootGroupVO.getGroupName() ); - //// } catch (NullPointerException e) { - //// log.error("Cannot find root organziation, please check - // gcube-data.properties file in $CATALINA_HOME/conf folder, unless your - // installing the Bundle"); - //// return toReturn; - //// } - //// PortalContext pContext = PortalContext.getConfiguration(); - //// - //// List currUserGroups = new ArrayList(); - //// GCubeUser currUser = pContext.getCurrentUser(request); - //// if (currUser != null) { - //// currUserGroups = groupsManager.listGroupsByUser(currUser.getUserId()); - //// } - // - // //for each root sub organizations (VO) - // for (GCubeGroup vOrg : rootGroupVO.getChildren()) { - // for (GCubeGroup vreSite : vOrg.getChildren()) { - // long vreID = vreSite.getGroupId(); - // String vreName = vreSite.getGroupName(); - // String vreDescription = vreSite.getDescription(); - // - // String groupName = - // groupsManager.getInfrastructureScope(vreSite.getGroupId()); - // - // List vreGroups = groupsManager.getVirtualGroups(vreID); - // for (VirtualGroup vreGroup : vreGroups) { - // for (VRECategory vre : toReturn.keySet()) { - // if (vre.getName().compareTo(vreGroup.getName())==0) { - // ArrayList toUpdate = toReturn.get(vre); - // UserBelonging belongs = UserBelonging.NOT_BELONGING; - // VRE toAdd = new VRE(vreID,vreName, vreDescription, vreLogoURL, groupName, - // friendlyURL, belongs, getVREMembershipType(vreSite.getMembershipType())); - //// if (GroupLocalServiceUtil.getGroup(vreID).getPublicLayoutsPageCount() > - // 0) { - //// String publicURL = PREFIX_PUBLIC_URL+vreSite.getFriendlyURL(); - //// toAdd.setPublicURL(publicURL); - //// } - //// if (currUser != null) { - //// //check if the user belongs to it - //// if (currUserGroups.contains(vreSite)) { - //// toAdd.setUserBelonging(UserBelonging.BELONGING); - //// } - //// else if (checkPending(currUser.getUsername(), vreSite.getGroupId())) - //// toAdd.setUserBelonging(UserBelonging.PENDING); - //// } - // toUpdate.add(toAdd); - // } - // } - // } - // } - // } - // - // //sort the vres in the groups - // for (VRECategory cat : toReturn.keySet()) { - // ArrayList toSort = toReturn.get(cat); - // Collections.sort(toSort); - // } - // return toReturn; - // } - // - // - // - // - // - // private Group getSiteFromServletRequest(final HttpServletRequest request) - // throws PortalException, SystemException { - // String serverName = request.getServerName(); - // log.debug("currentHost is " + serverName); - // Group site = null; - // List vHosts = VirtualHostLocalServiceUtil.getVirtualHosts(0, - // VirtualHostLocalServiceUtil.getVirtualHostsCount()); - // for (VirtualHost virtualHost : vHosts) { - // log.debug("Found " + virtualHost.getHostname()); - // if (virtualHost.getHostname().compareTo("localhost") != 0 && - // virtualHost.getLayoutSetId() != 0 && - // virtualHost.getHostname().compareTo(serverName) == 0) { - // long layoutSetId = virtualHost.getLayoutSetId(); - // site = LayoutSetLocalServiceUtil.getLayoutSet(layoutSetId).getGroup(); - // log.debug("Found match! Your site is " + site.getName()); - // return site; - // } - // } - // return null; - // } + + + /** + * + * @return the Virtual groups with their VREs in the order estabilished in + the LR Control Panel + * @throws SystemException + * @throws PortalException + */ + private LinkedHashMap> + getPortalSitesMappedToVRE(HttpServletRequest request) throws Exception { + + LinkedHashMap> toReturn = new LinkedHashMap>(); + + long currentSiteGroupId = getSiteFromServletRequest(request).getGroupId(); + List currentSiteVGroups = groupsManager.getVirtualGroups(currentSiteGroupId); + + for (VirtualGroup vg : currentSiteVGroups) { + ArrayList toCreate = new ArrayList(); + VRECategory cat = new VRECategory(1L, vg.getName(), vg.getDescription()); + toReturn.put(cat, toCreate); + } + + GCubeGroup rootGroupVO = groupsManager.getRootVO(); + + try { + log.debug("root: " + rootGroupVO.getGroupName() ); + } catch (NullPointerException e) { + log.error("Cannot find root organziation, please check gcube-data.properties file in $CATALINA_HOME/conf folder, unless your installing the Bundle"); + return toReturn; + } + PortalContext pContext = PortalContext.getConfiguration(); + + List currUserGroups = new ArrayList(); + GCubeUser currUser = pContext.getCurrentUser(request); + if (currUser != null) { + currUserGroups = groupsManager.listGroupsByUser(currUser.getUserId()); + } + + //for each root sub organizations (VO) + for (GCubeGroup vOrg : rootGroupVO.getChildren()) { + for (GCubeGroup vreSite : vOrg.getChildren()) { + long vreID = vreSite.getGroupId(); + String vreName = vreSite.getGroupName(); + String vreDescription = vreSite.getDescription(); + + long logoId = vreSite.getLogoId(); + String vreLogoURL = groupsManager.getGroupLogoURL(logoId); + String infraScope = groupsManager.getInfrastructureScope(vreSite.getGroupId()); + String friendlyURL = GCubePortalConstants.PREFIX_GROUP_URL+vreSite.getFriendlyURL(); + + List vreGroups = groupsManager.getVirtualGroups(vreID); + for (VirtualGroup vreGroup : vreGroups) { + for (VRECategory vre : toReturn.keySet()) { + if (vre.getName().compareTo(vreGroup.getName())==0) { + ArrayList toUpdate = toReturn.get(vre); +// UserBelonging belongs = UserBelonging.NOT_BELONGING; +// VRE toAdd = new VRE(vreID,vreName, vreDescription, vreLogoURL, groupName, friendlyURL, belongs, getVREMembershipType(vreSite.getMembershipType())); + VRE toAdd= new VRE(vreName,vreDescription,vreID,friendlyURL,infraScope); +// if (GroupLocalServiceUtil.getGroup(vreID).getPublicLayoutsPageCount() > 0) { +// String publicURL = PREFIX_PUBLIC_URL+vreSite.getFriendlyURL(); +// toAdd.setPublicURL(publicURL); +// } +// if (currUser != null) { +// //check if the user belongs to it +// if (currUserGroups.contains(vreSite)) { +// toAdd.setUserBelonging(UserBelonging.BELONGING); +// } +// else if (checkPending(currUser.getUsername(), vreSite.getGroupId())) +// toAdd.setUserBelonging(UserBelonging.PENDING); +// } + toUpdate.add(toAdd); + } + } + } + } + } + + //sort the vres in the groups + for (VRECategory cat : toReturn.keySet()) { + ArrayList toSort = toReturn.get(cat); + Collections.sort(toSort); + } + return toReturn; + } + + + + + + private Group getSiteFromServletRequest(final HttpServletRequest request) + throws PortalException, SystemException { + String serverName = request.getServerName(); + log.debug("currentHost is " + serverName); + Group site = null; + List vHosts = VirtualHostLocalServiceUtil.getVirtualHosts(0, + VirtualHostLocalServiceUtil.getVirtualHostsCount()); + for (VirtualHost virtualHost : vHosts) { + log.debug("Found " + virtualHost.getHostname()); + if (virtualHost.getHostname().compareTo("localhost") != 0 && + virtualHost.getLayoutSetId() != 0 && + virtualHost.getHostname().compareTo(serverName) == 0) { + long layoutSetId = virtualHost.getLayoutSetId(); + site = LayoutSetLocalServiceUtil.getLayoutSet(layoutSetId).getGroup(); + log.debug("Found match! Your site is " + site.getName()); + return site; + } + } + return null; + } }