blob: f51eb7a88be558bca63c24b7e7404bd6df0a058e [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE.txt file distributed with this work for
// additional information regarding copyright ownership. The ASF licenses this
// file to you under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
package org.apache.oodt.profile;
import org.apache.oodt.commons.Configuration;
import java.io.IOException;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Property;
import java.util.Iterator;
import java.util.Collection;
import com.hp.hpl.jena.rdf.model.Bag;
import com.hp.hpl.jena.rdf.model.Seq;
import java.util.List;
import java.net.URI;
/**
* Profile utilities.
*
* Utility methods for profiles.
*
* @author Kelly
*/
class Utility {
/**
* Don't call because this is a utiliy class.
*/
private Utility() {
throw new IllegalStateException("Utility class");
}
static void addProperty(Model model, Resource resource, Property property, Object value, ProfileAttributes profAttr,
URI uri) {
if (value == null || value.toString().length() == 0) return;
Object obj;
if (value instanceof Collection) {
Collection collection = (Collection) value;
if (collection.isEmpty()) return;
Bag bag = model.createBag(uri + "_" + property.getLocalName() + "_bag");
for (Iterator i = collection.iterator(); i.hasNext();)
bag.add(i.next());
resource.addProperty(property, bag);
obj = bag;
} else {
resource.addProperty(property, value.toString());
obj = value;
}
Resource reification = model.createResource(uri + "_" + property.getLocalName() + "_reification");
reification.addProperty(rdfSubject, resource);
reification.addProperty(rdfPredicate, property);
reification.addProperty(rdfObject, obj.toString());
reification.addProperty(rdfType, rdfStatement);
addPotentiallyNullReifiedStatement(reification, edmID, profAttr.getVersion());
addPotentiallyNullReifiedStatement(reification, edmVersion, profAttr.getVersion());
addPotentiallyNullReifiedStatement(reification, edmType, profAttr.getType());
addPotentiallyNullReifiedStatement(reification, edmStatus, profAttr.getStatusID());
addPotentiallyNullReifiedStatement(reification, edmSecurity, profAttr.getSecurityType());
addPotentiallyNullReifiedStatement(reification, edmParent, profAttr.getParent());
addPotentiallyNullReifiedStatement(reification, edmRegAuth, profAttr.getRegAuthority());
List children = profAttr.getChildren();
if (!children.isEmpty()) {
Bag bag = model.createBag(uri + "_" + property.getLocalName() + "_childrenBag");
for (Iterator i = children.iterator(); i.hasNext();)
bag.add(i.next());
reification.addProperty(edmChild, bag);
}
List revNotes = profAttr.getRevisionNotes();
if (!revNotes.isEmpty()) {
Seq seq = model.createSeq(uri + "_" + property.getLocalName() + "_revNotesSeq");
for (Iterator i = revNotes.iterator(); i.hasNext();)
seq.add(i.next());
reification.addProperty(edmRevNote, seq);
}
}
private static void addPotentiallyNullReifiedStatement(Resource reification, Property property, Object value) {
if (value == null || value.toString().length() == 0) return;
reification.addProperty(property, value.toString());
}
/** Dublin core's title */
static Property dcTitle;
static Property dcSubject;
static Property dcDescription;
static Property dcPublisher;
static Property dcContributor;
static Property dcCreator;
static Property dcDate;
static Property dcType;
static Property dcFormat;
static Property dcSource;
static Property dcLanguage;
static Property dcRelation;
static Property dcCoverage;
static Property dcRights;
/** A resource that is an RDF statement. */
static Resource rdfStatement;
/** A property that is an RDF subject of a statement. */
static Property rdfSubject;
/** A property that is an RDF predicate of a statement. */
static Property rdfPredicate;
/** A property that is an object of a statement. */
static Property rdfObject;
/** A property that names the type of an RDF resource. */
static Property rdfType;
private static final String RDF_SYNTAX_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
private static final String DC_NS = "http://purl.org/dc/elements/1.1/";
private static Property edmID;
private static Property edmVersion;
private static Property edmType;
private static Property edmStatus;
private static Property edmSecurity;
private static Property edmParent;
private static Property edmChild;
private static Property edmRegAuth;
private static Property edmRevNote;
static Property edmElement;
static Property edmContext;
static Property edmAggregation;
static Property edmClass;
static Property edmLocation;
static Property edmElemID;
static Property edmDescription;
static Property edmElemType;
static Property edmUnit;
static Property edmSynonym;
static Property edmObligation;
static Property edmMaxOccurrence;
static Property edmComment;
static Property edmMinValue;
static Property edmMaxValue;
static Property edmValue;
/**
* Initialize this class.
*/
static {
try {
Configuration config = Configuration.getConfiguration();
String profNS = System.getProperty("jpl.rdf.ns", "http://oodt.jpl.nasa.gov/grid-profile/rdfs/prof.rdf");
Model model = ModelFactory.createDefaultModel();
rdfStatement = model.createResource(RDF_SYNTAX_NS + "Statement");
rdfSubject = model.createProperty(RDF_SYNTAX_NS, "subject");
rdfPredicate = model.createProperty(RDF_SYNTAX_NS, "predicate");
rdfObject = model.createProperty(RDF_SYNTAX_NS, "object");
rdfType = model.createProperty(RDF_SYNTAX_NS, "type");
dcTitle = model.createProperty(DC_NS, "title");
dcCreator = model.createProperty(DC_NS, "creator");
dcSubject = model.createProperty(DC_NS, "subject");
dcDescription = model.createProperty(DC_NS, "description");
dcPublisher = model.createProperty(DC_NS, "publisher");
dcContributor = model.createProperty(DC_NS, "contributor");
dcDate = model.createProperty(DC_NS, "date");
dcType = model.createProperty(DC_NS, "type");
dcFormat = model.createProperty(DC_NS, "format");
dcSource = model.createProperty(DC_NS, "source");
dcLanguage = model.createProperty(DC_NS, "language");
dcRelation = model.createProperty(DC_NS, "relation");
dcCoverage = model.createProperty(DC_NS, "coverage");
dcRights = model.createProperty(DC_NS, "rights");
edmID = model.createProperty(profNS, "id");
edmVersion = model.createProperty(profNS, "version");
edmType = model.createProperty(profNS, "type");
edmStatus = model.createProperty(profNS, "status");
edmSecurity = model.createProperty(profNS, "security");
edmParent = model.createProperty(profNS, "parent");
edmChild = model.createProperty(profNS, "child");
edmRegAuth = model.createProperty(profNS, "regAuth");
edmRevNote = model.createProperty(profNS, "revNote");
edmElement = model.createProperty(profNS, "element");
edmContext = model.createProperty(profNS, "context");
edmClass = model.createProperty(profNS, "class");
edmAggregation = model.createProperty(profNS, "aggregation");
edmLocation = model.createProperty(profNS, "location");
edmElemID = model.createProperty(profNS, "edmElemID");
edmDescription = model.createProperty(profNS, "edmDescription");
edmElemType = model.createProperty(profNS, "edmElemType");
edmUnit = model.createProperty(profNS, "edmUnit");
edmSynonym = model.createProperty(profNS, "edmSynonym");
edmObligation = model.createProperty(profNS, "edmObligation");
edmMaxOccurrence = model.createProperty(profNS, "edmMaxOccurrence");
edmComment = model.createProperty(profNS, "edmComment");
edmMinValue = model.createProperty(profNS, "edmMinValue");
edmMaxValue = model.createProperty(profNS, "edmMaxValue");
edmValue = model.createProperty(profNS, "edmValue");
} catch (IOException ex) {
System.err.println("Fatal I/O error prevents reading of configuration: " + ex.getMessage());
System.exit(1);
} catch (SAXParseException ex) {
System.err.println("Fatal error parsing file (public ID \"" + ex.getPublicId() + "\", system ID \""
+ ex.getSystemId() + "\"), line " + ex.getLineNumber() + " column " + ex.getColumnNumber()
+ ": " + ex.getMessage());
System.exit(1);
} catch (SAXException ex) {
System.err.println("Fatal SAX exception: " + ex.getMessage() + (ex.getException() == null? ""
: " (embedded exception " + ex.getException().getClass().getName() + ": "
+ ex.getException().getMessage() + ")"));
System.exit(1);
}
}
}