001 package railo.runtime.exp; 002 003 import java.util.ArrayList; 004 005 import railo.runtime.PageContext; 006 import railo.runtime.config.ConfigImpl; 007 import railo.runtime.type.util.KeyConstants; 008 import railo.transformer.library.function.FunctionLib; 009 import railo.transformer.library.function.FunctionLibFunction; 010 import railo.transformer.library.function.FunctionLibFunctionArg; 011 012 /** 013 * specified exception for Built-In Function 014 */ 015 public final class FunctionException extends ExpressionException { 016 017 /* * 018 * constructor of the class 019 * @param pc current Page Context 020 * @param functionName Name of the function that thorw the Exception 021 * @param badArgumentPosition Position of the bad argument in the Argument List of the function 022 * @param badArgumentName Name of the bad Argument 023 * @param message additional Exception message 024 * / 025 public FunctionException(PageContext pc,String functionName, String badArgumentPosition, String badArgumentName, String message) { 026 this((PageContext)pc,functionName,badArgumentPosition,badArgumentName,message); 027 }*/ 028 029 /** 030 * constructor of the class 031 * @param pc current Page Context 032 * @param functionName Name of the function that thorw the Exception 033 * @param badArgumentPosition Position of the bad argument in the Argument List of the function 034 * @param badArgumentName Name of the bad Argument 035 * @param message additional Exception message 036 */ 037 public FunctionException(PageContext pc,String functionName, int badArgumentPosition, String badArgumentName, String message) { 038 this(pc,functionName,toStringBadArgumentPosition(badArgumentPosition),badArgumentName,message,null); 039 } 040 041 public FunctionException(PageContext pc,String functionName, int badArgumentPosition, String badArgumentName, String message, String detail) { 042 this(pc,functionName,toStringBadArgumentPosition(badArgumentPosition),badArgumentName,message,detail); 043 } 044 045 private static String toStringBadArgumentPosition(int pos) { 046 switch(pos) { 047 case 1:return "first"; 048 case 2:return "second"; 049 case 3:return "third"; 050 case 4:return "forth"; 051 case 5:return "fifth"; 052 case 6:return "sixth"; 053 case 7:return "seventh"; 054 case 8:return "eighth"; 055 case 9:return "ninth"; 056 case 10:return "tenth"; 057 case 11:return "eleventh"; 058 case 12:return "twelfth"; 059 } 060 // TODO Auto-generated method stub 061 return pos+"th"; 062 } 063 064 public FunctionException(PageContext pc,String functionName, String badArgumentPosition, String badArgumentName, String message, String detail) { 065 super("invalid call of the function "+functionName+", "+(badArgumentPosition)+" Argument ("+badArgumentName+") is invalid, "+message,detail); 066 setAdditional(KeyConstants._pattern,getFunctionInfo(pc,functionName)); 067 } 068 069 private static String getFunctionInfo(PageContext pc,String functionName) { 070 FunctionLib[] flds; 071 flds = ((ConfigImpl)pc.getConfig()).getFLDs(); 072 073 FunctionLibFunction function=null; 074 for(int i=0;i<flds.length;i++) { 075 function = flds[i].getFunction(functionName.toLowerCase()); 076 if(function!=null)break; 077 } 078 if(function == null) return ""; 079 080 StringBuffer rtn=new StringBuffer(); 081 rtn.append(function.getName()+"("); 082 083 084 int optionals=0; 085 ArrayList args = function.getArg(); 086 for(int i=0;i<args.size();i++) { 087 FunctionLibFunctionArg arg=(FunctionLibFunctionArg) args.get(i); 088 if(i!=0)rtn.append(", "); 089 if(!arg.getRequired()) { 090 rtn.append("["); 091 optionals++; 092 } 093 rtn.append(arg.getName()); 094 rtn.append(":"); 095 rtn.append(arg.getTypeAsString()); 096 } 097 for(int i=0;i<optionals;i++) 098 rtn.append("]"); 099 rtn.append("):"+function.getReturnTypeAsString()); 100 101 return rtn.toString(); 102 } 103 104 105 106 }