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