Return-Path: X-Original-To: apmail-jackrabbit-commits-archive@www.apache.org Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A21D5100D8 for ; Fri, 28 Mar 2014 11:25:31 +0000 (UTC) Received: (qmail 56850 invoked by uid 500); 28 Mar 2014 11:25:31 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 56739 invoked by uid 500); 28 Mar 2014 11:25:28 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 56696 invoked by uid 99); 28 Mar 2014 11:25:26 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Mar 2014 11:25:26 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Mar 2014 11:25:22 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 2FEF923888E2; Fri, 28 Mar 2014 11:25:00 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1582707 - in /jackrabbit/trunk: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ Date: Fri, 28 Mar 2014 11:25:00 -0000 To: commits@jackrabbit.apache.org From: mduerig@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140328112500.2FEF923888E2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: mduerig Date: Fri Mar 28 11:24:59 2014 New Revision: 1582707 URL: http://svn.apache.org/r1582707 Log: JCR-3759: Add noInternal flag to JackrabbitEventFilter Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/JackrabbitEventFilter.java jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventFilter.java jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/JackrabbitEventFilter.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/JackrabbitEventFilter.java?rev=1582707&r1=1582706&r2=1582707&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/JackrabbitEventFilter.java (original) +++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/observation/JackrabbitEventFilter.java Fri Mar 28 11:24:59 2014 @@ -72,6 +72,10 @@ import static java.util.Arrays.copyOf; * noExternal: if true, then events * from external cluster nodes are ignored. Otherwise, they are not ignored. * + *
  • + * noInternal: if true, then events + * from this cluster node are ignored. Otherwise, they are not ignored. + *
  • * * The restrictions are "ANDed" together. In other words, for a particular node to be "listened to" it * must meet all the restrictions. @@ -86,6 +90,7 @@ public class JackrabbitEventFilter { // private boolean noLocal; private String[] absPaths = new String[]{}; private boolean noExternal; + private boolean noInternal; /** * Sets the eventTypes parameter of the filter. @@ -254,4 +259,26 @@ public class JackrabbitEventFilter { // public boolean getNoExternal() { return noExternal; } + + /** + * Sets the noInternal parameter of the filter. + * If left unset, this parameter defaults to false. + * + * @param noInternal a boolean. + * @return This EventFilter object with the noExternal parameter set. + */ + public JackrabbitEventFilter setNoInternal(boolean noInternal) { + this.noInternal = noInternal; + return this; + } + + /** + * Returns the noInternal parameter of the filter. + * + * @return a boolean. + */ + public boolean getNoInternal() { + return noInternal; + } + } \ No newline at end of file Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventFilter.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventFilter.java?rev=1582707&r1=1582706&r2=1582707&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventFilter.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventFilter.java Fri Mar 28 11:24:59 2014 @@ -82,6 +82,12 @@ public class EventFilter { private final boolean noExternal; /** + * If noInternal is true this filter will block events from + * this cluster nodes. + */ + private final boolean noInternal; + + /** * Creates a new EventFilter instance. * * @param session the Session that registered the {@link @@ -100,6 +106,10 @@ public class EventFilter { * @param noLocal if true no events are allowed that were * created from changes related to the Session * that registered the {@link javax.jcr.observation.EventListener}. + * @param noExternal if true no events are allowed that were + * created from changes on an external cluster node. + * @param noInternal if true no events are allowed that were + * created from changes on the local cluster node. */ EventFilter(SessionImpl session, long eventTypes, @@ -108,7 +118,8 @@ public class EventFilter { NodeId[] ids, NodeTypeImpl[] nodeTypes, boolean noLocal, - boolean noExternal) { + boolean noExternal, + boolean noInternal) { this.session = session; this.eventTypes = eventTypes; this.paths = paths; @@ -116,6 +127,7 @@ public class EventFilter { this.ids = ids; this.noLocal = noLocal; this.noExternal = noExternal; + this.noInternal = noInternal; this.nodeTypes = nodeTypes; } @@ -147,6 +159,10 @@ public class EventFilter { return true; } + if (noInternal && !eventState.isExternal()) { + return true; + } + // UUIDs, types, and paths do not need to match for persist if (eventState.getType() == Event.PERSIST) { return false; @@ -203,7 +219,7 @@ public class EventFilter { * Creates a new BlockAllFilter. */ BlockAllFilter() { - super(null, 0, Collections.emptyList(), true, null, null, true, true); + super(null, 0, Collections.emptyList(), true, null, null, true, true, true); } /** Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java?rev=1582707&r1=1582706&r2=1582707&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java Fri Mar 28 11:24:59 2014 @@ -119,7 +119,7 @@ public class ObservationManagerImpl impl // create filter EventFilter filter = createEventFilter(eventTypes, Collections.singletonList(absPath), - isDeep, uuid, nodeTypeName, noLocal, false); + isDeep, uuid, nodeTypeName, noLocal, false, false); dispatcher.addConsumer(new EventConsumer(session, listener, filter)); } @@ -135,7 +135,7 @@ public class ObservationManagerImpl impl EventFilter f = createEventFilter(filter.getEventTypes(), absPaths, filter.getIsDeep(), filter.getIdentifiers(), filter.getNodeTypes(), - filter.getNoLocal(), filter.getNoExternal()); + filter.getNoLocal(), filter.getNoExternal(), filter.getNoInternal()); dispatcher.addConsumer(new EventConsumer(session, listener, f)); } @@ -202,6 +202,7 @@ public class ObservationManagerImpl impl * @param nodeTypeName array of node type names. * @param noLocal a boolean. * @param noExternal a boolean. + * @param noInternal a boolean. * @return the event filter with the given restrictions. * @throws RepositoryException if an error occurs. */ @@ -211,7 +212,8 @@ public class ObservationManagerImpl impl String[] uuid, String[] nodeTypeName, boolean noLocal, - boolean noExternal) + boolean noExternal, + boolean noInternal) throws RepositoryException { // create NodeType instances from names NodeTypeImpl[] nodeTypes; @@ -248,7 +250,7 @@ public class ObservationManagerImpl impl } // create filter return new EventFilter( - session, eventTypes, paths, isDeep, ids, nodeTypes, noLocal, noExternal); + session, eventTypes, paths, isDeep, ids, nodeTypes, noLocal, noExternal, noInternal); } /** @@ -280,7 +282,7 @@ public class ObservationManagerImpl impl } EventFilter filter = createEventFilter( - eventTypes, Collections.singletonList(absPath), isDeep, uuid, nodeTypeName, false, false); + eventTypes, Collections.singletonList(absPath), isDeep, uuid, nodeTypeName, false, false, false); return new EventJournalImpl( filter, clusterNode.getJournal(), clusterNode.getId(), session); }