KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jicengine > expression > Utils


1 package org.jicengine.expression;
2
3 import java.util.List JavaDoc;
4 import java.util.ArrayList JavaDoc;
5 /**
6  *
7  * <p>
8  * Copyright (C) 2004 Timo Laitinen
9  * </p>
10  *
11  * @author Timo Laitinen
12  * @created 2004-09-20
13  * @since JICE-0.10
14  *
15  */

16 public final class Utils {
17     public static char METHOD_ARGS_START = '(';
18     public static char METHOD_ARGS_END = ')';
19
20
21     /**
22      * 'anything.anything(something, else)' -> ['something','else'].
23      */

24     public static String JavaDoc[] extractArguments(String JavaDoc expression)
25     {
26         return extractArguments(expression, 0, expression.length());
27     }
28
29     /**
30      *
31      * @param expression String 'anything.anything(something, else)'
32      * @param fromIndex int
33      * @param endIndex int
34      * @return String[] {'something','else'}
35      */

36     public static String JavaDoc[] extractArguments(String JavaDoc expression, int fromIndex, int endIndex)
37     {
38         char[] chars = expression.toCharArray();
39         char character;
40         int paramStart = -1;
41         int paramEnd = -1;
42
43         // find the first '('
44
for (int i = fromIndex; i < endIndex; i++) {
45             character = chars[i];
46             if( character == METHOD_ARGS_START ){
47                 // got it.
48
paramStart = i;
49                 break;
50             }
51         }
52
53         // find the last ')'
54
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 JavaDoc[0];
64         }
65         else {
66             try {
67                 return parseArgumentlist(expression.substring(paramStart+1,paramEnd));
68             } catch (StringIndexOutOfBoundsException JavaDoc e){
69                 throw new IllegalArgumentException JavaDoc("didn't find correct argument-part from string '" + expression + "' at [" + fromIndex + ".." + endIndex + "]");
70             }
71         }
72     }
73
74     public static String JavaDoc toParameterList(String JavaDoc[] parameters)
75     {
76         String JavaDoc 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     /**
88      *
89      * @param list String 'arg1,arg2,arg3'
90      * @return String[] {'arg1','arg2','arg3'}
91      */

92     public static String JavaDoc[] parseArgumentlist(String JavaDoc list)
93     {
94         if( list.indexOf("'") == -1 ){
95             java.util.StringTokenizer JavaDoc tokenizer = new java.util.StringTokenizer JavaDoc(list,",");
96             String JavaDoc[] params = new String JavaDoc[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 JavaDoc tokenizer = new java.util.StringTokenizer JavaDoc(list,",'",true);
105             List JavaDoc params = new ArrayList JavaDoc();
106             String JavaDoc 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 JavaDoc e){
115                         throw new IllegalArgumentException JavaDoc("unclosed string in parameter-list: " + list);
116                     }
117                 }
118                 else if( token.equals(",") ){
119                     // nothing..
120
}
121                 else {
122                     params.add(token.trim());
123                 }
124             }
125
126             return (String JavaDoc[]) params.toArray(new String JavaDoc[0]);
127         }
128
129
130     }
131 }
132
Popular Tags