/*
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (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.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 *
 * The Original Code is Protege-2000.
 *
 * The Initial Developer of the Original Code is Stanford University. Portions
 * created by Stanford University are Copyright (C) 2007.  All Rights Reserved.
 *
 * Protege was developed by Stanford Medical Informatics
 * (http://www.smi.stanford.edu) at the Stanford University School of Medicine
 * with support from the National Library of Medicine, the National Science
 * Foundation, and the Defense Advanced Research Projects Agency.  Current
 * information about Protege can be obtained at http://protege.stanford.edu.
 *
 */


package edu.stanford.smi.protegex.owl.swrl.sqwrl;

import edu.stanford.smi.protegex.owl.swrl.bridge.exceptions.DatatypeConversionException;

import edu.stanford.smi.protegex.owl.swrl.bridge.xsd.*;

import edu.stanford.smi.protegex.owl.model.OWLModel;
import edu.stanford.smi.protegex.owl.model.RDFSLiteral;

import java.math.BigDecimal;
import java.math.BigInteger;

public interface DatatypeValue extends ResultValue
{
  // Java types
  boolean isString();

  boolean isBoolean();

  boolean isNumeric();

  boolean isInteger();
  boolean isLong();
  boolean isFloat();
  boolean isDouble();
  boolean isShort();
  boolean isByte();
  boolean isBigDecimal();
  boolean isBigInteger();

  String getString() throws DatatypeConversionException;

  boolean getBoolean() throws DatatypeConversionException;

  int getInt() throws DatatypeConversionException;
  long getLong() throws DatatypeConversionException;
  float getFloat() throws DatatypeConversionException;
  double getDouble() throws DatatypeConversionException;
  short getShort() throws DatatypeConversionException;
  byte getByte() throws DatatypeConversionException;
  BigDecimal getBigDecimal() throws DatatypeConversionException;
  BigInteger getBigInteger() throws DatatypeConversionException;
  Number getNumber() throws DatatypeConversionException;

  RDFSLiteral asRDFSLiteral(OWLModel owlModel) throws DatatypeConversionException;

  // Primitive XML Schema types not covered by Java types.
  boolean isPrimitiveXSDType();

  boolean isTime();
  boolean isDate();
  boolean isDuration();
  boolean isDateTime();
  boolean isAnyURI();
  boolean isBase64Binary();
  boolean isGDay();
  boolean isGMonth();
  boolean isGYear();
  boolean isHexBinary();
  boolean isGMonthDay();
  boolean isGYearMonth();
  boolean isNOTATION();
  boolean isQName();

  Time getTime() throws DatatypeConversionException;
  Date getDate() throws DatatypeConversionException;
  Duration getDuration() throws DatatypeConversionException;
  AnyURI getAnyURI() throws DatatypeConversionException;
  Base64Binary getBase64Binary() throws DatatypeConversionException;
  HexBinary getHexBinary() throws DatatypeConversionException;
  GDay getGDay() throws DatatypeConversionException;
  GMonth getGMonth() throws DatatypeConversionException;
  GYear getGYear() throws DatatypeConversionException;
  GMonthDay getGMonthDay() throws DatatypeConversionException;
  GYearMonth getGYearMonth() throws DatatypeConversionException;
  NOTATION getNOTATION() throws DatatypeConversionException;
  QName getQName() throws DatatypeConversionException;

  String toString();
} // DatatypeValue
