/[classpath]/classpath/gnu/xml/transform/Bindings.java
ViewVC logotype

Diff of /classpath/gnu/xml/transform/Bindings.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by mark, Sat Jul 2 20:32:16 2005 UTC revision 1.4 by dog, Sat Jul 9 20:38:35 2005 UTC
# Line 57  public class Bindings Line 57  public class Bindings
57    implements XPathVariableResolver, Cloneable    implements XPathVariableResolver, Cloneable
58  {  {
59    
60      static final int VARIABLE = 0;
61      static final int PARAM = 1;
62      static final int WITH_PARAM = 2;
63    
64    final Stylesheet stylesheet;    final Stylesheet stylesheet;
65    
66    /**    /**
# Line 69  public class Bindings Line 73  public class Bindings
73     */     */
74    final LinkedList parameters;    final LinkedList parameters;
75    
76      /**
77       * Argument (with-param) value stack.
78       */
79      final LinkedList withParameters;
80    
81    Bindings(Stylesheet stylesheet)    Bindings(Stylesheet stylesheet)
82    {    {
83      this.stylesheet = stylesheet;      this.stylesheet = stylesheet;
84      variables = new LinkedList();      variables = new LinkedList();
85      parameters = new LinkedList();      parameters = new LinkedList();
86      push(true);      withParameters = new LinkedList();
87      push(false);      for (int i = 0; i < 3; i++)
88          {
89            push(i);
90          }
91    }    }
92    
93    public Object clone()    public Object clone()
# Line 90  public class Bindings Line 102  public class Bindings
102        }        }
103    }    }
104    
105    void push(boolean global)    void push(int type)
106    {    {
107      if (global)      switch (type)
108        {        {
109          case VARIABLE:
110          variables.addFirst(new HashMap());          variables.addFirst(new HashMap());
111        }          break;
112      else        case PARAM:
       {  
113          parameters.addFirst(new HashMap());          parameters.addFirst(new HashMap());
114            break;
115          case WITH_PARAM:
116            withParameters.addFirst(new HashMap());
117            break;
118        }        }
119    }    }
120    
121    void pop(boolean global)    void pop(int type)
122    {    {
123      if (global)      switch (type)
124        {        {
125          case VARIABLE:
126          variables.removeFirst();          variables.removeFirst();
127        }          break;
128      else        case PARAM:
       {  
129          parameters.removeFirst();          parameters.removeFirst();
130            break;
131          case WITH_PARAM:
132            withParameters.removeFirst();
133            break;
134        }        }
135    }    }
136    
137    public boolean containsKey(String name, boolean global)    public boolean containsKey(QName name, int type)
138    {    {
139      Iterator i = global ? variables.iterator() : parameters.iterator();      Iterator i = null;
140      while (i.hasNext())      switch (type)
141        {        {
142          Map ctx = (Map) i.next();        case VARIABLE:
143          if (ctx.containsKey(name))          i = variables.iterator();
144            break;
145          case PARAM:
146            i = parameters.iterator();
147            break;
148          case WITH_PARAM:
149            Map ctx = (Map) withParameters.getFirst();
150            return ctx.containsKey(name);
151          }
152        if (i != null)
153          {
154            while (i.hasNext())
155            {            {
156              return true;              Map ctx = (Map) i.next();
157                if (ctx.containsKey(name))
158                  {
159                    return true;
160                  }
161            }            }
162        }        }
163      return false;      return false;
164    }    }
165    
166    public Object get(String name, Node context, int pos, int len)    public Object get(QName name, Node context, int pos, int len)
167    {    {
168      //System.err.println("bindings.get: "+name);      //System.err.println("bindings.get: "+name);
169      //System.err.println("\t"+toString());      //System.err.println("\t"+toString());
170      Object ret = null;      Object ret = null;
171      for (Iterator i = variables.iterator(); i.hasNext() && ret == null; )      //if (parameters.size() > 1 && containsKey(name, PARAM))
172          // check that template defines parameter
173        {        {
174          Map vctx = (Map) i.next();          Map cwp = (Map) withParameters.getFirst();
175          ret = vctx.get(name);          ret = cwp.get(name);
176            //System.err.println("\twith-param: ret="+ret);
177          }
178        if (ret == null)
179          {
180            for (Iterator i = variables.iterator(); i.hasNext() && ret == null; )
181              {
182                Map vctx = (Map) i.next();
183                ret = vctx.get(name);
184              }
185            //System.err.println("\tvariable: ret="+ret);
186        }        }
187      if (ret == null)      if (ret == null)
188        {        {
# Line 145  public class Bindings Line 191  public class Bindings
191              Map pctx = (Map) i.next();              Map pctx = (Map) i.next();
192              ret = pctx.get(name);              ret = pctx.get(name);
193            }            }
194            //System.err.println("\tparam: ret="+ret);
195        }        }
196      /*if (ret instanceof Expr && context != null)      /*if (ret instanceof Expr && context != null)
197        {        {
# Line 163  public class Bindings Line 210  public class Bindings
210      return ret;      return ret;
211    }    }
212    
213    void set(String name, Object value, boolean global)    void set(QName name, Object value, int type)
214    {    {
215      if (global)      switch (type)
       {  
         Map context = (Map) variables.getFirst();  
         context.put(name, value);  
       }  
     else  
216        {        {
217          Map context = (Map) parameters.getFirst();        case VARIABLE:
218          context.put(name, value);          Map vctx = (Map) variables.getFirst();
219            vctx.put(name, value);
220            break;
221          case PARAM:
222            Map pctx = (Map) parameters.getFirst();
223            pctx.put(name, value);
224            break;
225          case WITH_PARAM:
226            Map wctx = (Map) withParameters.getFirst();
227            wctx.put(name, value);
228            break;
229        }        }
230        //System.err.println("Set "+name+"="+value);
231    }    }
232    
233    public Object resolveVariable(QName qName)    public Object resolveVariable(QName qName)
234    {    {
235      return get(qName.toString(), null, 1, 1);      return get(qName, null, 1, 1);
236    }    }
237        
238    public String toString()    public String toString()
# Line 187  public class Bindings Line 240  public class Bindings
240      StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
241      boolean next = false;      boolean next = false;
242      Collection seen = new HashSet();      Collection seen = new HashSet();
243        Map wctx = (Map) withParameters.getFirst();
244        buf.append('(');
245        for (Iterator i = wctx.entrySet().iterator(); i.hasNext(); )
246          {
247            if (next)
248              {
249                buf.append(',');
250              }
251            else
252              {
253                next = true;
254              }
255            Map.Entry entry = (Map.Entry) i.next();
256            Object key = entry.getKey();
257            if (!seen.contains(key))
258              {
259                buf.append(key);
260                buf.append('=');
261                buf.append(entry.getValue());
262                seen.add(key);
263              }
264          }
265        buf.append(')');
266        next = false;
267        seen.clear();
268      buf.append('{');      buf.append('{');
269      for (Iterator i = variables.iterator(); i.hasNext(); )      for (Iterator i = variables.iterator(); i.hasNext(); )
270        {        {
# Line 212  public class Bindings Line 290  public class Bindings
290                }                }
291            }            }
292        }        }
293        buf.append('}');
294        next = false;
295        seen.clear();
296        buf.append('[');
297      for (Iterator i = parameters.iterator(); i.hasNext(); )      for (Iterator i = parameters.iterator(); i.hasNext(); )
298        {        {
299          Map ctx = (Map) i.next();          Map ctx = (Map) i.next();
# Line 236  public class Bindings Line 318  public class Bindings
318                }                }
319            }            }
320        }        }
321      buf.append('}');      buf.append(']');
322      return buf.toString();      return buf.toString();
323    }    }
324    
325  }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26