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

org.apache.turbine.modules.pages.DefaultPage Maven / Gradle / Ivy

Go to download

Turbine is a servlet based framework that allows experienced Java developers to quickly build secure web applications. Parts of Turbine can also be used independently of the web portion of Turbine as well. In other words, we strive to make portions of Turbine easily available for use in other applications.

There is a newer version: 6.0
Show newest version
package org.apache.turbine.modules.pages;


/*
 * 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.
 */


import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.turbine.annotation.TurbineLoader;
import org.apache.turbine.modules.Action;
import org.apache.turbine.modules.ActionLoader;
import org.apache.turbine.modules.Layout;
import org.apache.turbine.modules.LayoutLoader;
import org.apache.turbine.modules.Page;
import org.apache.turbine.modules.Screen;
import org.apache.turbine.modules.ScreenLoader;
import org.apache.turbine.pipeline.PipelineData;
import org.apache.turbine.util.RunData;

/**
 * When building sites using templates, Screens need only be defined
 * for templates which require dynamic (database or object) data.
 *
 * 

* * This page can be used on sites where the number of Screens can be * much less than the number of templates. The templates can be * grouped in directories with common layouts. Screen modules are * then expected to be placed in packages corresponding with the * templates' directories and follow a specific naming scheme. * *

* * The template parameter is parsed and and a Screen whose package * matches the templates path and shares the same name minus any * extension and beginning with a capital letter is searched for. If * not found, a Screen in a package matching the template's path with * name Default is searched for. If still not found, a Screen with * name Default is looked for in packages corresponding to parent * directories in the template's path until a match is found. * *

* * For example if data.getParameters().getString("template") returns * /about_us/directions/driving.wm, the search follows * about_us.directions.Driving, about_us.directions.Default, * about_us.Default, Default, VelocitySiteScreen. * *

* * Only one Layout module is used, since it is expected that any * dynamic content will be placed in navigations and screens. The * layout template to be used is found in a similar way to the Screen. * For example the following paths will be searched in the layouts * subdirectory: /about_us/directions/driving.wm, * /about_us/directions/default.wm, /about_us/default.wm, /default.wm. * *

* * This approach allows a site with largely static content to be * updated and added to regularly by those with little Java * experience. * *

* * The code is an almost a complete clone of the FreeMarkerSitePage * written by John McNally. I've only modified it for Template use. * * @author Dave Bryson * @author Henning P. Schmiedehausen * @author Peter Courcoux * @version $Id: DefaultPage.java 1773378 2016-12-09 13:19:59Z tv $ */ public class DefaultPage extends Page { /** Logging */ protected Log log = LogFactory.getLog(this.getClass()); /** Injected loader instance */ @TurbineLoader( Action.class ) protected ActionLoader actionLoader; /** Injected loader instance */ @TurbineLoader( Screen.class ) protected ScreenLoader screenLoader; /** Injected loader instance */ @TurbineLoader( Layout.class ) protected LayoutLoader layoutLoader; /** * Builds the Page. * * @param pipelineData Turbine information. * @throws Exception a generic exception. */ @Override public void doBuild(PipelineData pipelineData) throws Exception { RunData data = getRunData(pipelineData); // Template pages can use this to set up the context, so it is // available to the Action and Screen. It does nothing here. doBuildBeforeAction(pipelineData); // If an action has been defined, execute it here. Actions // can re-define the template definition. if (data.hasAction()) { actionLoader.exec(pipelineData, data.getAction()); } // if a redirect was setup in data, don't do anything else if (StringUtils.isNotEmpty(data.getRedirectURI())) { return; } // Template pages can use this to set up default templates and // associated class modules. It does nothing here. doBuildAfterAction(pipelineData); String screenName = data.getScreen(); log.debug("Building " + screenName); // Ask the Screen for its Layout and then execute the Layout. // The Screen can override the getLayout() method to re-define // the Layout depending on data passed in via the // data.parameters object. Screen aScreen = screenLoader.getAssembler(screenName); String layout = aScreen.getLayout(pipelineData); // If the Layout has been set to be null, attempt to execute // the Screen that has been defined. if (layout != null) { layoutLoader.exec(pipelineData, layout); } else { screenLoader.exec(pipelineData, screenName); } // Do any post build actions (overridable by subclasses - // does nothing here). doPostBuild(pipelineData); } /** * Can be used by template Pages to stuff the Context into the * PipelineData so that it is available to the Action module and the * Screen module via getContext(). It does nothing here. * * @param pipelineData Turbine information. * @throws Exception a generic exception. */ protected void doBuildBeforeAction(PipelineData pipelineData) throws Exception { // do nothing by default } /** * Can be overridden by template Pages to set up data needed to * process a template. It does nothing here. * * @param pipelineData Turbine information. * @throws Exception a generic exception. */ protected void doBuildAfterAction(PipelineData pipelineData) throws Exception { // do nothing by default } /** * Can be overridden to perform actions when the request is * fully processed. It does nothing here. * * @param pipelineData Turbine information. * @throws Exception a generic exception. */ protected void doPostBuild(PipelineData pipelineData) throws Exception { // do nothing by default } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy