Extracted hook specific project: event-publisher-hook

This commit is contained in:
Mauro Mugnaini 2020-07-21 18:33:03 +02:00
parent f3917353fa
commit a9d9dfb649
30 changed files with 51 additions and 1049 deletions

View File

@ -14,7 +14,6 @@
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes> <attributes>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.liferay.ide.eclipse.server.tomcat.runtimeClasspathProvider/Liferay v6.2 (Tomcat 7)"> <classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.liferay.ide.eclipse.server.tomcat.runtimeClasspathProvider/Liferay v6.2 (Tomcat 7)">

View File

@ -28,7 +28,6 @@
</buildSpec> </buildSpec>
<natures> <natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature> <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature> <nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature>

View File

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="event-publisher-portal-hook"> <wb-module deploy-name="event-publisher-portal-hook">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<property name="java-output-path" value="/event-publisher-portal/target/classes"/> <property name="java-output-path" value="/event-publisher-portal/target/classes"/>

View File

@ -2,8 +2,6 @@
<faceted-project> <faceted-project>
<runtime name="Liferay v6.2 (Tomcat 7)"/> <runtime name="Liferay v6.2 (Tomcat 7)"/>
<fixed facet="wst.jsdt.web"/> <fixed facet="wst.jsdt.web"/>
<installed facet="jst.web" version="2.4"/>
<installed facet="liferay.hook" version="6.0"/>
<installed facet="wst.jsdt.web" version="1.0"/> <installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.8"/> <installed facet="java" version="1.8"/>
</faceted-project> </faceted-project>

View File

@ -1,6 +1,6 @@
# Changelog for "event-publisher-portal" # Changelog for "event-publisher-portal"
## [v1.0.0-SNAPSHOT] ## [v1.0.1-SNAPSHOT]
- First release (#19461) - First release (#19461)

View File

@ -1,6 +1,6 @@
# Event Publisher Portal # Event Publisher Portal
**Event Publisher Portal** is a [Liferay](https://liferay.com) 6.2 hook that provides the portal related implementation classes for event publishing and some portal's events and model listeners that push events to a broker endpoint. **Event Publisher Portal** provides the portal ([Liferay](https://liferay.com)) related implementation classes for event publishing to a broker endpoint.
## Structure of the project ## Structure of the project
@ -13,7 +13,7 @@ The source code is present in `src` folder.
## Documentation ## Documentation
To build the hook WAR file it is sufficient to type To build the library JAR file it is sufficient to type
mvn clean package mvn clean package

46
pom.xml
View File

@ -10,20 +10,8 @@
</parent> </parent>
<groupId>org.gcube.portal</groupId> <groupId>org.gcube.portal</groupId>
<artifactId>event-publisher-portal</artifactId> <artifactId>event-publisher-portal</artifactId>
<packaging>war</packaging> <packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version> <version>1.0.1-SNAPSHOT</version>
<properties>
<liferay.version>6.2.5</liferay.version>
<liferay.maven.plugin.version>6.2.10.12</liferay.maven.plugin.version>
<liferay.auto.deploy.dir>/Users/themaxx/Development/Server/liferay-portal-6.2-ce-ga6/deploy
</liferay.auto.deploy.dir>
<liferay.app.server.deploy.dir>/Users/themaxx/Development/Server/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/webapps
</liferay.app.server.deploy.dir>
<liferay.app.server.lib.global.dir>/Users/themaxx/Development/Server/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/lib/ext
</liferay.app.server.lib.global.dir>
<liferay.app.server.portal.dir>/Users/themaxx/Development/Server/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/webapps/ROOT
</liferay.app.server.portal.dir>
</properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
@ -37,19 +25,6 @@
</dependencyManagement> </dependencyManagement>
<build> <build>
<plugins> <plugins>
<plugin>
<groupId>com.liferay.maven.plugins</groupId>
<artifactId>liferay-maven-plugin</artifactId>
<version>${liferay.maven.plugin.version}</version>
<configuration>
<autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir>
<appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir>
<appServerLibGlobalDir>${liferay.app.server.lib.global.dir}</appServerLibGlobalDir>
<appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir>
<liferayVersion>${liferay.version}</liferayVersion>
<pluginType>hook</pluginType>
</configuration>
</plugin>
<plugin> <plugin>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <configuration>
@ -58,13 +33,6 @@
<target>${maven.compiler.target}</target> <target>${maven.compiler.target}</target>
</configuration> </configuration>
</plugin> </plugin>
<!-- <plugin> -->
<!-- <artifactId>maven-resources-plugin</artifactId> -->
<!-- <configuration> -->
<!-- <encoding>UTF-8</encoding> -->
<!-- </configuration> -->
<!-- <version>2.5</version> -->
<!-- </plugin> -->
</plugins> </plugins>
</build> </build>
<dependencies> <dependencies>
@ -116,11 +84,11 @@
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <!-- <dependency> -->
<groupId>org.slf4j</groupId> <!-- <groupId>org.slf4j</groupId> -->
<artifactId>slf4j-log4j12</artifactId> <!-- <artifactId>slf4j-log4j12</artifactId> -->
<scope>provided</scope> <!-- <scope>provided</scope> -->
</dependency> <!-- </dependency> -->
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> <artifactId>javax.servlet-api</artifactId>

View File

@ -31,6 +31,7 @@ public abstract class AbstractLR62EventPublisher extends AbstractEventPublisher
} else { } else {
OpenIdConnectConfiguration openIdConnectConfiguration = LiferayOpenIdConnectConfiguration OpenIdConnectConfiguration openIdConnectConfiguration = LiferayOpenIdConnectConfiguration
.getConfiguration(); .getConfiguration();
EventPublisherConfiguration eventPublisherConfiguration = EventPublisherConfiguration.getConfiguration(); EventPublisherConfiguration eventPublisherConfiguration = EventPublisherConfiguration.getConfiguration();
return new HTTPWithUMAAuthEventSender(eventPublisherConfiguration.getEventPublisherURL(), return new HTTPWithUMAAuthEventSender(eventPublisherConfiguration.getEventPublisherURL(),
openIdConnectConfiguration.getPortalClientId(), openIdConnectConfiguration.getPortalClientSecret(), openIdConnectConfiguration.getPortalClientId(), openIdConnectConfiguration.getPortalClientSecret(),

View File

@ -1,15 +1,27 @@
package org.gcube.portal.event.publisher.lr62; package org.gcube.portal.event.publisher.lr62;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map; import java.util.Map;
import org.gcube.event.publisher.Event; import org.gcube.event.publisher.Event;
import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.RoleManager;
import org.gcube.vomanagement.usermanagement.UserManager; import org.gcube.vomanagement.usermanagement.UserManager;
import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault;
import org.gcube.vomanagement.usermanagement.exception.RoleRetrievalFault;
import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException;
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault; import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager;
import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.Role;
import com.liferay.portal.model.User; import com.liferay.portal.model.User;
public class PortalEvent extends Event { public class PortalEvent extends Event {
@ -19,13 +31,14 @@ public class PortalEvent extends Event {
protected static final Log log = LogFactoryUtil.getLog(PortalEvent.class); protected static final Log log = LogFactoryUtil.getLog(PortalEvent.class);
protected static final UserManager USER_MANAGER = new LiferayUserManager(); protected static final UserManager USER_MANAGER = new LiferayUserManager();
protected static final GroupManager GROUP_MANAGER = new LiferayGroupManager();
protected static final RoleManager ROLE_MANAGER = new LiferayRoleManager();
public static final String TYPE = "portal"; public static final String TYPE = "portal";
public static final String USER_ENTRY = "user"; public static final String USER_ENTRY = "user";
public static final String GROUP_ENTRY = "group"; public static final String GROUP_ENTRY = "group";
public static final String ROLE_ENTRY = "role"; public static final String ROLE_ENTRY = "role";
public PortalEvent(String name) { public PortalEvent(String name) {
this(name, null); this(name, null);
} }
@ -58,6 +71,19 @@ public class PortalEvent extends Event {
return (String) get(GROUP_ENTRY); return (String) get(GROUP_ENTRY);
} }
public void setGroup(Group group) throws PortalException, SystemException {
setGroup(getGroupIdentifier(group));
}
protected String getGroupIdentifier(Group group) throws PortalException, SystemException {
try {
return URLEncoder.encode(GROUP_MANAGER.getInfrastructureScope(group.getGroupId()), "UTF-8");
} catch (UnsupportedEncodingException | UserManagementSystemException | GroupRetrievalFault e) {
log.error("Cannot get URL encoded infrastrucure scope for group: " + group, e);
return null;
}
}
public void setRole(String role) { public void setRole(String role) {
set(ROLE_ENTRY, role); set(ROLE_ENTRY, role);
} }
@ -66,4 +92,17 @@ public class PortalEvent extends Event {
return (String) get(ROLE_ENTRY); return (String) get(ROLE_ENTRY);
} }
public void setRole(Role role) throws PortalException, SystemException {
setRole(getRoleIdentifier(role));
}
protected String getRoleIdentifier(Role role) throws PortalException, SystemException {
try {
return ROLE_MANAGER.getRole(role.getRoleId()).getRoleName();
} catch (UserManagementSystemException | RoleRetrievalFault e) {
log.error("Cannot get gCube role for role: " + role, e);
return null;
}
}
} }

View File

@ -1,50 +0,0 @@
package org.gcube.portal.event.publisher.lr62.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.gcube.portal.event.publisher.lr62.PortalEvent;
import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException;
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
import com.liferay.portal.model.User;
public class ActionEvent extends PortalEvent {
private static final long serialVersionUID = -256209939036712171L;
public static final String LOGIN_NAME = "login";
public static final String LOGOUT_NAME = "logout";
private ActionEvent(String name, User user) throws UserManagementSystemException, UserRetrievalFault {
super(name);
setUser(user);
}
public static ActionEvent newLoginEvent(HttpServletRequest request, HttpServletResponse response) {
User user = (User) request.getSession(false).getAttribute("USER");
if (log.isDebugEnabled()) {
log.debug("Sending login event for user: " + user.getScreenName());
}
try {
return new ActionEvent(LOGIN_NAME, user);
} catch (UserManagementSystemException | UserRetrievalFault e) {
log.error("Cannot create action event for user: " + user, e);
return null;
}
}
public static ActionEvent newLogoutEvent(HttpServletRequest request, HttpServletResponse response) {
User user = (User) request.getSession(false).getAttribute("USER");
if (log.isDebugEnabled()) {
log.debug("Sending logut event for user: " + user.getScreenName());
}
try {
return new ActionEvent(LOGOUT_NAME, user);
} catch (UserManagementSystemException | UserRetrievalFault e) {
log.error("Cannot create action event for user: " + user, e);
return null;
}
}
}

View File

@ -1,11 +0,0 @@
package org.gcube.portal.event.publisher.lr62.action;
import org.gcube.portal.event.publisher.lr62.AbstractLR62EventPublisher;
public class ActionEventPublisher extends AbstractLR62EventPublisher {
public ActionEventPublisher() {
super();
}
}

View File

@ -1,32 +0,0 @@
package org.gcube.portal.event.publisher.lr62.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.gcube.event.publisher.EventPublisher;
import com.liferay.portal.kernel.events.Action;
import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
public class PostLoginAction extends Action {
protected static final Log log = LogFactoryUtil.getLog(PostLoginAction.class);
private EventPublisher eventPublisher;
public PostLoginAction() {
eventPublisher = new ActionEventPublisher();
}
@Override
public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException {
ActionEvent actionEvent = ActionEvent.newLoginEvent(request, response);
if (log.isDebugEnabled()) {
log.debug("ActionEvent is: " + actionEvent);
}
eventPublisher.publish(actionEvent);
}
}

View File

@ -1,32 +0,0 @@
package org.gcube.portal.event.publisher.lr62.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.gcube.event.publisher.EventPublisher;
import com.liferay.portal.kernel.events.Action;
import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
public class PreLogoutAction extends Action {
protected static final Log log = LogFactoryUtil.getLog(PreLogoutAction.class);
private EventPublisher eventPublisher;
public PreLogoutAction() {
eventPublisher = new ActionEventPublisher();
}
@Override
public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException {
ActionEvent actionEvent = ActionEvent.newLogoutEvent(request, response);
if (log.isDebugEnabled()) {
log.debug("ActionEvent is: " + actionEvent);
}
eventPublisher.publish(actionEvent);
}
}

View File

@ -1,38 +0,0 @@
package org.gcube.portal.event.publisher.lr62.action;
import org.gcube.event.publisher.EventPublisher;
import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.events.SimpleAction;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
public class ShutdownAction extends SimpleAction implements Runnable {
protected static final Log log = LogFactoryUtil.getLog(ShutdownAction.class);
private EventPublisher eventPublisher;
public ShutdownAction() {
eventPublisher = new ActionEventPublisher();
// Runtime.getRuntime().addShutdownHook(new Thread(this));
}
@Override
public void run(String[] ids) throws ActionException {
if (log.isInfoEnabled()) {
log.info("Sending shutdown event");
}
eventPublisher.publish(SimpleActionEvent.newShutdownEvent(ids));
}
@Override
public void run() {
try {
this.run(null);
} catch (ActionException e) {
// Left intentionally as it is
e.printStackTrace();
}
}
}

View File

@ -1,31 +0,0 @@
package org.gcube.portal.event.publisher.lr62.action;
import org.gcube.portal.event.publisher.lr62.PortalEvent;
public class SimpleActionEvent extends PortalEvent {
private static final long serialVersionUID = -256209939036712171L;
public static final String STARTUP_NAME = "startup";
public static final String SHUTDOWN_NAME = "shutdown";
public static final String IDS_ENTRY = "ids";
private SimpleActionEvent(String name, String[] ids) {
super(name);
setData(ids);
}
public static SimpleActionEvent newStartupEvent(String[] ids) {
return new SimpleActionEvent(STARTUP_NAME, ids);
}
public static SimpleActionEvent newShutdownEvent(String[] ids) {
return new SimpleActionEvent(SHUTDOWN_NAME, ids);
}
public void setData(String[] ids) {
set(IDS_ENTRY, String.join(", ", ids));
}
}

View File

@ -1,29 +0,0 @@
package org.gcube.portal.event.publisher.lr62.action;
import org.gcube.event.publisher.EventPublisher;
import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.events.SimpleAction;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
public class StartupAction extends SimpleAction {
protected static final Log log = LogFactoryUtil.getLog(StartupAction.class);
private EventPublisher eventPublisher;
public StartupAction() {
eventPublisher = new ActionEventPublisher();
}
@Override
public void run(String[] ids) throws ActionException {
SimpleActionEvent event = SimpleActionEvent.newStartupEvent(ids);
if (log.isInfoEnabled()) {
log.info("Sending startup event: " + event);
}
eventPublisher.publish(event);
}
}

View File

@ -1,16 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import org.gcube.portal.event.publisher.lr62.AbstractLR62EventPublisher;
import com.liferay.portal.model.BaseModel;
import com.liferay.portal.model.ModelListener;
public abstract class AbstractEventPublisherBaseModelListener<T extends BaseModel<T>>
extends AbstractLR62EventPublisher
implements ModelListener<T> {
public AbstractEventPublisherBaseModelListener() {
super();
}
}

View File

@ -1,37 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.model.Group;
public class GroupEvent extends PortalModelListenerEvent<Group> {
private static final long serialVersionUID = 3939268094440017646L;
public static final String CREATED_NAME = "group_created";
public static final String DELETED_NAME = "group_deleted";
private GroupEvent(String name, Group group) throws PortalException, SystemException {
super(name, group);
setGroup(group);
}
public static GroupEvent newCreatedEvent(Group group) {
try {
return new GroupEvent(CREATED_NAME, group);
} catch (PortalException | SystemException e) {
log.error("Cannot create event from Group model object", e);
return null;
}
}
public static GroupEvent newDeletedEvent(Group group) {
try {
return new GroupEvent(DELETED_NAME, group);
} catch (PortalException | SystemException e) {
log.error("Cannot create event from Group model object", e);
return null;
}
}
}

View File

@ -1,83 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import com.liferay.portal.ModelListenerException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.Group;
public class GroupEventPublisher extends AbstractEventPublisherBaseModelListener<Group> {
protected static final Log log = LogFactoryUtil.getLog(GroupEventPublisher.class);
public GroupEventPublisher() {
super();
log.info("New GroupEventPublisher instance created");
}
@Override
public void onAfterCreate(Group group) throws ModelListenerException {
if (group.isSite()) {
log.info("Created a site Group");
GroupEvent groupEvent = GroupEvent.newCreatedEvent(group);
if (log.isTraceEnabled()) {
log.trace("Group event is: " + groupEvent);
}
publish(groupEvent);
} else if (log.isDebugEnabled()) {
log.debug("Created a non-site Group");
}
}
@Override
public void onBeforeRemove(Group group) throws ModelListenerException {
if (group.isSite()) {
log.info("Deleted a site Group");
GroupEvent groupEvent = GroupEvent.newDeletedEvent(group);
if (log.isDebugEnabled()) {
log.debug("Group event is: " + groupEvent);
}
publish(groupEvent);
} else if (log.isDebugEnabled()) {
log.debug("Deleted a non-site Group");
}
}
/* Uninteresting model events */
@Override
public void onAfterRemove(Group group) throws ModelListenerException {
}
@Override
public void onAfterAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onAfterRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onAfterUpdate(Group group) throws ModelListenerException {
}
@Override
public void onBeforeAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onBeforeCreate(Group group) throws ModelListenerException {
}
@Override
public void onBeforeRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onBeforeUpdate(Group group) throws ModelListenerException {
}
}

View File

@ -1,88 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import org.gcube.portal.event.publisher.lr62.PortalEvent;
import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.RoleManager;
import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault;
import org.gcube.vomanagement.usermanagement.exception.RoleRetrievalFault;
import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException;
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.model.BaseModel;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.Role;
import com.liferay.portal.model.User;
public class PortalModelListenerEvent<T extends BaseModel<T>> extends PortalEvent {
private static final long serialVersionUID = -9062395669075373612L;
public static final String MODELCLASSNAME_ENTRY = "model-class-name";
protected static final GroupManager GROUP_MANAGER = new LiferayGroupManager();
protected static final RoleManager ROLE_MANAGER = new LiferayRoleManager();
public PortalModelListenerEvent(String name, T baseModel) {
super(name);
setModelClassName(baseModel.getModelClassName());
}
public PortalModelListenerEvent(String name, User user, T baseModel)
throws UserManagementSystemException, UserRetrievalFault {
super(name);
setUser(user);
setModelClassName(baseModel.getModelClassName());
}
public PortalModelListenerEvent(String name, Map<String, String> data, User user, T baseModel)
throws UserManagementSystemException, UserRetrievalFault {
super(name, data);
setUser(user);
setModelClassName(baseModel.getModelClassName());
}
public void setGroup(Group group) throws PortalException, SystemException {
setGroup(getGroupIdentifier(group));
}
protected String getGroupIdentifier(Group group) throws PortalException, SystemException {
try {
return URLEncoder.encode(GROUP_MANAGER.getInfrastructureScope(group.getGroupId()), "UTF-8");
} catch (UnsupportedEncodingException | UserManagementSystemException | GroupRetrievalFault e) {
log.error("Cannot get URL encoded infrastrucure scope for group: " + group, e);
return null;
}
}
public void setRole(Role role) throws PortalException, SystemException {
setRole(getRoleIdentifier(role));
}
protected String getRoleIdentifier(Role role) throws PortalException, SystemException {
try {
return ROLE_MANAGER.getRole(role.getRoleId()).getRoleName();
} catch (UserManagementSystemException | RoleRetrievalFault e) {
log.error("Cannot get gCube role for role: " + role, e);
return null;
}
}
public void setModelClassName(String group) {
set(MODELCLASSNAME_ENTRY, group);
}
public String getModelClassName() {
return (String) get(MODELCLASSNAME_ENTRY);
}
}

View File

@ -1,69 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException;
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
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.User;
public class UserEvent extends PortalModelListenerEvent<User> {
private static final long serialVersionUID = 3939268094440017646L;
public static final String CREATED_NAME = "user_created";
public static final String DELETED_NAME = "user_deleted";
public static final String UG_CREATED_NAME = "user-group_created";
public static final String UG_DELETED_NAME = "user-group_deleted";
private UserEvent(String name, User user) throws UserManagementSystemException, UserRetrievalFault {
super(name, user, user);
}
private UserEvent(String name, User user, Group group)
throws PortalException, SystemException, UserManagementSystemException, UserRetrievalFault {
this(name, user);
setGroup(group);
}
public static UserEvent newCreatedEvent(User user) {
try {
return new UserEvent(CREATED_NAME, user);
} catch (UserManagementSystemException | UserRetrievalFault e) {
log.error("Cannot create event from User model object", e);
return null;
}
}
public static UserEvent newDeletedEvent(User user) {
try {
return new UserEvent(DELETED_NAME, user);
} catch (UserManagementSystemException | UserRetrievalFault e) {
log.error("Cannot create event from User model object", e);
return null;
}
}
public static UserEvent newCreatedEvent(User user, Group group) {
try {
return new UserEvent(UG_CREATED_NAME, user, group);
} catch (PortalException | SystemException | UserManagementSystemException | UserRetrievalFault e) {
log.error("Cannot create event from one model object", e);
return null;
}
}
public static UserEvent newDeletedEvent(User user, Group group) {
try {
return new UserEvent(UG_DELETED_NAME, user, group);
} catch (PortalException | SystemException | UserManagementSystemException | UserRetrievalFault e) {
log.error("Cannot create event from one model object", e);
return null;
}
}
}

View File

@ -1,154 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import com.liferay.portal.ModelListenerException;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.User;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.service.UserLocalServiceUtil;
public class UserEventPublisher extends AbstractEventPublisherBaseModelListener<User> {
protected static final Log log = LogFactoryUtil.getLog(UserEventPublisher.class);
public UserEventPublisher() {
super();
log.info("New UserEventPublisher instance created");
}
@Override
public void onAfterCreate(User user) throws ModelListenerException {
log.info("New user created");
UserEvent userEvent = UserEvent.newCreatedEvent(user);
if (log.isTraceEnabled()) {
log.trace("User event is: " + userEvent);
}
publish(userEvent);
}
@Override
public void onBeforeRemove(User user) throws ModelListenerException {
log.info("User removed");
UserEvent userEvent = UserEvent.newDeletedEvent(user);
if (log.isTraceEnabled()) {
log.trace("User event is: " + userEvent);
}
publish(userEvent);
}
@Override
public void onAfterAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
if (Group.class.getName().equals(associationClassName)) {
log.info("User has been associated to a group");
User user = getUser((Long) classPK);
Group group = getGroup((Long) associationClassPK);
if (user != null && group != null) {
if (group.isSite()) {
if (log.isDebugEnabled()) {
log.debug("Target group is a site: " + group.getName());
}
UserEvent userEvent = UserEvent.newCreatedEvent(user, group);
if (log.isTraceEnabled()) {
log.trace("User event is: " + userEvent);
}
publish(userEvent);
} else if (log.isDebugEnabled()) {
log.debug("Target group is not a site");
}
}
} else {
if (log.isDebugEnabled()) {
log.debug("Uninteresting association with: " + associationClassName);
}
}
}
@Override
public void onBeforeRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
if (Group.class.getName().equals(associationClassName)) {
log.info("User has been associated to a group");
User user = getUser((Long) classPK);
Group group = getGroup((Long) associationClassPK);
if (user != null && group != null) {
if (group.isSite()) {
if (log.isDebugEnabled()) {
log.debug("Target group is a site: " + group.getName());
}
UserEvent userEvent = UserEvent.newDeletedEvent(user, group);
if (log.isTraceEnabled()) {
log.trace("User event is: " + userEvent);
}
publish(userEvent);
} else if (log.isDebugEnabled()) {
log.debug("Target group is not a site");
}
}
} else {
if (log.isDebugEnabled()) {
log.debug("Uninteresting association removal with: " + associationClassName);
}
}
}
protected User getUser(Long userPK) {
User user = null;
try {
if (log.isTraceEnabled()) {
log.trace("Getting user object idetified by pk: " + userPK);
}
user = UserLocalServiceUtil.getUser(userPK);
} catch (PortalException | SystemException e) {
logger.error("Cannot get user with pk: " + userPK, e);
}
return user;
}
protected Group getGroup(Long groupPK) {
Group group = null;
try {
if (log.isTraceEnabled()) {
log.trace("Getting group object idetified by pk: " + groupPK);
}
group = GroupLocalServiceUtil.getGroup((Long) groupPK);
} catch (PortalException | SystemException e) {
logger.error("Cannot get group with pk: " + groupPK, e);
}
return group;
}
/* Uninteresting model events */
@Override
public void onAfterRemove(User user) throws ModelListenerException {
}
@Override
public void onAfterRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onAfterUpdate(User user) throws ModelListenerException {
}
@Override
public void onBeforeAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onBeforeCreate(User user) throws ModelListenerException {
}
@Override
public void onBeforeUpdate(User user) throws ModelListenerException {
}
}

View File

@ -1,75 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import com.liferay.portal.ModelListenerException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.UserGroup;
public class UserGroupEventPublisher extends AbstractEventPublisherBaseModelListener<UserGroup> {
protected static final Log log = LogFactoryUtil.getLog(UserGroupEventPublisher.class);
public UserGroupEventPublisher() {
super();
log.info("New UserGroupEventPublisher instance created");
}
@Override
public void onAfterCreate(UserGroup userGroup) throws ModelListenerException {
log.info("onAfterCreate");
}
@Override
public void onBeforeRemove(UserGroup userGroup) throws ModelListenerException {
log.info("onBeforeRemove");
}
@Override
public void onAfterAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
log.info("onAfterAddAssociation");
}
@Override
public void onAfterRemove(UserGroup userGroupRole) throws ModelListenerException {
log.info("onAfterRemove");
}
@Override
public void onAfterRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
log.info("onAfterRemoveAssociation");
}
@Override
public void onAfterUpdate(UserGroup userGroupRole) throws ModelListenerException {
log.info("onAfterUpdate");
}
@Override
public void onBeforeAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
log.info("onBeforeAddAssociation");
}
@Override
public void onBeforeCreate(UserGroup userGroupRole) throws ModelListenerException {
log.info("onBeforeCreate");
}
@Override
public void onBeforeRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
log.info("onBeforeRemoveAssociation");
}
@Override
public void onBeforeUpdate(UserGroup userGroupRole) throws ModelListenerException {
log.info("onBeforeUpdate");
}
}

View File

@ -1,75 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import com.liferay.portal.ModelListenerException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.UserGroupGroupRole;
public class UserGroupGroupRoleEventPublisher extends AbstractEventPublisherBaseModelListener<UserGroupGroupRole> {
protected static final Log log = LogFactoryUtil.getLog(UserGroupGroupRoleEventPublisher.class);
public UserGroupGroupRoleEventPublisher() {
super();
log.info("New UserGroupGroupRoleEventPublisher instance created");
}
@Override
public void onAfterCreate(UserGroupGroupRole userGroupGroupRole) throws ModelListenerException {
log.info("onAfterCreate");
}
@Override
public void onBeforeRemove(UserGroupGroupRole userGroupGroupRole) throws ModelListenerException {
log.info("onBeforeRemove");
}
@Override
public void onAfterAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
log.info("onAfterAddAssociation: "+ associationClassName);
}
@Override
public void onAfterRemove(UserGroupGroupRole userGroupGroupRole) throws ModelListenerException {
log.info("onAfterRemove");
}
@Override
public void onAfterRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
log.info("onAfterRemoveAssociation: " + associationClassName);
}
@Override
public void onAfterUpdate(UserGroupGroupRole userGroupGroupRole) throws ModelListenerException {
log.info("onAfterUpdate");
}
@Override
public void onBeforeAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
log.info("onBeforeAddAssociation: " + associationClassName);
}
@Override
public void onBeforeCreate(UserGroupGroupRole userGroupGroupRole) throws ModelListenerException {
log.info("onBeforeCreate");
}
@Override
public void onBeforeRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
log.info("onBeforeRemoveAssociation: "+ associationClassName);
}
@Override
public void onBeforeUpdate(UserGroupGroupRole userGroupGroupRole) throws ModelListenerException {
log.info("onBeforeUpdate");
}
}

View File

@ -1,46 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException;
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
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.Role;
import com.liferay.portal.model.User;
import com.liferay.portal.model.UserGroupRole;
public class UserGroupRoleEvent extends PortalModelListenerEvent<UserGroupRole> {
private static final long serialVersionUID = 3939268094440017646L;
public static final String CREATED_NAME = "user-group-role_created";
public static final String DELETED_NAME = "user-group-role_deleted";
private UserGroupRoleEvent(String name, UserGroupRole userGroupRole, User user, Group group, Role role)
throws PortalException, SystemException, UserManagementSystemException, UserRetrievalFault {
super(name, user, userGroupRole);
setGroup(group);
setRole(role);
}
public static UserGroupRoleEvent newCreatedEvent(UserGroupRole userGroupRole, User user, Group group, Role role) {
try {
return new UserGroupRoleEvent(CREATED_NAME, userGroupRole, user, group, role);
} catch (PortalException | SystemException | UserManagementSystemException | UserRetrievalFault e) {
log.error("Cannot create event from model object", e);
return null;
}
}
public static UserGroupRoleEvent newDeletedEvent(UserGroupRole userGroupRole, User user, Group group, Role role) {
try {
return new UserGroupRoleEvent(DELETED_NAME, userGroupRole, user, group, role);
} catch (PortalException | SystemException | UserManagementSystemException | UserRetrievalFault e) {
log.error("Cannot create event from model object", e);
return null;
}
}
}

View File

@ -1,102 +0,0 @@
package org.gcube.portal.event.publisher.lr62.model;
import com.liferay.portal.ModelListenerException;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.UserGroupRole;
public class UserGroupRoleEventPublisher extends AbstractEventPublisherBaseModelListener<UserGroupRole> {
protected static final Log log = LogFactoryUtil.getLog(UserGroupRoleEventPublisher.class);
public UserGroupRoleEventPublisher() {
super();
log.info("New UserGroupRoleEventPublisher instance created");
}
@Override
public void onAfterCreate(UserGroupRole userGroupRole) throws ModelListenerException {
try {
Group group = userGroupRole.getGroup();
if (group.isSite()) {
log.info("Created a site user's group role");
UserGroupRoleEvent event = UserGroupRoleEvent.newCreatedEvent(userGroupRole, userGroupRole.getUser(),
group, userGroupRole.getRole());
if (log.isTraceEnabled()) {
log.trace("Event is: " + event);
}
publish(event);
} else if (log.isDebugEnabled()) {
log.debug("Created a non-site user's group role");
}
} catch (PortalException | SystemException e) {
log.error("Cannot get related model objects", e);
}
}
@Override
public void onBeforeRemove(UserGroupRole userGroupRole) throws ModelListenerException {
try {
Group group = userGroupRole.getGroup();
if (group.isSite()) {
log.info("Deleted a site user's group role");
UserGroupRoleEvent event = UserGroupRoleEvent.newDeletedEvent(userGroupRole, userGroupRole.getUser(),
group, userGroupRole.getRole());
if (log.isTraceEnabled()) {
log.trace("Event is: " + event);
}
publish(event);
} else if (log.isDebugEnabled()) {
log.debug("Deleted a non-site user's group role");
}
} catch (PortalException | SystemException e) {
log.error("Cannot get related model objects", e);
}
}
/* Uninteresting model events */
@Override
public void onAfterAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onAfterRemove(UserGroupRole userGroupRole) throws ModelListenerException {
}
@Override
public void onAfterRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onAfterUpdate(UserGroupRole userGroupRole) throws ModelListenerException {
}
@Override
public void onBeforeAddAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onBeforeCreate(UserGroupRole userGroupRole) throws ModelListenerException {
}
@Override
public void onBeforeRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK)
throws ModelListenerException {
}
@Override
public void onBeforeUpdate(UserGroupRole userGroupRole) throws ModelListenerException {
}
}

View File

@ -1,13 +0,0 @@
value.object.listener.com.liferay.portal.model.User=org.gcube.portal.event.publisher.lr62.model.UserEventPublisher
value.object.listener.com.liferay.portal.model.Group=org.gcube.portal.event.publisher.lr62.model.GroupEventPublisher
#value.object.listener.com.liferay.portal.model.UserGroup=org.gcube.portal.event.publisher.lr62.model.UserGroupEventPublisher
#value.object.listener.com.liferay.portal.model.UserGroupGroupRole=org.gcube.portal.event.publisher.lr62.model.UserGroupGroupRoleEventPublisher
value.object.listener.com.liferay.portal.model.UserGroupRole=org.gcube.portal.event.publisher.lr62.model.UserGroupRoleEventPublisher
login.events.post=org.gcube.portal.event.publisher.lr62.action.PostLoginAction
logout.events.pre=org.gcube.portal.event.publisher.lr62.action.PreLogoutAction
#servlet.session.destroy.events=
#global.startup.events is not hook-able but they should be configured in main portal*.properties
#global.shutdown.events is not hook-able but they should be configured in main portal*.properties
application.startup.events=org.gcube.portal.event.publisher.lr62.action.StartupAction
application.shutdown.events=org.gcube.portal.event.publisher.lr62.action.ShutdownAction
# shutdown event is never called. See issue at https://issues.liferay.com/browse/LPS-11613

View File

@ -1,6 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.2.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_2_0.dtd">
<hook>
<portal-properties>portal.properties</portal-properties>
</hook>

View File

@ -1,9 +0,0 @@
name=event-publisher-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

View File

@ -1,4 +0,0 @@
<?xml version="1.0"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>