package org.deri.grefine.rdf;
import java.net.URI;
import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import org.openrdf.model.BNode;
import org.openrdf.model.Literal;
import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.repository.RepositoryConnection;
import com.google.refine.model.Project;
import com.google.refine.model.Row;
public class ConstantLiteralNode implements Node{
private String valueType;
private String lang;
private String value;
public ConstantLiteralNode(String val,String type,String l){
this.value = val;
this.valueType = type;
this.lang = l;
}
public String getValueType() {
return valueType;
}
public void setValueType(String valueType) {
this.valueType = valueType;
}
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang = lang;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public void write(JSONWriter writer, Properties options) throws JSONException {
writer.object();
writer.key("nodeType"); writer.value("literal");
writer.key("value"); writer.value(value);
if(valueType!=null){
writer.key("valueType"); writer.value(valueType);
}
if(lang!=null){
writer.key("lang"); writer.value(lang);
}
writer.endObject();
}
@Override
public Value[] createNode(URI baseUri, ValueFactory factory, RepositoryConnection con, Project project,
Row row, int rowIndex,BNode[] blanks) {
if(this.value!=null && this.value.length()>0){
Literal l ;
if(this.valueType!=null){
//TODO handle exception when valueType is not a valid URI
l = factory.createLiteral(this.value, factory.createURI(valueType));
}else{
if(this.lang!=null){
l = factory.createLiteral(this.value, lang);
}else{
l = factory.createLiteral(this.value);
}
}
return new Literal[]{l};
}else{
return null;
}
}
}