Skip to content

Commit

Permalink
Added more Guava goodness
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs6f committed Jan 31, 2013
1 parent 745a902 commit 9c0e7ee
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 77 deletions.
14 changes: 7 additions & 7 deletions pom.xml
Expand Up @@ -74,11 +74,6 @@
<artifactId>freemarker</artifactId>
<version>2.3.19</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava-collections</artifactId>
<version>r03</version>
</dependency>

<dependency>
<groupId>org.scala-lang</groupId>
Expand Down Expand Up @@ -124,8 +119,13 @@
<artifactId>activemq-spring</artifactId>
<version>${activemq.version}</version>
</dependency>




<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>13.0.1</version>
</dependency>
</dependencies>

<build>
Expand Down
12 changes: 5 additions & 7 deletions src/main/java/org/fcrepo/modeshape/observer/DefaultFilter.java
@@ -1,12 +1,10 @@
package org.fcrepo.modeshape.observer;

import com.google.common.base.Predicate;

import javax.jcr.observation.Event;

public class DefaultFilter implements Predicate<Event> {
@Override
public boolean apply(Event input) {
return true;
}
public class DefaultFilter implements EventFilter {
@Override
public boolean apply(Event event) {
return true;
}
}
9 changes: 9 additions & 0 deletions src/main/java/org/fcrepo/modeshape/observer/EventFilter.java
@@ -0,0 +1,9 @@
package org.fcrepo.modeshape.observer;

import javax.jcr.observation.Event;

import com.google.common.base.Predicate;

public interface EventFilter extends Predicate<Event> {

}
71 changes: 34 additions & 37 deletions src/main/java/org/fcrepo/modeshape/observer/SimpleObserver.java
@@ -1,52 +1,49 @@
package org.fcrepo.modeshape.observer;

import com.google.common.base.Predicate;
import org.modeshape.jcr.api.Repository;
import static com.google.common.collect.Collections2.filter;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.jcr.LoginException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.observation.Event;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
import javax.jcr.observation.ObservationManager;
import java.util.Queue;

public class SimpleObserver implements EventListener {


@Inject
private Repository repository;

private Session session;
private ObservationManager observationManager;

@Resource(name="fedoraInternalEventQueue") public Queue<Event> outQueue;

@Resource(name="fedoraEventFilter") private Predicate<Event> eventPredicate;


@PostConstruct
public void buildListener() throws RepositoryException {
session = repository.login("fedora");
observationManager = session.getWorkspace().getObservationManager();

observationManager.addEventListener(this, 63, "/", true, null, null, false);
}
import org.modeshape.jcr.api.Repository;

@Override
public void onEvent(EventIterator events) {
while(events.hasNext()) {
Event e = events.nextEvent();
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.eventbus.EventBus;

if(eventPredicate.apply(e)) {
outQueue.add(e);
}
}
public class SimpleObserver implements EventListener {

}
final private Integer eventTypes = Event.NODE_ADDED + Event.NODE_REMOVED
+ Event.NODE_MOVED + Event.PROPERTY_ADDED + Event.PROPERTY_CHANGED
+ Event.PROPERTY_REMOVED;

@Inject
private Repository repository;

@Inject
private EventBus eventBus;

@Inject
private EventFilter eventFilter;

@PostConstruct
public void buildListener() throws RepositoryException {
repository
.login("fedora")
.getWorkspace()
.getObservationManager()
.addEventListener(this, eventTypes, "/", true, null, null,
false);
}

@Override
public void onEvent(EventIterator events) {
for (Event e : filter(new Builder<Event>().addAll(events).build(),
eventFilter))
eventBus.post(e);
}

}
7 changes: 3 additions & 4 deletions src/main/resources/spring/eventing.xml
Expand Up @@ -12,12 +12,11 @@

<context:annotation-config/>

<bean class="org.fcrepo.modeshape.observer.SimpleObserver">
</bean>

<bean class="org.fcrepo.modeshape.observer.SimpleObserver"/>

<bean name="fedoraEventFilter" class="org.fcrepo.modeshape.observer.DefaultFilter" />

<bean name="fedoraInternalEventQueue" class="java.util.concurrent.ConcurrentLinkedQueue"/>
<bean name="fedoraInternalEventBus" class="com.google.common.eventbus.EventBus"/>

<!--
<bean name="jmsBroker" class="org.apache.activemq.xbean.BrokerFactoryBean">
Expand Down
57 changes: 35 additions & 22 deletions src/test/java/org/fcrepo/modeshape/observer/SimpleObserverTest.java
Expand Up @@ -5,43 +5,56 @@
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;

import javax.inject.Inject;
import javax.jcr.*;
import javax.jcr.observation.Event;

import static junit.framework.Assert.assertEquals;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/spring/eventing.xml")
public class SimpleObserverTest {

@Inject
private Repository repository;
private Integer messageCount = 0;

@Inject
private Repository repository;

@Inject
private SimpleObserver o;

@Inject
private EventBus eventBus;

@Inject
private SimpleObserver o;
@Test
public void TestSimpleIntegration() throws RepositoryException {

@Test
public void TestSimpleIntegration() throws RepositoryException {
eventBus.register(this);

Session se = repository.login();
Workspace ws = se.getWorkspace();
Session se = repository.login();
se.getRootNode().addNode("/simple-integration-test");
se.save();
se.logout();

Node n = se.getRootNode();
n.addNode("/simple-integration-test");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}

se.save();
// Should be two messages:
// - add node
// - add property jcr:primaryType

try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
assertEquals("Where are my messages!?", (Integer) 2, messageCount);
}

// Should be two messages:
// - add node
// - add property jcr:primaryType
@Subscribe
public void countMessages(Event e) {
messageCount++;
}

assertEquals(2, o.outQueue.size());
}
}

1 comment on commit 9c0e7ee

@cbeer
Copy link
Contributor

@cbeer cbeer commented on 9c0e7ee Jan 31, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1!

Please sign in to comment.