001 package org.apache.turbine.services.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
024 import java.util.Hashtable;
025
026 import org.apache.commons.configuration.Configuration;
027 import org.apache.turbine.services.TurbineBaseService;
028
029 /**
030 * The base implementation of Turbine {@link
031 * org.apache.turbine.services.template.TemplateEngineService}.
032 *
033 * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
034 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
035 * @version $Id: BaseTemplateEngineService.java 1078552 2011-03-06 19:58:46Z tv $
036 */
037 public abstract class BaseTemplateEngineService
038 extends TurbineBaseService
039 implements TemplateEngineService
040 {
041 /**
042 * A Map containing the configuration for the template
043 * engine service. The configuration contains:
044 *
045 * 1) template extensions
046 * 2) default page
047 * 3) default screen
048 * 4) default layout
049 * 5) default navigation
050 * 6) default error screen
051 */
052 private final Hashtable<String, Object> configuration = new Hashtable<String, Object>();
053
054 /**
055 * @see org.apache.turbine.services.template.TemplateEngineService#registerConfiguration
056 */
057 public void registerConfiguration(String defaultExt)
058 {
059 initConfiguration(defaultExt);
060 TurbineTemplate.registerTemplateEngineService(this);
061 }
062
063 /**
064 * @see org.apache.turbine.services.template.TemplateEngineService#getTemplateEngineServiceConfiguration
065 */
066 public Hashtable<String, Object> getTemplateEngineServiceConfiguration()
067 {
068 return configuration;
069 }
070
071 /**
072 * @see org.apache.turbine.services.template.TemplateEngineService#getAssociatedFileExtensions
073 */
074 public String[] getAssociatedFileExtensions()
075 {
076 return (String[]) configuration.get(TEMPLATE_EXTENSIONS);
077 }
078
079 /**
080 * Initialize the Template Engine Service.
081 *
082 * Note engine file extension associations. First attempts to
083 * pull a list of custom extensions from the property file value
084 * keyed by <code>template.extension</code>. If none are defined,
085 * uses the value keyed by
086 * <code>template.default.extension</code>, defaulting to the
087 * emergency value supplied by <code>defaultExt</code>.
088 *
089 * @param defaultExt The default used when the default defined in the
090 * properties file is missing or misconfigured.
091 */
092 protected void initConfiguration(String defaultExt)
093 {
094 Configuration config = getConfiguration();
095
096 //
097 // Should modify the configuration class to take defaults
098 // here, should have to do this.
099 //
100 String[] fileExtensionAssociations =
101 config.getStringArray(TEMPLATE_EXTENSIONS);
102
103 if (fileExtensionAssociations == null ||
104 fileExtensionAssociations.length == 0)
105 {
106 fileExtensionAssociations = new String[1];
107 fileExtensionAssociations[0] = config.getString(
108 DEFAULT_TEMPLATE_EXTENSION, defaultExt);
109 }
110
111 configuration.put(TEMPLATE_EXTENSIONS, fileExtensionAssociations);
112
113 /*
114 * We need some better error checking here and should probably
115 * throw an exception here if these things aren't set
116 * up correctly.
117 */
118
119 String[] copyParams = {
120 DEFAULT_PAGE,
121 DEFAULT_SCREEN,
122 DEFAULT_LAYOUT,
123 DEFAULT_NAVIGATION,
124 DEFAULT_ERROR_SCREEN,
125 DEFAULT_LAYOUT_TEMPLATE,
126 DEFAULT_SCREEN_TEMPLATE
127 };
128
129 for (int i = 0; i < copyParams.length; i++)
130 {
131 configuration.put(copyParams[i], config.getString(copyParams[i], ""));
132 }
133 }
134
135 /**
136 * @see org.apache.turbine.services.template.TemplateEngineService#templateExists
137 */
138 public abstract boolean templateExists(String template);
139 }