Skip to content

Commit

Permalink
Further examples of RDF generation
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs6f committed Feb 5, 2015
1 parent 4343f34 commit 56e604d
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 150 deletions.
Expand Up @@ -15,13 +15,12 @@
*/
package org.fcrepo.kernel.impl.rdf.impl;

import static com.google.common.base.Throwables.propagate;
import static com.google.common.collect.ImmutableSet.builder;
import static com.hp.hpl.jena.graph.NodeFactory.createLiteral;
import static com.hp.hpl.jena.graph.NodeFactory.createURI;
import static com.hp.hpl.jena.graph.Triple.create;
import static com.hp.hpl.jena.rdf.model.ResourceFactory.createResource;
import static com.hp.hpl.jena.rdf.model.ResourceFactory.createTypedLiteral;
import static com.hp.hpl.jena.vocabulary.RDF.type;
import static org.fcrepo.kernel.RdfLexicon.CONTENT_LOCATION_TYPE;
import static org.fcrepo.kernel.RdfLexicon.FIXITY_TYPE;
import static org.fcrepo.kernel.RdfLexicon.HAS_MESSAGE_DIGEST;
Expand All @@ -33,18 +32,16 @@

import java.net.URI;
import java.util.Calendar;
import java.util.Iterator;
import javax.jcr.RepositoryException;
import java.util.Collection;
import java.util.stream.Stream;

import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.vocabulary.RDF;

import org.fcrepo.kernel.models.FedoraResource;
import org.fcrepo.kernel.identifiers.IdentifierConverter;
import org.fcrepo.kernel.utils.FixityResult;

import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterators;
import com.hp.hpl.jena.graph.Triple;

/**
Expand All @@ -64,55 +61,37 @@ public class FixityRdfContext extends NodeRdfContext {
* @param blobs
*/
public FixityRdfContext(final FedoraResource resource,
final IdentifierConverter<Resource, FedoraResource> idTranslator,
final Iterable<FixityResult> blobs,
final URI digest,
final long size) {
final IdentifierConverter<Resource, FedoraResource> idTranslator, final Collection<FixityResult> blobs,
final URI digest, final long size) {
super(resource, idTranslator);

concat(Iterators.concat(Iterators.transform(blobs.iterator(),
new Function<FixityResult, Iterator<Triple>>() {
concat(blobs.stream()
.flatMap(
blob -> {
final com.hp.hpl.jena.graph.Node resultSubject = getTransientFixitySubject();
final Stream.Builder<Triple> b = Stream.builder();

@Override
public Iterator<Triple> apply(final FixityResult blob) {
final com.hp.hpl.jena.graph.Node resultSubject = getTransientFixitySubject();
final ImmutableSet.Builder<Triple> b = builder();
try {
b.add(create(idTranslator.reverse().convert(resource).asNode(),
HAS_FIXITY_RESULT.asNode(), resultSubject));
b.add(create(idTranslator.reverse().convert(resource).asNode(), HAS_FIXITY_RESULT
.asNode(), resultSubject));
b.add(create(resultSubject, RDF.type.asNode(), FIXITY_TYPE.asNode()));
final String storeIdentifier = blob.getStoreIdentifier();
final com.hp.hpl.jena.graph.Node contentLocation = createResource(storeIdentifier)
.asNode();
.asNode();
blob.getStatus(size, digest).stream().forEach(
state -> b.add(create(resultSubject, HAS_FIXITY_STATE.asNode(),
createLiteral(state.toString()))));

for (final FixityResult.FixityState state : blob.getStatus(size, digest)) {
b.add(create(resultSubject, HAS_FIXITY_STATE
.asNode(), createLiteral(state
.toString())));
}
final String checksum =
blob.getComputedChecksum().toString();
b.add(create(resultSubject, HAS_MESSAGE_DIGEST
.asNode(), createURI(checksum)));
b.add(create(resultSubject, HAS_SIZE.asNode(),
createTypedLiteral(
blob.getComputedSize())
final String checksum = blob.getComputedChecksum().toString();
b.add(create(resultSubject, HAS_MESSAGE_DIGEST.asNode(), createURI(checksum)));
b.add(create(resultSubject, HAS_SIZE.asNode(), createTypedLiteral(blob.getComputedSize())
.asNode()));
b.add(create(resultSubject, HAS_CONTENT_LOCATION.asNode(),
contentLocation));
b.add(create(contentLocation,
RDF.type.asNode(),
CONTENT_LOCATION_TYPE.asNode()));
b.add(create(contentLocation,
HAS_CONTENT_LOCATION_VALUE.asNode(),
b.add(create(resultSubject, HAS_CONTENT_LOCATION.asNode(), contentLocation));
b.add(create(contentLocation, type.asNode(), CONTENT_LOCATION_TYPE.asNode()));
b.add(create(contentLocation, HAS_CONTENT_LOCATION_VALUE.asNode(),
createLiteral(storeIdentifier)));

return b.build().iterator();
} catch (final RepositoryException e) {
throw propagate(e);
}
}
})));
return b.build();
}));
}

private com.hp.hpl.jena.graph.Node getTransientFixitySubject() {
Expand Down
Expand Up @@ -15,11 +15,7 @@
*/
package org.fcrepo.kernel.impl.rdf.impl;

import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterators;
import com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;

import org.fcrepo.kernel.models.NonRdfSourceDescription;
Expand All @@ -28,7 +24,6 @@
import org.fcrepo.kernel.identifiers.IdentifierConverter;
import org.fcrepo.kernel.impl.rdf.converters.ValueConverter;
import org.fcrepo.kernel.impl.rdf.impl.mappings.PropertyValueIterator;

import org.slf4j.Logger;

import javax.jcr.Node;
Expand All @@ -37,12 +32,16 @@
import javax.jcr.Value;

import java.util.Iterator;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;

import static com.google.common.collect.Iterators.singletonIterator;
import static com.hp.hpl.jena.graph.NodeFactory.createURI;
import static com.hp.hpl.jena.graph.Triple.create;
import static com.hp.hpl.jena.rdf.model.ResourceFactory.createResource;
import static java.util.Collections.emptyIterator;

import static java.util.stream.Stream.empty;

import static org.fcrepo.kernel.FedoraJcrTypes.LDP_BASIC_CONTAINER;
import static org.fcrepo.kernel.FedoraJcrTypes.LDP_DIRECT_CONTAINER;
import static org.fcrepo.kernel.FedoraJcrTypes.LDP_HAS_MEMBER_RELATION;
Expand All @@ -53,6 +52,7 @@
import static org.fcrepo.kernel.RdfLexicon.MEMBER_SUBJECT;
import static org.fcrepo.kernel.impl.identifiers.NodeResourceConverter.nodeConverter;
import static org.fcrepo.kernel.impl.rdf.converters.PropertyConverter.getPropertyNameFromPredicate;
import static org.fcrepo.kernel.impl.utils.Streams.fromIterator;
import static org.slf4j.LoggerFactory.getLogger;

/**
Expand All @@ -75,53 +75,35 @@ public LdpContainerRdfContext(final FedoraResource resource,
throws RepositoryException {
super(resource, idTranslator);
final Iterator<Property> memberReferences = resource.getNode().getReferences(LDP_MEMBER_RESOURCE);
final Iterator<Property> properties = Iterators.filter(memberReferences, isContainer );

if (properties.hasNext()) {
LOGGER.trace("Found membership containers for {}", resource);
concat(membershipContext(properties));
}
final Stream<Property> properties = fromIterator(memberReferences).filter(isContainer);
concat(properties.flatMap(property2triples));
}

private static Predicate<Property> isContainer = new Predicate<Property>() {

@Override
public boolean apply(final Property property) {
try {
final Node container = property.getParent();
return container.isNodeType(LDP_DIRECT_CONTAINER) || container.isNodeType(LDP_INDIRECT_CONTAINER);
} catch (final RepositoryException e) {
throw new RepositoryRuntimeException(e);
}
private static final Predicate<Property> isContainer = property -> {
try {
final Node container = property.getParent();
return container.isNodeType(LDP_DIRECT_CONTAINER) || container.isNodeType(LDP_INDIRECT_CONTAINER);
} catch (final RepositoryException e) {
throw new RepositoryRuntimeException(e);
}
};

private Iterator<Triple> membershipContext(final Iterator<Property> properties) {
return Iterators.concat(Iterators.transform(properties, nodes2triples()));
}

private Function<Property, Iterator<Triple>> nodes2triples() {
return new Function<Property,Iterator<Triple>>() {

@Override
public Iterator<Triple> apply(final Property property) {
try {
final FedoraResource resource = nodeConverter.convert(property.getParent());
return memberRelations(resource);
} catch (final RepositoryException e) {
throw new RepositoryRuntimeException(e);
}
}
};
}
private final Function<Property, Stream<Triple>> property2triples = property -> {
try {
final FedoraResource resource = nodeConverter.convert(property.getParent());
return memberRelations(resource);
} catch (final RepositoryException e) {
throw new RepositoryRuntimeException(e);
}
};

/**
* Get the member relations assert on the subject by the given node
* @param container
* @return
* @throws RepositoryException
*/
private Iterator<Triple> memberRelations(final FedoraResource container) throws RepositoryException {
private Stream<Triple> memberRelations(final FedoraResource container) throws RepositoryException {
final com.hp.hpl.jena.graph.Node memberRelation;

if (container.hasProperty(LDP_HAS_MEMBER_RELATION)) {
Expand All @@ -130,7 +112,7 @@ private Iterator<Triple> memberRelations(final FedoraResource container) throws
} else if (container.hasType(LDP_BASIC_CONTAINER)) {
memberRelation = LDP_MEMBER.asNode();
} else {
return emptyIterator();
return empty();
}

final String insertedContainerProperty;
Expand All @@ -139,17 +121,18 @@ private Iterator<Triple> memberRelations(final FedoraResource container) throws
if (container.hasProperty(LDP_INSERTED_CONTENT_RELATION)) {
insertedContainerProperty = container.getProperty(LDP_INSERTED_CONTENT_RELATION).getString();
} else {
return emptyIterator();
return empty();
}
} else {
insertedContainerProperty = MEMBER_SUBJECT.getURI();
}

final Iterator<FedoraResource> memberNodes = container.getChildren();
final Iterator<FedoraResource> memberNodesIterator = container.getChildren();
final Stream<FedoraResource> memberNodes = fromIterator(memberNodesIterator);
return memberNodes.flatMap(new Function<FedoraResource, Stream<Triple>>() {

return Iterators.concat(Iterators.transform(memberNodes, new Function<FedoraResource, Iterator<Triple>>() {
@Override
public Iterator<Triple> apply(final FedoraResource child) {
public Stream<Triple> apply(final FedoraResource child) {

try {
final com.hp.hpl.jena.graph.Node childSubject;
Expand All @@ -162,32 +145,24 @@ public Iterator<Triple> apply(final FedoraResource child) {
}

if (insertedContainerProperty.equals(MEMBER_SUBJECT.getURI())) {

return singletonIterator(create(subject(), memberRelation, childSubject));
return Stream.of(create(subject(), memberRelation, childSubject));
}
final String insertedContentProperty = getPropertyNameFromPredicate(resource().getNode(),
createResource(insertedContainerProperty),
null);
createResource(insertedContainerProperty), null);

if (!child.hasProperty(insertedContentProperty)) {
return emptyIterator();
return empty();
}

final PropertyValueIterator values
= new PropertyValueIterator(child.getProperty(insertedContentProperty));

return Iterators.transform(values, new Function<Value, Triple>() {
@Override
public Triple apply(final Value input) {
final RDFNode membershipResource = new ValueConverter(session(), translator())
.convert(input);
return create(subject(), memberRelation, membershipResource.asNode());
}
});
final PropertyValueIterator valuesIterator =
new PropertyValueIterator(child.getProperty(insertedContentProperty));
final Stream<Value> values = fromIterator(valuesIterator);
return values.map(v -> create(subject(), memberRelation, new ValueConverter(session(),
translator()).convert(v).asNode()));
} catch (final RepositoryException e) {
throw new RepositoryRuntimeException(e);
}
}
}));
});
}
}

0 comments on commit 56e604d

Please sign in to comment.