View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.webapp;
20  
21  import java.lang.reflect.Method;
22  import java.util.HashMap;
23  import java.util.Iterator;
24  import java.util.Map;
25  
26  import org.eclipse.jetty.xml.XmlParser;
27  
28  /**
29   * IterativeDescriptorProcessor
30   *
31   *
32   */
33  public abstract class IterativeDescriptorProcessor implements DescriptorProcessor
34  {
35      public static final Class<?>[] __signature = new Class[]{WebAppContext.class, Descriptor.class, XmlParser.Node.class};
36      protected Map<String, Method> _visitors = new HashMap<String, Method>();
37      public abstract void start(WebAppContext context, Descriptor descriptor);
38      public abstract void end(WebAppContext context, Descriptor descriptor);
39  
40      /**
41       * Register a method to be called back when visiting the node with the given name.
42       * The method must exist on a subclass of this class, and must have the signature:
43       * public void method (Descriptor descriptor, XmlParser.Node node)
44       * @param nodeName
45       * @param m
46       */
47      public void registerVisitor(String nodeName, Method m)
48      {
49          _visitors.put(nodeName, m);
50      }
51  
52      
53      /** 
54       * {@inheritDoc}
55       */
56      public void process(WebAppContext context, Descriptor descriptor)
57      throws Exception
58      {
59          if (descriptor == null)
60              return;
61  
62          start(context,descriptor);
63  
64          XmlParser.Node root = descriptor.getRoot();
65          Iterator<?> iter = root.iterator();
66          XmlParser.Node node = null;
67          while (iter.hasNext())
68          {
69              Object o = iter.next();
70              if (!(o instanceof XmlParser.Node)) continue;
71              node = (XmlParser.Node) o;
72              visit(context, descriptor, node);
73          }
74  
75          end(context,descriptor);
76      }
77  
78  
79      protected void visit (WebAppContext context, Descriptor descriptor, XmlParser.Node node)
80      throws Exception
81      {
82          String name = node.getTag();
83          Method m =  _visitors.get(name);
84          if (m != null)
85              m.invoke(this, new Object[]{context, descriptor, node});
86      }
87  }