package org.aksw.jena_sparql_api.mapper.model; import java.util.Collections; import java.util.Set; import java.util.function.BiFunction; import org.aksw.jena_sparql_api.beans.model.PropertyOps; import org.aksw.jena_sparql_api.mapper.impl.type.PlaceholderInfo; import org.aksw.jena_sparql_api.mapper.impl.type.ResourceFragment; import org.apache.jena.graph.Node; import org.apache.jena.graph.NodeFactory; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.Property; import org.apache.jena.rdf.model.Resource; import org.h2.util.StringUtils; public abstract class RdfMapperPropertyBase implements RdfMapperProperty { //protected RdfClass rdfClass; //protected collectiontype //protected PropertyDescriptor propertyDescription; /** * The (java) name of the attribute */ //protected EntityOps entityOps; //protected String propertyName; protected PropertyOps propertyOps; protected Property predicate; //protected BeanWrapper owningBean; /** * The corresponding RDF predicate */ // protected Relation relation; protected RdfType targetRdfType; transient protected Set<String> propertyNames; // protected String fetchMode; // Optional function for creating an Iri (Node) for a given target value protected BiFunction<Object, Object, Node> createTargetNode; // /** // * The type can be either simply a class (including primitive ones), but it can also be // * a parameterized class, such as a List<Person> // * // */ // protected RdfType rdfType; public RdfMapperPropertyBase(PropertyOps propertyOps, Property predicate, RdfType targetRdfType, BiFunction<Object, Object, Node> createTargetNode) { //, String fetchMode) { super(); //this.propertyName = propertyName; this.propertyOps = propertyOps; this.predicate = predicate; this.targetRdfType = targetRdfType; this.propertyNames = Collections.singleton(propertyOps.getName()); this.createTargetNode = createTargetNode; } @Override public void exposeFragment(ResourceFragment out, Resource priorState, Object entity) { Resource s = out.getResource(); Model tmp = s.getModel(); Resource o = tmp.createResource(); Object v = propertyOps.getValue(entity); s.addProperty(predicate, o); PlaceholderInfo info = new PlaceholderInfo(null, targetRdfType, entity, null, propertyOps, v, null, this); // Map<RDFNode, Object> placeholders = new HashMap<>(); // placeholders.put(o, v); out.getPlaceholders().put(o, info); } // // @Override // public void readFragment(Object tgtEntity, ResourceFragment inout) { // Resource r = inout.getResource(); // r.getProperty(property); // // // inout.getPlaceholders() // Node node; // if(t != null) { // node = t.getObject(); // outSink.accept(t); // } else { // node = null; // } // // if(node == null) { // if(createTargetNode != null) { // Object childEntity = propertyOps.getValue(entity); // if(childEntity != null) { // node = createTargetNode.apply(entity, childEntity); // } // } // } // // if(node != null) { // persistenceContext.requestResolution(propertyOps, entity, node); // } // } // public String getPropertyName() { // return propertyOps.getName(); // } // public Relation getRelation() { // return relation; // } // public RdfType getTargetRdfType() { // return targetRdfType; // } @Override public PropertyOps getPropertyOps() { return propertyOps; } @Override public Set<String> getPropertyNames() { return propertyNames; } public Node getTargetNode(String subjectUri, Object entity) { Node result = targetRdfType.hasIdentity() ? targetRdfType.getRootNode(entity) : NodeFactory.createURI(subjectUri + "-" + StringUtils.urlEncode(propertyOps.getName())); return result; } }