diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..91f2707 --- /dev/null +++ b/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..ef75d66 --- /dev/null +++ b/.project @@ -0,0 +1,42 @@ + + + VREFolder-hook + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..b72a6a4 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..abdea9a --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..443e085 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..e6f7678 --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles=Liferay-v6.2-CE-(Tomcat-7)-(2) +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..af440cd --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..05c4f95 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/distro/LICENSE b/distro/LICENSE new file mode 100644 index 0000000..2d9616a --- /dev/null +++ b/distro/LICENSE @@ -0,0 +1 @@ +${gcube.license} \ No newline at end of file diff --git a/distro/README b/distro/README new file mode 100644 index 0000000..f3d87ac --- /dev/null +++ b/distro/README @@ -0,0 +1,63 @@ +The gCube System - ${name} +-------------------------------------------------- + +${description} + + +${gcube.description} + +${gcube.funding} + + +Version +-------------------------------------------------- + +${version} (${buildDate}) + +Please see the file named "changelog.xml" in this directory for the release notes. + + +Authors +-------------------------------------------------- + +* Massimiliano Assante (massimiliano.assante@isti.cnr.it), Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" - CNR, Pisa (Italy). + +Maintainers +----------- + +* Massimiliano Assante (massimiliano.assante@isti.cnr.it), Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" - CNR, Pisa (Italy). + +Download information +-------------------------------------------------- + +Source code is available from SVN: + ${scm.url} + +Binaries can be downloaded from the gCube website: + ${gcube.website} + + +Installation +-------------------------------------------------- + +Installation documentation is available on-line in the gCube Wiki: + ${gcube.wikiRoot}/gcube/index.php/GCube_Portal_Installation + +Documentation +-------------------------------------------------- + +Documentation is available on-line in the gCube Wiki: + ${gcube.wikiRoot}/gcube/index.php/GCube_Portal_Installation + +Support +-------------------------------------------------- + +Bugs and support requests can be reported in the gCube issue tracking tool: + ${gcube.issueTracking} + + +Licensing +-------------------------------------------------- + +This software is licensed under the terms you may find in the file named "LICENSE" in this directory. + diff --git a/distro/changelog.xml b/distro/changelog.xml new file mode 100644 index 0000000..2b49370 --- /dev/null +++ b/distro/changelog.xml @@ -0,0 +1,5 @@ + + + First Release + + \ No newline at end of file diff --git a/distro/descriptor.xml b/distro/descriptor.xml new file mode 100644 index 0000000..1f827ac --- /dev/null +++ b/distro/descriptor.xml @@ -0,0 +1,41 @@ + + servicearchive + + tar.gz + + / + + + ${distroDirectory} + / + true + + README + LICENSE + changelog.xml + + 755 + true + + + target/apidocs + /${artifactId}/doc/api + true + 755 + + + + + ${distroDirectory}/profile.xml + ./ + true + + + target/${build.finalName}.war + /${artifactId} + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f7f8047 --- /dev/null +++ b/pom.xml @@ -0,0 +1,134 @@ + + + 4.0.0 + + maven-parent + org.gcube.tools + 1.0.0 + + + org.gcube.portal.plugins + VREFolder-hook + VREFolder-hook Hook + 6.3.0-SNAPSHOT + war + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + + + org.gcube.common + home-library-jcr + provided + + + org.gcube.dvos + usermanagement-core + provided + [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + + + org.gcube.common.portal + portal-manager + [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) + + + org.gcube.common + home-library + provided + + + org.slf4j + slf4j-log4j12 + + + org.slf4j + slf4j-api + + + com.liferay.portal + portal-service + ${liferay.version} + provided + + + com.liferay.portal + util-java + ${liferay.version} + provided + + + javax.portlet + portlet-api + 2.0 + provided + + + javax.servlet + servlet-api + 2.4 + provided + + + javax.servlet.jsp + jsp-api + 2.0 + provided + + + + + + com.liferay.maven.plugins + liferay-maven-plugin + ${liferay.maven.plugin.version} + + ${liferay.auto.deploy.dir} + ${liferay.app.server.deploy.dir} + ${liferay.app.server.lib.global.dir} + ${liferay.app.server.portal.dir} + ${liferay.version} + hook + + + + maven-compiler-plugin + 2.5 + + UTF-8 + 1.7 + 1.7 + + + + maven-resources-plugin + 2.5 + + UTF-8 + + + + + + + Liferay-v6.2-CE-(Tomcat-7)-(2) + + 6.2.5 + 6.2.5 + /Users/massi/portal/liferay-portal-6.2-ce-ga6/deploy + /Users/massi/portal/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/webapps + /Users/massi/portal/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/lib/ext + /Users/massi/portal/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/webapps/ROOT + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portal/plugins/GCubeHookUserLocalService.java b/src/main/java/org/gcube/portal/plugins/GCubeHookUserLocalService.java new file mode 100644 index 0000000..eafcb18 --- /dev/null +++ b/src/main/java/org/gcube/portal/plugins/GCubeHookUserLocalService.java @@ -0,0 +1,173 @@ +package org.gcube.portal.plugins; + +import org.gcube.common.homelibrary.home.HomeLibrary; +import org.gcube.common.portal.PortalContext; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.vomanagement.usermanagement.GroupManager; +import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; +import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.model.User; +import com.liferay.portal.service.UserLocalService; +import com.liferay.portal.service.UserLocalServiceWrapper; +/** + * + * @author Massimiliano Assante, CNR-ISTI + * + */ +public class GCubeHookUserLocalService extends UserLocalServiceWrapper { + /** + * logger + */ + private static final Logger _log = LoggerFactory.getLogger(GCubeHookUserLocalService.class); + /* (non-Java-doc) + * @see com.liferay.portal.service.UserLocalServiceWrapper#UserLocalServiceWrapper(UserLocalService userLocalService) + */ + public GCubeHookUserLocalService(UserLocalService userLocalService) { + super(userLocalService); + System.out.println("GCubeHookUserLocalService hook is UP & Listening ..."); + } + /** USERS ADD TO GROUP **/ + @Override + public void addGroupUser(long groupId, long userId) throws com.liferay.portal.kernel.exception.SystemException { + super.addGroupUser(groupId, userId); + addUserToHLVREFolder(groupId, userId); + } + @Override + public void addGroupUser(long groupId, com.liferay.portal.model.User user) throws com.liferay.portal.kernel.exception.SystemException { + super.addGroupUser(groupId, user.getUserId()); + addUserToHLVREFolder(groupId, user.getUserId()); + } + @Override + public void addGroupUsers(long groupId, long[] userIds) throws com.liferay.portal.kernel.exception.PortalException, com.liferay.portal.kernel.exception.SystemException { + super.addGroupUsers(groupId, userIds); + addUsersToHLVREFolder(groupId, userIds); + } + @Override + public void addGroupUsers(long groupId, java.util.List Users) throws com.liferay.portal.kernel.exception.PortalException, com.liferay.portal.kernel.exception.SystemException { + super.addGroupUsers(groupId, Users); + for (User user : Users) { + addUserToHLVREFolder(groupId, user.getUserId()); + } + } + + + + /** USERS REMOVAL FROM GROUP **/ + /** + * this is the method used from Liferay Sites Membership Admin + */ + @Override + public void unsetGroupUsers(long groupId, long[] userIds, com.liferay.portal.service.ServiceContext serviceContext) throws com.liferay.portal.kernel.exception.PortalException, SystemException { + super.unsetGroupUsers(groupId, userIds, serviceContext); + removeUsersFromHLVREFolder(groupId, userIds); + } + + @Override + public void deleteGroupUser(long groupId, long userId) throws com.liferay.portal.kernel.exception.SystemException { + super.deleteGroupUser(groupId, userId); + removeUserFromHLVREFolder(groupId, userId); + } + @Override + public void deleteGroupUser(long groupId, com.liferay.portal.model.User user) throws com.liferay.portal.kernel.exception.SystemException { + super.deleteGroupUser(groupId, user); + System.out.println("Non ci entra proprio deleteGroupUser"); + removeUserFromHLVREFolder(groupId, user.getUserId()); + } + @Override + public void deleteGroupUsers(long groupId, long[] userIds) throws com.liferay.portal.kernel.exception.SystemException { + super.deleteGroupUsers(groupId, userIds); + System.out.println("Non ci entra proprio"); + removeUsersFromHLVREFolder(groupId, userIds); + } + @Override + public void deleteGroupUsers(long groupId, java.util.List Users) throws com.liferay.portal.kernel.exception.SystemException { + super.deleteGroupUsers(groupId, Users); + System.out.println("Non ci entra proprio"); + for (User user : Users) { + removeUserFromHLVREFolder(groupId, user.getUserId()); + } + } + + // + /** + * + * @param groupId + * @param userId + */ + private void addUsersToHLVREFolder(long groupId, long[] userId) { + for (int i = 0; i < userId.length; i++) { + addUserToHLVREFolder(groupId, userId[i]); + } + } + /** + * + * @param groupId + * @param userId + */ + private void addUserToHLVREFolder(long groupId, long userId) { + _log.debug("GCube VRE Folder hook addGroupUser intercepted, trying to add user to VRE Folder"); + GroupManager gm = new LiferayGroupManager(); + String currScope = ScopeProvider.instance.get(); + String scopeToset = "/"+PortalContext.getConfiguration().getInfrastructureName(); + ScopeProvider.instance.set(scopeToset); + try { + if (gm.isVRE(groupId)) { + _log.debug("Group is a VRE, proceeding with association ..."); + String scope = gm.getInfrastructureScope(groupId); + org.gcube.vomanagement.usermanagement.UserManager um = new LiferayUserManager(); + String username = um.getUserById(userId).getUsername(); + org.gcube.common.homelibrary.home.workspace.usermanager.UserManager hlUm = HomeLibrary.getHomeManagerFactory().getUserManager(); + hlUm.associateUserToGroup(scope, username); + } else { + _log.debug("Group is not a VRE, SKIP adding"); + } + } + catch (Exception e) { + e.printStackTrace(); + } + ScopeProvider.instance.set(currScope); + } + /** + * + * @param groupId + * @param userId + */ + private void removeUsersFromHLVREFolder(long groupId, long[] userId) { + for (int i = 0; i < userId.length; i++) { + removeUserFromHLVREFolder(groupId, userId[i]); + } + } + /** + * + * @param groupId + * @param userId + */ + private void removeUserFromHLVREFolder(long groupId, long userId) { + _log.debug("GCube VRE Folder hook removeUserFromHLVREFolder intercepted, trying to remove user from VRE Folder"); + GroupManager gm = new LiferayGroupManager(); + String currScope = ScopeProvider.instance.get(); + String scopeToset = "/"+PortalContext.getConfiguration().getInfrastructureName(); + ScopeProvider.instance.set(scopeToset); + try { + if (gm.isVRE(groupId)) { + _log.debug("Group is a VRE, proceeding with removal ..."); + String scope = gm.getInfrastructureScope(groupId); + org.gcube.vomanagement.usermanagement.UserManager um = new LiferayUserManager(); + String username = um.getUserById(userId).getUsername(); + org.gcube.common.homelibrary.home.workspace.usermanager.UserManager hlUm = HomeLibrary.getHomeManagerFactory().getUserManager(); + hlUm.removeUserFromGroup(scope, username); + } else { + _log.debug("Group is not a VRE, SKIP removal"); + } + } + catch (Exception e) { + e.printStackTrace(); + } + ScopeProvider.instance.set(currScope); + } + +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-hook.xml b/src/main/webapp/WEB-INF/liferay-hook.xml new file mode 100644 index 0000000..4b979d4 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-hook.xml @@ -0,0 +1,13 @@ + + + + + + + com.liferay.portal.service.UserLocalService + + + org.gcube.portal.plugins.GCubeHookUserLocalService + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-plugin-package.properties b/src/main/webapp/WEB-INF/liferay-plugin-package.properties new file mode 100644 index 0000000..169a8a1 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-plugin-package.properties @@ -0,0 +1,9 @@ +name=VREFolder-hook +module-group-id=liferay +module-incremental-version=1 +tags= +short-description= +change-log= +page-url=http://www.liferay.com +author=Liferay, Inc. +licenses=LGPL \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..7d8c082 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file