You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by tm...@apache.org on 2006/07/02 10:41:25 UTC

svn commit: r418563 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/components/template/ test/java/org/apache/struts2/components/template/ test/resources/org/apache/struts2/components/template/ test/resources/org/apache/struts2/compon...

Author: tmjee
Date: Sun Jul  2 01:41:25 2006
New Revision: 418563

URL: http://svn.apache.org/viewvc?rev=418563&view=rev
Log:
WW-1368
  - theme.properties now read from filesystem, if this fails it will try
    to read from the classpath


Added:
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/template/
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java   (with props)
    struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/
    struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/dummy.properties   (with props)
    struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/
    struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties   (with props)
    struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties   (with props)
Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java?rev=418563&r1=418562&r2=418563&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/BaseTemplateEngine.java Sun Jul  2 01:41:25 2006
@@ -21,6 +21,9 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
@@ -31,16 +34,38 @@
  * Base class for template engines.
  */
 public abstract class BaseTemplateEngine implements TemplateEngine {
+	
     private static final Log LOG = LogFactory.getLog(BaseTemplateEngine.class);
+    
+    /** The default theme properties file name. Default is 'theme.properties' */
+    public static final String DEFAULT_THEME_PROPERTIES_FILE_NAME = "theme.properties";
 
-    final Map themeProps = new HashMap();
+    final Map<String, Properties> themeProps = new HashMap<String, Properties>();
 
     public Map getThemeProps(Template template) {
         synchronized (themeProps) {
             Properties props = (Properties) themeProps.get(template.getTheme());
             if (props == null) {
-                String propName = template.getDir() + "/" + template.getTheme() + "/theme.properties";
-                InputStream is = ClassLoaderUtil.getResourceAsStream(propName, getClass());
+                String propName = template.getDir() + "/" + template.getTheme() + "/"+getThemePropertiesFileName();
+                
+//              WW-1292
+                // let's try getting it from the filesystem
+                File propFile = new File(propName);
+                InputStream is = null;
+                try {
+                	if (propFile.exists()) {
+                		is = new FileInputStream(propFile);
+                	}
+                }
+                catch(FileNotFoundException e) {
+                	LOG.warn("Unable to find file in filesystem ["+propFile.getAbsolutePath()+"]");
+                }
+                
+                if (is == null) {
+                	// if its not in filesystem. let's try the classpath
+                	is = ClassLoaderUtil.getResourceAsStream(propName, getClass());
+                }
+                
                 props = new Properties();
 
                 if (is != null) {
@@ -65,6 +90,10 @@
         }
 
         return t;
+    }
+    
+    protected String getThemePropertiesFileName() {
+    	return DEFAULT_THEME_PROPERTIES_FILE_NAME;
     }
 
     protected abstract String getSuffix();

Added: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java?rev=418563&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java (added)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java Sun Jul  2 01:41:25 2006
@@ -0,0 +1,88 @@
+/*
+ * $Id: BaseTemplateEngine.java 418521 2006-07-01 23:36:50Z tmjee $
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.struts2.components.template;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Map;
+
+import org.apache.struts2.components.template.BaseTemplateEngine;
+import org.apache.struts2.components.template.Template;
+import org.apache.struts2.components.template.TemplateEngine;
+import org.apache.struts2.components.template.TemplateRenderingContext;
+
+import junit.framework.TestCase;
+
+/**
+ * Test case for BaseTemplateEngine
+ */
+public class BaseTemplateEngineTest extends TestCase {
+
+public void testGetThemePropsThroughFileSystem() throws Exception {
+		
+		URL dummyResourceUrl = getClass().getResource("dummy.properties");
+		File dummyResourceFile = new File(dummyResourceUrl.getFile());
+		String themePropertiesDir = dummyResourceFile.getParent();
+		
+		System.out.println("dummy resource url="+dummyResourceUrl);
+		System.out.println("resource file="+dummyResourceFile);
+		System.out.println("theme properties dir="+themePropertiesDir);
+		
+		assertTrue(dummyResourceFile.exists());
+		assertNotNull(themePropertiesDir);
+		
+		Template template = new Template(themePropertiesDir, "theme1", "template1");
+		
+		TemplateEngine templateEngine = new InnerBaseTemplateEngine("themeThroughFileSystem.properties");
+		Map propertiesMap = templateEngine.getThemeProps(template);
+		
+		assertNotNull(propertiesMap);
+		assertTrue(propertiesMap.size() > 0);
+		
+	}
+	
+	public void testGetThemePropsThroughClasspath() throws Exception {
+		
+		Template template = new Template("org/apache/struts2/components/template", "theme1", "template2");
+		TemplateEngine templateEngine = new InnerBaseTemplateEngine("themeThroughClassPath.properties");
+		Map propertiesMap = templateEngine.getThemeProps(template);
+		
+		assertNotNull(propertiesMap);
+		assertTrue(propertiesMap.size() > 0);
+	}
+	
+	public class InnerBaseTemplateEngine extends BaseTemplateEngine {
+		
+		private String themePropertiesFileName;
+		
+		public InnerBaseTemplateEngine(String themePropertiesFileName) {
+			this.themePropertiesFileName = themePropertiesFileName;
+		}
+		
+		protected String getSuffix() {
+			return "ftl";
+		}
+
+		public void renderTemplate(TemplateRenderingContext templateContext) throws Exception {
+		}
+		
+		protected String getThemePropertiesFileName() {
+			return this.themePropertiesFileName;
+		}
+	}
+}

Propchange: struts/struts2/trunk/core/src/test/java/org/apache/struts2/components/template/BaseTemplateEngineTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/dummy.properties
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/dummy.properties?rev=418563&view=auto
==============================================================================
    (empty)

Propchange: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/dummy.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties?rev=418563&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties (added)
+++ struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties Sun Jul  2 01:41:25 2006
@@ -0,0 +1 @@
+parent=xhtml

Propchange: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughClassPath.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties?rev=418563&view=auto
==============================================================================
--- struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties (added)
+++ struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties Sun Jul  2 01:41:25 2006
@@ -0,0 +1 @@
+parent=xhtml

Propchange: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/components/template/theme1/themeThroughFileSystem.properties
------------------------------------------------------------------------------
    svn:eol-style = native