/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-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.
*/
package org.geotools.filter.capability;
import java.util.Arrays;
import java.util.List;
import org.opengis.filter.capability.FunctionName;
/**
* Implementation of the FunctionName interface.
*
* @author Justin Deoliveira, The Open Planning Project
*
*
* @source $URL$
*/
public class FunctionNameImpl extends OperatorImpl implements FunctionName {
/** Number of required arguments */
int argumentCount;
List<String> argumentNames;
public FunctionNameImpl( String name, int argumentCount ) {
super( name );
this.argumentCount = argumentCount;
this.argumentNames = null;
}
public FunctionNameImpl( String name, String argumentsNames[] ) {
super( name );
this.argumentCount = argumentsNames.length;
this.argumentNames = generateArgumentNames( argumentCount, argumentsNames );
}
public FunctionNameImpl( String name, List<String> argumentsNames ) {
super( name );
this.argumentCount = argumentsNames.size();
this.argumentNames = generateArgumentNames( argumentCount, argumentsNames );
}
public FunctionNameImpl( FunctionName copy ) {
super( copy );
this.argumentCount = copy.getArgumentCount();
this.argumentNames = generateArgumentNames( argumentCount, copy.getArgumentNames() );
}
public void setArgumentCount( int argumentCount ) {
this.argumentCount = argumentCount;
this.argumentNames = generateArgumentNames( argumentCount, argumentNames );
}
public int getArgumentCount() {
return argumentCount;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + argumentCount;
return result;
}
@Override
public boolean equals( Object obj ) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
final FunctionNameImpl other = (FunctionNameImpl) obj;
if (argumentCount != other.argumentCount)
return false;
return true;
}
public void setArgumentNames( List<String> argumentNames ) {
this.argumentNames = argumentNames;
}
/**
* Optional ArgumentNames.
* <p>
* This is a fixed length list the same size as getArgumentCount().
*/
public List<String> getArgumentNames() {
if( argumentNames == null ){
argumentNames = generateArgumentNames( argumentCount );
}
return argumentNames;
}
private static List<String> generateArgumentNames( int count ){
List<String> names = Arrays.asList( new String[count]);
for( int i=0; i < count; i++){
names.set(i, "arg"+i );
}
return names;
}
private static List<String> generateArgumentNames( int count, List<String> copy ){
List<String> names = Arrays.asList( new String[count]);
for( int i=0; i < count; i++){
String name = "arg"+i;
if( copy != null && i < copy.size() && copy.get(i) != null ){
name = copy.get(i);
}
names.set(i, name );
}
return names;
}
private static List<String> generateArgumentNames( int count, String[] copy ){
List<String> names = Arrays.asList( new String[count]);
for( int i=0; i < count; i++){
String name = "arg"+i;
if( copy != null && i < copy.length && copy[i] != null ){
name = copy[i];
}
names.set(i, name );
}
return names;
}
}