Skip to content

Commit

Permalink
add JCR hierarchy properties to our properties serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
cbeer committed May 13, 2013
1 parent abbcfd0 commit 623f181
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
28 changes: 26 additions & 2 deletions fcrepo-kernel/src/main/java/org/fcrepo/FedoraResource.java
Expand Up @@ -16,6 +16,7 @@

import javax.jcr.NamespaceRegistry;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.RepositoryException;
Expand Down Expand Up @@ -185,14 +186,37 @@ public Model getPropertiesModel() throws RepositoryException {
addJcrPropertiesToModel(contentSubject, model, contentProperties);
}

listener = new JcrPropertyStatementListener(subject, getNode());
addJcrTreePropertiesToModel(subject, model);

listener = new JcrPropertyStatementListener(subject, getNode());

model.register(listener);

return model;
}

private void addJcrPropertiesToModel(Resource subject, Model model, PropertyIterator properties) throws RepositoryException {
private void addJcrTreePropertiesToModel(final Resource subject, final Model model) throws RepositoryException {
model.add(subject, model.createProperty("info:fedora/fedora-system:def/internal#hasParent"), getGraphSubject(node.getParent()));

final NodeIterator nodeIterator = node.getNodes();

long numberOfChildren = 0L;

while (nodeIterator.hasNext()) {
final Node childNode = nodeIterator.nextNode();

if (childNode.getName().equals(JcrConstants.JCR_CONTENT)) {
continue;
}

model.add(subject, model.createProperty("info:fedora/fedora-system:def/internal#hasChild"), getGraphSubject(childNode));
numberOfChildren += 1;
}

model.add(subject, model.createProperty("info:fedora/fedora-system:def/internal#numberOfChildren"), ResourceFactory.createTypedLiteral(numberOfChildren));
}

private void addJcrPropertiesToModel(Resource subject, Model model, PropertyIterator properties) throws RepositoryException {
while (properties.hasNext()) {
final Property property = properties.nextProperty();

Expand Down
Expand Up @@ -3,6 +3,7 @@
import com.hp.hpl.jena.datatypes.RDFDatatype;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.graph.Node_Literal;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.shared.PrefixMapping;
Expand Down Expand Up @@ -130,7 +131,12 @@ public void testDatastreamGraph() throws IOException, RepositoryException, Inval
o = Node.createLiteral("fedora:datastream");
assertTrue(object.getGraphStore().getDefaultGraph().contains(s, p, o));

// structure
p = Node.createURI("info:fedora/fedora-system:def/internal#numberOfChildren");
RDFDatatype long_datatype = ResourceFactory.createTypedLiteral(0L).getDatatype();
o = Node.createLiteral("0", long_datatype);

assertTrue(object.getGraphStore().getDefaultGraph().contains(s, p, o));
// relations
p = Node.createURI("info:fedora/fedora-system:def/relations-external#isPartOf");
o = Node.createURI("info:fedora/testDatastreamGraphParent");
Expand Down

0 comments on commit 623f181

Please sign in to comment.