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
+
+
+
+
+
+ ./
+ true
+
+
+
+ /${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
+
+
+
+ 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