View Javadoc

    1   package org.apache.turbine.modules;
    2
    3
    4   /*
    5    * Licensed to the Apache Software Foundation (ASF) under one
    6    * or more contributor license agreements.  See the NOTICE file
    7    * distributed with this work for additional information
    8    * regarding copyright ownership.  The ASF licenses this file
    9    * to you under the Apache License, Version 2.0 (the
    10   * "License"); you may not use this file except in compliance
    11   * with the License.  You may obtain a copy of the License at
    12   *
    13   *   http://www.apache.org/licenses/LICENSE-2.0
    14   *
    15   * Unless required by applicable law or agreed to in writing,
    16   * software distributed under the License is distributed on an
    17   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    18   * KIND, either express or implied.  See the License for the
    19   * specific language governing permissions and limitations
    20   * under the License.
    21   */
    22
    23
    24  import org.apache.ecs.ConcreteElement;
    25  import org.apache.turbine.Turbine;
    26  import org.apache.turbine.pipeline.PipelineData;
    27  import org.apache.turbine.util.RunData;
    28
    29  /**
    30   * The purpose of this class is to allow one to load and execute
    31   * Screen modules.
    32   *
    33   * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
    34   * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
    35   * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
    36   * @version $Id: ScreenLoader.java 1078552 2011-03-06 19:58:46Z tv $
    37   */
    38  public class ScreenLoader
    39      extends GenericLoader<Screen>
    40      implements Loader<Screen>
    41  {
    42      /** The single instance of this class. */
    43      private static ScreenLoader instance = new ScreenLoader();
    44
    45      /**
    46       * These ctor's are private to force clients to use getInstance()
    47       * to access this class.
    48       */
    49      private ScreenLoader()
    50      {
    51          super();
    52      }
    53
    54      /**
    55       * Attempts to load and execute the external Screen. This is used
    56       * when you want to execute a Screen which returns its output via
    57       * a MultiPartElement instead of out the data.getPage() value.
    58       * This allows you to easily chain the execution of Screen modules
    59       * together.
    60       *
    61       * @deprecated Use PipelineData version instead.
    62       * @param data Turbine information.
    63       * @param name Name of object that will execute the screen.
    64       * @exception Exception a generic exception.
    65       */
    66      @Deprecated
    67      public ConcreteElement eval(RunData data, String name)
    68              throws Exception
    69      {
    70          // Execute screen
    71          return getAssembler(name).build(data);
    72      }
    73
    74      /**
    75       * Attempts to load and execute the external Screen. This is used
    76       * when you want to execute a Screen which returns its output via
    77       * a MultiPartElement instead of out the data.getPage() value.
    78       * This allows you to easily chain the execution of Screen modules
    79       * together.
    80       *
    81       * @param data Turbine information.
    82       * @param name Name of object that will execute the screen.
    83       * @exception Exception a generic exception.
    84       */
    85      public ConcreteElement eval(PipelineData pipelineData, String name)
    86              throws Exception
    87      {
    88          // Execute screen
    89          return getAssembler(name).build(pipelineData);
    90      }
    91
    92      /**
    93       * Attempts to load and execute the Screen. This is used when you
    94       * want to execute a Screen which returns its output via the
    95       * data.getPage() object.
    96       * @deprecated Use PipelineData version instead.
    97       * @param data Turbine information.
    98       * @param name Name of object that will execute the screen.
    99       * @exception Exception a generic exception.
    100      */
    101     @Deprecated
    102     @Override
    103     public void exec(RunData data, String name)
    104             throws Exception
    105     {
    106         this.eval(data, name);
    107     }
    108
    109     /**
    110      * Attempts to load and execute the Screen. This is used when you
    111      * want to execute a Screen which returns its output via the
    112      * data.getPage() object.
    113      *
    114      * @param data Turbine information.
    115      * @param name Name of object that will execute the screen.
    116      * @exception Exception a generic exception.
    117      */
    118     @Override
    119     public void exec(PipelineData pipelineData, String name)
    120 	throws Exception
    121 	{
    122         this.eval(pipelineData, name);
    123 	}
    124
    125     /**
    126      * Pulls out an instance of the object by name.  Name is just the
    127      * single name of the object. This is equal to getInstance but
    128      * returns an Assembler object and is needed to fulfil the Loader
    129      * interface.
    130      *
    131      * @param name Name of object instance.
    132      * @return A Screen with the specified name, or null.
    133      * @exception Exception a generic exception.
    134      */
    135     public Screen getAssembler(String name)
    136         throws Exception
    137     {
    138         return getAssembler(Screen.NAME, name);
    139     }
    140
    141     /**
    142      * @see org.apache.turbine.modules.Loader#getCacheSize()
    143      */
    144     public int getCacheSize()
    145     {
    146         return ScreenLoader.getConfiguredCacheSize();
    147     }
    148
    149     /**
    150      * The method through which this class is accessed.
    151      *
    152      * @return The single instance of this class.
    153      */
    154     public static ScreenLoader getInstance()
    155     {
    156         return instance;
    157     }
    158
    159     /**
    160      * Helper method to get the configured cache size for this module
    161      *
    162      * @return the configure cache size
    163      */
    164     private static int getConfiguredCacheSize()
    165     {
    166         return Turbine.getConfiguration().getInt(Screen.CACHE_SIZE_KEY,
    167                 Screen.CACHE_SIZE_DEFAULT);
    168     }
    169 }