Skip to content

Commit

Permalink
Removing unnecessary inner classes in event filters
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs6f committed Dec 10, 2013
1 parent 24169f2 commit 38b731a
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 70 deletions.
Expand Up @@ -22,6 +22,8 @@
import static javax.jcr.observation.Event.PROPERTY_ADDED;
import static javax.jcr.observation.Event.PROPERTY_CHANGED;
import static javax.jcr.observation.Event.PROPERTY_REMOVED;
import static org.fcrepo.jcr.FedoraJcrTypes.FEDORA_DATASTREAM;
import static org.fcrepo.jcr.FedoraJcrTypes.FEDORA_OBJECT;
import static org.fcrepo.kernel.utils.FedoraTypesUtils.isFedoraObject;
import static org.fcrepo.kernel.utils.FedoraTypesUtils.isFedoraDatastream;

Expand All @@ -31,14 +33,16 @@
import javax.jcr.Session;
import javax.jcr.observation.Event;

import org.fcrepo.jcr.FedoraJcrTypes;

import com.google.common.base.Function;

/**
* EventFilter that passes only events emitted from nodes with
* a Fedora JCR type, or properties attached to them.
*
* @author ajs6f
* @author barmintor
* @date Dec 2013
*
* @author eddies
* @date Feb 7, 2013
*
Expand All @@ -47,64 +51,65 @@
*/
public class DefaultFilter implements EventFilter {

private Session session;

/**
* {@inheritDoc}
* Default constructor.
*/
public Function<Event, Event> getFilter(Session session) {
return new Filter(session);
public DefaultFilter() {
}

static class Filter implements Function<Event, Event> {
final Session session;
Filter(Session session) {
this.session = session;
}
/**
* Filter observer events to only include events on a FedoraObject or
* Datastream, or properties of an FedoraObject or Datastream.
*
* @param event the original event
* @return
*/
@Override
public Event apply(final Event event) {
try {
String nPath = event.getPath();
int nType = event.getType();
switch(nType) {
case NODE_ADDED:
break;
case NODE_REMOVED:
return event;
case PROPERTY_ADDED:
nPath = nPath.substring(0, nPath.lastIndexOf('/'));
break;
case PROPERTY_REMOVED:
nPath = nPath.substring(0, nPath.lastIndexOf('/'));
break;
case PROPERTY_CHANGED:
nPath = nPath.substring(0, nPath.lastIndexOf('/'));
break;
case NODE_MOVED:
break;
default:
return null;
}
/**
* @param session
*/
private DefaultFilter(final Session session) {
this.session = session;
}

final Node n = session.getNode(nPath);
if (isFedoraObject.apply(n)) {
return new FedoraEvent(event, FedoraJcrTypes.FEDORA_OBJECT);
}
if (isFedoraDatastream.apply(n)) {
return new FedoraEvent(event, FedoraJcrTypes.FEDORA_DATASTREAM);
}
} catch (final PathNotFoundException e) {
// not a node in the fedora workspace
return null;
} catch (final RepositoryException e) {
throw propagate(e);
@Override
public Function<Event, Event> getFilter(final Session session) {
return new DefaultFilter(session);
}

@Override
public Event apply(final Event event) {
try {
String nPath = event.getPath();
final int nType = event.getType();
switch (nType) {
case NODE_ADDED:
break;
case NODE_REMOVED:
return event;
case PROPERTY_ADDED:
nPath = nPath.substring(0, nPath.lastIndexOf('/'));
break;
case PROPERTY_REMOVED:
nPath = nPath.substring(0, nPath.lastIndexOf('/'));
break;
case PROPERTY_CHANGED:
nPath = nPath.substring(0, nPath.lastIndexOf('/'));
break;
case NODE_MOVED:
break;
default:
return null;
}

final Node n = session.getNode(nPath);
if (isFedoraObject.apply(n)) {
return new FedoraEvent(event, FEDORA_OBJECT);
}
if (isFedoraDatastream.apply(n)) {
return new FedoraEvent(event, FEDORA_DATASTREAM);
}
} catch (final PathNotFoundException e) {
// not a node in the fedora workspace
return null;
} catch (final RepositoryException e) {
throw propagate(e);
}
return null;
}

}
Expand Up @@ -25,12 +25,14 @@
* @author eddies
* @date Feb 7, 2013
*/
public interface EventFilter {
public interface EventFilter extends Function<Event, Event> {

/**
* Return a function to wrap Events, or transform to null
* if they should be skipped
* Return a function to wrap Events, or transform to null if they should be
* skipped
*
* @param session
* @return
*/
public Function<Event, Event> getFilter(Session session);
public Function<Event, Event> getFilter(final Session session);
}
Expand Up @@ -25,23 +25,22 @@
*
* @author eddies
* @date Feb 7, 2013
*
* @author ajs6f
* @author barmintor
* @date Dec 2013
*
*/
public class NOOPFilter implements EventFilter {

private static final Filter FILTER = new Filter();
@Override
public Function<Event, Event> getFilter(Session session) {
return FILTER;
public Function<Event, Event> getFilter(final Session session) {
return this;
}
static class Filter implements Function<Event, Event> {
/**
* A no-op filter that passes every Event through.
* @param event
* @return true under all circumstances
*/
@Override
public Event apply(final Event event) {
return event;
}

@Override
public Event apply(final Event event) {
return event;
}

}

0 comments on commit 38b731a

Please sign in to comment.