You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2015/05/04 16:23:21 UTC
svn commit: r1677602 - in
/sling/trunk/contrib/extensions/distribution/core/src:
main/java/org/apache/sling/distribution/trigger/impl/
test/java/org/apache/sling/distribution/trigger/impl/
Author: mpetria
Date: Mon May 4 14:23:20 2015
New Revision: 1677602
URL: http://svn.apache.org/r1677602
Log:
Allow certain paths to be ignored by jcrtrigger
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java?rev=1677602&r1=1677601&r2=1677602&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java Mon May 4 14:23:20 2015
@@ -24,10 +24,15 @@ import javax.jcr.Session;
import javax.jcr.observation.Event;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.sling.distribution.DistributionRequest;
+import org.apache.sling.distribution.DistributionRequestType;
+import org.apache.sling.distribution.SimpleDistributionRequest;
import org.apache.sling.distribution.trigger.DistributionRequestHandler;
import org.apache.sling.distribution.trigger.DistributionTrigger;
import org.apache.sling.distribution.trigger.DistributionTriggerException;
@@ -60,7 +65,6 @@ public abstract class AbstractJcrEventTr
this.repository = repository;
this.path = path;
this.serviceUser = serviceUser;
-
}
public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionTriggerException {
@@ -98,19 +102,40 @@ public abstract class AbstractJcrEventTr
public void onEvent(EventIterator eventIterator) {
log.info("handling event {}");
+ List<DistributionRequest> requestList = new ArrayList<DistributionRequest>();
+
while (eventIterator.hasNext()) {
Event event = eventIterator.nextEvent();
try {
if (DistributionJcrUtils.isSafe(event)) {
DistributionRequest request = processEvent(event);
if (request != null) {
- requestHandler.handle(request);
+ addToList(request, requestList);
}
+
}
} catch (RepositoryException e) {
log.error("Error while handling event {}", event, e);
}
}
+
+ for (DistributionRequest request: requestList) {
+ requestHandler.handle(request);
+ }
+ }
+ }
+
+ private void addToList(DistributionRequest request, List<DistributionRequest> requestList) {
+ DistributionRequest lastRequest = requestList.isEmpty()? null : requestList.get(requestList.size() - 1);
+
+ if (lastRequest == null || lastRequest.getRequestType() == null || !lastRequest.getRequestType().equals(request.getRequestType())) {
+ requestList.add(request);
+ } else {
+ List<String> allPaths = new ArrayList<String>();
+ allPaths.addAll(Arrays.asList(lastRequest.getPaths()));
+ allPaths.addAll(Arrays.asList(request.getPaths()));
+ lastRequest = new SimpleDistributionRequest(lastRequest.getRequestType(), allPaths.toArray(new String[0]));
+ requestList.set(requestList.size() - 1, lastRequest);
}
}
@@ -169,4 +194,20 @@ public abstract class AbstractJcrEventTr
}
+ protected String getNodePathFromEvent(Event event) throws RepositoryException {
+ String eventPath = event.getPath();
+ int type = event.getType();
+
+ if (eventPath == null) {
+ return null;
+ }
+
+ if (Event.PROPERTY_REMOVED == type || Event.PROPERTY_CHANGED == type || Event.PROPERTY_ADDED == type) {
+ eventPath = eventPath.substring(0, eventPath.lastIndexOf('/'));
+ }
+
+ return eventPath;
+ }
+
+
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java?rev=1677602&r1=1677601&r2=1677602&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java Mon May 4 14:23:20 2015
@@ -35,26 +35,44 @@ import org.slf4j.LoggerFactory;
public class JcrEventDistributionTrigger extends AbstractJcrEventTrigger implements DistributionTrigger {
private final Logger log = LoggerFactory.getLogger(this.getClass());
+ private final String[] ignoredPathsPatterns;
- public JcrEventDistributionTrigger(SlingRepository repository, String path, String serviceName) {
+ public JcrEventDistributionTrigger(SlingRepository repository, String path, String serviceName, String[] ignoredPathsPatterns) {
super(repository, path, serviceName);
+ this.ignoredPathsPatterns = ignoredPathsPatterns;
}
@Override
protected DistributionRequest processEvent(Event event) throws RepositoryException {
log.info("triggering distribution from jcr event {}", event);
DistributionRequest distributionRequest = null;
- Object pathProperty = event.getPath();
- if (pathProperty != null) {
- String replicatingPath = String.valueOf(pathProperty);
- int type = event.getType();
- if (Event.PROPERTY_REMOVED == type || Event.PROPERTY_CHANGED == type || Event.PROPERTY_ADDED == type) {
- replicatingPath = replicatingPath.substring(0, replicatingPath.lastIndexOf('/'));
- }
- distributionRequest = new SimpleDistributionRequest(Event.NODE_REMOVED ==
- type ? DistributionRequestType.DELETE : DistributionRequestType.ADD, replicatingPath);
+ String replicatingPath = getNodePathFromEvent(event);
+ if (!isIgnoredPath(replicatingPath)) {
+
+ distributionRequest = new SimpleDistributionRequest(Event.NODE_REMOVED == event.getType() ?
+ DistributionRequestType.DELETE : DistributionRequestType.ADD, replicatingPath);
log.info("distributing {}", distributionRequest);
+
}
return distributionRequest;
}
+
+
+ boolean isIgnoredPath(String path) {
+ if (path == null) {
+ return true;
+ }
+
+ if (ignoredPathsPatterns == null || ignoredPathsPatterns.length == 0) {
+ return false;
+ }
+
+ for (String pattern : ignoredPathsPatterns) {
+ if (path.matches(pattern)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
\ No newline at end of file
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java?rev=1677602&r1=1677601&r2=1677602&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java Mon May 4 14:23:20 2015
@@ -27,6 +27,7 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
+import org.apache.sling.distribution.component.impl.SettingsUtils;
import org.apache.sling.distribution.trigger.DistributionRequestHandler;
import org.apache.sling.distribution.trigger.DistributionTrigger;
import org.apache.sling.distribution.trigger.DistributionTriggerException;
@@ -52,10 +53,16 @@ public class JcrEventDistributionTrigger
/**
* jcr event trigger path property
*/
- @Property(label = "Path", description = "The path for whcih changes are distributed.")
+ @Property(label = "Path", description = "The path for which changes are distributed.")
public static final String PATH = "path";
/**
+ * jcr event trigger path property
+ */
+ @Property(cardinality = 100, label = "Ignored Paths Patterns", description = "The paths matching one of these patterns will be ignored.")
+ public static final String IGNORED_PATHS_PATTERNS = "ignoredPathsPatterns";
+
+ /**
* jcr event trigger service user property
*/
@Property(label = "Service Name", description = "The service used to listen for jcr events")
@@ -73,8 +80,11 @@ public class JcrEventDistributionTrigger
public void activate(BundleContext bundleContext, Map<String, Object> config) {
String path = PropertiesUtil.toString(config.get(PATH), null);
String serviceName = PropertiesUtil.toString(config.get(SERVICE_NAME), null);
+ String[] ignoredPathsPatterns = PropertiesUtil.toStringArray(config.get(IGNORED_PATHS_PATTERNS), null);
+ ignoredPathsPatterns = SettingsUtils.removeEmptyEntries(ignoredPathsPatterns);
+
- trigger = new JcrEventDistributionTrigger(repository, path, serviceName);
+ trigger = new JcrEventDistributionTrigger(repository, path, serviceName, ignoredPathsPatterns);
trigger.enable();
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java?rev=1677602&r1=1677601&r2=1677602&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java Mon May 4 14:23:20 2015
@@ -39,7 +39,7 @@ public class JcrEventDistributionTrigger
SlingRepository repository = mock(SlingRepository.class);
String path = "/some/path";
String serviceName = "serviceId";
- JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, path, serviceName);
+ JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, path, serviceName, null);
Event event = mock(Event.class);
DistributionRequest distributionRequest = jcrEventdistributionTrigger.processEvent(event);
assertNull(distributionRequest);
@@ -50,7 +50,7 @@ public class JcrEventDistributionTrigger
SlingRepository repository = mock(SlingRepository.class);
String path = "/some/path";
String serviceName = "serviceId";
- JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, path, serviceName);
+ JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, path, serviceName, null);
Event event = mock(Event.class);
when(event.getPath()).thenReturn("/some/path/generating/event");
DistributionRequest distributionRequest = jcrEventdistributionTrigger.processEvent(event);