1 10 package org.mmbase.util.functions; 11 12 import java.util.*; 13 14 29 abstract public class AbstractFunction implements Function, Comparable , java.io.Serializable { 30 31 protected String name; 32 protected ReturnType returnType; 33 34 private Parameter[] parameterDefinition; 35 private String description; 36 37 43 public AbstractFunction(String name, Parameter[] def, ReturnType returnType) { 44 this.name = name; 45 if (def != null){ 46 this.parameterDefinition = (Parameter[]) Functions.define(def, new ArrayList()).toArray(Parameter.EMPTY); 47 } 48 this.returnType = returnType; 49 } 50 51 55 public Parameters createParameters() { 56 if (parameterDefinition == null) { 57 throw new IllegalStateException ("Definition is not set yet"); 58 } 59 return new Parameters(parameterDefinition); 60 } 61 62 69 abstract public Object getFunctionValue(Parameters parameters); 70 71 78 public final Object getFunctionValueWithList(List parameters) { 79 if (parameters instanceof Parameters) { 80 return getFunctionValue((Parameters)parameters); 81 } else { 82 return getFunctionValue(new Parameters(parameterDefinition, parameters)); 83 } 84 } 85 86 89 public void setDescription(String description) { 90 this.description = description; 91 } 92 93 96 public String getDescription() { 97 return description; 98 } 99 100 104 public String getName() { 105 return name; 106 } 107 108 111 public Parameter[] getParameterDefinition() { 112 return parameterDefinition; 113 } 114 115 120 public void setParameterDefinition(Parameter[] params) { 121 if (parameterDefinition != null) { 122 throw new IllegalStateException ("Definition is set already"); 123 } 124 parameterDefinition = (Parameter[]) Functions.define(params, new ArrayList()).toArray(Parameter.EMPTY); 125 } 126 127 128 131 public ReturnType getReturnType() { 132 return returnType; 133 } 134 139 public void setReturnType(ReturnType type) { 140 if (returnType != null) { 141 throw new IllegalStateException ("Returntype is set already"); 142 } 143 returnType = type; 144 } 145 146 public int compareTo(Object o) { 147 Function fun = (Function) o; 148 return name.compareTo(fun.getName()); 149 } 150 151 public boolean equals(Object o) { 152 if (o == this) return true; 153 if (o == null) return false; 154 return (o instanceof Function) && ((Function)o).getName().equals(name); 155 } 156 157 158 161 public int hashCode() { 162 return name.hashCode(); 163 } 164 165 public String toString() { 166 return "" + returnType + " " + getName() + Arrays.asList(parameterDefinition); 167 } 168 169 } 170 | Popular Tags |