diff --git a/config/alfresco/remote-api-context.xml b/config/alfresco/remote-api-context.xml
index 598465db4f..b1fddde825 100644
--- a/config/alfresco/remote-api-context.xml
+++ b/config/alfresco/remote-api-context.xml
@@ -77,6 +77,7 @@
${system.webdav.url.path.prefix}
+
diff --git a/source/java/org/alfresco/repo/webdav/GetMethod.java b/source/java/org/alfresco/repo/webdav/GetMethod.java
index 8ebecee20f..37f860217b 100644
--- a/source/java/org/alfresco/repo/webdav/GetMethod.java
+++ b/source/java/org/alfresco/repo/webdav/GetMethod.java
@@ -314,6 +314,7 @@ public class GetMethod extends WebDAVMethod
{
if (byteRanges != null && byteRanges.startsWith(RANGE_HEADER_UNIT_SPECIFIER))
{
+ m_davHelper.publishReadEvent(realNodeInfo, reader.getMimetype(), reader.getSize(), byteRanges.substring(6), reader.getEncoding());
HttpRangeProcessor rangeProcessor = new HttpRangeProcessor(getContentService());
String userAgent = m_request.getHeader(WebDAV.HEADER_USER_AGENT);
@@ -336,7 +337,7 @@ public class GetMethod extends WebDAVMethod
// there is content associated with the node
m_response.setHeader(WebDAV.HEADER_CONTENT_LENGTH, Long.toString(reader.getSize()));
m_response.setHeader(WebDAV.HEADER_CONTENT_TYPE, reader.getMimetype());
-
+ m_davHelper.publishReadEvent(realNodeInfo, reader.getMimetype(), reader.getSize(), null, reader.getEncoding());
// copy the content to the response output stream
reader.getContent(m_response.getOutputStream());
}
diff --git a/source/java/org/alfresco/repo/webdav/WebDAVHelper.java b/source/java/org/alfresco/repo/webdav/WebDAVHelper.java
index c345694d81..842aa7456e 100644
--- a/source/java/org/alfresco/repo/webdav/WebDAVHelper.java
+++ b/source/java/org/alfresco/repo/webdav/WebDAVHelper.java
@@ -32,8 +32,13 @@ import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.alfresco.events.types.ContentReadEvent;
+import org.alfresco.events.types.ContentReadRangeEvent;
+import org.alfresco.events.types.Event;
import org.alfresco.jlan.util.IPAddress;
import org.alfresco.model.ContentModel;
+import org.alfresco.repo.events.EventPreparator;
+import org.alfresco.repo.events.EventPublisher;
import org.alfresco.repo.lock.LockUtils;
import org.alfresco.repo.model.filefolder.HiddenAspect;
import org.alfresco.repo.policy.BehaviourFilter;
@@ -56,6 +61,7 @@ import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.util.EqualsHelper;
+import org.alfresco.util.FileFilterMode.Client;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.URLDecoder;
@@ -86,7 +92,7 @@ public class WebDAVHelper
// Logging
protected static Log logger = LogFactory.getLog("org.alfresco.webdav.protocol");
-
+
// Service registry TODO: eliminate this - not dependency injection!
private ServiceRegistry m_serviceRegistry;
@@ -103,6 +109,7 @@ public class WebDAVHelper
private PermissionService m_permissionService;
private TenantService m_tenantService;
private HiddenAspect m_hiddenAspect;
+ private EventPublisher eventPublisher;
// pattern is tested against full path after it has been lower cased.
private Pattern m_renameShufflePattern = Pattern.compile("(.*/\\..*)|(.*[a-f0-9]{8}+$)|(.*\\.tmp$)|(.*\\.wbk$)|(.*\\.bak$)|(.*\\~$)|(.*backup.*\\.do[ct]{1}[x]?[m]?$)|(.*\\.sb\\-\\w{8}\\-\\w{6}$)");
@@ -318,6 +325,14 @@ public class WebDAVHelper
this.m_namespaceService = namespaceService;
}
+ /**
+ * @param eventPublisher the eventPublisher service
+ */
+ public void setEventPublisher(EventPublisher eventPublisher)
+ {
+ this.eventPublisher = eventPublisher;
+ }
+
/**
* @param dictionaryService the dictionary service
*/
@@ -1063,6 +1078,39 @@ public class WebDAVHelper
return urlStr.toString();
}
+ /**
+ * Notifies listeners that a read has taken place
+ * @param nodeRef
+ * @param propertyQName
+ * @param attach
+ * @param mimetype
+ * @param size
+ */
+ protected void publishReadEvent(final FileInfo realNodeInfo, final String mimetype, final Long size, final String contentEncoding, final String range)
+ {
+
+ eventPublisher.publishEvent(new EventPreparator(){
+ @Override
+ public Event prepareEvent(String user, String networkId, String transactionId)
+ {
+ SiteService siteService = getServiceRegistry().getSiteService();
+ final String siteId = siteService.getSiteShortName(realNodeInfo.getNodeRef());
+
+ if (StringUtils.hasText(range))
+ {
+ return new ContentReadRangeEvent(user, networkId, transactionId, realNodeInfo.getNodeRef().getId(),
+ siteId, realNodeInfo.getType().toString(), Client.webdav, mimetype, size, contentEncoding, range);
+ }
+ else
+ {
+ return new ContentReadEvent(ContentReadEvent.DOWNLOAD, user, networkId, transactionId, realNodeInfo.getNodeRef().getId(),
+ siteId, realNodeInfo.getType().toString(), Client.webdav, mimetype, size, contentEncoding);
+ }
+ }
+ });
+
+ }
+
public String getRepositoryPath(HttpServletRequest request)
{
// Try and get the path