package esl.cuenet.algorithms.firstk.structs.eventgraph;
import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import esl.cuenet.algorithms.firstk.exceptions.EventGraphException;
import esl.datastructures.graph.relationgraph.RelationGraphNode;
import org.apache.log4j.Logger;
import java.util.Map;
public abstract class EventGraphNode extends RelationGraphNode {
protected Individual individual = null;
private EventGraph.NodeType type = null;
private static Logger logger = Logger.getLogger(EventGraphNode.class);
public EventGraphNode(Individual individual, EventGraph.NodeType type) {
super(individual.getURI());
if (individual.getURI() == null) logger.error("Individual with NULL URI");
this.individual = individual;
this.type = type;
}
public Individual getIndividual() {
return individual;
}
public EventGraph.NodeType getType() {
return type;
}
public void addLiteral(Property property, Literal literal) {
individual.addLiteral(property, literal);
}
public void addResource(Property property, Individual p) {
individual.addProperty(property, p);
}
public boolean containsLiteralEdge(String literalLabel) {
StmtIterator iter = individual.listProperties();
Map<String, String> nsPrefixMap = individual.getModel().getNsPrefixMap();
for (String key: nsPrefixMap.keySet()) {
while (iter.hasNext()) {
Statement statement = iter.nextStatement();
if (statement.getPredicate().getURI().compareTo(nsPrefixMap.get(key) + literalLabel) == 0 &&
statement.getObject().isLiteral())
return true;
}
}
return false;
}
public Object getLiteralValue(String literalLabel) throws EventGraphException {
StmtIterator iter = individual.listProperties();
Map<String, String> nsPrefixMap = individual.getModel().getNsPrefixMap();
for (String key: nsPrefixMap.keySet()) {
while (iter.hasNext()) {
Statement statement = iter.nextStatement();
if (statement.getPredicate().getURI().compareTo(nsPrefixMap.get(key) + literalLabel) == 0 &&
statement.getObject().isLiteral())
return statement.getObject().asLiteral().getValue();
}
}
throw new EventGraphException("No value for literal label: " + literalLabel);
}
}