cziegeler 02/01/16 02:26:57
Modified: src/scratchpad/src/org/apache/cocoon/treeprocessor
MapStackResolver.java
Log:
Fixed compilation problems. Sylvain, please check if this is correct now
Revision Changes Path
1.4 +47 -47
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/MapStackResolver.java
Index: MapStackResolver.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/MapStackResolver.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MapStackResolver.java 16 Jan 2002 09:27:58 -0000 1.3
+++ MapStackResolver.java 16 Jan 2002 10:26:57 -0000 1.4
@@ -18,29 +18,29 @@
* Utility class for handling {...} pattern substitutions from a List of
Maps.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Revision: 1.3 $ $Date: 2002/01/16 09:27:58 $
+ * @version CVS $Revision: 1.4 $ $Date: 2002/01/16 10:26:57 $
*/
public abstract class MapStackResolver {
-
+
/**
* An empty <code>Parameters</code> object, returned by
<code>buildParameters()</code>
* if it is given a <code>null</code> Map.
*/
public static final Parameters EMPTY_PARAMETERS;
-
+
static {
EMPTY_PARAMETERS = new Parameters();
EMPTY_PARAMETERS.makeReadOnly();
}
-
+
public static final Map EMPTY_MAP = Collections.unmodifiableMap(new
java.util.HashMap(0));
-
+
/**
* Resolve all {...} patterns using the values given in the list of maps.
*/
public abstract String resolve(List mapStack) throws PatternException;
-
+
/**
* Does an expression need resolving (i.e. contain {...} patterns) ?
*/
@@ -48,16 +48,16 @@
if (expression == null || expression.length() == 0) {
return false;
}
-
+
// Is the first char a '{' ?
if (expression.charAt(0) == '{') {
return true;
}
-
+
if (expression.length() < 2) {
return false;
}
-
+
// Is there any unescaped '{' ?
int pos = 1;
while ( (pos = expression.indexOf('{', pos)) != -1) {
@@ -65,13 +65,13 @@
if (expression.charAt(pos - 1) != '\\') {
// No : need to resolve
return true;
- }
+ }
pos++;
}
// Nothing found...
return false;
}
-
+
/**
* Unescape an expression that doesn't need to be resolved, but may
contain
* escaped '{' characters.
@@ -92,10 +92,10 @@
buf.append(ch);
}
}
-
+
return buf.toString();
}
-
+
/**
* Get a resolver for a given expression. Chooses the most efficient
implementation
* depending on <code>expression</code>.
@@ -108,7 +108,7 @@
return new NullResolver(expression);
}
}
-
+
/**
* Build a <code>Parameters</code> object from a Map of named
<code>ListOfMapResolver</code>s and
* a list of Maps used for resolution.
@@ -119,16 +119,16 @@
if (expressions == null || expressions.size() == 0) {
return EMPTY_PARAMETERS;
}
-
+
Parameters result = new Parameters();
-
+
Iterator iter = expressions.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
String value =
((MapStackResolver)entry.getValue()).resolve(mapStack);
result.setParameter((String)entry.getKey(), value);
}
-
+
return result;
}
@@ -143,16 +143,16 @@
if (expressions == null || (size = expressions.size()) == 0) {
return EMPTY_MAP;
}
-
+
Map result = new HashMap(size);
-
+
Iterator iter = expressions.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
String value =
((MapStackResolver)entry.getValue()).resolve(mapStack);
result.put(entry.getKey(), value);
}
-
+
return result;
}
@@ -170,18 +170,18 @@
this.expression = this.unescape(expression);
}
}
-
+
public String toString() {
return this.originalExpr;
}
-
+
public String resolve(List mapStack) {
return this.expression;
}
}
-
+
//-------------------------------------------------------------------------
-
+
/**
* Compiled form for faster substitution
*/
@@ -190,22 +190,22 @@
private String[] strings;
private int[] levels;
-
+
public CompiledResolver(String expression) throws PatternException {
this.originalExpr = expression;
compile(expression);
}
-
+
public String toString() {
return this.originalExpr;
}
-
+
private void compile(String expr) throws PatternException {
// We're sure here that expr *contains* some substitutions
-
+
List stringList = new ArrayList();
List levelList = new ArrayList();
-
+
int length = expr.length();
int prev = 0; // position after last closing brace
@@ -217,43 +217,43 @@
(pos != 0 && expr.charAt(pos - 1) == '\\')) {
pos++;
}
-
+
if (pos >= length || pos == -1) {
// no more braces
if (prev < length - 1) {
- stringList.add(unescape(expr.substring(prev)));
+ stringList.add(this.unescape(expr.substring(prev)));
levelList.add(new Integer(-1));
}
break comp;
}
-
+
// Pass closing brace
pos++;
-
+
// Add litteral strings between closing and next opening
brace
if (prev < pos-1) {
- stringList.add(unescape(expr.substring(prev, pos - 1)));
+ stringList.add(this.unescape(expr.substring(prev, pos -
1)));
levelList.add(new Integer(-1));
}
-
+
// Determine subst level
int level = 1; // Start at 1 since it will be substracted
from list.size()
while(expr.startsWith("../", pos)) {
level++;
pos += "../".length();
}
-
+
int end = expr.indexOf('}', pos);
if (end == -1) {
throw new PatternException("Unmatched '{' in " + expr);
}
-
+
stringList.add(expr.substring(pos, end));
levelList.add(new Integer(level));
prev = end + 1;
}
-
+
this.strings = new String[stringList.size()];
this.levels = new int[stringList.size()];
for (int i = 0; i < strings.length; i++) {
@@ -261,32 +261,32 @@
this.levels[i] = ((Integer)levelList.get(i)).intValue();
}
}
-
+
public String resolve(List mapStack) throws PatternException {
StringBuffer result = new StringBuffer();
int stackSize = mapStack.size();
-
+
for (int i = 0; i < this.strings.length; i++) {
int level = this.levels[i];
if (level == -1) {
result.append(this.strings[i]);
-
+
} else {
if (level >= stackSize) {
throw new PatternException("Error while evaluating
'" + this.originalExpr +
"' : not so many levels");
}
-
+
Object value = ((Map)mapStack.get(stackSize -
level)).get(this.strings[i]);
if (value != null) {
result.append(value);
}
}
}
-
+
return result.toString();
}
-
+
// public void dump() {
// System.out.println(this.originalExpr + " compiled in :");
// for (int i = 0; i < this.strings.length; i++) {
@@ -296,9 +296,9 @@
// System.out.println();
// }
}
-
+
// public static void main(String [] args) throws Exception {
-//
+//
// new CompiledResolver("&{../../blah}").dump();
// new CompiledResolver("{t1}tt{t2}").dump();
// new CompiledResolver("\\{t1}tt{t2}xx").dump();
@@ -306,6 +306,6 @@
// new CompiledResolver("{t1}tt{t2}xx").dump();
// new CompiledResolver("xx{../t1}{../../../t2}zz").dump();
// new CompiledResolver("xx{../t1}\\{../../../t2}zz").dump();
-//
+//
// }
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]