001package org.apache.turbine.util.template; 002 003 004/* 005 * Licensed to the Apache Software Foundation (ASF) under one 006 * or more contributor license agreements. See the NOTICE file 007 * distributed with this work for additional information 008 * regarding copyright ownership. The ASF licenses this file 009 * to you under the Apache License, Version 2.0 (the 010 * "License"); you may not use this file except in compliance 011 * with the License. You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, 016 * software distributed under the License is distributed on an 017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 018 * KIND, either express or implied. See the License for the 019 * specific language governing permissions and limitations 020 * under the License. 021 */ 022 023 024import org.apache.commons.logging.Log; 025import org.apache.commons.logging.LogFactory; 026import org.apache.turbine.modules.NavigationLoader; 027import org.apache.turbine.services.template.TurbineTemplate; 028import org.apache.turbine.util.RunData; 029 030/** 031 * Returns output of a Navigation module. An instance of this is 032 * placed in the WebMacro context by the WebMacroSiteLayout. This 033 * allows template authors to set the navigation template they'd like 034 * to place in their templates. Here's how it's used in a 035 * template: 036 * 037 * <p><code> 038 * $navigation.setTemplate("admin_navigation.wm") 039 * </code> 040 * 041 * @author <a href="mbryson@mont.mindspring.com">Dave Bryson</a> 042 * @version $Id: TemplateNavigation.java 1709648 2015-10-20 17:08:10Z tv $ 043 */ 044public class TemplateNavigation 045{ 046 /** Logging */ 047 private static Log log = LogFactory.getLog(TemplateNavigation.class); 048 049 /* The RunData object. */ 050 private RunData data; 051 052 /* The name of the navigation template. */ 053 private String template = null; 054 055 /** 056 * Constructor 057 * 058 * @param data A Turbine RunData object. 059 */ 060 public TemplateNavigation(RunData data) 061 { 062 this.data = data; 063 } 064 065 /** 066 * Set the template. 067 * 068 * @param template A String with the name of the navigation 069 * template. 070 * @return A TemplateNavigation (self). 071 */ 072 public TemplateNavigation setTemplate(String template) 073 { 074 log.debug("setTemplate(" + template + ")"); 075 this.template = template; 076 return this; 077 } 078 079 /** 080 * Builds the output of the navigation template. 081 * 082 * @return A String. 083 */ 084 @Override 085 public String toString() 086 { 087 String module = null; 088 String returnValue = null; 089 090 try 091 { 092 if (template == null) 093 { 094 returnValue = "Navigation Template is null (Might be unset)"; 095 throw new Exception(returnValue); 096 } 097 098 data.getTemplateInfo().setNavigationTemplate(template); 099 module = TurbineTemplate.getNavigationName(template); 100 101 if (module == null) 102 { 103 returnValue = "Template Service returned null for Navigation Template " + template; 104 throw new Exception(returnValue); 105 } 106 107 returnValue = NavigationLoader.getInstance().eval(data, module); 108 } 109 catch (Exception e) 110 { 111 if (returnValue == null) 112 { 113 returnValue = "Error processing navigation template: " 114 + template + ", using module: " + module; 115 } 116 log.error(returnValue, e); 117 } 118 119 return returnValue; 120 } 121}