View Javadoc

    1   /*
    2    * $Id: DefinitionsFactory.java 471754 2006-11-06 14:55:09Z husted $
    3    *
    4    * Licensed to the Apache Software Foundation (ASF) under one
    5    * or more contributor license agreements.  See the NOTICE file
    6    * distributed with this work for additional information
    7    * regarding copyright ownership.  The ASF licenses this file
    8    * to you under the Apache License, Version 2.0 (the
    9    * "License"); you may not use this file except in compliance
    10   * with the License.  You may obtain a copy of the License at
    11   *
    12   *  http://www.apache.org/licenses/LICENSE-2.0
    13   *
    14   * Unless required by applicable law or agreed to in writing,
    15   * software distributed under the License is distributed on an
    16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    17   * KIND, either express or implied.  See the License for the
    18   * specific language governing permissions and limitations
    19   * under the License.
    20   */
    21
    22  package org.apache.struts.tiles.xmlDefinition;
    23
    24  import java.io.Serializable;
    25  import java.util.HashMap;
    26  import java.util.Iterator;
    27  import java.util.Map;
    28
    29  import javax.servlet.ServletContext;
    30  import javax.servlet.ServletRequest;
    31
    32  import org.apache.struts.tiles.ComponentDefinition;
    33  import org.apache.struts.tiles.DefinitionsFactoryException;
    34  import org.apache.struts.tiles.NoSuchDefinitionException;
    35
    36  /**
    37   * A factory for definitions.
    38   * This factory allows to retrieve definitions by their keys.
    39   */
    40  public class DefinitionsFactory implements Serializable
    41  {
    42       /** Underlying map containing all definitions.*/
    43     protected Map definitions;
    44
    45     /**
    46       * Get a definition by its name.
    47       * @param name Name of the definition.
    48       * @param request Servlet request.
    49       * @param servletContext Servlet context.
    50       * @throws DefinitionsFactoryException An error occur while getting
    51       * definition.
    52       * @throws NoSuchDefinitionException No definition found for specified name
    53       * Implementation can throw more accurate exception as a subclass of this
    54       * exception.
    55       */
    56     public ComponentDefinition getDefinition(String name, ServletRequest request, ServletContext servletContext)
    57               throws NoSuchDefinitionException, DefinitionsFactoryException
    58     {
    59     return (ComponentDefinition)definitions.get(name);
    60     }
    61
    62    /**
    63     * Put definition in set.
    64     * @param definition Definition to put.
    65     */
    66    public void putDefinition(ComponentDefinition definition)
    67    {
    68    definitions.put( definition.getName(), definition );
    69    }
    70
    71     /**
    72      * Constructor.
    73      * Create a factory initialized with definitions from {@link XmlDefinitionsSet}.
    74      * @param xmlDefinitions Resolved definition from XmlDefinitionSet.
    75      * @throws NoSuchDefinitionException If an error occurs while resolving inheritance
    76      */
    77     public DefinitionsFactory(XmlDefinitionsSet xmlDefinitions)
    78      throws NoSuchDefinitionException
    79      {
    80      definitions = new HashMap();
    81
    82        // First, resolve inheritance
    83      xmlDefinitions.resolveInheritances();
    84
    85        // Walk thru xml set and copy each definitions.
    86      Iterator i = xmlDefinitions.getDefinitions().values().iterator();
    87      while( i.hasNext() )
    88        {
    89        XmlDefinition xmlDefinition = (XmlDefinition)i.next();
    90          putDefinition( new ComponentDefinition( xmlDefinition) );
    91        }  // end loop
    92     }
    93      /**
    94       * Return String representation.
    95       * @return String representation.
    96       */
    97    public String toString()
    98      {
    99      return definitions.toString();
    100     }
    101
    102 }