KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > el > StringLiteral


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  * Copyright (c) 1999 The Apache Software Foundation. All rights
5  * reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. The end-user documentation included with the redistribution, if
20  * any, must include the following acknowlegement:
21  * "This product includes software developed by the
22  * Apache Software Foundation (http://www.apache.org/)."
23  * Alternately, this acknowlegement may appear in the software itself,
24  * if and wherever such third-party acknowlegements normally appear.
25  *
26  * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
27  * Foundation" must not be used to endorse or promote products derived
28  * from this software without prior written permission. For written
29  * permission, please contact apache@apache.org.
30  *
31  * 5. Products derived from this software may not be called "Apache"
32  * nor may "Apache" appear in their names without prior written
33  * permission of the Apache Group.
34  *
35  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46  * SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of the Apache Software Foundation. For more
51  * information on the Apache Software Foundation, please see
52  * <http://www.apache.org/>.
53  *
54  */

55
56 package org.apache.commons.el;
57
58 /**
59  *
60  * <p>An expression representing a String literal value.
61  *
62  * @author Nathan Abramson - Art Technology Group
63  * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: luehe $
64  **/

65
66 public class StringLiteral
67   extends Literal
68 {
69   //-------------------------------------
70
/**
71    *
72    * Constructor
73    **/

74   StringLiteral (Object JavaDoc pValue)
75   {
76     super (pValue);
77   }
78
79   //-------------------------------------
80
/**
81    *
82    * Returns a StringLiteral parsed from the given token (enclosed by
83    * single or double quotes)
84    **/

85   public static StringLiteral fromToken (String JavaDoc pToken)
86   {
87     return new StringLiteral (getValueFromToken (pToken));
88   }
89
90   //-------------------------------------
91
/**
92    *
93    * Returns a StringLiteral with the given string value
94    **/

95   public static StringLiteral fromLiteralValue (String JavaDoc pValue)
96   {
97     return new StringLiteral (pValue);
98   }
99
100   //-------------------------------------
101
/**
102    *
103    * Parses the given token into the literal value
104    **/

105   public static String JavaDoc getValueFromToken (String JavaDoc pToken)
106   {
107     StringBuffer JavaDoc buf = new StringBuffer JavaDoc ();
108     int len = pToken.length () - 1;
109     boolean escaping = false;
110     for (int i = 1; i < len; i++) {
111       char ch = pToken.charAt (i);
112       if (escaping) {
113     buf.append (ch);
114     escaping = false;
115       }
116       else if (ch == '\\') {
117     escaping = true;
118       }
119       else {
120     buf.append (ch);
121       }
122     }
123     return buf.toString ();
124   }
125
126   //-------------------------------------
127
/**
128    *
129    * Converts the specified value to a String token, using " as the
130    * enclosing quotes and escaping any characters that need escaping.
131    **/

132   public static String JavaDoc toStringToken (String JavaDoc pValue)
133   {
134     // See if any escaping is needed
135
if (pValue.indexOf ('\"') < 0 &&
136     pValue.indexOf ('\\') < 0) {
137       return "\"" + pValue + "\"";
138     }
139
140     // Escaping is needed
141
else {
142       StringBuffer JavaDoc buf = new StringBuffer JavaDoc ();
143       buf.append ('\"');
144       int len = pValue.length ();
145       for (int i = 0; i < len; i++) {
146     char ch = pValue.charAt (i);
147     if (ch == '\\') {
148       buf.append ('\\');
149       buf.append ('\\');
150     }
151     else if (ch == '\"') {
152       buf.append ('\\');
153       buf.append ('\"');
154     }
155     else {
156       buf.append (ch);
157     }
158       }
159       buf.append ('\"');
160       return buf.toString ();
161     }
162   }
163
164   //-------------------------------------
165
/**
166    *
167    * Converts the specified value to an identifier token, escaping it
168    * as a string literal if necessary.
169    **/

170   public static String JavaDoc toIdentifierToken (String JavaDoc pValue)
171   {
172     // See if it's a valid java identifier
173
if (isJavaIdentifier (pValue)) {
174       return pValue;
175     }
176
177     // Return as a String literal
178
else {
179       return toStringToken (pValue);
180     }
181   }
182
183   //-------------------------------------
184
/**
185    *
186    * Returns true if the specified value is a legal java identifier
187    **/

188   static boolean isJavaIdentifier (String JavaDoc pValue)
189   {
190     int len = pValue.length ();
191     if (len == 0) {
192       return false;
193     }
194     else {
195       if (!Character.isJavaIdentifierStart (pValue.charAt (0))) {
196     return false;
197       }
198       else {
199     for (int i = 1; i < len; i++) {
200       if (!Character.isJavaIdentifierPart (pValue.charAt (i))) {
201         return false;
202       }
203     }
204     return true;
205       }
206     }
207   }
208
209   //-------------------------------------
210
// Expression methods
211
//-------------------------------------
212
/**
213    *
214    * Returns the expression in the expression language syntax
215    **/

216   public String JavaDoc getExpressionString ()
217   {
218     return toStringToken ((String JavaDoc) getValue ());
219   }
220
221   //-------------------------------------
222
}
223
Popular Tags