1 22 23 package org.xquark.extractor.xfunctions; 24 25 import java.util.ArrayList ; 26 import java.util.List ; 27 28 import org.xquark.extractor.algebra.Expression; 29 import org.xquark.extractor.common.Debug; 30 31 public abstract class XFunction extends Expression { 32 private String _functionName; 33 protected List _arguments; 34 35 38 public XFunction() { 39 } 40 public XFunction(String functionName) { 41 setFunctionName(functionName); 42 } 43 48 public XFunction(String functionName, List arguments) { 49 setFunctionName(functionName); 50 setArguments(arguments); 51 } 52 53 58 public String getFunctionName() { 59 return _functionName; 60 } 61 62 67 public void setFunctionName(String functionName) { 68 _functionName = functionName; 69 } 70 71 76 public List getArguments() { 77 return _arguments; 78 } 79 80 public List getOperands() 81 { 82 return _arguments; 83 } 84 89 public void setArguments(List aArguments) { 90 _arguments = aArguments; 91 if (null != _arguments) { 92 for (int i = 0; i < _arguments.size(); i++) { 93 ((Expression)_arguments.get(i)).setFather(this); 94 } 95 } 96 } 97 98 public int getArgumentNumber() { 99 if (null != _arguments) { 100 return _arguments.size(); 101 } 102 else { 103 return 0; 104 } 105 } 106 107 public Expression getArgument(int index ) { 108 if (null != _arguments) { 109 if (_arguments.size()> index) { 110 return (Expression)_arguments.get(index); 111 } 112 else { 113 return null; 114 } 115 } 116 else { 117 return null; 118 } 119 } 120 121 public void setArgument(int index, Expression argument) { 122 Debug.assertTrue( null!=argument, "null!=argument"); 123 if (null == _arguments ) { 124 _arguments = new ArrayList (); 125 } 126 while( index >_arguments.size()-1) { 127 _arguments.add(null); 128 } 129 _arguments.set(index,argument); 130 argument.setFather(this); 131 } 132 133 public boolean replaceChild(Expression oldChild, Expression newChild) 134 { 135 boolean retVal = false; 136 137 if (null != _arguments) { 138 Object child = null; 139 for (int i = 0; i < _arguments.size(); i++) { 140 child = _arguments.get(i); 141 if ( oldChild.equals(child)) { 142 _arguments.set(i,newChild); 143 retVal = true; 144 break; 145 } 146 } 147 } 148 else { 149 150 } 151 152 return retVal; 153 } 154 155 public String pprint() 156 { 157 StringBuffer retVal = new StringBuffer (); 158 retVal.append(getFunctionName()); 159 retVal.append("("); 160 if ( null != _arguments) { 161 Expression argument = null; 162 for (int i = 0; i < _arguments.size(); i++) { 163 argument = (Expression)_arguments.get(i); 164 retVal.append(argument.pprint()); 165 retVal.append(","); 166 } 167 retVal.delete(retVal.length(),retVal.length()); 168 } 169 retVal.append(")"); 170 return retVal.toString(); 171 } 172 173 176 public boolean deepEquals(Object o) 177 { 178 if (o instanceof XFunction) 179 { 180 XFunction cast = (XFunction)o; 181 int len = _arguments.size(), i; 182 boolean ret = _functionName.equalsIgnoreCase(cast.getFunctionName()) 183 && (len == cast.getArguments().size()); 184 185 for (i = 0; ret && i < len; i++) 186 ret &= ((Expression)_arguments.get(i)).deepEquals(cast.getArguments().get(i)); 187 return ret; 188 } 189 return false; 190 } 191 } 192 193 | Popular Tags |