View Javadoc

1   /*
2    * Copyright 2002,2004 The Apache Software Foundation.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.apache.commons.jelly.tags.jetty;
18  
19  import org.apache.commons.jelly.JellyTagException;
20  import org.apache.commons.jelly.TagSupport;
21  import org.apache.commons.jelly.XMLOutput;
22  
23  /***
24   * An abstract base tag to declare a handler for a particular request method
25   * in an http context in an http server
26   *
27   * @author  rtl
28   * @version $Id: AbstractMethodHandlerTag.java 155420 2005-02-26 13:06:03Z dirkv $
29   */
30  abstract public class AbstractMethodHandlerTag extends TagSupport {
31  
32      /*** Override this to return the name of the http method handled by this tag */
33      abstract public String getMethodHandled();
34  
35      /***
36       * Perform the tag functionality. In this case, add a http method handler
37       * to the parent that invokes the script in the body of this tag when
38       * processing an http request
39       *
40       * @param xmlOutput where to send output
41       * @throws Exception when an error occurs
42       */
43      public void doTag(XMLOutput xmlOutput) throws JellyTagException {
44          JellyResourceHandlerTag parentTag =
45              (JellyResourceHandlerTag) findAncestorWithClass(
46                  JellyResourceHandlerTag.class);
47  
48          if ( parentTag == null ) {
49              throw new JellyTagException( "<" + getMethodHandled().toLowerCase() +
50                                        "Request> tag must be enclosed inside a <jellyResourceHandler> tag" );
51          }
52  
53          // register this tag with the http handler for the appropriate method
54          parentTag.getJellyResourceHttpHandler().registerTag(this, getMethodHandled());
55  
56          // NOTE - don't invokeBody here as we only want to do it during a request
57      }
58  
59  }
60