You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by nl...@apache.org on 2012/03/06 21:44:31 UTC
svn commit: r1297705 [1/3] - in /tiles/framework/trunk:
tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/
tiles-parent/tiles-core/src/main/java/org/apache/tiles/factory/
tiles-parent/tiles-core/src/main/java/org/apache/tiles/util/ ...
Author: nlebas
Date: Tue Mar 6 20:44:30 2012
New Revision: 1297705
URL: http://svn.apache.org/viewvc?rev=1297705&view=rev
Log:
Created a new interface ApplicationResource to replace URLs in ApplicationContext.
Moved all l10n postfix management into PostfixedApplicationResource.
l10n is now a feature of the request API.
Added:
tiles/framework/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/ApplicationResource.java
tiles/framework/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/locale/
tiles/framework/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/locale/LocaleUtil.java
tiles/framework/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/locale/PostfixedApplicationResource.java
tiles/framework/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/locale/URLApplicationResource.java
tiles/framework/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/locale/
tiles/framework/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/locale/LocaleUtilTest.java
tiles/framework/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/locale/PostfixedApplicationResourceTest.java
Removed:
tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/URLReader.java
tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/util/LocaleUtil.java
tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/util/URLUtil.java
tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/util/LocaleUtilTest.java
tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/util/URLUtilTest.java
Modified:
tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java
tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java
tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAO.java
tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java
tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAOTest.java
tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java
tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java
tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java
tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/factory/BasicTilesContainerFactoryTest.java
tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
tiles/framework/trunk/tiles-parent/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
tiles/framework/trunk/tiles-parent/tiles-extras/src/main/java/org/apache/tiles/extras/module/ModularTilesInitializer.java
tiles/framework/trunk/tiles-parent/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java
tiles/framework/trunk/tiles-parent/tiles-test-pom/tiles-test-alt/src/main/java/org/apache/tiles/test/alt/TestAlternateTilesContainerFactory.java
tiles/framework/trunk/tiles-parent/tiles-test-pom/tiles-test-common/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java
tiles/framework/trunk/tiles-parent/tiles-test-pom/tiles-test-db/src/main/java/org/apache/tiles/test/db/LocaleDbDefinitionDAO.java
tiles/framework/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/ApplicationContext.java
tiles/framework/trunk/tiles-request/tiles-request-api/src/main/java/org/apache/tiles/request/ApplicationContextWrapper.java
tiles/framework/trunk/tiles-request/tiles-request-api/src/test/java/org/apache/tiles/request/ApplicationContextWrapperTest.java
tiles/framework/trunk/tiles-request/tiles-request-mustache/src/main/java/org/apache/tiles/request/render/MustacheRenderer.java
tiles/framework/trunk/tiles-request/tiles-request-mustache/src/test/java/org/apache/tiles/request/render/MustacheRendererTest.java
tiles/framework/trunk/tiles-request/tiles-request-portlet-wildcard/src/main/java/org/apache/tiles/request/portlet/wildcard/WildcardPortletApplicationContext.java
tiles/framework/trunk/tiles-request/tiles-request-portlet-wildcard/src/test/java/org/apache/tiles/request/portlet/wildcard/WildcardPortletApplicationContextTest.java
tiles/framework/trunk/tiles-request/tiles-request-portlet/src/main/java/org/apache/tiles/request/portlet/PortletApplicationContext.java
tiles/framework/trunk/tiles-request/tiles-request-portlet/src/test/java/org/apache/tiles/request/portlet/PortletApplicationContextTest.java
tiles/framework/trunk/tiles-request/tiles-request-servlet-wildcard/src/main/java/org/apache/tiles/request/servlet/wildcard/WildcardServletApplicationContext.java
tiles/framework/trunk/tiles-request/tiles-request-servlet-wildcard/src/test/java/org/apache/tiles/request/servlet/wildcard/WildcardServletApplicationContextTest.java
tiles/framework/trunk/tiles-request/tiles-request-servlet/src/main/java/org/apache/tiles/request/servlet/ServletApplicationContext.java
tiles/framework/trunk/tiles-request/tiles-request-servlet/src/test/java/org/apache/tiles/request/servlet/ServletApplicationContextTest.java
Modified: tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java?rev=1297705&r1=1297704&r2=1297705&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java (original)
+++ tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java Tue Mar 6 20:44:30 2012
@@ -24,8 +24,7 @@ package org.apache.tiles.definition.dao;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
@@ -36,6 +35,8 @@ import org.apache.tiles.Definition;
import org.apache.tiles.definition.DefinitionsFactoryException;
import org.apache.tiles.definition.DefinitionsReader;
import org.apache.tiles.definition.RefreshMonitor;
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.ApplicationResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,7 +48,7 @@ import org.slf4j.LoggerFactory;
* @since 2.1.0
*/
public abstract class BaseLocaleUrlDefinitionDAO implements
- DefinitionDAO<Locale>, RefreshMonitor, URLReader {
+ DefinitionDAO<Locale>, RefreshMonitor {
/**
* The logging object.
@@ -60,7 +61,7 @@ public abstract class BaseLocaleUrlDefin
*
* @since 2.1.0
*/
- protected List<URL> sourceURLs;
+ protected List<ApplicationResource> sources;
/**
* Contains the dates that the URL sources were last modified.
@@ -77,18 +78,31 @@ public abstract class BaseLocaleUrlDefin
protected DefinitionsReader reader;
/**
+ * ApplicationContext to locate the source files.
+ *
+ * @since 3.0.0
+ */
+ protected ApplicationContext applicationContext;
+
+ /**
* Constructor.
*/
- public BaseLocaleUrlDefinitionDAO() {
+ public BaseLocaleUrlDefinitionDAO(ApplicationContext applicationContext) {
+ this.applicationContext = applicationContext;
lastModifiedDates = new HashMap<String, Long>();
}
- /** {@inheritDoc}*/
- public void setSourceURLs(List<URL> sourceURLs) {
- this.sourceURLs = sourceURLs;
+ public void setSources(List<ApplicationResource> sources) {
+ // filter out any sources that are already localized
+ ArrayList<ApplicationResource> defaultSources = new ArrayList<ApplicationResource>();
+ for(ApplicationResource source: sources) {
+ if(Locale.ROOT.equals(source.getLocale())) {
+ defaultSources.add(source);
+ }
+ }
+ this.sources = defaultSources;
}
- /** {@inheritDoc}*/
public void setReader(DefinitionsReader reader) {
this.reader = reader;
}
@@ -97,15 +111,13 @@ public abstract class BaseLocaleUrlDefin
public boolean refreshRequired() {
boolean status = false;
- Set<String> urls = lastModifiedDates.keySet();
+ Set<String> paths = lastModifiedDates.keySet();
try {
- for (String urlPath : urls) {
- Long lastModifiedDate = lastModifiedDates.get(urlPath);
- URL url = new URL(urlPath);
- URLConnection connection = url.openConnection();
- connection.connect();
- long newModDate = connection.getLastModified();
+ for (String path : paths) {
+ Long lastModifiedDate = lastModifiedDates.get(path);
+ ApplicationResource resource = applicationContext.getResource(path);
+ long newModDate = resource.getLastModified();
if (newModDate != lastModifiedDate) {
status = true;
break;
@@ -121,38 +133,25 @@ public abstract class BaseLocaleUrlDefin
/**
* Loads definitions from an URL without loading from "parent" URLs.
*
- * @param url The URL to read.
+ * @param resource The URL to read.
* @return The definition map that has been read.
*/
- protected Map<String, Definition> loadDefinitionsFromURL(URL url) {
+ protected Map<String, Definition> loadDefinitionsFromResource(ApplicationResource resource) {
Map<String, Definition> defsMap = null;
- URLConnection connection = null;
- try {
- connection = url.openConnection();
- } catch (IOException e) {
- // File not found. continue.
- if (log.isDebugEnabled()) {
- log.debug("I/O exception thrown when opening URL connection to "
- + url.toString() + ", continue");
- }
- return null;
- }
-
InputStream stream = null;
try {
- connection.connect();
- lastModifiedDates.put(url.toExternalForm(), connection
+ lastModifiedDates.put(resource.getLocalePath(), resource
.getLastModified());
// Definition must be collected, starting from the base
// source up to the last localized file.
- stream = connection.getInputStream();
+ stream = resource.getInputStream();
defsMap = reader.read(stream);
} catch (FileNotFoundException e) {
// File not found. continue.
if (log.isDebugEnabled()) {
- log.debug("File " + url.toString() + " not found, continue");
+ log.debug("File " + resource.toString() + " not found, continue");
}
} catch (IOException e) {
throw new DefinitionsFactoryException(
@@ -164,7 +163,7 @@ public abstract class BaseLocaleUrlDefin
}
} catch (IOException e) {
throw new DefinitionsFactoryException(
- "I/O error closing " + url.toString(), e);
+ "I/O error closing " + resource.toString(), e);
}
}
Modified: tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java?rev=1297705&r1=1297704&r2=1297705&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java (original)
+++ tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java Tue Mar 6 20:44:30 2012
@@ -21,18 +21,17 @@
package org.apache.tiles.definition.dao;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import org.apache.tiles.Definition;
-import org.apache.tiles.definition.DefinitionsFactoryException;
import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
import org.apache.tiles.definition.pattern.PatternDefinitionResolverAware;
-import org.apache.tiles.util.LocaleUtil;
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.ApplicationResource;
+import org.apache.tiles.request.locale.LocaleUtil;
/**
* <p>
@@ -86,7 +85,8 @@ public class CachingLocaleUrlDefinitionD
*
* @since 2.1.0
*/
- public CachingLocaleUrlDefinitionDAO() {
+ public CachingLocaleUrlDefinitionDAO(ApplicationContext applicationContext) {
+ super(applicationContext);
locale2definitionMap = new HashMap<Locale, Map<String, Definition>>();
}
@@ -100,7 +100,7 @@ public class CachingLocaleUrlDefinitionD
public Definition getDefinition(String name, Locale customizationKey) {
Definition retValue = null;
if (customizationKey == null) {
- customizationKey = LocaleUtil.NULL_LOCALE;
+ customizationKey = Locale.ROOT;
}
Map<String, Definition> definitions = getDefinitions(customizationKey);
if (definitions != null) {
@@ -123,7 +123,7 @@ public class CachingLocaleUrlDefinitionD
/** {@inheritDoc} */
public Map<String, Definition> getDefinitions(Locale customizationKey) {
if (customizationKey == null) {
- customizationKey = LocaleUtil.NULL_LOCALE;
+ customizationKey = Locale.ROOT;
}
Map<String, Definition> retValue = locale2definitionMap
.get(customizationKey);
@@ -134,11 +134,11 @@ public class CachingLocaleUrlDefinitionD
}
/**
- * Sets the flag to check URL refresh. If not called, the default is
+ * Sets the flag to check source refresh. If not called, the default is
* <code>false</code>.
*
* @param checkRefresh When <code>true</code>, enables automatic checking
- * of URLs changing.
+ * of sources changing.
* @since 2.1.0
*/
public void setCheckRefresh(boolean checkRefresh) {
@@ -159,10 +159,10 @@ public class CachingLocaleUrlDefinitionD
}
/**
- * Checks if URLs have changed. If yes, it clears the cache. Then continues
+ * Checks if sources have changed. If yes, it clears the cache. Then continues
* loading definitions.
*
- * @param customizationKey The locale to use when loading URLs.
+ * @param customizationKey The locale to use when loading sources.
* @return The loaded definitions.
* @since 2.1.0
*/
@@ -178,7 +178,7 @@ public class CachingLocaleUrlDefinitionD
/**
* Tries to load definitions if necessary.
*
- * @param customizationKey The locale to use when loading URLs.
+ * @param customizationKey The locale to use when loading sources.
* @return The loaded definitions.
* @since 2.1.0
*/
@@ -189,18 +189,18 @@ public class CachingLocaleUrlDefinitionD
return localeDefsMap;
}
- return loadDefinitionsFromURLs(customizationKey);
+ return loadDefinitionsFromResources(customizationKey);
}
/**
- * Loads definitions from the URLs.
+ * Loads definitions from the sources.
*
- * @param customizationKey The locale to use when loading URLs.
+ * @param customizationKey The locale to use when loading Resources.
* @return The loaded definitions.
* @since 2.1.0
*/
- protected Map<String, Definition> loadDefinitionsFromURLs(Locale customizationKey) {
- Map<String, Definition> localeDefsMap = loadRawDefinitionsFromURLs(customizationKey);
+ protected Map<String, Definition> loadDefinitionsFromResources(Locale customizationKey) {
+ Map<String, Definition> localeDefsMap = loadRawDefinitionsFromResources(customizationKey);
Map<String, Definition> defsMap = definitionResolver
.storeDefinitionPatterns(copyDefinitionMap(localeDefsMap),
customizationKey);
@@ -209,17 +209,16 @@ public class CachingLocaleUrlDefinitionD
}
/**
- * Loads the raw definitions from the URLs associated with a locale.
+ * Loads the raw definitions from the sources associated with a locale.
*
- * @param customizationKey The locale to use when loading URLs.
+ * @param customizationKey The locale to use when loading Resources.
* @return The loaded definitions.
* @since 2.1.3
*/
- protected Map<String, Definition> loadRawDefinitionsFromURLs(
+ protected Map<String, Definition> loadRawDefinitionsFromResources(
Locale customizationKey) {
Map<String, Definition> localeDefsMap;
- String postfix = LocaleUtil.calculatePostfix(customizationKey);
Locale parentLocale = LocaleUtil.getParentLocale(customizationKey);
localeDefsMap = new LinkedHashMap<String, Definition>();
if (parentLocale != null) {
@@ -228,20 +227,14 @@ public class CachingLocaleUrlDefinitionD
localeDefsMap.putAll(parentDefs);
}
}
- // For each source, the URL must be loaded.
- for (URL url : sourceURLs) {
- String path = url.toExternalForm();
-
- String newPath = LocaleUtil.concatPostfix(path, postfix);
- try {
- URL newUrl = new URL(newPath);
- Map<String, Definition> defsMap = loadDefinitionsFromURL(newUrl);
+ // For each source, the resource must be loaded.
+ for (ApplicationResource resource : sources) {
+ ApplicationResource newResource = applicationContext.getResource(resource, customizationKey);
+ if (newResource != null) {
+ Map<String, Definition> defsMap = loadDefinitionsFromResource(newResource);
if (defsMap != null) {
localeDefsMap.putAll(defsMap);
}
- } catch (MalformedURLException e) {
- throw new DefinitionsFactoryException("Error parsing URL "
- + newPath, e);
}
}
return localeDefsMap;
Modified: tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAO.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAO.java?rev=1297705&r1=1297704&r2=1297705&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAO.java (original)
+++ tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAO.java Tue Mar 6 20:44:30 2012
@@ -20,16 +20,16 @@
*/
package org.apache.tiles.definition.dao;
-import java.net.MalformedURLException;
-import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.tiles.Definition;
-import org.apache.tiles.definition.DefinitionsFactoryException;
-import org.apache.tiles.util.LocaleUtil;
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.ApplicationResource;
+import org.apache.tiles.request.locale.LocaleUtil;
/**
* A definition DAO that uses {@link Locale} as a customization key and loads
@@ -40,6 +40,10 @@ import org.apache.tiles.util.LocaleUtil;
*/
public class LocaleUrlDefinitionDAO extends BaseLocaleUrlDefinitionDAO {
+ public LocaleUrlDefinitionDAO(ApplicationContext applicationContext) {
+ super(applicationContext);
+ }
+
/**
* <p>
* Returns a definition, given its name and the customization key.
@@ -60,28 +64,42 @@ public class LocaleUrlDefinitionDAO exte
/** {@inheritDoc} */
public Map<String, Definition> getDefinitions(Locale customizationKey) {
- List<String> postfixes = LocaleUtil.calculatePostfixes(customizationKey);
+ ArrayList<Locale> postfixes = computeLocales(customizationKey);
Map<String, Definition> localeDefsMap = new HashMap<String, Definition>();
- for (Object postfix : postfixes) {
+ // process the postfixes from the root to the most specific
+ for (Locale postfix : postfixes) {
// For each postfix, all the sources must be loaded.
- for (URL url : sourceURLs) {
- String path = url.toExternalForm();
-
- String newPath = LocaleUtil.concatPostfix(path,
- (String) postfix);
- try {
- URL newUrl = new URL(newPath);
- Map<String, Definition> defsMap = loadDefinitionsFromURL(newUrl);
+ for (ApplicationResource resource : sources) {
+ ApplicationResource newResource = applicationContext.getResource(resource, postfix);
+ if (newResource != null) {
+ Map<String, Definition> defsMap = loadDefinitionsFromResource(newResource);
if (defsMap != null) {
localeDefsMap.putAll(defsMap);
}
- } catch (MalformedURLException e) {
- throw new DefinitionsFactoryException("Error parsing URL "
- + newPath, e);
}
}
}
-
return localeDefsMap;
}
+
+ /**
+ * Returns a list of locales from root to the customizationKey.
+ * @param customizationKey the target Locale.
+ * @return the list of its ancestors.
+ */
+ private ArrayList<Locale> computeLocales(Locale customizationKey) {
+ Locale postfix;
+ if(customizationKey == null) {
+ postfix = Locale.ROOT;
+ } else {
+ postfix = customizationKey;
+ }
+ ArrayList<Locale> postfixes = new ArrayList<Locale>();
+ while (postfix != null) {
+ postfixes.add(postfix);
+ postfix = LocaleUtil.getParentLocale(postfix);
+ }
+ Collections.reverse(postfixes);
+ return postfixes;
+ }
}
Modified: tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java?rev=1297705&r1=1297704&r2=1297705&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java (original)
+++ tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java Tue Mar 6 20:44:30 2012
@@ -29,6 +29,7 @@ import java.util.Set;
import org.apache.tiles.Definition;
import org.apache.tiles.definition.NoSuchDefinitionException;
+import org.apache.tiles.request.ApplicationContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,10 +53,14 @@ public class ResolvingLocaleUrlDefinitio
*/
private final Logger log = LoggerFactory.getLogger(ResolvingLocaleUrlDefinitionDAO.class);
+ public ResolvingLocaleUrlDefinitionDAO(ApplicationContext applicationContext) {
+ super(applicationContext);
+ }
+
/** {@inheritDoc} */
@Override
protected Map<String, Definition> loadParentDefinitions(Locale parentLocale) {
- return loadRawDefinitionsFromURLs(parentLocale);
+ return loadRawDefinitionsFromResources(parentLocale);
}
@Override
Modified: tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java?rev=1297705&r1=1297704&r2=1297705&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java (original)
+++ tiles/framework/trunk/tiles-parent/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java Tue Mar 6 20:44:30 2012
@@ -20,8 +20,6 @@
*/
package org.apache.tiles.factory;
-import java.io.IOException;
-import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -48,6 +46,7 @@ import org.apache.tiles.preparer.BasicPr
import org.apache.tiles.preparer.PreparerFactory;
import org.apache.tiles.renderer.DefinitionRenderer;
import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.ApplicationResource;
import org.apache.tiles.request.render.BasicRendererFactory;
import org.apache.tiles.request.render.ChainedDelegateRenderer;
import org.apache.tiles.request.render.DispatchRenderer;
@@ -163,7 +162,7 @@ public class BasicTilesContainerFactory
*/
protected BaseLocaleUrlDefinitionDAO instantiateLocaleDefinitionDao(ApplicationContext applicationContext,
LocaleResolver resolver) {
- ResolvingLocaleUrlDefinitionDAO dao = new ResolvingLocaleUrlDefinitionDAO();
+ ResolvingLocaleUrlDefinitionDAO dao = new ResolvingLocaleUrlDefinitionDAO(applicationContext);
return dao;
}
@@ -180,7 +179,7 @@ public class BasicTilesContainerFactory
BaseLocaleUrlDefinitionDAO definitionDao = instantiateLocaleDefinitionDao(
applicationContext, resolver);
definitionDao.setReader(createDefinitionsReader(applicationContext));
- definitionDao.setSourceURLs(getSourceURLs(applicationContext));
+ definitionDao.setSources(getSources(applicationContext));
if (definitionDao instanceof PatternDefinitionResolverAware) {
((PatternDefinitionResolverAware<Locale>) definitionDao)
.setPatternDefinitionResolver(createPatternDefinitionResolver(Locale.class));
@@ -212,20 +211,15 @@ public class BasicTilesContainerFactory
}
/**
- * Returns a list containing the URLs to be parsed. By default, it returns a
- * list containing the URL point to "/WEB-INF/tiles.xml".
+ * Returns a list containing the resources to be parsed. By default, it returns a
+ * list containing the resource at "/WEB-INF/tiles.xml".
* @param applicationContext The Tiles application context.
- * @return The source URLs.
+ * @return The resources.
* @since 2.1.1
*/
- protected List<URL> getSourceURLs(ApplicationContext applicationContext) {
- List<URL> retValue = new ArrayList<URL>(1);
- try {
- retValue.add(applicationContext.getResource("/WEB-INF/tiles.xml"));
- } catch (IOException e) {
- throw new TilesContainerFactoryException(
- "Cannot get URL: /WEB-INF/tiles.xml", e);
- }
+ protected List<ApplicationResource> getSources(ApplicationContext applicationContext) {
+ List<ApplicationResource> retValue = new ArrayList<ApplicationResource>(1);
+ retValue.add(applicationContext.getResource("/WEB-INF/tiles.xml"));
return retValue;
}
Modified: tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAOTest.java?rev=1297705&r1=1297704&r2=1297705&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAOTest.java Tue Mar 6 20:44:30 2012
@@ -7,13 +7,10 @@ import static org.easymock.EasyMock.*;
import static org.easymock.classextension.EasyMock.*;
import static org.junit.Assert.*;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.OutputStreamWriter;
+import java.io.InputStream;
import java.net.MalformedURLException;
-import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
@@ -23,11 +20,14 @@ import java.util.Map;
import org.apache.tiles.Attribute;
import org.apache.tiles.Definition;
-import org.apache.tiles.definition.DefinitionsFactory;
import org.apache.tiles.definition.DefinitionsReader;
import org.apache.tiles.definition.RefreshMonitor;
import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.ApplicationResource;
import org.apache.tiles.request.Request;
+import org.apache.tiles.request.locale.PostfixedApplicationResource;
+import org.apache.tiles.request.locale.URLApplicationResource;
import org.junit.Before;
import org.junit.Test;
@@ -38,6 +38,37 @@ import org.junit.Test;
*/
public class BaseLocaleUrlDefinitionDAOTest {
+ private static final class MutableApplicationResource extends PostfixedApplicationResource {
+ private long lastModified = System.currentTimeMillis();
+ private String xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"
+ + "<!DOCTYPE tiles-definitions PUBLIC "
+ + "\"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN\" "
+ + "\"http://tiles.apache.org/dtds/tiles-config_3_0.dtd\">\n\n" + "<tiles-definitions>"
+ + "<definition name=\"rewrite.test\" template=\"/test.jsp\">"
+ + "<put-attribute name=\"testparm\" value=\"testval\"/>" + "</definition>" //
+ + "</tiles-definitions>";
+
+ private MutableApplicationResource(String localePath) {
+ super(localePath);
+ }
+
+ public void modify(String xml) {
+ lastModified = System.currentTimeMillis();
+ this.xml = xml;
+ }
+
+ @Override
+ public long getLastModified() {
+ return lastModified;
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+
+ return new ByteArrayInputStream(xml.getBytes("ISO-8859-1"));
+ }
+ }
+
/**
* The time (in milliseconds) to wait to be sure that the system updates the
* modify date of a file.
@@ -47,14 +78,22 @@ public class BaseLocaleUrlDefinitionDAOT
/**
* The dao to test.
*/
+ private ApplicationContext applicationContext;
+
private BaseLocaleUrlDefinitionDAO dao;
+ private MutableApplicationResource resource;
/**
* Sets up the test.
+ * @throws IOException
*/
@Before
- public void setUp() {
- dao = createMockBuilder(BaseLocaleUrlDefinitionDAO.class).withConstructor().createMock();
+ public void setUp() throws IOException {
+ resource = new MutableApplicationResource("org/apache/tiles/config/temp-defs.xml");
+ applicationContext = createMock(ApplicationContext.class);
+ expect(applicationContext.getResource("org/apache/tiles/config/temp-defs.xml")).andReturn(resource).anyTimes();
+ replay(applicationContext);
+ dao = createMockBuilder(BaseLocaleUrlDefinitionDAO.class).withConstructor(applicationContext).createMock();
}
/**
@@ -68,105 +107,42 @@ public class BaseLocaleUrlDefinitionDAOT
// Set up multiple data sources.
Map<String, Attribute> attribs = new HashMap<String, Attribute>();
attribs.put("testparm", new Attribute("testval"));
- Definition rewriteTest = new Definition("rewrite.test",
- Attribute.createTemplateAttribute("/test.jsp"), attribs);
+ Definition rewriteTest = new Definition("rewrite.test", Attribute.createTemplateAttribute("/test.jsp"), attribs);
expect(dao.getDefinition("rewrite.test", null)).andReturn(rewriteTest);
replay(dao);
- URL url = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/temp-defs.xml");
-
- URI uri = null;
- String urlPath = null;
-
- // The following madness is necessary b/c of the way Windows hanndles
- // URLs.
- // We must add a slash to the protocol if Windows does not. But we
- // cannot
- // add a slash to Unix paths b/c they already have one.
- if (url.getPath().startsWith("/")) {
- urlPath = "file:" + url.getPath();
- } else {
- urlPath = "file:/" + url.getPath();
- }
- // The following second madness is necessary b/c sometimes spaces
- // are encoded as '%20', sometimes they are not. For example in
- // Windows 2000 under Eclipse they are encoded, under the prompt of
- // Windows 2000 they are not.
- // It seems to be in the different behaviour of
- // sun.misc.Launcher$AppClassLoader (called under Eclipse) and
- // java.net.URLClassLoader (under maven).
- // And an URL accepts spaces while URIs need '%20'.
- try {
- uri = new URI(urlPath);
- } catch (URISyntaxException e) {
- uri = new URI(urlPath.replaceAll(" ", "%20"));
- }
-
- List<URL> sourceURLs = new ArrayList<URL>();
- sourceURLs.add(uri.toURL());
- dao.setSourceURLs(sourceURLs);
+ List<ApplicationResource> sources = new ArrayList<ApplicationResource>();
+ sources.add(resource);
+ dao.setSources(sources);
DefinitionsReader reader = new DigesterDefinitionsReader();
dao.setReader(reader);
- String xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"
- + "<!DOCTYPE tiles-definitions PUBLIC "
- + "\"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN\" "
- + "\"http://tiles.apache.org/dtds/tiles-config_3_0.dtd\">\n\n"
- + "<tiles-definitions>"
- + "<definition name=\"rewrite.test\" template=\"/test.jsp\">"
- + "<put-attribute name=\"testparm\" value=\"testval\"/>"
- + "</definition>" + "</tiles-definitions>";
-
- File file = new File(uri);
- FileOutputStream fileOut = new FileOutputStream(file);
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
- fileOut));
- writer.write(xml);
- writer.close();
-
- Map<String, String> params = new HashMap<String, String>();
- params.put(DefinitionsFactory.DEFINITIONS_CONFIG, urlPath);
Request context = createMock(Request.class);
- expect(context.getContext("session")).andReturn(
- new HashMap<String, Object>()).anyTimes();
+ expect(context.getContext("session")).andReturn(new HashMap<String, Object>()).anyTimes();
expect(context.getRequestLocale()).andReturn(null).anyTimes();
replay(context);
- Definition definition = dao.getDefinition("rewrite.test",
- null);
+ Definition definition = dao.getDefinition("rewrite.test", null);
assertNotNull("rewrite.test definition not found.", definition);
- assertEquals("Incorrect initial template value", "/test.jsp",
- definition.getTemplateAttribute().getValue());
+ assertEquals("Incorrect initial template value", "/test.jsp", definition.getTemplateAttribute().getValue());
RefreshMonitor reloadable = dao;
- dao.loadDefinitionsFromURL(url);
- assertEquals("Factory should be fresh.", false, reloadable
- .refreshRequired());
+ dao.loadDefinitionsFromResource(resource);
+ assertEquals("Factory should be fresh.", false, reloadable.refreshRequired());
// Make sure the system actually updates the timestamp.
Thread.sleep(SLEEP_MILLIS);
// Set up multiple data sources.
- xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"
- + "<!DOCTYPE tiles-definitions PUBLIC "
+ resource.modify("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n" + "<!DOCTYPE tiles-definitions PUBLIC "
+ "\"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN\" "
- + "\"http://tiles.apache.org/dtds/tiles-config_3_0.dtd\">\n\n"
- + "<tiles-definitions>"
+ + "\"http://tiles.apache.org/dtds/tiles-config_3_0.dtd\">\n\n" + "<tiles-definitions>"
+ "<definition name=\"rewrite.test\" template=\"/newtest.jsp\">"
- + "<put-attribute name=\"testparm\" value=\"testval\"/>"
- + "</definition>" + "</tiles-definitions>";
-
- file = new File(uri);
- fileOut = new FileOutputStream(file);
- writer = new BufferedWriter(new OutputStreamWriter(fileOut));
- writer.write(xml);
- writer.close();
- file = new File(uri);
+ + "<put-attribute name=\"testparm\" value=\"testval\"/>" + "</definition>" //
+ + "</tiles-definitions>");
- assertEquals("Factory should be stale.", true, reloadable
- .refreshRequired());
+ assertEquals("Factory should be stale.", true, reloadable.refreshRequired());
verify(context, dao);
}
@@ -177,13 +153,14 @@ public class BaseLocaleUrlDefinitionDAOT
*/
@Test
public void testLoadDefinitionsFromURLFileNotFound() throws MalformedURLException {
- URL url = new URL("file:///hello/there.txt");
+ URLApplicationResource resource = new URLApplicationResource("/hello/there.txt", new URL(
+ "file:///hello/there.txt"));
replay(dao);
DefinitionsReader reader = createMock(DefinitionsReader.class);
replay(reader);
dao.setReader(reader);
- assertNull(dao.loadDefinitionsFromURL(url));
+ assertNull(dao.loadDefinitionsFromResource(resource));
verify(dao, reader);
}
Modified: tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java?rev=1297705&r1=1297704&r2=1297705&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java Tue Mar 6 20:44:30 2012
@@ -24,8 +24,8 @@ package org.apache.tiles.definition.dao;
import static org.easymock.EasyMock.*;
import java.io.IOException;
-import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
@@ -44,6 +44,8 @@ import org.apache.tiles.definition.patte
import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
import org.apache.tiles.definition.pattern.wildcard.WildcardDefinitionPatternMatcherFactory;
import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.ApplicationResource;
+import org.apache.tiles.request.locale.URLApplicationResource;
/**
* Tests {@link CachingLocaleUrlDefinitionDAO}.
@@ -57,11 +59,52 @@ public class CachingLocaleUrlDefinitionD
*/
private CachingLocaleUrlDefinitionDAO definitionDao;
+ private ApplicationContext applicationContext;
+
+ private ApplicationResource url1;
+
+ private ApplicationResource url2;
+
+ private ApplicationResource url3;
+
+ private ApplicationResource urlWildcard;
+
+ private ApplicationResource url21;
+
+ private ApplicationResource setupUrl(String filename, Locale... locales) throws IOException {
+ ApplicationResource url = new URLApplicationResource("org/apache/tiles/config/" + filename + ".xml", this
+ .getClass().getClassLoader().getResource("org/apache/tiles/config/" + filename + ".xml"));
+ assertNotNull("Could not load " + filename + " file.", url);
+ expect(applicationContext.getResource(url.getLocalePath())).andReturn(url).anyTimes();
+ expect(applicationContext.getResource(url, Locale.ROOT)).andReturn(url).anyTimes();
+ Map<Locale, ApplicationResource> localeResources = new HashMap<Locale, ApplicationResource>();
+ for (Locale locale : locales) {
+ ApplicationResource urlLocale = new URLApplicationResource("org/apache/tiles/config/" + filename + "_"
+ + locale.toString() + ".xml", this.getClass().getClassLoader()
+ .getResource("org/apache/tiles/config/" + filename + "_" + locale.toString() + ".xml"));
+ assertNotNull("Could not load " + filename + "_" + locale.toString() + " file.", urlLocale);
+ localeResources.put(locale, urlLocale);
+ }
+ for (Locale locale : new Locale[] { Locale.CANADA_FRENCH, Locale.FRENCH, Locale.US, Locale.ENGLISH,
+ Locale.CHINA, Locale.CHINESE, Locale.ITALY, Locale.ITALIAN }) {
+ ApplicationResource urlLocale = localeResources.get(locale);
+ expect(applicationContext.getResource(url, locale)).andReturn(urlLocale).anyTimes();
+ }
+ return url;
+ }
+
/** {@inheritDoc} */
@Override
protected void setUp() throws Exception {
super.setUp();
- definitionDao = new CachingLocaleUrlDefinitionDAO();
+ applicationContext = createMock(ApplicationContext.class);
+ url1 = setupUrl("defs1", Locale.FRENCH, Locale.CANADA_FRENCH, Locale.US);
+ url2 = setupUrl("defs2");
+ url3 = setupUrl("defs3");
+ urlWildcard = setupUrl("defs-wildcard");
+ url21 = setupUrl("tiles-defs-2.1", Locale.ITALIAN);
+ replay(applicationContext);
+ definitionDao = new CachingLocaleUrlDefinitionDAO(applicationContext);
WildcardDefinitionPatternMatcherFactory definitionPatternMatcherFactory =
new WildcardDefinitionPatternMatcherFactory();
PatternDefinitionResolver<Locale> definitionResolver = new BasicPatternDefinitionResolver<Locale>(
@@ -74,22 +117,11 @@ public class CachingLocaleUrlDefinitionD
* Tests {@link LocaleUrlDefinitionDAO#getDefinition(String, Locale)}.
*/
public void testGetDefinition() {
- // Set up multiple data sources.
- URL url1 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs1.xml");
- assertNotNull("Could not load defs1 file.", url1);
- URL url2 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs2.xml");
- assertNotNull("Could not load defs2 file.", url2);
- URL url3 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs3.xml");
- assertNotNull("Could not load defs3 file.", url3);
-
- List<URL> sourceURLs = new ArrayList<URL>();
+ List<ApplicationResource> sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
sourceURLs.add(url2);
sourceURLs.add(url3);
- definitionDao.setSourceURLs(sourceURLs);
+ definitionDao.setSources(sourceURLs);
DefinitionsReader reader = new DigesterDefinitionsReader();
definitionDao.setReader(reader);
@@ -155,22 +187,11 @@ public class CachingLocaleUrlDefinitionD
* Tests {@link LocaleUrlDefinitionDAO#getDefinitions(Locale)}.
*/
public void testGetDefinitions() {
- // Set up multiple data sources.
- URL url1 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs1.xml");
- assertNotNull("Could not load defs1 file.", url1);
- URL url2 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs2.xml");
- assertNotNull("Could not load defs2 file.", url2);
- URL url3 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs3.xml");
- assertNotNull("Could not load defs3 file.", url3);
-
- List<URL> sourceURLs = new ArrayList<URL>();
+ List<ApplicationResource> sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
sourceURLs.add(url2);
sourceURLs.add(url3);
- definitionDao.setSourceURLs(sourceURLs);
+ definitionDao.setSources(sourceURLs);
DefinitionsReader reader = new DigesterDefinitionsReader();
definitionDao.setReader(reader);
@@ -238,26 +259,16 @@ public class CachingLocaleUrlDefinitionD
}
/**
- * Tests {@link LocaleUrlDefinitionDAO#setSourceURLs(List)}.
+ * Tests {@link LocaleUrlDefinitionDAO#setSources(List)}.
*/
public void testSetSourceURLs() {
- // Set up multiple data sources.
- URL url1 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs1.xml");
- assertNotNull("Could not load defs1 file.", url1);
- URL url2 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs2.xml");
- assertNotNull("Could not load defs2 file.", url2);
- URL url3 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs3.xml");
- assertNotNull("Could not load defs3 file.", url3);
- List<URL> sourceURLs = new ArrayList<URL>();
+ List<ApplicationResource> sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
sourceURLs.add(url2);
sourceURLs.add(url3);
- definitionDao.setSourceURLs(sourceURLs);
+ definitionDao.setSources(sourceURLs);
assertEquals("The source URLs are not set correctly", sourceURLs,
- definitionDao.sourceURLs);
+ definitionDao.sources);
}
/**
@@ -276,51 +287,43 @@ public class CachingLocaleUrlDefinitionD
* @throws IOException If something goes wrong.
*/
public void testInit() throws IOException {
- URL url1 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs1.xml");
- URL url2 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs2.xml");
- URL url3 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs3.xml");
ApplicationContext applicationContext = createMock(ApplicationContext.class);
- Set<URL> urlSet = new HashSet<URL>();
+ Set<ApplicationResource> urlSet = new HashSet<ApplicationResource>();
urlSet.add(url1);
expect(applicationContext.getResources("/WEB-INF/tiles.xml"))
.andReturn(urlSet);
replay(applicationContext);
DefinitionsReader reader = new DigesterDefinitionsReader();
definitionDao.setReader(reader);
- List<URL> sourceURLs = new ArrayList<URL>();
+ List<ApplicationResource> sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
- definitionDao.setSourceURLs(sourceURLs);
+ definitionDao.setSources(sourceURLs);
assertEquals("The reader is not of the correct class",
DigesterDefinitionsReader.class, definitionDao.reader
.getClass());
assertEquals("The source URLs are not correct", sourceURLs,
- definitionDao.sourceURLs);
+ definitionDao.sources);
reset(applicationContext);
definitionDao.setReader(new MockDefinitionsReader());
assertEquals("The reader is not of the correct class",
MockDefinitionsReader.class, definitionDao.reader.getClass());
- sourceURLs = new ArrayList<URL>();
+ sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
sourceURLs.add(url2);
sourceURLs.add(url3);
- definitionDao.setSourceURLs(sourceURLs);
+ definitionDao.setSources(sourceURLs);
assertEquals("The source URLs are not correct", sourceURLs,
- definitionDao.sourceURLs);
+ definitionDao.sources);
}
/**
* Tests wildcard mappings.
*/
public void testWildcardMapping() {
- URL url = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs-wildcard.xml");
- List<URL> urls = new ArrayList<URL>();
- urls.add(url);
- definitionDao.setSourceURLs(urls);
+ List<ApplicationResource> urls = new ArrayList<ApplicationResource>();
+ urls.add(urlWildcard);
+ definitionDao.setSources(urls);
definitionDao.setReader(new DigesterDefinitionsReader());
Definition definition = definitionDao.getDefinition("test.defName.subLayered", Locale.ITALY);
@@ -360,11 +363,9 @@ public class CachingLocaleUrlDefinitionD
* when loading multiple files for a locale.
*/
public void testListAttributeLocaleInheritance() {
- URL url = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/tiles-defs-2.1.xml");
- List<URL> urls = new ArrayList<URL>();
- urls.add(url);
- definitionDao.setSourceURLs(urls);
+ List<ApplicationResource> urls = new ArrayList<ApplicationResource>();
+ urls.add(url21);
+ definitionDao.setSources(urls);
ApplicationContext applicationContext = createMock(ApplicationContext.class);
definitionDao.setReader(new DigesterDefinitionsReader());
replay(applicationContext);
Modified: tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java?rev=1297705&r1=1297704&r2=1297705&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-parent/tiles-core/src/test/java/org/apache/tiles/definition/dao/LocaleUrlDefinitionDAOTest.java Tue Mar 6 20:44:30 2012
@@ -24,13 +24,11 @@ package org.apache.tiles.definition.dao;
import static org.easymock.EasyMock.*;
import java.io.IOException;
-import java.net.URL;
import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Set;
import junit.framework.TestCase;
@@ -39,6 +37,8 @@ import org.apache.tiles.definition.Defin
import org.apache.tiles.definition.MockDefinitionsReader;
import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.ApplicationResource;
+import org.apache.tiles.request.locale.URLApplicationResource;
/**
* Tests {@link LocaleUrlDefinitionDAO}.
@@ -52,91 +52,95 @@ public class LocaleUrlDefinitionDAOTest
*/
private LocaleUrlDefinitionDAO definitionDao;
+ private ApplicationContext applicationContext;
+
+ private ApplicationResource url1;
+
+ private ApplicationResource url2;
+
+ private ApplicationResource url3;
+
+ private ApplicationResource setupUrl(String filename, Locale... locales) throws IOException {
+ ApplicationResource url = new URLApplicationResource("org/apache/tiles/config/" + filename + ".xml", this
+ .getClass().getClassLoader().getResource("org/apache/tiles/config/" + filename + ".xml"));
+ assertNotNull("Could not load " + filename + " file.", url);
+ expect(applicationContext.getResource(url.getLocalePath())).andReturn(url).anyTimes();
+ expect(applicationContext.getResource(url, Locale.ROOT)).andReturn(url).anyTimes();
+ Map<Locale, ApplicationResource> localeResources = new HashMap<Locale, ApplicationResource>();
+ for (Locale locale : locales) {
+ ApplicationResource urlLocale = new URLApplicationResource("org/apache/tiles/config/" + filename + "_"
+ + locale.toString() + ".xml", this.getClass().getClassLoader()
+ .getResource("org/apache/tiles/config/" + filename + "_" + locale.toString() + ".xml"));
+ assertNotNull("Could not load " + filename + "_" + locale.toString() + " file.", urlLocale);
+ localeResources.put(locale, urlLocale);
+ }
+ for (Locale locale : new Locale[] { Locale.CANADA_FRENCH, Locale.FRENCH, Locale.US, Locale.ENGLISH,
+ Locale.CHINA, Locale.CHINESE }) {
+ ApplicationResource urlLocale = localeResources.get(locale);
+ expect(applicationContext.getResource(url, locale)).andReturn(urlLocale).anyTimes();
+ }
+ return url;
+ }
+
/** {@inheritDoc} */
@Override
protected void setUp() throws Exception {
super.setUp();
- definitionDao = new LocaleUrlDefinitionDAO();
+
+ applicationContext = createMock(ApplicationContext.class);
+ url1 = setupUrl("defs1", Locale.FRENCH, Locale.CANADA_FRENCH, Locale.US);
+ url2 = setupUrl("defs2");
+ url3 = setupUrl("defs3");
+ replay(applicationContext);
+ definitionDao = new LocaleUrlDefinitionDAO(applicationContext);
}
/**
* Tests {@link LocaleUrlDefinitionDAO#getDefinition(String, Locale)}.
*/
public void testGetDefinition() {
- // Set up multiple data sources.
- URL url1 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs1.xml");
- assertNotNull("Could not load defs1 file.", url1);
- URL url2 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs2.xml");
- assertNotNull("Could not load defs2 file.", url2);
- URL url3 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs3.xml");
- assertNotNull("Could not load defs3 file.", url3);
-
- List<URL> sourceURLs = new ArrayList<URL>();
+ List<ApplicationResource> sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
sourceURLs.add(url2);
sourceURLs.add(url3);
- definitionDao.setSourceURLs(sourceURLs);
+ definitionDao.setSources(sourceURLs);
DefinitionsReader reader = new DigesterDefinitionsReader();
definitionDao.setReader(reader);
-
- assertNotNull("test.def1 definition not found.", definitionDao
- .getDefinition("test.def1", null));
- assertNotNull("test.def2 definition not found.", definitionDao
- .getDefinition("test.def2", null));
- assertNotNull("test.def3 definition not found.", definitionDao
- .getDefinition("test.def3", null));
- assertNotNull("test.common definition not found.", definitionDao
- .getDefinition("test.common", null));
+ assertNotNull("test.def1 definition not found.", definitionDao.getDefinition("test.def1", null));
+ assertNotNull("test.def2 definition not found.", definitionDao.getDefinition("test.def2", null));
+ assertNotNull("test.def3 definition not found.", definitionDao.getDefinition("test.def3", null));
+ assertNotNull("test.common definition not found.", definitionDao.getDefinition("test.common", null));
assertNotNull("test.common definition in US locale not found.",
definitionDao.getDefinition("test.common", Locale.US));
assertNotNull("test.common definition in FRENCH locale not found.",
definitionDao.getDefinition("test.common", Locale.FRENCH));
assertNotNull("test.common definition in CHINA locale not found.",
definitionDao.getDefinition("test.common", Locale.CHINA));
- assertNotNull(
- "test.common.french definition in FRENCH locale not found.",
- definitionDao.getDefinition("test.common.french",
- Locale.FRENCH));
- assertNotNull(
- "test.common.french definition in CANADA_FRENCH locale not found.",
- definitionDao.getDefinition("test.common.french",
- Locale.CANADA_FRENCH));
- assertNotNull("test.def.toextend definition not found.", definitionDao
- .getDefinition("test.def.toextend", null));
+ assertNotNull("test.common.french definition in FRENCH locale not found.",
+ definitionDao.getDefinition("test.common.french", Locale.FRENCH));
+ assertNotNull("test.common.french definition in CANADA_FRENCH locale not found.",
+ definitionDao.getDefinition("test.common.french", Locale.CANADA_FRENCH));
+ assertNotNull("test.def.toextend definition not found.", definitionDao.getDefinition("test.def.toextend", null));
assertNotNull("test.def.overridden definition not found.",
definitionDao.getDefinition("test.def.overridden", null));
- assertNotNull(
- "test.def.overridden definition in FRENCH locale not found.",
- definitionDao.getDefinition("test.def.overridden",
- Locale.FRENCH));
+ assertNotNull("test.def.overridden definition in FRENCH locale not found.",
+ definitionDao.getDefinition("test.def.overridden", Locale.FRENCH));
- assertEquals("Incorrect default country value", "default",
- definitionDao.getDefinition("test.def1", null).getAttribute(
- "country").getValue());
- assertEquals("Incorrect US country value", "US", definitionDao
- .getDefinition("test.def1", Locale.US).getAttribute("country")
- .getValue());
+ assertEquals("Incorrect default country value", "default", definitionDao.getDefinition("test.def1", null)
+ .getAttribute("country").getValue());
+ assertEquals("Incorrect US country value", "US", definitionDao.getDefinition("test.def1", Locale.US)
+ .getAttribute("country").getValue());
assertEquals("Incorrect France country value", "France", definitionDao
- .getDefinition("test.def1", Locale.FRENCH).getAttribute(
- "country").getValue());
- assertEquals("Incorrect Chinese country value (should be default)",
- "default", definitionDao.getDefinition("test.def1",
- Locale.CHINA).getAttribute("country").getValue());
+ .getDefinition("test.def1", Locale.FRENCH).getAttribute("country").getValue());
+ assertEquals("Incorrect Chinese country value (should be default)", "default",
+ definitionDao.getDefinition("test.def1", Locale.CHINA).getAttribute("country").getValue());
assertEquals("Incorrect default country value", "default",
- definitionDao.getDefinition("test.def.overridden", null)
- .getAttribute("country").getValue());
- assertEquals("Incorrect default title value",
- "Definition to be overridden", definitionDao.getDefinition(
- "test.def.overridden", null).getAttribute("title")
- .getValue());
- assertEquals("Incorrect France country value", "France", definitionDao
- .getDefinition("test.def.overridden", Locale.FRENCH)
- .getAttribute("country").getValue());
- assertNull("Definition in French not found", definitionDao
- .getDefinition("test.def.overridden", Locale.FRENCH)
+ definitionDao.getDefinition("test.def.overridden", null).getAttribute("country").getValue());
+ assertEquals("Incorrect default title value", "Definition to be overridden",
+ definitionDao.getDefinition("test.def.overridden", null).getAttribute("title").getValue());
+ assertEquals("Incorrect France country value", "France",
+ definitionDao.getDefinition("test.def.overridden", Locale.FRENCH).getAttribute("country").getValue());
+ assertNull("Definition in French not found", definitionDao.getDefinition("test.def.overridden", Locale.FRENCH)
.getAttribute("title"));
}
@@ -144,109 +148,63 @@ public class LocaleUrlDefinitionDAOTest
* Tests {@link LocaleUrlDefinitionDAO#getDefinitions(Locale)}.
*/
public void testGetDefinitions() {
- // Set up multiple data sources.
- URL url1 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs1.xml");
- assertNotNull("Could not load defs1 file.", url1);
- URL url2 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs2.xml");
- assertNotNull("Could not load defs2 file.", url2);
- URL url3 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs3.xml");
- assertNotNull("Could not load defs3 file.", url3);
-
- List<URL> sourceURLs = new ArrayList<URL>();
+ List<ApplicationResource> sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
sourceURLs.add(url2);
sourceURLs.add(url3);
- definitionDao.setSourceURLs(sourceURLs);
+ definitionDao.setSources(sourceURLs);
DefinitionsReader reader = new DigesterDefinitionsReader();
definitionDao.setReader(reader);
- Map<String, Definition> defaultDefinitions = definitionDao
- .getDefinitions(null);
- Map<String, Definition> usDefinitions = definitionDao
- .getDefinitions(Locale.US);
- Map<String, Definition> frenchDefinitions = definitionDao
- .getDefinitions(Locale.FRENCH);
- Map<String, Definition> chinaDefinitions = definitionDao
- .getDefinitions(Locale.CHINA);
- Map<String, Definition> canadaFrenchDefinitions = definitionDao
- .getDefinitions(Locale.CANADA_FRENCH);
-
- assertNotNull("test.def1 definition not found.", defaultDefinitions
- .get("test.def1"));
- assertNotNull("test.def2 definition not found.", defaultDefinitions
- .get("test.def2"));
- assertNotNull("test.def3 definition not found.", defaultDefinitions
- .get("test.def3"));
- assertNotNull("test.common definition not found.", defaultDefinitions
- .get("test.common"));
- assertNotNull("test.common definition in US locale not found.",
- usDefinitions.get("test.common"));
- assertNotNull("test.common definition in FRENCH locale not found.",
- frenchDefinitions.get("test.common"));
- assertNotNull("test.common definition in CHINA locale not found.",
- chinaDefinitions.get("test.common"));
- assertNotNull(
- "test.common.french definition in FRENCH locale not found.",
+ Map<String, Definition> defaultDefinitions = definitionDao.getDefinitions(null);
+ Map<String, Definition> usDefinitions = definitionDao.getDefinitions(Locale.US);
+ Map<String, Definition> frenchDefinitions = definitionDao.getDefinitions(Locale.FRENCH);
+ Map<String, Definition> chinaDefinitions = definitionDao.getDefinitions(Locale.CHINA);
+ Map<String, Definition> canadaFrenchDefinitions = definitionDao.getDefinitions(Locale.CANADA_FRENCH);
+
+ assertNotNull("test.def1 definition not found.", defaultDefinitions.get("test.def1"));
+ assertNotNull("test.def2 definition not found.", defaultDefinitions.get("test.def2"));
+ assertNotNull("test.def3 definition not found.", defaultDefinitions.get("test.def3"));
+ assertNotNull("test.common definition not found.", defaultDefinitions.get("test.common"));
+ assertNotNull("test.common definition in US locale not found.", usDefinitions.get("test.common"));
+ assertNotNull("test.common definition in FRENCH locale not found.", frenchDefinitions.get("test.common"));
+ assertNotNull("test.common definition in CHINA locale not found.", chinaDefinitions.get("test.common"));
+ assertNotNull("test.common.french definition in FRENCH locale not found.",
frenchDefinitions.get("test.common.french"));
- assertNotNull(
- "test.common.french definition in CANADA_FRENCH locale not found.",
+ assertNotNull("test.common.french definition in CANADA_FRENCH locale not found.",
canadaFrenchDefinitions.get("test.common.french"));
- assertNotNull("test.def.toextend definition not found.",
- defaultDefinitions.get("test.def.toextend"));
- assertNotNull("test.def.overridden definition not found.",
- defaultDefinitions.get("test.def.overridden"));
- assertNotNull(
- "test.def.overridden definition in FRENCH locale not found.",
+ assertNotNull("test.def.toextend definition not found.", defaultDefinitions.get("test.def.toextend"));
+ assertNotNull("test.def.overridden definition not found.", defaultDefinitions.get("test.def.overridden"));
+ assertNotNull("test.def.overridden definition in FRENCH locale not found.",
frenchDefinitions.get("test.def.overridden"));
assertEquals("Incorrect default country value", "default",
- defaultDefinitions.get("test.def1").getAttribute("country")
- .getValue());
- assertEquals("Incorrect US country value", "US", usDefinitions.get(
- "test.def1").getAttribute("country").getValue());
- assertEquals("Incorrect France country value", "France",
- frenchDefinitions.get("test.def1").getAttribute("country")
- .getValue());
- assertEquals("Incorrect Chinese country value (should be default)",
- "default", chinaDefinitions.get("test.def1").getAttribute(
- "country").getValue());
- assertEquals("Incorrect default country value", "default",
- defaultDefinitions.get("test.def.overridden").getAttribute(
- "country").getValue());
- assertEquals("Incorrect default title value",
- "Definition to be overridden", defaultDefinitions.get(
- "test.def.overridden").getAttribute("title").getValue());
+ defaultDefinitions.get("test.def1").getAttribute("country").getValue());
+ assertEquals("Incorrect US country value", "US", usDefinitions.get("test.def1").getAttribute("country")
+ .getValue());
assertEquals("Incorrect France country value", "France",
- frenchDefinitions.get("test.def.overridden").getAttribute(
- "country").getValue());
- assertNull("Definition in French not found", frenchDefinitions.get(
- "test.def.overridden").getAttribute("title"));
+ frenchDefinitions.get("test.def1").getAttribute("country").getValue());
+ assertEquals("Incorrect Chinese country value (should be default)", "default", chinaDefinitions
+ .get("test.def1").getAttribute("country").getValue());
+ assertEquals("Incorrect default country value", "default", defaultDefinitions.get("test.def.overridden")
+ .getAttribute("country").getValue());
+ assertEquals("Incorrect default title value", "Definition to be overridden",
+ defaultDefinitions.get("test.def.overridden").getAttribute("title").getValue());
+ assertEquals("Incorrect France country value", "France", frenchDefinitions.get("test.def.overridden")
+ .getAttribute("country").getValue());
+ assertNull("Definition in French not found", frenchDefinitions.get("test.def.overridden").getAttribute("title"));
}
/**
- * Tests {@link LocaleUrlDefinitionDAO#setSourceURLs(List)}.
+ * Tests {@link LocaleUrlDefinitionDAO#setSources(List)}.
*/
public void testSetSourceURLs() {
- // Set up multiple data sources.
- URL url1 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs1.xml");
- assertNotNull("Could not load defs1 file.", url1);
- URL url2 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs2.xml");
- assertNotNull("Could not load defs2 file.", url2);
- URL url3 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs3.xml");
- assertNotNull("Could not load defs3 file.", url3);
- List<URL> sourceURLs = new ArrayList<URL>();
+ List<ApplicationResource> sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
sourceURLs.add(url2);
sourceURLs.add(url3);
- definitionDao.setSourceURLs(sourceURLs);
- assertEquals("The source URLs are not set correctly", sourceURLs,
- definitionDao.sourceURLs);
+ definitionDao.setSources(sourceURLs);
+ assertEquals("The source URLs are not set correctly", sourceURLs, definitionDao.sources);
}
/**
@@ -254,9 +212,10 @@ public class LocaleUrlDefinitionDAOTest
*/
public void testSetReader() {
DefinitionsReader reader = createMock(DefinitionsReader.class);
+ replay(reader);
definitionDao.setReader(reader);
- assertEquals("There reader has not been set correctly", reader,
- definitionDao.reader);
+ assertEquals("There reader has not been set correctly", reader, definitionDao.reader);
+ verify(reader);
}
/**
@@ -265,39 +224,29 @@ public class LocaleUrlDefinitionDAOTest
* @throws IOException If something goes wrong.
*/
public void testInit() throws IOException {
- URL url1 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs1.xml");
- URL url2 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs2.xml");
- URL url3 = this.getClass().getClassLoader().getResource(
- "org/apache/tiles/config/defs3.xml");
ApplicationContext applicationContext = createMock(ApplicationContext.class);
- Set<URL> urlSet = new HashSet<URL>();
+ List<ApplicationResource> urlSet = new ArrayList<ApplicationResource>();
urlSet.add(url1);
- expect(applicationContext.getResources("/WEB-INF/tiles.xml"))
- .andReturn(urlSet);
+ expect(applicationContext.getResources("/WEB-INF/tiles.xml")).andReturn(urlSet);
replay(applicationContext);
DefinitionsReader reader = new DigesterDefinitionsReader();
definitionDao.setReader(reader);
- List<URL> sourceURLs = new ArrayList<URL>();
+ List<ApplicationResource> sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
- definitionDao.setSourceURLs(sourceURLs);
- assertEquals("The reader is not of the correct class",
- DigesterDefinitionsReader.class, definitionDao.reader
- .getClass());
- assertEquals("The source URLs are not correct", sourceURLs,
- definitionDao.sourceURLs);
+ definitionDao.setSources(sourceURLs);
+ assertEquals("The reader is not of the correct class", DigesterDefinitionsReader.class,
+ definitionDao.reader.getClass());
+ assertEquals("The source URLs are not correct", sourceURLs, definitionDao.sources);
reset(applicationContext);
definitionDao.setReader(new MockDefinitionsReader());
- assertEquals("The reader is not of the correct class",
- MockDefinitionsReader.class, definitionDao.reader.getClass());
- sourceURLs = new ArrayList<URL>();
+ assertEquals("The reader is not of the correct class", MockDefinitionsReader.class,
+ definitionDao.reader.getClass());
+ sourceURLs = new ArrayList<ApplicationResource>();
sourceURLs.add(url1);
sourceURLs.add(url2);
sourceURLs.add(url3);
- definitionDao.setSourceURLs(sourceURLs);
- assertEquals("The source URLs are not correct", sourceURLs,
- definitionDao.sourceURLs);
+ definitionDao.setSources(sourceURLs);
+ assertEquals("The source URLs are not correct", sourceURLs, definitionDao.sources);
}
}