Skip to content

Commit

Permalink
Removing unneeded extra operations in iterators
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs6f committed Mar 16, 2015
1 parent b59fe63 commit bb4129c
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 83 deletions.
Expand Up @@ -526,15 +526,15 @@ public Statement map1(final Statement stmnt) {
final StringBuilder exceptions = new StringBuilder();
try {
new RdfRemover(idTranslator, getSession(), replacementStream
.withThisContext(differencer), hashAndSkolemCreator).consume();
.withThisContext(differencer)).consume();
} catch (final MalformedRdfException e) {
exceptions.append(e.getMessage());
exceptions.append("\n");
}

try {
new RdfAdder(idTranslator, getSession(), replacementStream
.withThisContext(differencer.notCommon()), hashAndSkolemCreator).consume();
.withThisContext(differencer.notCommon())).consume();
} catch (final MalformedRdfException e) {
exceptions.append(e.getMessage());
}
Expand Down
Expand Up @@ -21,8 +21,6 @@
import static org.slf4j.LoggerFactory.getLogger;

import com.google.common.base.Joiner;

import org.fcrepo.kernel.models.Container;
import org.fcrepo.kernel.models.FedoraResource;
import org.fcrepo.kernel.exception.MalformedRdfException;
import org.fcrepo.kernel.exception.RepositoryRuntimeException;
Expand All @@ -32,11 +30,8 @@
import javax.jcr.Session;

import org.fcrepo.kernel.impl.rdf.JcrRdfTools;
import org.fcrepo.kernel.impl.rdf.Skolemizer;
import org.fcrepo.kernel.services.Service;
import org.fcrepo.kernel.utils.iterators.RdfStream;
import org.fcrepo.kernel.utils.iterators.RdfStreamConsumer;

import org.slf4j.Logger;

import com.google.common.base.Predicate;
Expand Down Expand Up @@ -71,24 +66,17 @@ public abstract class PersistingRdfStreamConsumer implements RdfStreamConsumer {

private final List<String> exceptions;

private final Skolemizer skolemizer;

private Service<Container> skolemService;

/**
* Ordinary constructor.
*
* @param idTranslator the id translator
* @param session the session
* @param stream the rdf stream
* @param skolemService
*/
public PersistingRdfStreamConsumer(final IdentifierConverter<Resource, FedoraResource> idTranslator,
final Session session, final RdfStream stream, final Service<Container> skolemService) {
final Session session, final RdfStream stream) {
this.idTranslator = idTranslator;
this.jcrRdfTools = new JcrRdfTools(idTranslator, session);
this.skolemizer = new Skolemizer(m.asRDFNode(stream.topic()).asResource());
this.skolemService = skolemService;
this.isFedoraSubjectTriple = new Predicate<Triple>() {

@Override
Expand All @@ -108,15 +96,17 @@ public boolean apply(final Triple t) {

};
// we knock out non-Fedora RDF
this.stream = stream.withThisContext(stream.filter(isFedoraSubjectTriple)).session(session);
this.stream =
stream.withThisContext(stream.filter(isFedoraSubjectTriple));

this.exceptions = new ArrayList<>();
}

@Override
public void consume() throws MalformedRdfException {
while (stream.hasNext()) {
final Statement t = m.asStatement(stream.next());
LOGGER.debug("Operating on triple {}.", t);
LOGGER.debug("Operating triple {}.", t);

try {
operateOnTriple(t);
Expand All @@ -130,25 +120,9 @@ public void consume() throws MalformedRdfException {
}
}

protected void operateOnTriple(final Statement input) throws MalformedRdfException {
protected void operateOnTriple(final Statement t) throws MalformedRdfException {
try {

final Statement t = skolemizer.apply(input);
for (final Resource skolemNode : skolemizer.get() ) {
LOGGER.debug("Checking for skolem node: {}", skolemNode);
final String skolemPath = idTranslator.asString(skolemNode);
if (!skolemService.exists(stream.session(), skolemPath)) {
LOGGER.debug("Creating skolem node at: {}", skolemPath);
skolemService.findOrCreate(stream.session(), skolemPath).getNode().addMixin("fedora:Skolem");
}
}
final Resource subject = t.getSubject();
final String path = translator().asString(subject);
if (path.contains("/#/")) {
// a hash-URI
LOGGER.debug("Creating hash node: {}", path);
skolemService.findOrCreate(stream.session(), path);
}
final FedoraResource subjectNode = translator().convert(subject);

// if this is a user-managed RDF type assertion, update the node's
Expand All @@ -168,7 +142,6 @@ protected void operateOnTriple(final Statement input) throws MalformedRdfExcepti
operateOnProperty(t, subjectNode);
}
} catch (final RepositoryException | RepositoryRuntimeException e) {
LOGGER.warn("Received exception: ", e);
throw new MalformedRdfException(e.getMessage(), e);
}
}
Expand Down
Expand Up @@ -20,12 +20,9 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;

import org.fcrepo.kernel.models.Container;
import org.fcrepo.kernel.models.FedoraResource;
import org.fcrepo.kernel.identifiers.IdentifierConverter;
import org.fcrepo.kernel.services.Service;
import org.fcrepo.kernel.utils.iterators.RdfStream;

import org.slf4j.Logger;

import com.hp.hpl.jena.rdf.model.Resource;
Expand All @@ -51,8 +48,8 @@ public class RdfAdder extends PersistingRdfStreamConsumer {
* @param stream the rdf stream
*/
public RdfAdder(final IdentifierConverter<Resource, FedoraResource> idTranslator, final Session session,
final RdfStream stream, final Service<Container> skolemService ) {
super(idTranslator, session, stream, skolemService);
final RdfStream stream) {
super(idTranslator, session, stream);
}

@Override
Expand Down
Expand Up @@ -20,12 +20,9 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;

import org.fcrepo.kernel.models.Container;
import org.fcrepo.kernel.models.FedoraResource;
import org.fcrepo.kernel.identifiers.IdentifierConverter;
import org.fcrepo.kernel.services.Service;
import org.fcrepo.kernel.utils.iterators.RdfStream;

import org.slf4j.Logger;

import com.hp.hpl.jena.rdf.model.Resource;
Expand All @@ -51,8 +48,8 @@ public class RdfRemover extends PersistingRdfStreamConsumer {
* @param stream the stream
*/
public RdfRemover(final IdentifierConverter<Resource, FedoraResource> idTranslator, final Session session,
final RdfStream stream, final Service<Container> skolemService) {
super(idTranslator, session, stream, skolemService);
final RdfStream stream) {
super(idTranslator, session, stream);
}

@Override
Expand Down
Expand Up @@ -35,13 +35,10 @@
import javax.jcr.Node;
import javax.jcr.Session;

import org.fcrepo.kernel.models.Container;
import org.fcrepo.kernel.models.FedoraResource;
import org.fcrepo.kernel.identifiers.IdentifierConverter;
import org.fcrepo.kernel.impl.rdf.impl.DefaultIdentifierTranslator;
import org.fcrepo.kernel.services.Service;
import org.fcrepo.kernel.utils.iterators.RdfStream;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
Expand Down Expand Up @@ -75,7 +72,7 @@ public void testConsumeAsync() {
final Set<Resource> acceptedMixins = newHashSet();

testPersister =
new PersistingRdfStreamConsumer(idTranslator, mockSession, testStream, mockSkolemService) {
new PersistingRdfStreamConsumer(idTranslator, mockSession, testStream) {

@Override
protected void operateOnProperty(final Statement s,
Expand Down Expand Up @@ -115,7 +112,7 @@ public void testBadStream() throws Exception {
.thenThrow(new RuntimeException("Expected."));
testPersister =
new PersistingRdfStreamConsumer(idTranslator, mockSession,
new RdfStream(mockTriples), mockSkolemService) {
new RdfStream(mockTriples)) {

@Override
protected void operateOnProperty(final Statement s,
Expand Down Expand Up @@ -202,9 +199,6 @@ public void setUp() {

private IdentifierConverter<Resource, FedoraResource> idTranslator;

@Mock
private Service<Container> mockSkolemService;

@Mock
private Iterator<Triple> mockTriples;

Expand Down
Expand Up @@ -31,7 +31,6 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;

import java.util.Iterator;
import java.util.Map;

Expand All @@ -48,19 +47,15 @@
import javax.jcr.nodetype.NodeTypeTemplate;
import javax.jcr.nodetype.PropertyDefinition;

import org.fcrepo.kernel.models.Container;
import org.fcrepo.kernel.models.FedoraResource;
import org.fcrepo.kernel.exception.MalformedRdfException;
import org.fcrepo.kernel.identifiers.IdentifierConverter;
import org.fcrepo.kernel.impl.FedoraResourceImpl;
import org.fcrepo.kernel.services.Service;
import org.fcrepo.kernel.utils.iterators.RdfStream;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.modeshape.jcr.api.NamespaceRegistry;

import com.google.common.collect.ImmutableMap;
import com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.rdf.model.Model;
Expand Down Expand Up @@ -121,7 +116,7 @@ public class RdfAdderTest {

@Test
public void testAddingProperty() throws Exception {
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream, mockSkolemService);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream);
when(mockNode.setProperty(propertyShortName, mockValue, UNDEFINED)).thenReturn(mockProperty);
testAdder.operateOnProperty(descriptiveStmnt, resource);
verify(mockNode).setProperty(propertyShortName, mockValue, UNDEFINED);
Expand All @@ -130,14 +125,14 @@ public void testAddingProperty() throws Exception {

@Test
public void testAddingModelWithStreamNamespace() throws Exception {
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream, mockSkolemService);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream);
testAdder.operateOnMixin(mixinStmnt.getObject().asResource(), resource);
verify(mockNode).addMixin(anyString());
}

@Test
public void testAddingModelWithPrimaryType() throws Exception {
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream, mockSkolemService);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream);
when(mockNode.isNodeType(mixinShortName)).thenReturn(true);
testAdder.operateOnMixin(createResource(mixinLongName), resource);

Expand All @@ -148,38 +143,38 @@ public void testAddingModelWithPrimaryType() throws Exception {
@Test
public void testAddingWithNotYetDefinedNamespace() throws Exception {
// we drop our stream namespace map
testStream = new RdfStream(mockTriples).topic(descriptiveTriple.getSubject());
testStream = new RdfStream(mockTriples);
when(
mockSession
.getNamespacePrefix(getJcrNamespaceForRDFNamespace(type
.getNameSpace()))).thenThrow(new NamespaceException("Expected."));
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream, mockSkolemService);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream);
testAdder.operateOnMixin(mixinStmnt.getObject().asResource(), resource);
}

@Test
public void testAddingWithRepoNamespace() throws Exception {
// we drop our stream namespace map
testStream = new RdfStream(mockTriples).topic(descriptiveTriple.getSubject());
testStream = new RdfStream(mockTriples);
when(
mockSession
.getNamespacePrefix(getJcrNamespaceForRDFNamespace(type
.getNameSpace()))).thenReturn("rdf");
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream, mockSkolemService);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream);
testAdder.operateOnMixin(mixinStmnt.getObject().asResource(), resource);
}

@Test(expected = MalformedRdfException.class)
public void testAddingWithBadMixinOnNode() throws Exception {
when(mockNode.canAddMixin(mixinShortName)).thenReturn(false);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream, mockSkolemService);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream);
testAdder.operateOnMixin(mixinStmnt.getObject().asResource(), resource);
}

@Test
public void testAddingWithBadMixinForRepo() throws Exception {
when(mockNodeTypeManager.hasNodeType(mixinShortName)).thenReturn(false);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream, mockSkolemService);
testAdder = new RdfAdder(mockGraphSubjects, mockSession, testStream);
testAdder.operateOnMixin(mixinStmnt.getObject().asResource(), resource);
verify(mockNodeTypeManager).registerNodeType(mockNodeTypeTemplate, false);
verify(mockNodeTypeTemplate).setName(mixinShortName);
Expand Down Expand Up @@ -233,7 +228,7 @@ public void setUp() throws RepositoryException {
when(mockTriples.hasNext()).thenReturn(true, true, false);
when(mockTriples.next()).thenReturn(descriptiveTriple, mixinTriple);
resource = new FedoraResourceImpl(mockNode);
testStream = new RdfStream(mockTriples).topic(descriptiveTriple.getSubject());
testStream = new RdfStream(mockTriples);
testStream.namespaces(mockNamespaceMap);
}

Expand Down Expand Up @@ -274,9 +269,6 @@ public void setUp() throws RepositoryException {

private RdfStream testStream;

@Mock
private Service<Container> mockSkolemService;

@Mock
private IdentifierConverter<Resource, FedoraResource> mockGraphSubjects;

Expand Down

0 comments on commit bb4129c

Please sign in to comment.