diff --git a/.classpath b/.classpath index ab97d04..3668b93 100644 --- a/.classpath +++ b/.classpath @@ -1,12 +1,16 @@ - + - + + + + + @@ -34,5 +38,5 @@ - + diff --git a/.project b/.project index 9969891..dc13cc9 100644 --- a/.project +++ b/.project @@ -55,5 +55,6 @@ org.eclipse.wst.common.project.facet.core.nature org.eclipse.wst.jsdt.core.jsNature com.google.gwt.eclipse.core.gwtNature + com.liferay.ide.core.liferayNature diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index c897cc3..7d5323a 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -4,6 +4,7 @@ + uses diff --git a/distro/changelog.xml b/distro/changelog.xml index 57f0dc5..8d9f2ec 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,7 @@ + + Shows only the virtual groups available in the Site it is deployed on + Ported to Liferay 6.2 diff --git a/pom.xml b/pom.xml index b62d9e5..ead9b7f 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ org.gcube.portlets.user my-vres war - 2.0.1-SNAPSHOT + 2.1.0-SNAPSHOT My VREs Portlet gCube My VREs Portlet shows only the VO and VREs a user is member of, divided by category. diff --git a/src/main/java/org/gcube/portlet/user/my_vres/server/MyVREsServiceImpl.java b/src/main/java/org/gcube/portlet/user/my_vres/server/MyVREsServiceImpl.java index b2dbafe..dc5d2db 100644 --- a/src/main/java/org/gcube/portlet/user/my_vres/server/MyVREsServiceImpl.java +++ b/src/main/java/org/gcube/portlet/user/my_vres/server/MyVREsServiceImpl.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; @@ -14,11 +15,13 @@ import org.gcube.common.portal.PortalContext; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portlet.user.my_vres.client.MyVREsService; import org.gcube.portlet.user.my_vres.shared.UserBelonging; -import org.gcube.portlet.user.my_vres.shared.VO; import org.gcube.portlet.user.my_vres.shared.VRE; import org.gcube.vomanagement.usermanagement.GroupManager; +import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault; +import org.gcube.vomanagement.usermanagement.exception.VirtualGroupNotExistingException; import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; +import org.gcube.vomanagement.usermanagement.model.CustomAttributeKeys; import org.gcube.vomanagement.usermanagement.model.GCubeGroup; import org.gcube.vomanagement.usermanagement.model.GCubeUser; import org.gcube.vomanagement.usermanagement.model.VirtualGroup; @@ -26,7 +29,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; +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.security.auth.PrincipalThreadLocal; +import com.liferay.portal.security.permission.PermissionChecker; +import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil; +import com.liferay.portal.security.permission.PermissionThreadLocal; +import com.liferay.portal.service.GroupLocalServiceUtil; +import com.liferay.portal.service.LayoutSetLocalServiceUtil; import com.liferay.portal.service.UserLocalServiceUtil; +import com.liferay.portal.service.VirtualHostLocalServiceUtil; /** * The server side implementation of the RPC service. @@ -93,15 +107,17 @@ public class MyVREsServiceImpl extends RemoteServiceServlet implements MyVREsSer GroupManager gm = new LiferayGroupManager(); LinkedHashMap> toReturn = new LinkedHashMap>(); - //before iterating the actual groups create the virtualGroups in the correct order - List virtualGroups = gm.getVirtualGroups(); - for (VirtualGroup vg : virtualGroups) { + + long currentSiteGroupId = getSiteFromServletRequest(getThreadLocalRequest()).getGroupId(); + List currentSiteVGroups = getVirtualGroups(currentSiteGroupId); + for (VirtualGroup vg : currentSiteVGroups) { String gName = vg.getName(); ArrayList toCreate = new ArrayList(); String cat = gName; toReturn.put(cat, toCreate); } - + + GCubeGroup rootGroupVO = gm.getRootVO(); try { _log.debug("root: " + rootGroupVO.getGroupName() ); @@ -242,6 +258,72 @@ public class MyVREsServiceImpl extends RemoteServiceServlet implements MyVREsSer return toReturn; } - + /** + * read the list of virtual groups the current site (i-marine, services etc. ) should show up + * @param actualGroupId + * @return he list of virtual groups the current site (i-marine, services etc. ) should show up + * @throws GroupRetrievalFault + * @throws VirtualGroupNotExistingException + */ + private List getVirtualGroups(long actualGroupId) throws GroupRetrievalFault, VirtualGroupNotExistingException { + List toReturn = new ArrayList(); + try { + long userId = LiferayUserManager.getAdmin().getUserId(); + PrincipalThreadLocal.setName(userId); + PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.create(UserLocalServiceUtil.getUser(userId)); + PermissionThreadLocal.setPermissionChecker(permissionChecker); + Group site = GroupLocalServiceUtil.getGroup(actualGroupId); + _log.debug("Set Thread Permission done, getVirtual Group of " + site.getName()); + if (site.getExpandoBridge().getAttribute(CustomAttributeKeys.VIRTUAL_GROUP.getKeyName()) == null || site.getExpandoBridge().getAttribute(CustomAttributeKeys.VIRTUAL_GROUP.getKeyName()).equals("")) { + String warningMessage = String.format("Attribute %s not initialized.", CustomAttributeKeys.VIRTUAL_GROUP.getKeyName()); + _log.warn(warningMessage); + throw new VirtualGroupNotExistingException(warningMessage); + } else { + String[] values = (String[]) site.getExpandoBridge().getAttribute(CustomAttributeKeys.VIRTUAL_GROUP.getKeyName()); + VirtualGroup toAdd = new VirtualGroup(); + if (values != null && values.length > 0) { + for (int i = 0; i < values.length; i++) { + toAdd = new VirtualGroup(); + String[] splits = values[i].split("\\|"); + toAdd.setName(splits[0]); + toAdd.setDescription(splits[1]); + toReturn.add(toAdd); + _log.debug("VirtualGroup selected found for " + site.getName() + " -> " + toAdd.getName()); + } + } else { + toAdd.setName("NoVirtualGroupAssigned"); + toAdd.setDescription("NoVirtualGroupDescription"); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return toReturn; + } + /** + * + * @param request + * @return the current Group instance based on the request + * @throws PortalException + * @throws SystemException + */ + 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; + } } \ No newline at end of file