All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.struts.tiles.TilesUtil Maven / Gradle / Ivy

/*
 * $Id: TilesUtil.java 471754 2006-11-06 14:55:09Z husted $
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.apache.struts.tiles;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Class containing utility methods for Tiles.
 * Methods of this class are static and thereby accessible from anywhere.
 * The underlying implementation can be changed with
 * {@link #setTilesUtil(TilesUtilImpl)}.
 * 
* Real implementation classes should derive from the {@link TilesUtilImpl} class. *
* Some methods are specified to throw the UnsupportedOperationException * if the underlying implementation doesn't support the operation. */ public class TilesUtil { /** Commons Logging instance.*/ protected static Log log = LogFactory.getLog(TilesUtil.class); /** The implementation of tilesUtilImpl */ protected static TilesUtilImpl tilesUtilImpl = new TilesUtilImpl(); /** * Get the real implementation. * @return The underlying implementation object. */ static public TilesUtilImpl getTilesUtil() { return tilesUtilImpl; } /** * Set the real implementation. * This method should be called only once. * Successive calls have no effect. * @param tilesUtil The implementaion. */ static public void setTilesUtil(TilesUtilImpl tilesUtil) { if (implAlreadySet) { return; } tilesUtilImpl = tilesUtil; implAlreadySet = true; } /** * Getter to know if the underlying implementation is already set to another * value than the default value. * @return true if {@link #setTilesUtil} has already been called. */ static boolean isTilesUtilImplSet() { return implAlreadySet; } /** Flag to know if internal implementation has been set by the setter method */ private static boolean implAlreadySet = false; /** * Do a forward using request dispatcher. * * This method is used by the Tiles package anytime a forward is required. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ public static void doForward( String uri, HttpServletRequest request, HttpServletResponse response, ServletContext servletContext) throws IOException, ServletException { tilesUtilImpl.doForward(uri, request, response, servletContext); } /** * Do an include using request dispatcher. * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ public static void doInclude( String uri, HttpServletRequest request, HttpServletResponse response, ServletContext servletContext) throws IOException, ServletException { tilesUtilImpl.doInclude(uri, request, response, servletContext); } /** * Do an include using PageContext.include(). * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param pageContext Current page context. */ public static void doInclude(String uri, PageContext pageContext) throws IOException, ServletException { doInclude(uri, pageContext, true); } /** * Do an include using PageContext.include(). * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param flush If the writer should be flushed before the include * @param pageContext Current page context. */ public static void doInclude(String uri, PageContext pageContext, boolean flush) throws IOException, ServletException { tilesUtilImpl.doInclude(uri, pageContext, flush); } /** * Get definition factory from appropriate servlet context. * @return Definitions factory or null if not found. */ public static DefinitionsFactory getDefinitionsFactory( ServletRequest request, ServletContext servletContext) { return tilesUtilImpl.getDefinitionsFactory(request, servletContext); } /** * Create Definition factory from specified configuration object. * Create a ConfigurableDefinitionsFactory and initialize it with the configuration * object. This later can contain the factory classname to use. * Factory is made accessible from tags. *

* Fallback of several factory creation methods. * * @param servletContext Servlet Context passed to newly created factory. * @param factoryConfig Configuration object passed to factory. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ public static DefinitionsFactory createDefinitionsFactory( ServletContext servletContext, DefinitionsFactoryConfig factoryConfig) throws DefinitionsFactoryException { return tilesUtilImpl.createDefinitionsFactory(servletContext, factoryConfig); } /** * Get a definition by its name. * First, retrieve definition factory and then get requested definition. * Throw appropriate exception if definition or definition factory is not found. * @param definitionName Name of requested definition. * @param request Current servelet request. * @param servletContext current servlet context. * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ public static ComponentDefinition getDefinition( String definitionName, ServletRequest request, ServletContext servletContext) throws FactoryNotFoundException, DefinitionsFactoryException { try { return getDefinitionsFactory(request, servletContext).getDefinition( definitionName, (HttpServletRequest) request, servletContext); } catch (NullPointerException ex) { // Factory not found in context throw new FactoryNotFoundException("Can't get definitions factory from context."); } } /** * Reset internal state. * This method is used by test suites to reset the class to its original state. */ protected static void testReset() { implAlreadySet = false; tilesUtilImpl = new TilesUtilImpl(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy