package org.geotools.filter.function.string;

/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 * 
 *    (C) 2005-2008, Open Source Geospatial Foundation (OSGeo)
 *    
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 */

//this code is autogenerated - you shouldnt be modifying it!
import java.util.Arrays;
import java.util.List;

import org.geotools.filter.FunctionImpl;
import org.geotools.filter.capability.FunctionNameImpl;
import org.opengis.filter.capability.FunctionName;
import org.opengis.filter.expression.Expression;
import org.opengis.filter.expression.ExpressionVisitor;

/**
 * The function concatenates strings.
 * <p>
 * It is used to create concatenated strings as arguments of functions.
 * <p>
 * Implementation of Concatenate as defined by SE1.1.
 * <p>
 * 
 * @author Jody Garnett (Refractions Research, Inc.)
 *
 *
 * @source $URL$
 */
public class ConcatenateFunction extends FunctionImpl {

    /**
     * Make the instance of FunctionName available in
     * a consistent spot.
     */
    public static final FunctionName NAME = new FunctionNameImpl("Concatenate", "text 1", "text 2",
        "text 3");

    public ConcatenateFunction() {
        this.functionName = NAME;
    }
    
    @Override
    public String getName() {
    	return NAME.getName();
    }

    public int getArgCount() {
        return NAME.getArgumentCount();
    }

    public Object evaluate(Object feature) {
        StringBuffer text = new StringBuffer();
        for( Expression expression: (List<Expression>) getParameters() ){
        	try {
        		String str = (String) expression.evaluate(feature, String.class);
        		text.append( str );
        	}
        	catch( Exception couldNotCompute){
        		// log me please
        	}
        }
        return text.toString();
    }
}

@@ -1943,18 +1943,18 @@
      for
-(
  
+(
 Expressi
@@ -1966,16 +1966,17 @@
 pression
+ 
 : (List%3C
@@ -2003,18 +2003,18 @@
 meters()
+)
  
-)
 %7B%0A      
@@ -2015,17 +2015,20 @@
         
-%09
+    
 try %7B%0A  
@@ -2033,18 +2033,24 @@
         
+    
-%09%09
+    
 String s
@@ -2115,18 +2115,63 @@
         
-%09%09
+        if (str != null) %7B%0A                    
 text.app
@@ -2174,21 +2174,19 @@
 .append(
- 
 str
- 
 );%0A     
@@ -2180,33 +2180,40 @@
 d(str);%0A        
+  
-%09
+      
 %7D%0A        %09catch
@@ -2210,16 +2210,21 @@
     
-%09
+    %7D 
 catch
-(
  
+(
 Exce
@@ -2245,16 +2245,17 @@
 Compute)
+ 
 %7B%0A      
@@ -2260,10 +2260,16 @@
     
-%09%09
+        
 // l
@@ -2289,17 +2289,20 @@
         
-%09
+    
 %7D%0A      

Skip over null string values when using concatenate function