Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
unit testing hotspots, and refactoring the default rdf generators
- Loading branch information
Showing
8 changed files
with
275 additions
and
66 deletions.
There are no files selected for viewing
35 changes: 3 additions & 32 deletions
35
fcrepo-generator-rdf/src/main/java/org/fcrepo/generator/rdf/DefaultDatastreamGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,60 +1,31 @@ | ||
|
||
package org.fcrepo.generator.rdf; | ||
|
||
import static com.google.common.collect.ImmutableList.copyOf; | ||
import static com.google.common.collect.Iterables.concat; | ||
import static com.google.common.collect.Lists.transform; | ||
import static org.slf4j.LoggerFactory.getLogger; | ||
|
||
import java.util.List; | ||
|
||
import javax.jcr.Node; | ||
import javax.jcr.RepositoryException; | ||
import javax.ws.rs.core.UriBuilderException; | ||
import javax.ws.rs.core.UriInfo; | ||
|
||
import org.fcrepo.Datastream; | ||
import org.slf4j.Logger; | ||
import com.google.common.base.Function; | ||
|
||
public class DefaultDatastreamGenerator implements TripleSource<Datastream> { | ||
|
||
private static final PropertiesGenerator propertiesGenerator = | ||
new PropertiesGenerator(); | ||
|
||
private static final NodeTypesGenerator nodeTypesGenerator = | ||
new NodeTypesGenerator(); | ||
|
||
private static final Logger logger = | ||
private static final Logger LOGGER = | ||
getLogger(DefaultDatastreamGenerator.class); | ||
|
||
@Override | ||
public List<Triple> getTriples(final Datastream ds, | ||
final UriInfo... uriInfos) throws RepositoryException { | ||
final UriInfo uriInfo = uriInfos[0]; | ||
final Node node = ds.getNode(); | ||
logger.debug("Generating triples for object: " + ds.getDsId()); | ||
LOGGER.debug("Generating triples for object: " + ds.getDsId()); | ||
// now we alter the subjects of these triples to be true | ||
// (and dereferenceable) URIs, based on our knowledge that these are | ||
// Fedora datastreams | ||
return transform(copyOf(concat(propertiesGenerator.getTriples(node, | ||
uriInfo), nodeTypesGenerator.getTriples(node))), | ||
new Function<Triple, Triple>() { | ||
|
||
@Override | ||
public Triple apply(final Triple t) { | ||
if (t == null) { | ||
return null; | ||
} | ||
try { | ||
return new Triple(uriInfo.getBaseUriBuilder().path( | ||
"rest").path(node.getPath()) | ||
.build().toString(), t.predicate, t.object); | ||
} catch (UriBuilderException | RepositoryException e) { | ||
throw new IllegalStateException(e); | ||
} | ||
} | ||
}); | ||
return DefaultNodeGenerator.getTriples(node, uriInfos); | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 58 additions & 0 deletions
58
fcrepo-generator-rdf/src/main/java/org/fcrepo/generator/rdf/DefaultNodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
|
||
package org.fcrepo.generator.rdf; | ||
|
||
import static com.google.common.collect.ImmutableList.copyOf; | ||
import static com.google.common.collect.Iterables.concat; | ||
import static com.google.common.collect.Lists.transform; | ||
import static org.slf4j.LoggerFactory.getLogger; | ||
import static org.fcrepo.generator.rdf.TripleSource.Triple; | ||
|
||
import java.util.List; | ||
|
||
import javax.jcr.Node; | ||
import javax.jcr.RepositoryException; | ||
import javax.ws.rs.core.UriBuilderException; | ||
import javax.ws.rs.core.UriInfo; | ||
|
||
import org.slf4j.Logger; | ||
import com.google.common.base.Function; | ||
|
||
public abstract class DefaultNodeGenerator { | ||
|
||
private static final PropertiesGenerator propertiesGenerator = | ||
new PropertiesGenerator(); | ||
|
||
private static final NodeTypesGenerator nodeTypesGenerator = | ||
new NodeTypesGenerator(); | ||
|
||
private static final Logger logger = | ||
getLogger(DefaultNodeGenerator.class); | ||
|
||
public static List<TripleSource.Triple> getTriples(final Node node, | ||
final UriInfo... uriInfos) throws RepositoryException { | ||
final UriInfo uriInfo = uriInfos[0]; | ||
logger.debug("Generating triples for object: {}" + node.getPath()); | ||
// now we alter the subjects of these triples to be true | ||
// (and dereferenceable) URIs, based on our knowledge that these are | ||
// Fedora datastreams | ||
return transform(copyOf(concat(propertiesGenerator.getTriples(node, | ||
uriInfo), nodeTypesGenerator.getTriples(node))), | ||
new Function<Triple, Triple>() { | ||
|
||
@Override | ||
public Triple apply(final Triple t) { | ||
if (t == null) { | ||
return null; | ||
} | ||
try { | ||
return new Triple(uriInfo.getBaseUriBuilder().path( | ||
"rest").path(node.getPath()) | ||
.build().toString(), t.predicate, t.object); | ||
} catch (UriBuilderException | RepositoryException e) { | ||
throw new IllegalStateException(e); | ||
} | ||
} | ||
}); | ||
|
||
} | ||
} |
47 changes: 47 additions & 0 deletions
47
...-generator-rdf/src/test/java/org/fcrepo/generator/rdf/DefaultDatastreamGeneratorTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package org.fcrepo.generator.rdf; | ||
|
||
import static org.mockito.Mockito.mock; | ||
import static org.mockito.Mockito.verify; | ||
import static org.mockito.Mockito.when; | ||
import static org.powermock.api.mockito.PowerMockito.mockStatic; | ||
import static org.powermock.api.mockito.PowerMockito.verifyStatic; | ||
|
||
import javax.jcr.Node; | ||
import javax.jcr.RepositoryException; | ||
import javax.ws.rs.core.UriInfo; | ||
|
||
import org.fcrepo.Datastream; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
import org.junit.runner.RunWith; | ||
import org.powermock.core.classloader.annotations.PrepareForTest; | ||
import org.powermock.modules.junit4.PowerMockRunner; | ||
|
||
@RunWith(PowerMockRunner.class) | ||
@PrepareForTest({DefaultNodeGenerator.class}) | ||
public class DefaultDatastreamGeneratorTest { | ||
|
||
private DefaultDatastreamGenerator testObj; | ||
|
||
@Before | ||
public void setUp() { | ||
testObj = new DefaultDatastreamGenerator(); | ||
} | ||
|
||
@Test | ||
public void testGetTriples() throws RepositoryException { | ||
String path = "/testing/fake/object"; | ||
UriInfo mockUris = mock(UriInfo.class); | ||
Node mockNode = mock(Node.class); | ||
when(mockNode.getPath()).thenReturn(path); | ||
Datastream mockObj = mock(Datastream.class); | ||
when(mockObj.getNode()).thenReturn(mockNode); | ||
mockStatic(DefaultNodeGenerator.class); | ||
when(DefaultNodeGenerator.getTriples(mockNode, mockUris)) | ||
.thenReturn(null); | ||
testObj.getTriples(mockObj, mockUris); | ||
verify(mockObj).getNode(); | ||
verifyStatic(); | ||
DefaultNodeGenerator.getTriples(mockNode, mockUris); | ||
} | ||
} |
47 changes: 47 additions & 0 deletions
47
...enerator-rdf/src/test/java/org/fcrepo/generator/rdf/DefaultFedoraObjectGeneratorTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package org.fcrepo.generator.rdf; | ||
|
||
import static org.mockito.Mockito.mock; | ||
import static org.mockito.Mockito.verify; | ||
import static org.mockito.Mockito.when; | ||
import static org.powermock.api.mockito.PowerMockito.mockStatic; | ||
import static org.powermock.api.mockito.PowerMockito.verifyStatic; | ||
|
||
import javax.jcr.Node; | ||
import javax.jcr.RepositoryException; | ||
import javax.ws.rs.core.UriInfo; | ||
|
||
import org.fcrepo.FedoraObject; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
import org.junit.runner.RunWith; | ||
import org.powermock.core.classloader.annotations.PrepareForTest; | ||
import org.powermock.modules.junit4.PowerMockRunner; | ||
|
||
@RunWith(PowerMockRunner.class) | ||
@PrepareForTest({DefaultNodeGenerator.class}) | ||
public class DefaultFedoraObjectGeneratorTest { | ||
|
||
private DefaultFedoraObjectGenerator testObj; | ||
|
||
@Before | ||
public void setUp() { | ||
testObj = new DefaultFedoraObjectGenerator(); | ||
} | ||
|
||
@Test | ||
public void testGetTriples() throws RepositoryException { | ||
String path = "/testing/fake/object"; | ||
UriInfo mockUris = mock(UriInfo.class); | ||
Node mockNode = mock(Node.class); | ||
when(mockNode.getPath()).thenReturn(path); | ||
FedoraObject mockObj = mock(FedoraObject.class); | ||
when(mockObj.getNode()).thenReturn(mockNode); | ||
mockStatic(DefaultNodeGenerator.class); | ||
when(DefaultNodeGenerator.getTriples(mockNode, mockUris)) | ||
.thenReturn(null); | ||
testObj.getTriples(mockObj, mockUris); | ||
verify(mockObj).getNode(); | ||
verifyStatic(); | ||
DefaultNodeGenerator.getTriples(mockNode, mockUris); | ||
} | ||
} |
54 changes: 54 additions & 0 deletions
54
fcrepo-generator-rdf/src/test/java/org/fcrepo/generator/rdf/DefaultNodeGeneratorTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
package org.fcrepo.generator.rdf; | ||
|
||
import static org.junit.Assert.assertEquals; | ||
import static org.junit.Assert.assertTrue; | ||
import static org.mockito.Mockito.*; | ||
|
||
import java.net.URI; | ||
import java.util.List; | ||
|
||
import javax.jcr.Node; | ||
import javax.jcr.Property; | ||
import javax.jcr.PropertyIterator; | ||
import javax.jcr.RepositoryException; | ||
import javax.jcr.nodetype.NodeType; | ||
import javax.ws.rs.core.UriBuilder; | ||
import javax.ws.rs.core.UriInfo; | ||
|
||
import org.fcrepo.Datastream; | ||
import org.fcrepo.generator.rdf.TripleSource.Triple; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
|
||
public class DefaultNodeGeneratorTest { | ||
|
||
@Test | ||
public void testGetTriples() throws RepositoryException { | ||
String path = "/testing/fake/object"; | ||
UriInfo mockUris = mock(UriInfo.class); | ||
UriBuilder mockBuilder = mock(UriBuilder.class); | ||
when(mockBuilder.path(anyString())).thenReturn(mockBuilder); | ||
URI mockUri = URI.create("info:fedora/mock/test/uri"); | ||
when(mockBuilder.build()).thenReturn(mockUri); | ||
when(mockUris.getBaseUriBuilder()).thenReturn(mockBuilder); | ||
Node mockNode = mock(Node.class); | ||
when(mockNode.getPath()).thenReturn(path); | ||
Property mockProp = mock(Property.class); | ||
when(mockProp.getParent()).thenReturn(mockNode); | ||
when(mockProp.getString()).thenReturn("mockValue"); | ||
PropertyIterator mockProps = mock(PropertyIterator.class); | ||
when(mockNode.getProperties()).thenReturn(mockProps); | ||
NodeType mockType = mock(NodeType.class); | ||
when(mockType.getName()).thenReturn("mock:nodeType"); | ||
when(mockNode.getPrimaryNodeType()).thenReturn(mockType); | ||
NodeType mockMixin = mock(NodeType.class); | ||
when(mockMixin.getName()).thenReturn("mock:mixinType"); | ||
NodeType[] mockMixins = new NodeType[]{mockMixin}; | ||
when(mockNode.getMixinNodeTypes()).thenReturn(mockMixins); | ||
List<Triple> actual = DefaultNodeGenerator.getTriples(mockNode, mockUris); | ||
assertTrue(actual.size() > 0); | ||
for (Triple triple: actual) { | ||
assertEquals(mockUri.toString(), triple.subject); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.