tcurdt      2002/10/08 10:21:59

  Modified:    src/java/org/apache/cocoon/components/treeprocessor/variables
                        PreparedVariableResolver.java
  Log:
  added support for root path sitemap variables {/1},
  fixed a disposal bug
  
  Revision  Changes    Path
  1.4       +34 -10    
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java
  
  Index: PreparedVariableResolver.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PreparedVariableResolver.java     29 Sep 2002 20:24:22 -0000      1.3
  +++ PreparedVariableResolver.java     8 Oct 2002 17:21:59 -0000       1.4
  @@ -76,7 +76,7 @@
       private List items = new ArrayList();
       
       // Special constants used for levels
  -    // later : final int ROOT_VAR = 0;
  +    static final int ROOT = 0;
       static final int LITERAL = -1;
       static final int THREADSAFE_MODULE = -2;
       static final int STATEFUL_MODULE = -3;
  @@ -148,15 +148,21 @@
       }
       
       private void addSitemapVariable(String variable) {
  -        // Find level
  -        int level = 1; // Start at 1 since it will be substracted from list.size()
  -        int pos = 0;
  -        while(variable.startsWith("../", pos)) {
  -            level++;
  -            pos += "../".length();
  +        if (variable.startsWith("/")) {
  +            this.items.add(new Integer(ROOT));
  +            this.items.add(variable.substring(1));
  +        }
  +        else {
  +            // Find level
  +            int level = 1; // Start at 1 since it will be substracted from 
list.size()
  +            int pos = 0;
  +            while (variable.startsWith("../", pos)) {
  +                level++;
  +                pos += "../".length();
  +            }
  +            this.items.add(new Integer(level));
  +            this.items.add(variable.substring(pos));
           }
  -        this.items.add(new Integer(level));
  -        this.items.add(variable.substring(pos));
       }
       
       private void addModuleVariable(String moduleName, String variable) throws 
PatternException {
  @@ -219,7 +225,17 @@
                       case LITERAL :
                           result.append(items.get(++i));
                       break;
  -                    
  +
  +                    case ROOT :
  +                    {
  +                        Object key = this.items.get(++i);
  +                        Object value = ((Map)mapStack.get(0)).get(key);
  +                        if (value != null) {
  +                            result.append(value);
  +                        }
  +                    }
  +                    break;
  +
                       case THREADSAFE_MODULE :
                       {
                           InputModule module = (InputModule)items.get(++i);
  @@ -284,6 +300,10 @@
               int type = ((Integer)this.items.get(i)).intValue();
               
               switch(type) {
  +                case ROOT :
  +                    i++; // variable
  +                break;
  +
                   case LITERAL :
                       i++; // literal string
                   break;
  @@ -297,6 +317,10 @@
                   case STATEFUL_MODULE :
                       i += 2; // module name, variable
                   break;
  +
  +                default:
  +                    // relative sitemap variable
  +                    i++; // variable
               }
           }
           
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to