Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Added Javadocs
  • Loading branch information
ajs6f committed Feb 26, 2013
1 parent 13b5a8f commit 64d262f
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 38 deletions.
Expand Up @@ -18,6 +18,13 @@

import com.google.common.base.Predicate;

/**
* EventFilter that passes only events emitted from nodes with
* a Fedora JCR type.
*
* @author ajs6f
*
*/
public class DefaultFilter implements EventFilter {

@Inject
Expand Down
Expand Up @@ -6,6 +6,14 @@
import javax.jcr.RepositoryException;
import javax.jcr.observation.Event;

/**
* A very simple abstraction to prevent event-driven machinery
* downstream from the repository from relying directly on a JCR
* interface (Event).
*
* @author ajs6f
*
*/
public class FedoraEvent implements Event {

Event e;
Expand Down
Expand Up @@ -2,6 +2,12 @@

import javax.jcr.observation.Event;

/**
* Simple EventFilter that does no filtering.
*
* @author ajs6f
*
*/
public class NOOPFilter implements EventFilter {
@Override
public boolean apply(Event event) {
Expand Down
83 changes: 45 additions & 38 deletions fcrepo-kernel/src/main/java/org/fcrepo/observer/SimpleObserver.java
@@ -1,3 +1,4 @@

package org.fcrepo.observer;

import static com.google.common.collect.Collections2.filter;
Expand All @@ -17,45 +18,51 @@
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.eventbus.EventBus;

/**
* Simple JCR EventListener that filters JCR Events through a Fedora
* EventFilter and puts the resulting stream onto the internal
* Fedora EventBus as a stream of FedoraEvents.
*
* @author ajs6f
*
*/
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;

final private Logger logger = LoggerFactory.getLogger(SimpleObserver.class);

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

// it's okay to suppress type-safety warning here,
// because we know that EventIterator only produces
// Events, like an Iterator<Event>
@SuppressWarnings("unchecked")
@Override
public void onEvent(EventIterator events) {
for (Event e : filter(new Builder<Event>().addAll(events).build(),
eventFilter)) {
logger.debug("Putting event: " + e.toString() + " on the bus.");
eventBus.post(new FedoraEvent(e));
}
}
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;

final private Logger logger = LoggerFactory.getLogger(SimpleObserver.class);

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

// it's okay to suppress type-safety warning here,
// because we know that EventIterator only produces
// Events, like an Iterator<Event>
@SuppressWarnings("unchecked")
@Override
public void onEvent(EventIterator events) {
for (Event e : filter(new Builder<Event>().addAll(events).build(),
eventFilter)) {
logger.debug("Putting event: " + e.toString() + " on the bus.");
eventBus.post(new FedoraEvent(e));
}
}

}

0 comments on commit 64d262f

Please sign in to comment.