/**
* wraps a Jena RDFNode
* can be a Resource, Bnode or Literal
*
*/
package org.hyperdata.scute.graph;
import javax.swing.JButton;
import javax.swing.border.EmptyBorder;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.RDFVisitor;
import com.hp.hpl.jena.rdf.model.Resource;
// it might have been better to store the RDFNode in JComponent.getClientProperty(java.lang.Object)
/**
* The Class Node.
*/
public class Node extends VisibleNode implements RDFNode {
/** The rdf node. */
private RDFNode rdfNode;
/**
* Instantiates a new node.
*/
public Node() {
super();
}
// used when reading in data files
/**
* Instantiates a new node.
*
* @param rdfNode
* the rdf node
* @param component
* the component
*/
public Node(RDFNode rdfNode, JButton component) {
this.rdfNode = rdfNode;
this.component = component;
component.setBorder(new EmptyBorder(5, 5, 5, 5));
}
// for adding to graph
/**
* Instantiates a new node.
*
* @param model
* the model
* @param uri
* the uri
*/
public Node(Model model, String uri) { // Resource
rdfNode = model.createResource(uri);
}
/**
* Instantiates a new node.
*
* @param model
* the model
*/
public Node(Model model) { // Bnode
rdfNode = model.createResource();
}
/**
* Instantiates a new node.
*
* @param model
* the model
* @param v
* the v
* @param wellFormed
* the well formed
*/
public Node(Model model, String v, boolean wellFormed) { // Literal
rdfNode = model.createLiteral(v, wellFormed);
}
/**
* Gets the string.
*
* @return the string
*/
public String getString() {
return getString(rdfNode);
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() { // keep?
return getString();
}
/**
* Gets the string.
*
* @param rdfNode
* the rdf node
* @return the string
*/
public static String getString(RDFNode rdfNode) {
if (rdfNode.isURIResource())
// return ((Resource)rdfNode).getURI();
return ((Resource) rdfNode).getLocalName();
else if (rdfNode.isResource())
return " ";
// ((Resource) rdfNode).getId().toString(); //
else if (rdfNode.isLiteral()) {
String label = ((Literal) rdfNode).toString();
// if(label.length() > 10){ // TODO come back to this
// label = "";
// String[] split = label.split(" ");
// for(int i=0;i<split.length;i++){
// label = label + split[i] + " ";
// if(label.length()>25) continue;
// if(label.length() % 8 == 0) label = label +"\n";
// }
// }
if (label.length() > 10) {
label = label.substring(0, 9);
}
return label;
}
return null;
}
// delegate to RDFNode ///////////////////////////////////////
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#as(java.lang.Class)
*/
@Override
public <T extends RDFNode> T as(Class<T> view) {
return rdfNode.as(view);
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#asLiteral()
*/
@Override
public Literal asLiteral() {
return rdfNode.asLiteral();
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#asResource()
*/
@Override
public Resource asResource() {
return rdfNode.asResource();
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#canAs(java.lang.Class)
*/
@Override
public <T extends RDFNode> boolean canAs(Class<T> view) {
return rdfNode.canAs(view);
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#getModel()
*/
@Override
public Model getModel() {
return rdfNode.getModel();
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#inModel(com.hp.hpl.jena.rdf.model.Model)
*/
@Override
public RDFNode inModel(Model m) {
return rdfNode.inModel(m);
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#isAnon()
*/
@Override
public boolean isAnon() {
return rdfNode.isAnon();
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#isLiteral()
*/
@Override
public boolean isLiteral() {
return rdfNode.isLiteral();
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#isResource()
*/
@Override
public boolean isResource() {
return rdfNode.isResource();
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#isURIResource()
*/
@Override
public boolean isURIResource() {
return rdfNode.isURIResource();
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.model.RDFNode#visitWith(com.hp.hpl.jena.rdf.model.RDFVisitor)
*/
@Override
public Object visitWith(RDFVisitor rv) {
return rdfNode.visitWith(rv);
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.graph.FrontsNode#asNode()
*/
@Override
public com.hp.hpl.jena.graph.Node asNode() {
return rdfNode.asNode();
}
/**
* Gets the uRI.
*
* @return the uRI
*/
public String getURI() {
if (rdfNode.isResource())
return ((Resource) rdfNode).getURI();
return null;
}
/**
* Gets the rDF node.
*
* @return the rDF node
*/
public RDFNode getRDFNode() {
return rdfNode;
}
/**
* Equals rdf.
*
* @param object
* the object
* @return true, if successful
*/
public boolean equalsRDF(RDFNode object) {
// URI resources & properties
if (object.isResource() && ((Resource) object).isURIResource()) {
if (rdfNode.isResource() && ((Resource) rdfNode).isURIResource()) {
if (((Resource) rdfNode).getURI().equals(
((Resource) object).getURI()))
return true;
else
return false;
}
}
// bnode
if (object.isAnon() && rdfNode.isAnon()) {
if (((Resource) rdfNode).getId()
.equals(((Resource) object).getId()))
return true;
else
return false;
}
// literal
if (object.isLiteral() && rdfNode.isLiteral()) {
if (((Literal) object).equals((rdfNode))
|| (((Literal) object).sameValueAs((Literal) rdfNode)))
return true;
}
return false;
}
}