Skip to content

Commit

Permalink
stash
Browse files Browse the repository at this point in the history
  • Loading branch information
cbeer committed Oct 1, 2014
1 parent 21372b0 commit 7f94630
Show file tree
Hide file tree
Showing 18 changed files with 272 additions and 221 deletions.
Expand Up @@ -36,12 +36,14 @@
import org.fcrepo.kernel.impl.DatastreamImpl;
import org.fcrepo.kernel.impl.FedoraBinaryImpl;
import org.fcrepo.kernel.impl.FedoraObjectImpl;
import org.fcrepo.kernel.impl.rdf.impl.AclRdfContext;
import org.fcrepo.kernel.impl.rdf.impl.ChildrenRdfContext;
import org.fcrepo.kernel.impl.rdf.impl.ContainerRdfContext;
import org.fcrepo.kernel.impl.rdf.impl.LdpContainerRdfContext;
import org.fcrepo.kernel.impl.rdf.impl.ParentRdfContext;
import org.fcrepo.kernel.impl.rdf.impl.PropertiesRdfContext;
import org.fcrepo.kernel.impl.rdf.impl.ReferencesRdfContext;
import org.fcrepo.kernel.impl.rdf.impl.TypeRdfContext;
import org.fcrepo.kernel.impl.services.TransactionServiceImpl;
import org.fcrepo.kernel.utils.iterators.RdfStream;
import org.glassfish.jersey.media.multipart.ContentDisposition;
Expand Down Expand Up @@ -133,8 +135,6 @@ public Triple apply(final Statement input) {

} else {

rdfStream.concat(getTriples(PropertiesRdfContext.class));

final PreferTag returnPreference;

if (prefer != null && prefer.hasReturn()) {
Expand All @@ -143,48 +143,66 @@ public Triple apply(final Statement input) {
returnPreference = new PreferTag("");
}

if (!returnPreference.getValue().equals("minimal")) {
final LdpPreferTag ldpPreferences = new LdpPreferTag(returnPreference);
rdfStream.concat(getResourceTriples(returnPreference));

if (ldpPreferences.prefersReferences()) {
rdfStream.concat(getTriples(ReferencesRdfContext.class));
}
returnPreference.addResponseHeaders(servletResponse);

rdfStream.concat(getTriples(ParentRdfContext.class));

if (ldpPreferences.prefersContainment()) {
rdfStream.concat(getTriples(ChildrenRdfContext.class));
}
}

if (ldpPreferences.prefersMembership()) {
rdfStream.concat(getTriples(LdpContainerRdfContext.class));
}
return Response.ok(rdfStream).build();
}

protected RdfStream getResourceTriples() {
return getResourceTriples(new PreferTag(""));
}

if (ldpPreferences.prefersEmbed()) {
protected RdfStream getResourceTriples(final PreferTag returnPreference) {
final RdfStream rdfStream = new RdfStream();

final Iterator<FedoraResource> children = resource().getChildren();
rdfStream.concat(getTriples(PropertiesRdfContext.class));
rdfStream.concat(getTriples(AclRdfContext.class));
rdfStream.concat(getTriples(TypeRdfContext.class));

rdfStream.concat(concat(transform(children,
new Function<FedoraResource, RdfStream>() {
if (!returnPreference.getValue().equals("minimal")) {
final LdpPreferTag ldpPreferences = new LdpPreferTag(returnPreference);

@Override
public RdfStream apply(final FedoraResource child) {
return child.getTriples(translator(), PropertiesRdfContext.class);
}
})));
if (ldpPreferences.prefersReferences()) {
rdfStream.concat(getTriples(ReferencesRdfContext.class));
}

}
rdfStream.concat(getTriples(ParentRdfContext.class));

rdfStream.concat(getTriples(ContainerRdfContext.class));
if (ldpPreferences.prefersContainment()) {
rdfStream.concat(getTriples(ChildrenRdfContext.class));
}
returnPreference.addResponseHeaders(servletResponse);

if (ldpPreferences.prefersMembership()) {
rdfStream.concat(getTriples(LdpContainerRdfContext.class));
}

if (ldpPreferences.prefersEmbed()) {

final Iterator<FedoraResource> children = resource().getChildren();

rdfStream.concat(concat(transform(children,
new Function<FedoraResource, RdfStream>() {

@Override
public RdfStream apply(final FedoraResource child) {
return child.getTriples(translator(), PropertiesRdfContext.class);
}
})));

}

addResponseInformationToStream(resource(), rdfStream, uriInfo,
translator());
rdfStream.concat(getTriples(ContainerRdfContext.class));
}

return Response.ok(rdfStream).build();
addResponseInformationToStream(resource(), rdfStream, uriInfo,
translator());

return rdfStream;
}

/**
Expand Down
12 changes: 9 additions & 3 deletions fcrepo-http-api/src/main/java/org/fcrepo/http/api/FedoraLdp.java
Expand Up @@ -245,7 +245,7 @@ public Response createOrReplaceObjectRdf(
@ContentLocation final InputStream requestBodyStream,
@QueryParam("checksum") final String checksum,
@HeaderParam("Content-Disposition") final ContentDisposition contentDisposition)
throws URISyntaxException, InvalidChecksumException, ParseException {
throws URISyntaxException, InvalidChecksumException, ParseException, IOException {

try {

Expand Down Expand Up @@ -282,8 +282,14 @@ public Response createOrReplaceObjectRdf(
final Model inputModel = createDefaultModel()
.read(requestBodyStream, getUri(resource).toString(), format.getName().toUpperCase());

resource.replaceProperties(translator(), inputModel,
getTriples(resource, PropertiesRdfContext.class));
final RdfStream resourceTriples;

if (resource.isNew()) {
resourceTriples = new RdfStream();
} else {
resourceTriples = getResourceTriples();
}
resource.replaceProperties(translator(), inputModel, resourceTriples);
} else if (resource instanceof FedoraBinary) {
final URI checksumURI = checksumURI(checksum);
final String originalFileName
Expand Down
Expand Up @@ -476,7 +476,7 @@ public void testRoundTripReplaceGraph() throws Exception {

final HttpGet getObjMethod = new HttpGet(subjectURI);
getObjMethod.addHeader("Accept", "text/turtle");
getObjMethod.addHeader("Prefer", "return=minimal");
// getObjMethod.addHeader("Prefer", "return=minimal");
final HttpResponse getResponse = client.execute(getObjMethod);

final BasicHttpEntity e = new BasicHttpEntity();
Expand Down
19 changes: 0 additions & 19 deletions fcrepo-http-api/src/test/resources/test_repository.json
Expand Up @@ -15,25 +15,6 @@
"metadataCacheName" : "FedoraRepositoryMetaData"
}
},
"externalSources" : {
"fileSystem" : {
"classname" : "org.fcrepo.connector.file.FedoraFileSystemConnector",
"directoryPath" : "target/test-classes/test-objects",
"readonly" : false,
"extraPropertiesStorage": "json",
"cacheTtlSeconds" : 2,
"projections" : [ "default:/files => /" ]
},
"readonly" : {
"classname" : "org.fcrepo.connector.file.FedoraFileSystemConnector",
"directoryPath" : "target/test-classes/test-objects",
"propertiesDirectoryPath" : "target/test-classes/test-meta",
"readonly" : true,
"extraPropertiesStorage": "none",
"cacheTtlSeconds" : 2,
"projections" : [ "default:/readonlyfiles => /" ]
}
},
"security" : {
"anonymous" : {
"roles" : ["readonly","readwrite","admin"],
Expand Down
Expand Up @@ -33,6 +33,6 @@ public class MalformedRdfExceptionMapper implements ExceptionMapper<MalformedRdf

@Override
public Response toResponse(final MalformedRdfException e) {
return status(BAD_REQUEST).build();
return status(BAD_REQUEST).entity(e.getMessage()).build();
}
}
Expand Up @@ -33,6 +33,6 @@ public class ServerManagedPropertyExceptionMapper implements ExceptionMapper<Ser

@Override
public Response toResponse(final ServerManagedPropertyException e) {
return status(CONFLICT).build();
return status(CONFLICT).entity(e.getMessage()).build();
}
}
Expand Up @@ -18,6 +18,7 @@
import static javax.ws.rs.core.Response.Status.NOT_ACCEPTABLE;
import static org.openrdf.model.impl.ValueFactoryImpl.getInstance;
import static org.openrdf.model.util.Literals.createLiteral;
import static org.openrdf.model.util.Literals.createLiteralOrFail;
import static org.slf4j.LoggerFactory.getLogger;

import java.io.OutputStream;
Expand All @@ -29,8 +30,10 @@

import org.fcrepo.kernel.utils.iterators.RdfStream;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.util.LiteralUtilException;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFHandlerException;
import org.openrdf.rio.RDFWriterRegistry;
Expand Down Expand Up @@ -132,7 +135,21 @@ protected static Value getValueForObject(final Node object) {
return vfactory.createURI(object.getURI());
}
if (object.isLiteral()) {
return createLiteral(vfactory, object.getLiteralValue());
final Object literalValue = object.getLiteralValue();

try {
return createLiteralOrFail(vfactory, literalValue);
} catch (final LiteralUtilException e) {

final String literalDatatypeURI = object.getLiteralDatatypeURI();

if (literalDatatypeURI != null) {
final URI uri = vfactory.createURI(literalDatatypeURI);
return vfactory.createLiteral(literalValue.toString(), uri);
} else {
return createLiteral(vfactory, literalValue);
}
}
}
throw new UnsupportedOperationException(
"We do not serialize blank nodes!");
Expand Down
Expand Up @@ -688,7 +688,7 @@ public void removeProperty(final Node node,

if (isManagedPredicate.apply(predicate)) {

throw new ServerManagedPropertyException("Could not persist triple containing predicate "
throw new ServerManagedPropertyException("Could not remove triple containing predicate "
+ predicate.toString()
+ " to node "
+ node.getPath());
Expand Down
@@ -0,0 +1,45 @@
package org.fcrepo.kernel.impl.rdf.impl;

import org.fcrepo.kernel.rdf.IdentifierTranslator;

import javax.jcr.Node;
import javax.jcr.RepositoryException;
import java.security.AccessControlException;

import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDboolean;
import static com.hp.hpl.jena.graph.NodeFactory.createLiteral;
import static com.hp.hpl.jena.graph.Triple.create;
import static org.fcrepo.kernel.RdfLexicon.WRITABLE;

/**
* @author cabeer
* @since 10/1/14
*/
public class AclRdfContext extends NodeRdfContext {
/**
* Default constructor.
*
* @param node
* @param graphSubjects
* @throws javax.jcr.RepositoryException
*/
public AclRdfContext(final Node node, final IdentifierTranslator graphSubjects) throws RepositoryException {
super(node, graphSubjects);

// include writable status
concatWritable();
}

private void concatWritable() throws RepositoryException {
boolean writable = false;
try {
node().getSession().checkPermission( node().getPath(), "add_node,set_property,remove" );
writable = true;
} catch ( AccessControlException ex ) {
writable = false;
}

concat(create(subject(), WRITABLE.asNode(), createLiteral(String.valueOf(writable), XSDboolean)));
}

}
Expand Up @@ -72,12 +72,6 @@ public NodeRdfContext(final Node node, final IdentifierTranslator graphSubjects)
this.node = node;
this.graphSubjects = graphSubjects;
this.subject = graphSubjects.getSubject(node.getPath()).asNode();

//include rdf:type for primaryType, mixins, and their supertypes
concatRdfTypes();

// include writable status
concatWritable();
}

/**
Expand All @@ -100,79 +94,4 @@ public IdentifierTranslator graphSubjects() {
public com.hp.hpl.jena.graph.Node subject() {
return subject;
}

private Function<NodeType, Triple> nodetype2triple() {
return new Function<NodeType, Triple>() {

@Override
public Triple apply(final NodeType nodeType) {
try {
final String fullTypeName = nodeType.getName();
LOGGER.trace("Translating JCR mixin name: {}", fullTypeName);
final String prefix = fullTypeName.split(":")[0];
final String typeName = fullTypeName.split(":")[1];
final String namespace = getJcrUri(prefix);
LOGGER.trace("with JCR namespace: {}", namespace);
final com.hp.hpl.jena.graph.Node rdfType =
createURI(getRDFNamespaceForJcrNamespace(namespace)
+ typeName);
LOGGER.trace("into RDF resource: {}", rdfType);
return create(subject(), type.asNode(), rdfType);
} catch (final RepositoryException e) {
throw propagate(e);
}
}

};
}

private String getJcrUri(final String prefix) throws RepositoryException {
return node().getSession().getWorkspace().getNamespaceRegistry()
.getURI(prefix);
}

private void concatRdfTypes() throws RepositoryException {
final ImmutableList.Builder<NodeType> nodeTypesB = ImmutableList.<NodeType>builder();

final NodeType primaryNodeType = node.getPrimaryNodeType();
nodeTypesB.add(primaryNodeType);

if (primaryNodeType != null && primaryNodeType.getSupertypes() != null) {
final Set<NodeType> primarySupertypes = ImmutableSet.<NodeType>builder()
.add(primaryNodeType.getSupertypes()).build();
nodeTypesB.addAll(primarySupertypes);
}

final NodeType[] mixinNodeTypesArr = node.getMixinNodeTypes();

if (mixinNodeTypesArr != null) {
final Set<NodeType> mixinNodeTypes = ImmutableSet.<NodeType>builder().add(mixinNodeTypesArr).build();
nodeTypesB.addAll(mixinNodeTypes);

final ImmutableSet.Builder<NodeType> mixinSupertypes = ImmutableSet.<NodeType>builder();
for (final NodeType mixinNodeType : mixinNodeTypes) {
mixinSupertypes.addAll(ImmutableSet.<NodeType>builder().add(mixinNodeType.getSupertypes()).build());
}

nodeTypesB.addAll(mixinSupertypes.build());
}

final ImmutableList<NodeType> nodeTypes = nodeTypesB.build();
final Iterator<NodeType> nodeTypesIt = nodeTypes.iterator();

concat(Iterators.transform(nodeTypesIt,nodetype2triple()));
}

private void concatWritable() throws RepositoryException {
boolean writable = false;
try {
node.getSession().checkPermission( node.getPath(), "add_node,set_property,remove" );
writable = true;
} catch ( AccessControlException ex ) {
writable = false;
}

concat(create(subject(), WRITABLE.asNode(), createLiteral(String.valueOf(writable), XSDboolean)));
}

}

0 comments on commit 7f94630

Please sign in to comment.