Skip to content

Commit

Permalink
Simplifying DefaultFilter implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
escowles committed Apr 15, 2015
1 parent 7852d61 commit 89b4821
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 26 deletions.
Expand Up @@ -15,8 +15,10 @@
*/
package org.fcrepo.kernel.impl.observer;

import static com.google.common.base.Functions.toStringFunction;
import static com.google.common.base.Throwables.propagate;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Collections2.transform;
import static com.google.common.collect.Sets.newHashSet;
import static org.fcrepo.kernel.FedoraJcrTypes.FEDORA_BINARY;
import static org.fcrepo.kernel.FedoraJcrTypes.FEDORA_NON_RDF_SOURCE_DESCRIPTION;
import static org.fcrepo.kernel.FedoraJcrTypes.FEDORA_CONTAINER;
Expand All @@ -26,18 +28,17 @@
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
import javax.jcr.observation.Event;

import com.google.common.base.Function;
import com.google.common.base.Predicate;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.fcrepo.kernel.observer.EventFilter;
import org.slf4j.Logger;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;

/**
* {@link EventFilter} that passes only events emitted from nodes with a Fedora
Expand All @@ -57,12 +58,8 @@ public class DefaultFilter implements EventFilter {

private static final Logger LOGGER = getLogger(DefaultFilter.class);

private static final Function<NodeType, String> nodetype2string = new Function<NodeType, String>() {
@Override
public String apply(final NodeType input) {
return input.getName();
}
};
private static final HashSet<String> fedoraMixins =
newHashSet(FEDORA_BINARY, FEDORA_CONTAINER, FEDORA_NON_RDF_SOURCE_DESCRIPTION, FEDORA_RESOURCE);

/**
* Default constructor.
Expand All @@ -78,11 +75,7 @@ public Predicate<Event> getFilter(final Session session) {
@Override
public boolean apply(final Event event) {
try {
final Collection<String> mixinTypes = getMixinTypes(event);
return mixinTypes.contains(FEDORA_RESOURCE)
|| mixinTypes.contains(FEDORA_BINARY)
|| mixinTypes.contains(FEDORA_NON_RDF_SOURCE_DESCRIPTION)
|| mixinTypes.contains(FEDORA_CONTAINER);
return !Collections.disjoint(getMixinTypes(event), fedoraMixins);
} catch (final PathNotFoundException e) {
LOGGER.trace("Dropping event from outside our assigned workspace:\n", e);
return false;
Expand All @@ -96,8 +89,7 @@ protected static Collection<String> getMixinTypes(final Event event)
try {
final org.modeshape.jcr.api.observation.Event modeEvent =
(org.modeshape.jcr.api.observation.Event) event;
return ImmutableSet.copyOf(transform(ImmutableList.copyOf(modeEvent.getMixinNodeTypes()),
nodetype2string));
return transform(Arrays.asList(modeEvent.getMixinNodeTypes()), toStringFunction());
} catch (final ClassCastException e) {
throw new ClassCastException(event + " is not a Modeshape Event");
}
Expand Down
Expand Up @@ -15,7 +15,6 @@
*/
package org.fcrepo.kernel.impl.observer;

import static com.google.common.base.Throwables.propagate;
import static org.slf4j.LoggerFactory.getLogger;

import javax.jcr.PathNotFoundException;
Expand All @@ -25,6 +24,7 @@

import com.google.common.base.Predicate;

import org.fcrepo.kernel.exception.RepositoryRuntimeException;
import org.fcrepo.kernel.observer.EventFilter;
import org.slf4j.Logger;

Expand Down Expand Up @@ -66,7 +66,7 @@ public boolean apply(final Event event) {
LOGGER.trace("Dropping event from outside our assigned workspace:\n", e);
return false;
} catch (final RepositoryException e) {
throw propagate(e);
throw new RepositoryRuntimeException(e);
}
}

Expand Down
Expand Up @@ -70,10 +70,10 @@ public class DefaultFilterTest {
public void setUp() {
initMocks(this);
testObj = new DefaultFilter();
when(fedoraResource.getName()).thenReturn(FEDORA_RESOURCE);
when(fedoraContainer.getName()).thenReturn(FEDORA_CONTAINER);
when(fedoraDatastream.getName()).thenReturn(FEDORA_NON_RDF_SOURCE_DESCRIPTION);
when(fedoraBinary.getName()).thenReturn(FEDORA_BINARY);
when(fedoraResource.toString()).thenReturn(FEDORA_RESOURCE);
when(fedoraContainer.toString()).thenReturn(FEDORA_CONTAINER);
when(fedoraDatastream.toString()).thenReturn(FEDORA_NON_RDF_SOURCE_DESCRIPTION);
when(fedoraBinary.toString()).thenReturn(FEDORA_BINARY);
}

@Test
Expand Down
Expand Up @@ -57,8 +57,8 @@ public void setUp() {
final Set<String> suppressedMixins = new HashSet<>();
suppressedMixins.add("audit:InternalEvent");
testObj = new SuppressByMixinFilter(suppressedMixins);
when(fedoraContainer.getName()).thenReturn(FEDORA_CONTAINER);
when(internalEvent.getName()).thenReturn("audit:InternalEvent");
when(fedoraContainer.toString()).thenReturn(FEDORA_CONTAINER);
when(internalEvent.toString()).thenReturn("audit:InternalEvent");
}

@Test
Expand Down

0 comments on commit 89b4821

Please sign in to comment.