[teiid-commits] teiid SVN: r2878 - in branches/7.3.x: engine/src/main/java/org/teiid/query/function and 3 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Jan 26 22:26:46 EST 2011


Author: rareddy
Date: 2011-01-26 22:26:46 -0500 (Wed, 26 Jan 2011)
New Revision: 2878

Modified:
   branches/7.3.x/api/src/main/java/org/teiid/metadata/FunctionMethod.java
   branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionForm.java
   branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionLibrary.java
   branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionTree.java
   branches/7.3.x/engine/src/main/java/org/teiid/query/function/metadata/FunctionMetadataValidator.java
   branches/7.3.x/engine/src/test/java/org/teiid/query/function/TestFunctionMetadataReader.java
   branches/7.3.x/engine/src/test/java/org/teiid/query/function/metadata/TestFunctionMethod.java
Log:
TEIID-1446: with array types in the class, jaxb is behaving as described in the jira. Replaced the array attribute with collection type to avoid the exception

Modified: branches/7.3.x/api/src/main/java/org/teiid/metadata/FunctionMethod.java
===================================================================
--- branches/7.3.x/api/src/main/java/org/teiid/metadata/FunctionMethod.java	2011-01-26 21:40:40 UTC (rev 2877)
+++ branches/7.3.x/api/src/main/java/org/teiid/metadata/FunctionMethod.java	2011-01-27 03:26:46 UTC (rev 2878)
@@ -22,7 +22,9 @@
 
 package org.teiid.metadata;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
@@ -103,8 +105,9 @@
     private boolean nullOnNull;
     
     private Determinism determinism = Determinism.DETERMINISTIC;
-        
-    private FunctionParameter[] inputParameters;
+    
+    @XmlElement(name="inputParameters")
+    protected List<FunctionParameter> inParameters = new ArrayList<FunctionParameter>();
     private FunctionParameter outputParameter;
     
     protected FunctionMethod() {
@@ -131,7 +134,9 @@
         setPushdown(pushdown);
         setInvocationClass(invocationClass);
         setInvocationMethod(invocationMethod);
-        setInputParameters(inputParams);
+        if (inputParams != null) {
+        	setInputParameters(Arrays.asList(inputParams));
+        }
         setOutputParameter(outputParam); 
         setNullOnNull(nullOnNull);
         setDeterminism(deterministic);
@@ -269,27 +274,28 @@
      * @return Number of input parameters
      */
     public int getInputParameterCount() {
-        if(this.inputParameters == null) { 
+        if(this.inParameters == null) { 
             return 0;
         }
-        return this.inputParameters.length;
+        return this.inParameters.size();
     }
     
     /**
      * Get input parameters
      * @return Array of input parameters, may be null if 0 parameters
      */
-    @XmlElement
-    public FunctionParameter[] getInputParameters() { 
-        return this.inputParameters;
+    
+    public List<FunctionParameter> getInputParameters() { 
+        return this.inParameters;
     }
     
     /**
      * Set input parameters.
      * @param params Input parameters
      */
-    public void setInputParameters(FunctionParameter[] params) { 
-        this.inputParameters = params;
+    public void setInputParameters(List<FunctionParameter> params) { 
+        this.inParameters.clear();
+        this.inParameters.addAll(params);
     }
     
     /**
@@ -322,8 +328,8 @@
      */
     public int hashCode() { 
         int hash = HashCodeUtil.hashCode(0, super.getName());
-        if(inputParameters != null) { 
-            hash = HashCodeUtil.hashCode(hash, Arrays.hashCode(inputParameters));
+        if(inParameters != null) { 
+            hash = HashCodeUtil.hashCode(hash, inParameters.hashCode());
         }             
         return hash;
     }
@@ -356,16 +362,16 @@
             }
             
             // Compare types of parameters
-            FunctionParameter[] thisInputs = this.getInputParameters();
-            if(thisInputs != null && thisInputs.length > 0) { 
+            List<FunctionParameter> thisInputs = this.getInputParameters();
+            if(thisInputs != null && thisInputs.size() > 0) { 
                 // If thisInputs is not null and >0 and other parameter
                 // count matched this parameter count, otherInputs MUST be 
                 // non null to have more than one parameter - so we don't 
                 // need to check it here.
-                FunctionParameter[] otherInputs = other.getInputParameters();
+                List<FunctionParameter> otherInputs = other.getInputParameters();
                 
-                for(int i=0; i<thisInputs.length; i++) { 
-                    boolean paramMatch = compareWithNull(thisInputs[i], otherInputs[i]);
+                for(int i=0; i<thisInputs.size(); i++) { 
+                    boolean paramMatch = compareWithNull(thisInputs.get(i), otherInputs.get(i));
                     if(! paramMatch) { 
                         return false;
                     }    
@@ -412,15 +418,15 @@
         
         // Print parameters
         str.append("("); //$NON-NLS-1$
-        if(inputParameters != null) { 
-            for(int i=0; i<inputParameters.length; i++) {
-                if(inputParameters[i] != null) { 
-                    str.append(inputParameters[i].toString());                   
+        if(inParameters != null) { 
+            for(int i=0; i<inParameters.size(); i++) {
+                if(inParameters.get(i) != null) { 
+                    str.append(inParameters.get(i).toString());                   
                 } else {
                     str.append("<unknown>"); //$NON-NLS-1$
                 }
                 
-                if(i < (inputParameters.length-1)) { 
+                if(i < (inParameters.size()-1)) { 
                     str.append(", "); //$NON-NLS-1$
                 }
             }    
@@ -462,8 +468,8 @@
     }
     
     public boolean isVarArgs() {
-    	if (this.inputParameters != null && this.inputParameters.length > 0) {
-    		return inputParameters[inputParameters.length - 1].isVarArg();
+    	if (this.inParameters != null && this.inParameters.size() > 0) {
+    		return inParameters.get(inParameters.size() - 1).isVarArg();
     	}
     	return false;
     }

Modified: branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionForm.java
===================================================================
--- branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionForm.java	2011-01-26 21:40:40 UTC (rev 2877)
+++ branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionForm.java	2011-01-27 03:26:46 UTC (rev 2878)
@@ -66,17 +66,17 @@
         this.category = method.getCategory().toUpperCase();
         
         // Get input parameter stuff
-        FunctionParameter[] inputParams = method.getInputParameters();
+        List<FunctionParameter> inputParams = method.getInputParameters();
         if(inputParams == null) { 
             inputParamNames = new ArrayList(0);
             inputParamDescs = new ArrayList(0);
         } else {
-            inputParamNames = new ArrayList(inputParams.length);
-            inputParamDescs = new ArrayList(inputParams.length);
+            inputParamNames = new ArrayList(inputParams.size());
+            inputParamDescs = new ArrayList(inputParams.size());
             
-            for(int i=0; i<inputParams.length; i++) { 
-                inputParamNames.add(inputParams[i].getName().toUpperCase());
-                inputParamDescs.add(inputParams[i].getDescription());
+            for(int i=0; i<inputParams.size(); i++) { 
+                inputParamNames.add(inputParams.get(i).getName().toUpperCase());
+                inputParamDescs.add(inputParams.get(i).getDescription());
             }
         }
         

Modified: branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionLibrary.java
===================================================================
--- branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionLibrary.java	2011-01-26 21:40:40 UTC (rev 2877)
+++ branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionLibrary.java	2011-01-27 03:26:46 UTC (rev 2878)
@@ -228,7 +228,7 @@
                 
         for (FunctionMethod nextMethod : functionMethods) {
             int currentScore = 0; 
-            final FunctionParameter[] methodTypes = nextMethod.getInputParameters();
+            final List<FunctionParameter> methodTypes = nextMethod.getInputParameters();
             //Holder for current signature with converts where required
             FunctionDescriptor[] currentSignature = new FunctionDescriptor[types.length];
             
@@ -237,7 +237,7 @@
             int i = 0;
             for(; i < types.length; i++) {
             	//treat all varags as the same type
-                final String tmpTypeName = methodTypes[Math.min(i, methodTypes.length - 1)].getType();
+                final String tmpTypeName = methodTypes.get(Math.min(i, methodTypes.size() - 1)).getType();
                 Class<?> targetType = DataTypeManager.getDataTypeClass(tmpTypeName);
 
                 Class<?> sourceType = types[i];

Modified: branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionTree.java
===================================================================
--- branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionTree.java	2011-01-26 21:40:40 UTC (rev 2877)
+++ branches/7.3.x/engine/src/main/java/org/teiid/query/function/FunctionTree.java	2011-01-27 03:26:46 UTC (rev 2878)
@@ -263,11 +263,11 @@
         String methodName = method.getName();
 
         // Get input types for path
-        FunctionParameter[] inputParams = method.getInputParameters();
+        List<FunctionParameter> inputParams = method.getInputParameters();
         List<Class> inputTypes = new LinkedList<Class>();
         if(inputParams != null) {
-            for(int i=0; i<inputParams.length; i++) {
-                String typeName = inputParams[i].getType();
+            for(int i=0; i<inputParams.size(); i++) {
+                String typeName = inputParams.get(i).getType();
                 inputTypes.add(DataTypeManager.getDataTypeClass(typeName));
             }
         }

Modified: branches/7.3.x/engine/src/main/java/org/teiid/query/function/metadata/FunctionMetadataValidator.java
===================================================================
--- branches/7.3.x/engine/src/main/java/org/teiid/query/function/metadata/FunctionMetadataValidator.java	2011-01-26 21:40:40 UTC (rev 2877)
+++ branches/7.3.x/engine/src/main/java/org/teiid/query/function/metadata/FunctionMetadataValidator.java	2011-01-27 03:26:46 UTC (rev 2878)
@@ -23,6 +23,7 @@
 package org.teiid.query.function.metadata;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.teiid.api.exception.query.FunctionMetadataException;
 import org.teiid.core.types.DataTypeManager;
@@ -90,10 +91,10 @@
 	        validateInvocationMethod(method.getInvocationClass(), method.getInvocationMethod(), method.getPushdown());
 
 	        // Validate input parameters
-	        FunctionParameter[] params = method.getInputParameters();
-	        if(params != null) {
-	            for(int i=0; i<params.length; i++) {
-	                validateFunctionParameter(params[i]);
+	       List<FunctionParameter> params = method.getInputParameters();
+	        if(params != null && !params.isEmpty()) {
+	            for(int i=0; i<params.size(); i++) {
+	                validateFunctionParameter(params.get(i));
 	            }
 	        }
 

Modified: branches/7.3.x/engine/src/test/java/org/teiid/query/function/TestFunctionMetadataReader.java
===================================================================
--- branches/7.3.x/engine/src/test/java/org/teiid/query/function/TestFunctionMetadataReader.java	2011-01-26 21:40:40 UTC (rev 2877)
+++ branches/7.3.x/engine/src/test/java/org/teiid/query/function/TestFunctionMetadataReader.java	2011-01-27 03:26:46 UTC (rev 2878)
@@ -54,7 +54,7 @@
 				assertNull(m.getDescription());
 				
 				assertEquals(1, m.getInputParameterCount());
-				FunctionParameter in = m.getInputParameters()[0];
+				FunctionParameter in = m.getInputParameters().get(0);
 				assertEquals("prop", in.getName());
 				assertEquals("string", in.getType());
 				assertNull(in.getDescription());

Modified: branches/7.3.x/engine/src/test/java/org/teiid/query/function/metadata/TestFunctionMethod.java
===================================================================
--- branches/7.3.x/engine/src/test/java/org/teiid/query/function/metadata/TestFunctionMethod.java	2011-01-26 21:40:40 UTC (rev 2877)
+++ branches/7.3.x/engine/src/test/java/org/teiid/query/function/metadata/TestFunctionMethod.java	2011-01-27 03:26:46 UTC (rev 2878)
@@ -45,6 +45,16 @@
         UnitTestUtil.helpTestEquivalence(0, m1, m1);
     }
     
+    public void testEquivalence11() {
+        FunctionParameter pout = new FunctionParameter("out", "string"); //$NON-NLS-1$ //$NON-NLS-2$
+        
+        FunctionMethod m1 = new FunctionMethod("length", "", FunctionCategoryConstants.STRING, //$NON-NLS-1$ //$NON-NLS-2$
+            "com.metamatrix.query.function.FunctionMethods", "length",  //$NON-NLS-1$ //$NON-NLS-2$
+            null, pout );    
+            
+        UnitTestUtil.helpTestEquivalence(0, m1, m1);
+    }    
+    
     public void testEquivalence2() {
         FunctionParameter p1 = new FunctionParameter("in", "string"); //$NON-NLS-1$ //$NON-NLS-2$
         FunctionParameter pout = new FunctionParameter("out", "string"); //$NON-NLS-1$ //$NON-NLS-2$



More information about the teiid-commits mailing list