diff --git a/source/java/org/alfresco/repo/events/AbstractEventPublisher.java b/source/java/org/alfresco/repo/events/AbstractEventPublisher.java new file mode 100644 index 0000000000..151e910a9b --- /dev/null +++ b/source/java/org/alfresco/repo/events/AbstractEventPublisher.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.events; + +import org.alfresco.events.types.BrowserEvent; +import org.alfresco.events.types.Event; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.tenant.TenantUtil; +import org.alfresco.repo.transaction.AlfrescoTransactionSupport; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * An abstract implementation of some of the EventPublisher functionality. + * +* @author Gethin James +* @since 5.0 + */ +public abstract class AbstractEventPublisher implements EventPublisher +{ + @Override + public void publishBrowserEvent(final WebScriptRequest req, final String siteId, final String component, final String action, final String attributes) + { + publishEvent(new EventPreparator(){ + @Override + public Event prepareEvent(String user, String networkId, String transactionId) + { + String agent = req.getHeader("user-agent"); + return new BrowserEvent(user, networkId, transactionId, siteId, component, action, agent, attributes); + } + }); + } + + /** + * Gets userful information from the current thread for use when creating an event + * @return ThreadInfo + */ + protected ThreadInfo getThreadInfo() + { + return new ThreadInfo( + AuthenticationUtil.getFullyAuthenticatedUser(), + AlfrescoTransactionSupport.getTransactionId(), + TenantUtil.getCurrentDomain()); + } + + /** + * Basic information from a thread + * + */ + protected static class ThreadInfo { + protected final String user; + protected final String transaction; + protected final String network; + + public ThreadInfo(String user, String transaction, String network) + { + super(); + this.user = user; + this.transaction = transaction; + this.network = network; + } + } + + +} diff --git a/source/java/org/alfresco/repo/events/NoOpEventPublisher.java b/source/java/org/alfresco/repo/events/NoOpEventPublisher.java index 5b9e19ecbc..22ece22d28 100644 --- a/source/java/org/alfresco/repo/events/NoOpEventPublisher.java +++ b/source/java/org/alfresco/repo/events/NoOpEventPublisher.java @@ -18,14 +18,7 @@ */ package org.alfresco.repo.events; -import org.alfresco.events.types.BrowserEvent; import org.alfresco.events.types.Event; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.tenant.TenantUtil; -import org.alfresco.repo.transaction.AlfrescoTransactionSupport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.extensions.webscripts.WebScriptRequest; /** * An implementation of EventPublisher that does nothing. @@ -33,39 +26,18 @@ import org.springframework.extensions.webscripts.WebScriptRequest; * @author Gethin James * @since 5.0 */ -public class NoOpEventPublisher implements EventPublisher { - - private static final Logger logger = LoggerFactory.getLogger(NoOpEventPublisher.class); +public class NoOpEventPublisher extends AbstractEventPublisher implements EventPublisher { @Override public void publishEvent(Event event) { - if (logger.isDebugEnabled()) - { - logger.debug("No event published for [" + event + "]"); - } + //Do nothing } @Override public void publishEvent(EventPreparator prep) { - if (logger.isDebugEnabled()) - { - logger.debug("No event published with preparator."); - } - } - - @Override - public void publishBrowserEvent(final WebScriptRequest req, final String siteId, final String component, final String action, final String attributes) - { - publishEvent(new EventPreparator(){ - @Override - public Event prepareEvent(String user, String networkId, String transactionId) - { - String agent = req.getHeader("user-agent"); - return new BrowserEvent(user, networkId, transactionId, siteId, component, action, agent, attributes); - } - }); + //Do nothing } } \ No newline at end of file diff --git a/source/test-java/org/alfresco/repo/events/EventPublisherForTestingOnly.java b/source/test-java/org/alfresco/repo/events/EventPublisherForTestingOnly.java new file mode 100644 index 0000000000..5578473d7b --- /dev/null +++ b/source/test-java/org/alfresco/repo/events/EventPublisherForTestingOnly.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.events; + +import java.util.ArrayList; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + +import org.alfresco.events.types.Event; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * An implementation of EventPublisher that is used for testing + * + * @author Gethin James + * @since 5.0 + */ +public class EventPublisherForTestingOnly extends AbstractEventPublisher implements EventPublisher +{ + private static final Logger logger = LoggerFactory.getLogger(EventPublisherForTestingOnly.class); + Queue queue = new ConcurrentLinkedQueue(); + + @Override + public void publishEvent(Event event) + { + queue.add(event); + log("Event published for [" + event + "]"); + } + + @Override + public void publishEvent(EventPreparator prep) + { + ThreadInfo info = getThreadInfo(); + Event event = prep.prepareEvent(info.user, info.network, info.transaction); + queue.add(event); + log("Event published: [" + event + "]"); + } + + private void log (String logMessage) + { + if (logger.isDebugEnabled()) + { + logger.debug(logMessage); + } + } + + public Queue getQueue() + { + return this.queue; + } + + @SuppressWarnings("unchecked") + public List getQueueByType(Class type) + { + List toReturn = new ArrayList<>(); + for (Event event : queue) + { + if (type.equals(event.getClass())) + { + toReturn.add((T) event); + } + } + return (List) toReturn; + } + +} diff --git a/source/test-resources/alfresco/extension/overides-for-testing-context.xml b/source/test-resources/alfresco/extension/overides-for-testing-context.xml new file mode 100644 index 0000000000..a3703f02b6 --- /dev/null +++ b/source/test-resources/alfresco/extension/overides-for-testing-context.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file