1 package org.jicengine.expression; 2 3 import java.util.List ; 4 import java.util.ArrayList ; 5 16 public final class Utils { 17 public static char METHOD_ARGS_START = '('; 18 public static char METHOD_ARGS_END = ')'; 19 20 21 24 public static String [] extractArguments(String expression) 25 { 26 return extractArguments(expression, 0, expression.length()); 27 } 28 29 36 public static String [] extractArguments(String expression, int fromIndex, int endIndex) 37 { 38 char[] chars = expression.toCharArray(); 39 char character; 40 int paramStart = -1; 41 int paramEnd = -1; 42 43 for (int i = fromIndex; i < endIndex; i++) { 45 character = chars[i]; 46 if( character == METHOD_ARGS_START ){ 47 paramStart = i; 49 break; 50 } 51 } 52 53 for (int i = endIndex-1; fromIndex <= i ; i--) { 55 character = chars[i]; 56 if( character == METHOD_ARGS_END){ 57 paramEnd = i; 58 break; 59 } 60 } 61 62 if( paramStart < 0 && paramEnd < 0 ){ 63 return new String [0]; 64 } 65 else { 66 try { 67 return parseArgumentlist(expression.substring(paramStart+1,paramEnd)); 68 } catch (StringIndexOutOfBoundsException e){ 69 throw new IllegalArgumentException ("didn't find correct argument-part from string '" + expression + "' at [" + fromIndex + ".." + endIndex + "]"); 70 } 71 } 72 } 73 74 public static String toParameterList(String [] parameters) 75 { 76 String list = ""; 77 for (int i = 0; i < parameters.length; i++) { 78 list += parameters[i]; 79 if( i+1 < parameters.length ){ 80 list += ","; 81 } 82 } 83 return list; 84 85 } 86 87 92 public static String [] parseArgumentlist(String list) 93 { 94 if( list.indexOf("'") == -1 ){ 95 java.util.StringTokenizer tokenizer = new java.util.StringTokenizer (list,","); 96 String [] params = new String [tokenizer.countTokens()]; 97 for (int i = 0; i < params.length; i++) { 98 params[i] = tokenizer.nextToken().trim(); 99 } 100 return params; 101 } 102 else { 103 boolean inString = false; 104 java.util.StringTokenizer tokenizer = new java.util.StringTokenizer (list,",'",true); 105 List params = new ArrayList (); 106 String token; 107 while( tokenizer.hasMoreElements() ){ 108 token = tokenizer.nextToken(",'"); 109 if( token.equals("'") ){ 110 try { 111 token = tokenizer.nextToken("'"); 112 tokenizer.nextToken("'"); 113 params.add("'" + token + "'"); 114 } catch (java.util.NoSuchElementException e){ 115 throw new IllegalArgumentException ("unclosed string in parameter-list: " + list); 116 } 117 } 118 else if( token.equals(",") ){ 119 } 121 else { 122 params.add(token.trim()); 123 } 124 } 125 126 return (String []) params.toArray(new String [0]); 127 } 128 129 130 } 131 } 132 | Popular Tags |