[Mulgara-svn] r1585 - trunk/src/jar/query/java/org/mulgara/query/filter/value

pag at mulgara.org pag at mulgara.org
Tue Mar 3 21:53:16 UTC 2009


Author: pag
Date: 2009-03-03 13:53:15 -0800 (Tue, 03 Mar 2009)
New Revision: 1585

Modified:
   trunk/src/jar/query/java/org/mulgara/query/filter/value/ExternalFn.java
Log:
Added the ability for functions to return numerical results

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/value/ExternalFn.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/value/ExternalFn.java	2009-03-03 21:52:50 UTC (rev 1584)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/value/ExternalFn.java	2009-03-03 21:53:15 UTC (rev 1585)
@@ -30,7 +30,7 @@
  * @copyright &copy; 2008 <a href="http://www.topazproject.org/">The Topaz Project</a>
  * @licence <a href="{@docRoot}/../../LICENCE.txt">Open Software License v3.0</a>
  */
-public class ExternalFn extends AbstractAccessorFn {
+public class ExternalFn extends AbstractAccessorFn implements NumericExpression {
 
   /** Generated Serialization ID for RMI */
   private static final long serialVersionUID = 5748124115023875223L;
@@ -77,7 +77,8 @@
    */
   private boolean isCast(URI u) {
     if (XSD_SCHEME.equals(fnUri.getScheme()) && XSD_PART.equals(fnUri.getSchemeSpecificPart())) return true;
-    if (RDF.XML_LITERAL.equals(u)) return true;
+    if (XSD.DOM.equals(fnUri.getScheme())) return true;
+    if (RDF.XML_LITERAL.equals(u) || RDF.XML_LITERAL_ABBR.equals(u)) return true;
     return false;
   }
 
@@ -173,4 +174,16 @@
     }
     return result;
   }
+
+  /**
+   * Extract a numeric value from this expression, if legal. This may result in a type exception.
+   * @see org.mulgara.query.filter.value.NumericExpression#getNumber()
+   * @return A numeric value for the resolved expression.
+   * @throws QueryException If the resolved expression is not a numeric type.
+   */
+  public Number getNumber() throws QueryException {
+    RDFTerm result = resolve();
+    if (!result.isLiteral() && !(result instanceof NumericExpression)) throw new QueryException("Type Error: Not valid to ask the numeric form of a: " + result.getClass().getSimpleName());
+    return ((NumericExpression)result).getNumber();
+  }
 }




More information about the Mulgara-svn mailing list