Author: rvesse
Date: Fri Aug  9 17:47:27 2013
New Revision: 1512416

URL: http://svn.apache.org/r1512416
Log:
Initial implementation support for a few Leviathan extension functions 
(JENA-507)

Added:
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java
Modified:
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java

Modified: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java?rev=1512416&r1=1512415&r2=1512416&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java
 (original)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NumericType.java
 Fri Aug  9 17:47:27 2013
@@ -18,4 +18,4 @@
 
 package com.hp.hpl.jena.sparql.expr.nodevalue;
 
-enum NumericType { OP_INTEGER, OP_DECIMAL, OP_DOUBLE, OP_FLOAT}
+public enum NumericType { OP_INTEGER, OP_DECIMAL, OP_DOUBLE, OP_FLOAT}

Added: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java?rev=1512416&view=auto
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java
 (added)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/LeviathanConstants.java
 Fri Aug  9 17:47:27 2013
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.sparql.function.library.leviathan;
+
+public class LeviathanConstants {
+
+    public static final String LeviathanFunctionLibraryURI = 
"http://www.dotnetrdf.org/leviathan#";;
+    public static final String LeviathanFunctionLibrary = 
"java:com.hp.hpl.jena.sparql.function.library.leviathan.";
+}

Added: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java?rev=1512416&view=auto
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java
 (added)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/cube.java
 Fri Aug  9 17:47:27 2013
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */ 
+
+package com.hp.hpl.jena.sparql.function.library.leviathan;
+
+import java.math.BigInteger;
+
+import com.hp.hpl.jena.sparql.ARQInternalErrorException;
+import com.hp.hpl.jena.sparql.expr.NodeValue;
+import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp;
+import com.hp.hpl.jena.sparql.function.FunctionBase1;
+
+public class cube extends FunctionBase1 {
+
+    @Override
+    public NodeValue exec(NodeValue v) {
+        switch (XSDFuncOp.classifyNumeric("sq", v))
+        {
+            case OP_INTEGER:
+                BigInteger i = v.getInteger();
+                return NodeValue.makeInteger( i.pow(3) );
+            case OP_DECIMAL:
+                double dec = v.getDecimal().doubleValue() ;
+                return NodeValue.makeDecimal( Math.pow(dec, 3d)) ;
+            case OP_FLOAT:
+                // TODO Should squaring a float keep it a float?
+            case OP_DOUBLE:
+                return NodeValue.makeDouble( Math.pow(v.getDouble(), 3d) ) ;
+            default:
+                throw new ARQInternalErrorException("Unrecognized numeric 
operation : "+v) ;
+        }
+    }
+
+}

Added: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java?rev=1512416&view=auto
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java
 (added)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/e.java
 Fri Aug  9 17:47:27 2013
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */ 
+
+package com.hp.hpl.jena.sparql.function.library.leviathan;
+
+import com.hp.hpl.jena.sparql.ARQInternalErrorException;
+import com.hp.hpl.jena.sparql.expr.NodeValue;
+import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp;
+import com.hp.hpl.jena.sparql.function.FunctionBase1;
+
+public class e extends FunctionBase1 {
+
+    @Override
+    public NodeValue exec(NodeValue v) {
+        switch (XSDFuncOp.classifyNumeric("sq", v))
+        {
+            case OP_INTEGER:
+            case OP_DECIMAL:
+            case OP_FLOAT:
+            case OP_DOUBLE:
+                return NodeValue.makeDouble( Math.exp(v.getDouble()) ) ;
+            default:
+                throw new ARQInternalErrorException("Unrecognized numeric 
operation : "+v) ;
+        }
+    }
+
+}

Added: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java?rev=1512416&view=auto
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java
 (added)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/function/library/leviathan/sq.java
 Fri Aug  9 17:47:27 2013
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */ 
+
+package com.hp.hpl.jena.sparql.function.library.leviathan;
+
+import java.math.BigInteger;
+
+import com.hp.hpl.jena.sparql.ARQInternalErrorException;
+import com.hp.hpl.jena.sparql.expr.NodeValue;
+import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp;
+import com.hp.hpl.jena.sparql.function.FunctionBase1;
+
+public class sq extends FunctionBase1 {
+
+    @Override
+    public NodeValue exec(NodeValue v) {
+        switch (XSDFuncOp.classifyNumeric("sq", v))
+        {
+            case OP_INTEGER:
+                BigInteger i = v.getInteger();
+                return NodeValue.makeInteger( i.pow(2) );
+            case OP_DECIMAL:
+                double dec = v.getDecimal().doubleValue() ;
+                return NodeValue.makeDecimal( Math.pow(dec, 2d)) ;
+            case OP_FLOAT:
+                // TODO Should squaring a float keep it a float?
+            case OP_DOUBLE:
+                return NodeValue.makeDouble( Math.pow(v.getDouble(), 2d) ) ;
+            default:
+                throw new ARQInternalErrorException("Unrecognized numeric 
operation : "+v) ;   
+        }
+    }
+
+}

Modified: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java?rev=1512416&r1=1512415&r2=1512416&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java 
(original)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/MappedLoader.java 
Fri Aug  9 17:47:27 2013
@@ -23,6 +23,7 @@ import java.util.Iterator ;
 import java.util.Map ;
 
 import com.hp.hpl.jena.sparql.ARQConstants ;
+import com.hp.hpl.jena.sparql.function.library.leviathan.LeviathanConstants;
 
 
 public class MappedLoader
@@ -33,6 +34,7 @@ public class MappedLoader
     static Map<String, String> uriMap = new HashMap<String, String>() ;
     
     static {
+        // ARQ library
         uriMap.put(ARQConstants.ARQFunctionLibraryURI,
                    ARQConstants.ARQFunctionLibrary) ;
         uriMap.put(ARQConstants.ARQPropertyFunctionLibraryURI,
@@ -46,6 +48,10 @@ public class MappedLoader
         
         uriMap.put("java:com.hp.hpl.jena.query.pfunction.library.",
                    "java:com.hp.hpl.jena.sparql.pfunction.library.") ;
+        
+        // Leviathan library
+        uriMap.put(LeviathanConstants.LeviathanFunctionLibraryURI, 
+                   LeviathanConstants.LeviathanFunctionLibrary) ;
     }
     
     public static boolean isPossibleDynamicURI(String uri, Class<?> 
expectedClass)
@@ -54,7 +60,7 @@ public class MappedLoader
         if ( uri == null )
             return false ;
         // Need to force the load to check everything.
-        // Callers (who are expectedClass sesnitive) should have
+        // Callers (who are expectedClass sensitive) should have
         // an "alreadyLoaded" cache
         return loadClass(uri, expectedClass) != null ;
     }


Reply via email to