Log in Help
Print
Homereleasesgate-5.1-beta2-build3402-ALLpluginsOntologysrcgatecreoleontologyimplsesame 〉 UtilConvert.java
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gate.creole.ontology.impl.sesame;

import gate.creole.ontology.InvalidValueException;
import java.util.Locale;
import gate.creole.ontology.DataType;
import gate.creole.ontology.GateOntologyException;
import gate.creole.ontology.LiteralOrONodeID;
import gate.creole.ontology.ONodeID;
import org.openrdf.model.Literal;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.model.impl.BNodeImpl;
import org.openrdf.model.impl.LiteralImpl;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.model.vocabulary.XMLSchema;

/**
 *
 * @author johann
 */
public class UtilConvert {
  public static gate.creole.ontology.Literal toGateLiteral(
      org.openrdf.model.Literal sesameLiteral) {
    URI dtu = sesameLiteral.getDatatype();
    DataType dt;
    String lang = sesameLiteral.getLanguage();
    if(dtu == null) {
      if(lang != null) {
        //System.err.println("Could not get a datatype for literal, using string: "+sesameLiteral);
        dt = DataType.getStringDataType();
      } else {
        //System.err.println("Could not get a datatype for literal, using anyType: "+sesameLiteral);
        dt = new DataType(new OURIImpl("http://www.w3.org/2001/XMLSchema#anyType"));
      }
    } else {
      dt = toGateDataType(sesameLiteral.getDatatype());
    }
    Locale locale = null;
    if(lang != null) {
      locale = lang2locale(lang);
    }
    if(locale != null) {
      return new gate.creole.ontology.Literal(sesameLiteral.getLabel(),locale);
    } else {
      try {
        return new gate.creole.ontology.Literal(sesameLiteral.getLabel(), dt);
      } catch (InvalidValueException ex) {
        // TODO: what to do here?
        throw new GateOntologyException(
            "Could not convert literal from Sesame: "+sesameLiteral);
      }
    }
  }

  public static Literal toSesameLiteral(gate.creole.ontology.Literal lit) {
    DataType dt = lit.getDataType();
    return new LiteralImpl(lit.toString(),new URIImpl(dt.getXmlSchemaURIString()));
  }
  public static Value toSesameValue(LiteralOrONodeID val) {
    Value theValue = null;
    if(val.isLiteral()) {
      toSesameLiteral(val.getLiteral());
    } else {
      ONodeID id = val.getONodeID();
      return toSesameValue(id);
    }
    return theValue;
  }

  public static Value toSesameValue(ONodeID id) {
    if(id.isAnonymousResource()) {
      return new BNodeImpl(id.getResourceName().substring(2));
    } else {
      return new URIImpl(id.toString());
    }
  }

  public static gate.creole.ontology.DataType toGateDataType(org.openrdf.model.URI uri) {
    DataType dt = new DataType(new OURIImpl(uri.toString()));
    return dt;
  }

  public static Locale lang2locale(String lang) {
    if(lang == null) {
      return null;
    }
    Locale locale = new Locale(lang);
    System.out.println("Trying to convert language to locale: "+lang+"="+locale);
    return locale;
  }

}