/** * template method, override to customize * * @param path path * @return field name */ protected String toField(Path<?> path) { PathMetadata md = path.getMetadata(); if (md.getPathType() == PathType.COLLECTION_ANY) { return toField(md.getParent()); } else { String rv = md.getName(); if (md.getParent() != null) { Path<?> parent = md.getParent(); if (parent.getMetadata().getPathType() != PathType.VARIABLE) { rv = toField(parent) + "." + rv; } } return rv; } }
public QTaskHour(PathMetadata<?> metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); }
public QSalesOrderItems(PathMetadata<?> metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); }
public QProductAttribute(PathMetadata<?> metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); }
public void readTo( InputStream manifestResourceAsStream, Manifest manifest, URI manifestResourceBaseURI) throws IOException, RiotException { OntModel model = new RDFToManifest().getOntModel(); model.add(jsonLdAsJenaModel(manifestResourceAsStream, manifestResourceBaseURI)); // model.write(System.out, "TURTLE"); // System.out.println(); URI root = manifestResourceBaseURI.resolve("/"); Individual ro = findRO(model, root); if (ro == null) throw new IOException("root ResearchObject not found - " + "Not a valid RO Bundle manifest"); for (Individual manifestResource : listObjectProperties(ro, isDescribedBy)) { String uriStr = manifestResource.getURI(); if (uriStr == null) { logger.warning("Skipping manifest without URI: " + manifestResource); continue; } // URI relative = relativizeFromBase(uriStr, root); Path path = manifest.getBundle().getFileSystem().provider().getPath(URI.create(uriStr)); manifest.getManifest().add(path); } List<Agent> creators = getAgents(root, ro, createdBy); if (!creators.isEmpty()) { manifest.setCreatedBy(creators.get(0)); if (creators.size() > 1) logger.warning("Ignoring additional createdBy agents"); } RDFNode created = ro.getPropertyValue(createdOn); manifest.setCreatedOn(literalAsFileTime(created)); List<Path> history = new ArrayList<Path>(); for (Individual histItem : listObjectProperties(ro, hasProvenance)) history.add( Bundles.uriToBundlePath( manifest.getBundle(), relativizeFromBase(histItem.getURI(), root))); manifest.setHistory(history); List<Agent> authors = getAgents(root, ro, authoredBy); if (!authors.isEmpty()) manifest.setAuthoredBy(authors); RDFNode authored = ro.getPropertyValue(authoredOn); manifest.setAuthoredOn(literalAsFileTime(authored)); for (Individual aggrResource : listObjectProperties(ro, aggregates)) { String uriStr = aggrResource.getURI(); // PathMetadata meta = new PathMetadata(); if (uriStr == null) { logger.warning("Skipping aggregation without URI: " + aggrResource); continue; } PathMetadata meta = manifest.getAggregation(relativizeFromBase(uriStr, root)); Set<Individual> proxies = listObjectProperties(aggrResource, hasProxy); if (!proxies.isEmpty()) { // We can only deal with the first one Individual proxy = proxies.iterator().next(); String proxyUri = null; if (proxy.getURI() != null) proxyUri = proxy.getURI(); else if (proxy.getSameAs() != null) proxyUri = proxy.getSameAs().getURI(); if (proxyUri != null) setPathProxy(meta, relativizeFromBase(proxyUri, root)); } creators = getAgents(root, aggrResource, createdBy); if (!creators.isEmpty()) { meta.setCreatedBy(creators.get(0)); if (creators.size() > 1) logger.warning("Ignoring additional createdBy agents for " + meta); } meta.setCreatedOn(literalAsFileTime(aggrResource.getPropertyValue(createdOn))); for (Individual standard : listObjectProperties(aggrResource, conformsTo)) if (standard.getURI() != null) meta.setConformsTo(relativizeFromBase(standard.getURI(), root)); RDFNode mediaType = aggrResource.getPropertyValue(format); if (mediaType != null && mediaType.isLiteral()) meta.setMediatype(mediaType.asLiteral().getLexicalForm()); } for (Individual ann : listObjectProperties(ro, hasAnnotation)) { /* * Normally just one body per annotation, but just in case we'll * iterate and split them out (as our PathAnnotation can only keep a * single setContent() at a time) */ for (Individual body : listObjectProperties(model.getOntResource(ann), hasBody)) { if (body.getURI() == null) { logger.warning("Can't find annotation body for anonymous " + body); continue; } PathAnnotation pathAnn = new PathAnnotation(); pathAnn.setContent(relativizeFromBase(body.getURI(), root)); if (ann.getURI() != null) pathAnn.setUri(relativizeFromBase(ann.getURI(), root)); else if (ann.getSameAs() != null && ann.getSameAs().getURI() != null) pathAnn.setUri(relativizeFromBase(ann.getSameAs().getURI(), root)); // Handle multiple about/hasTarget for (Individual target : listObjectProperties(ann, hasTarget)) if (target.getURI() != null) pathAnn.getAboutList().add(relativizeFromBase(target.getURI(), root)); manifest.getAnnotations().add(pathAnn); } } }
@SuppressWarnings("deprecation") private static void setPathProxy(PathMetadata meta, URI proxy) { meta.setProxy(proxy); }