Search in sources :

Example 21 with Event

use of javax.jcr.observation.Event in project sling by apache.

the class JcrResourceListener method onEvent.

/**
     * @see javax.jcr.observation.EventListener#onEvent(javax.jcr.observation.EventIterator)
     */
@Override
public void onEvent(final EventIterator events) {
    final Map<String, ResourceChange> addedEvents = new HashMap<String, ResourceChange>();
    final Map<String, ResourceChange> changedEvents = new HashMap<String, ResourceChange>();
    final Map<String, ResourceChange> removedEvents = new HashMap<String, ResourceChange>();
    while (events.hasNext()) {
        final Event event = events.nextEvent();
        final String identifier;
        final String path;
        try {
            identifier = event.getIdentifier();
            path = event.getPath();
        } catch (final RepositoryException e) {
            // there is nothing we can do about it anyway
            continue;
        }
        final String eventPath = (identifier != null && identifier.startsWith("/") ? identifier : path);
        final int type = event.getType();
        if (type == PROPERTY_ADDED && path.endsWith("/jcr:primaryType")) {
            final int lastSlash = path.lastIndexOf('/');
            final String rsrcPath = path.substring(0, lastSlash);
            // add is stronger than update
            changedEvents.remove(rsrcPath);
            addedEvents.put(rsrcPath, createResourceChange(event, rsrcPath, ChangeType.ADDED));
        } else if (type == PROPERTY_ADDED || type == PROPERTY_REMOVED || type == PROPERTY_CHANGED) {
            final String rsrcPath;
            if (identifier == null || !identifier.startsWith("/")) {
                final int lastSlash = eventPath.lastIndexOf('/');
                rsrcPath = eventPath.substring(0, lastSlash);
            } else {
                rsrcPath = eventPath;
            }
            if (!addedEvents.containsKey(rsrcPath) && !removedEvents.containsKey(rsrcPath) && !changedEvents.containsKey(rsrcPath)) {
                changedEvents.put(rsrcPath, createResourceChange(event, rsrcPath, ChangeType.CHANGED));
            }
        } else if (type == NODE_ADDED) {
            // add is stronger than update
            changedEvents.remove(eventPath);
            addedEvents.put(eventPath, createResourceChange(event, eventPath, ChangeType.ADDED));
        } else if (type == NODE_REMOVED) {
            // remove is stronger than add and change
            addedEvents.remove(eventPath);
            changedEvents.remove(eventPath);
            removedEvents.put(eventPath, createResourceChange(event, eventPath, ChangeType.REMOVED));
        }
    }
    final List<ResourceChange> changes = new ArrayList<ResourceChange>();
    changes.addAll(addedEvents.values());
    changes.addAll(removedEvents.values());
    changes.addAll(changedEvents.values());
    this.baseConfig.getReporter().reportChanges(this.config, changes, false);
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Event(javax.jcr.observation.Event) JackrabbitEvent(org.apache.jackrabbit.api.observation.JackrabbitEvent) RepositoryException(javax.jcr.RepositoryException) ResourceChange(org.apache.sling.api.resource.observation.ResourceChange)

Example 22 with Event

use of javax.jcr.observation.Event in project camel by apache.

the class JcrConsumerTest method testJcrConsumer.

@Test
public void testJcrConsumer() throws Exception {
    // start consumer thread first
    JcrConsumerThread consumerThread = new JcrConsumerThread();
    consumerThread.start();
    // wait until the consumer thread has tried to receive event at least once
    while (consumerThread.getReceiveTrialTimes() < 1) {
        Thread.sleep(10L);
    }
    // now create a node under the specified event node path
    Session session = openSession();
    try {
        Node folderNode = session.getRootNode();
        for (String folderNodeName : absPath.split("\\/")) {
            if (!"".equals(folderNodeName)) {
                if (folderNode.hasNode(folderNodeName)) {
                    folderNode.getNode(folderNodeName).remove();
                }
                folderNode = folderNode.addNode(folderNodeName, "nt:unstructured");
            }
        }
        folderNode.addNode("node", "nt:unstructured");
        session.save();
    } finally {
        if (session != null && session.isLive()) {
            session.logout();
        }
    }
    // wait until the consumer thread captures an event
    consumerThread.join();
    Exchange exchange = consumerThread.getExchange();
    assertNotNull(exchange);
    Message message = exchange.getIn();
    assertNotNull(message);
    assertTrue(message instanceof JcrMessage);
    EventIterator eventIterator = ((JcrMessage) message).getEventIterator();
    assertNotNull(eventIterator);
    assertEquals(1, eventIterator.getSize());
    List<?> eventList = message.getBody(List.class);
    assertEquals(1, eventList.size());
    Event event = (Event) eventList.get(0);
    assertEquals(Event.NODE_ADDED, event.getType());
    assertNotNull(event.getPath());
    assertTrue(event.getPath().startsWith(absPath));
}
Also used : Exchange(org.apache.camel.Exchange) Message(org.apache.camel.Message) Node(javax.jcr.Node) Event(javax.jcr.observation.Event) EventIterator(javax.jcr.observation.EventIterator) Session(javax.jcr.Session) Test(org.junit.Test)

Example 23 with Event

use of javax.jcr.observation.Event in project sling by apache.

the class AbstractJcrEventTriggerTest method addToListTest.

//"SLING-6054"
@Test
public void addToListTest() throws Exception {
    SlingRepository repository = mock(SlingRepository.class);
    Scheduler scheduler = mock(Scheduler.class);
    String path = "/";
    String serviceUser = "service-user";
    AbstractJcrEventTrigger trigger = new AbstractJcrEventTrigger(repository, scheduler, rrf, path, serviceUser) {

        @Override
        protected DistributionRequest processEvent(Event event) throws RepositoryException {
            return null;
        }
    };
    String descendant = "/a/b/c/d/e/f/h";
    String ancestor = "/a/b/c/d";
    List<DistributionRequest> requests = new LinkedList<DistributionRequest>();
    requests.add(new SimpleDistributionRequest(DistributionRequestType.ADD, descendant));
    DistributionRequest newRequest = new SimpleDistributionRequest(DistributionRequestType.ADD, ancestor);
    trigger.addToList(newRequest, requests);
    assertEquals(1, requests.size());
    assertEquals(3, requests.get(0).getPaths().length);
    String[] paths = requests.get(0).getPaths();
    assertEquals(ancestor, paths[0]);
    // the missing path is added
    assertEquals("/a/b/c/d/e/f/g", paths[1]);
    assertEquals(descendant, paths[2]);
    // invert order of requests
    requests = new LinkedList<DistributionRequest>();
    requests.add(new SimpleDistributionRequest(DistributionRequestType.ADD, ancestor));
    newRequest = new SimpleDistributionRequest(DistributionRequestType.ADD, descendant);
    trigger.addToList(newRequest, requests);
    assertEquals(1, requests.size());
    assertEquals(3, requests.get(0).getPaths().length);
    paths = requests.get(0).getPaths();
    assertEquals(ancestor, paths[0]);
    // the missing path is added
    assertEquals("/a/b/c/d/e/f/g", paths[1]);
    assertEquals(descendant, paths[2]);
}
Also used : SlingRepository(org.apache.sling.jcr.api.SlingRepository) SimpleDistributionRequest(org.apache.sling.distribution.SimpleDistributionRequest) DistributionRequest(org.apache.sling.distribution.DistributionRequest) SimpleDistributionRequest(org.apache.sling.distribution.SimpleDistributionRequest) Scheduler(org.apache.sling.commons.scheduler.Scheduler) Event(javax.jcr.observation.Event) LinkedList(java.util.LinkedList) Test(org.junit.Test)

Example 24 with Event

use of javax.jcr.observation.Event in project sling by apache.

the class JcrEventDistributionTriggerTest method testProcessEventOnMultipleIgnoredPattern.

@Test
public void testProcessEventOnMultipleIgnoredPattern() throws Exception {
    SlingRepository repository = mock(SlingRepository.class);
    Scheduler scheduler = mock(Scheduler.class);
    ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
    String path = "/home/users";
    String serviceName = "serviceId";
    String[] ignoredPaths = new String[] { ".*/.tokens.*", ".*/.rep:cache.*" };
    JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, scheduler, resolverFactory, path, false, serviceName, ignoredPaths);
    Event event = mock(Event.class);
    when(event.getPath()).thenReturn("/home/users/3/3U3HxUUzJJ60BdN4lEDJ/.tokens/2017-01-10T15.52.37.842+01.00");
    DistributionRequest distributionRequest = jcrEventdistributionTrigger.processEvent(event);
    assertNull(distributionRequest);
}
Also used : SlingRepository(org.apache.sling.jcr.api.SlingRepository) DistributionRequest(org.apache.sling.distribution.DistributionRequest) ResourceResolverFactory(org.apache.sling.api.resource.ResourceResolverFactory) Scheduler(org.apache.sling.commons.scheduler.Scheduler) Event(javax.jcr.observation.Event) Test(org.junit.Test)

Example 25 with Event

use of javax.jcr.observation.Event in project sling by apache.

the class JcrEventDistributionTriggerTest method testProcessEventWithoutPathProperty.

@Test
public void testProcessEventWithoutPathProperty() throws Exception {
    SlingRepository repository = mock(SlingRepository.class);
    Scheduler scheduler = mock(Scheduler.class);
    ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
    String path = "/some/path";
    String serviceName = "serviceId";
    JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, scheduler, resolverFactory, path, false, serviceName, null);
    Event event = mock(Event.class);
    DistributionRequest distributionRequest = jcrEventdistributionTrigger.processEvent(event);
    assertNull(distributionRequest);
}
Also used : SlingRepository(org.apache.sling.jcr.api.SlingRepository) DistributionRequest(org.apache.sling.distribution.DistributionRequest) ResourceResolverFactory(org.apache.sling.api.resource.ResourceResolverFactory) Scheduler(org.apache.sling.commons.scheduler.Scheduler) Event(javax.jcr.observation.Event) Test(org.junit.Test)

Aggregations

Event (javax.jcr.observation.Event)138 Node (javax.jcr.Node)104 Test (org.junit.Test)56 JackrabbitNode (org.apache.jackrabbit.api.JackrabbitNode)46 AbstractRepositoryTest (org.apache.jackrabbit.oak.jcr.AbstractRepositoryTest)41 RepositoryException (javax.jcr.RepositoryException)31 Session (javax.jcr.Session)21 JackrabbitEventFilter (org.apache.jackrabbit.api.observation.JackrabbitEventFilter)19 EventResult (org.apache.jackrabbit.test.api.observation.EventResult)17 EventIterator (javax.jcr.observation.EventIterator)16 ObservationManager (javax.jcr.observation.ObservationManager)14 Property (javax.jcr.Property)13 SlingRepository (org.apache.sling.jcr.api.SlingRepository)10 ArrayList (java.util.ArrayList)9 EventListener (javax.jcr.observation.EventListener)9 Scheduler (org.apache.sling.commons.scheduler.Scheduler)9 DistributionRequest (org.apache.sling.distribution.DistributionRequest)9 ResourceResolverFactory (org.apache.sling.api.resource.ResourceResolverFactory)8 ExecutionException (java.util.concurrent.ExecutionException)7 PathNotFoundException (javax.jcr.PathNotFoundException)7