Author: apetrelli Date: Mon Oct 16 04:33:35 2006 New Revision: 464448 URL: http://svn.apache.org/viewvc?view=rev&rev=464448 Log: SB-28 Added changes to make Tiles extension easier
Added: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockOnlyLocaleTilesContext.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockPublicUrlDefinitionsFactory.java Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/ComponentDefinition.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/DefinitionsFactory.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesUtilImpl.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/ComponentDefinition.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/ComponentDefinition.java?view=diff&rev=464448&r1=464447&r2=464448 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/ComponentDefinition.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/ComponentDefinition.java Mon Oct 16 04:33:35 2006 @@ -557,13 +557,25 @@ } /** - * Set isVisited. + * Sets the visit flag, used during inheritance resolution. + * + * @param isVisited <code>true</code> is the definition has been visited. * */ public void setIsVisited( boolean isVisited ) { this.isVisited = isVisited; } + + /** + * Returns the visit flag, used during inheritance resolution. + * + * @return isVisited <code>true</code> is the definition has been visited. + */ + public boolean isIsVisited() + { + return isVisited; + } /** * Resolve inheritance. @@ -571,6 +583,8 @@ * Also copy attributes setted in parent, and not set in child * If instance doesn't extend anything, do nothing. * @throws NoSuchDefinitionException If an inheritance can not be solved. + * @deprecated Each [EMAIL PROTECTED] ComponentDefinitions} should provide its own + * strategy to resolve inheritances. */ public void resolveInheritance( ComponentDefinitions definitionsSet ) throws NoSuchDefinitionException @@ -626,6 +640,8 @@ * Also copy attributes setted in parent, and not set in child * If instance doesn't extend anything, do nothing. * @throws NoSuchDefinitionException If an inheritance can not be solved. + * @deprecated Each [EMAIL PROTECTED] ComponentDefinitions} should provide its own + * strategy to resolve inheritances. */ public void resolveInheritance( ComponentDefinitions definitionsSet, Locale locale) throws NoSuchDefinitionException Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/DefinitionsFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/DefinitionsFactory.java?view=diff&rev=464448&r1=464447&r2=464448 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/DefinitionsFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/DefinitionsFactory.java Mon Oct 16 04:33:35 2006 @@ -58,6 +58,19 @@ public void init(Map params) throws DefinitionsFactoryException; /** + * Returns a ComponentDefinition object that matches the given name and + * Tiles context + * + * @param name The name of the ComponentDefinition to return. + * @param tilesContext The Tiles context to use to resolve the definition. + * @return the ComponentDefinition matching the given name or null if none + * is found. + * @throws DefinitionsFactoryException if an error occurs reading definitions. + */ + public ComponentDefinition getDefinition(String name, + TilesContext tilesContext) throws DefinitionsFactoryException; + + /** * Adds a source where ComponentDefinition objects are stored. * * Implementations should publish what type of source object they expect. @@ -82,29 +95,4 @@ */ public ComponentDefinitions readDefinitions() throws DefinitionsFactoryException; - - /** - * Appends locale-specific [EMAIL PROTECTED] ComponentDefinition} objects to an existing - * [EMAIL PROTECTED] ComponentDefinitions} set by reading locale-specific versions of - * the applied sources. - * - * @param definitions The ComponentDefinitions object to append to. - * @param locale The requested locale. - * @throws DefinitionsFactoryException if an error occurs reading definitions. - */ - public void addDefinitions(ComponentDefinitions definitions, Locale locale) - throws DefinitionsFactoryException; - - /** - * Indicates whether a given locale has been processed or not. - * - * This method can be used to avoid unnecessary synchronization of the - * DefinitionsFactory in multi-threaded situations. Check the return of - * isLoacaleProcessed before synchronizing the object and reading - * locale-specific definitions. - * - * @param locale The locale to check. - * @return true if the given lcoale has been processed and false otherwise. - */ - public boolean isLocaleProcessed(Locale locale); } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesUtilImpl.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesUtilImpl.java?view=diff&rev=464448&r1=464447&r2=464448 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesUtilImpl.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/TilesUtilImpl.java Mon Oct 16 04:33:35 2006 @@ -202,27 +202,7 @@ try { DefinitionsFactory factory = getDefinitionsFactory(tilesContext); - ComponentDefinitions definitions = (ComponentDefinitions) - tilesContext.getApplicationScope().get(TilesUtilImpl.DEFINITIONS_OBJECT); - ComponentDefinition definition = definitions.getDefinition( - definitionName, tilesContext.getRequestLocale()); - - if (definition == null) { - if (!factory.isLocaleProcessed(tilesContext.getRequestLocale())) { - // FIXME This will modify the factory as well as the definitions - // but we are only locking the definitions. - // - // We'll have to refactor again to remove this issue. - synchronized (definitions) { - factory.addDefinitions(definitions, tilesContext.getRequestLocale()); - } - } - - definition = definitions.getDefinition( - definitionName, tilesContext.getRequestLocale()); - } - - return definition; + return factory.getDefinition(definitionName, tilesContext); } catch (NullPointerException ex) { // Factory not found in context throw new FactoryNotFoundException("Can't get definitions factory from context."); } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java?view=diff&rev=464448&r1=464447&r2=464448 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/ComponentDefinitionsImpl.java Mon Oct 16 04:33:35 2006 @@ -22,6 +22,9 @@ import java.util.Iterator; import java.util.Locale; import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.tiles.ComponentAttribute; import org.apache.tiles.ComponentDefinition; import org.apache.tiles.ComponentDefinitions; @@ -32,6 +35,12 @@ * @version $Rev$ $Date$ */ public class ComponentDefinitionsImpl implements ComponentDefinitions { + + /** + * Commons Logging instance. + */ + private static Log log = LogFactory.getLog(ComponentDefinitionsImpl.class); + /** * The base set of ComponentDefinition objects not discriminated by locale. */ @@ -112,7 +121,7 @@ Iterator i = baseDefinitions.values().iterator(); while( i.hasNext() ) { ComponentDefinition definition = (ComponentDefinition)i.next(); - definition.resolveInheritance( this ); + resolveInheritance( definition ); } // end loop } @@ -127,7 +136,7 @@ Iterator i = map.values().iterator(); while( i.hasNext() ) { ComponentDefinition definition = (ComponentDefinition)i.next(); - definition.resolveInheritance( this, locale ); + resolveInheritance( definition, locale ); } // end loop } } @@ -150,7 +159,6 @@ public void resolveAttributeDependencies() { Iterator i = this.baseDefinitions.values().iterator(); - // FIXME: Need to repeat the following for locale-specific defs. while (i.hasNext()) { ComponentDefinition def = (ComponentDefinition) i.next(); Map attributes = def.getAttributes(); @@ -250,5 +258,113 @@ } return retValue; + } + + /** + * Resolve inheritance. + * First, resolve parent's inheritance, then set path to the parent's path. + * Also copy attributes setted in parent, and not set in child + * If instance doesn't extend anything, do nothing. + * @throws NoSuchDefinitionException If an inheritance can not be solved. + */ + protected void resolveInheritance(ComponentDefinition definition) + throws NoSuchDefinitionException { + // Already done, or not needed ? + if (definition.isIsVisited() || !definition.isExtending()) + return; + + if (log.isDebugEnabled()) + log.debug("Resolve definition for child name='" + + definition.getName() + + "' extends='" + definition.getExtends() + "'."); + + // Set as visited to avoid endless recurisvity. + definition.setIsVisited(true); + + // Resolve parent before itself. + ComponentDefinition parent = getDefinition(definition.getExtends()); + if (parent == null) { // error + String msg = "Error while resolving definition inheritance: child '" + + definition.getName() + + "' can't find its ancestor '" + + definition.getExtends() + + "'. Please check your description file."; + log.error(msg); + // to do : find better exception + throw new NoSuchDefinitionException(msg); + } + + resolveInheritance(parent); + + overload(parent, definition); + } + + /** + * Resolve locale-specific inheritance. + * First, resolve parent's inheritance, then set path to the parent's path. + * Also copy attributes setted in parent, and not set in child + * If instance doesn't extend anything, do nothing. + * @throws NoSuchDefinitionException If an inheritance can not be solved. + */ + protected void resolveInheritance(ComponentDefinition definition, + Locale locale) throws NoSuchDefinitionException { + // Already done, or not needed ? + if (definition.isIsVisited() || !definition.isExtending()) + return; + + if (log.isDebugEnabled()) + log.debug("Resolve definition for child name='" + + definition.getName() + + "' extends='" + definition.getExtends() + "'."); + + // Set as visited to avoid endless recurisvity. + definition.setIsVisited(true); + + // Resolve parent before itself. + ComponentDefinition parent = getDefinition(definition.getExtends(), + locale); + if (parent == null) { // error + String msg = "Error while resolving definition inheritance: child '" + + definition.getName() + + "' can't find its ancestor '" + + definition.getExtends() + + "'. Please check your description file."; + log.error(msg); + // to do : find better exception + throw new NoSuchDefinitionException(msg); + } + + resolveInheritance(definition, locale); + + overload(parent, definition); + } + + /** + * Overloads a child definition with a given parent. + * All attributes present in child are kept. All missing attributes are + * copied from the parent. + * Special attribute 'path','role' and 'extends' are overloaded in child if + * not defined + * @param parent The parent definition. + * @param child The child that will be overloaded. + */ + protected void overload(ComponentDefinition parent, + ComponentDefinition child) { + // Iterate on each parent's attribute and add it if not defined in child. + Iterator parentAttributes = parent.getAttributes().keySet().iterator(); + while (parentAttributes.hasNext()) { + String name = (String) parentAttributes.next(); + if (!child.getAttributes().containsKey(name)) + child.put(name, parent.getAttribute(name)); + } + // Set path and role if not setted + if (child.getPath() == null) + child.setPath(parent.getPath()); + if (child.getRole() == null) + child.setRole(parent.getRole()); + if (child.getPreparer() == null) { + child.setPreparer(parent.getPreparer()); + child.setPreparerType(parent.getPreparerType()); + } } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java?view=diff&rev=464448&r1=464447&r2=464448 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java Mon Oct 16 04:33:35 2006 @@ -36,6 +36,8 @@ import org.apache.tiles.DefinitionsFactoryException; import org.apache.tiles.DefinitionsReader; import org.apache.tiles.ReloadableDefinitionsFactory; +import org.apache.tiles.TilesContext; +import org.apache.tiles.TilesUtilImpl; import org.apache.tiles.digester.DigesterDefinitionsReader; /** @@ -54,15 +56,15 @@ /** * Contains the URL objects identifying where configuration data is found. */ - private List sources; + protected List sources; /** * Reader used to get definitions from the sources. */ - private DefinitionsReader reader; + protected DefinitionsReader reader; /** * Contains the dates that the URL sources were last modified. */ - private Map lastModifiedDates; + protected Map lastModifiedDates; /** * Contains a list of locales that have been processed. */ @@ -127,6 +129,42 @@ } /** + * Returns a ComponentDefinition object that matches the given name and + * Tiles context + * + * @param name The name of the ComponentDefinition to return. + * @param tilesContext The Tiles context to use to resolve the definition. + * @return the ComponentDefinition matching the given name or null if none + * is found. + * @throws DefinitionsFactoryException if an error occurs reading definitions. + */ + public ComponentDefinition getDefinition(String name, + TilesContext tilesContext) throws DefinitionsFactoryException { + ComponentDefinitions definitions = (ComponentDefinitions) + tilesContext.getApplicationScope().get( + TilesUtilImpl.DEFINITIONS_OBJECT); + ComponentDefinition definition = definitions.getDefinition( + name, tilesContext.getRequestLocale()); + + if (definition == null) { + if (!isContextProcessed(tilesContext)) { + // FIXME This will modify the factory as well as the definitions + // but we are only locking the definitions. + // + // We'll have to refactor again to remove this issue. + synchronized (definitions) { + addDefinitions(definitions, tilesContext); + } + } + + definition = definitions.getDefinition(name, + tilesContext.getRequestLocale()); + } + + return definition; + } + + /** * Adds a source where ComponentDefinition objects are stored. * * Implementations should publish what type of source object they expect. @@ -160,19 +198,20 @@ * the applied sources. * * @param definitions The ComponentDefinitions object to append to. - * @param locale The requested locale. + * @param tilesContext The requested locale. * @throws DefinitionsFactoryException if an error occurs reading definitions. */ - public void addDefinitions(ComponentDefinitions definitions, Locale locale) + protected void addDefinitions(ComponentDefinitions definitions, TilesContext tilesContext) throws DefinitionsFactoryException { + Locale locale = tilesContext.getRequestLocale(); List postfixes = calculatePostixes(locale); - if (isLocaleProcessed(locale)) { - return; - } else { - processedLocales.add(locale); - } + if (isContextProcessed(tilesContext)) { + return; + } else { + processedLocales.add(locale); + } for (int i = 0; i < sources.size(); i++) { URL url = (URL) sources.get(i); @@ -184,10 +223,11 @@ URL newUrl = new URL(newPath); URLConnection connection = newUrl.openConnection(); connection.connect(); - lastModifiedDates.put(newUrl.toExternalForm(), - new Long(connection.getLastModified())); + lastModifiedDates.put(newUrl.toExternalForm(), + new Long(connection.getLastModified())); Map defsMap = reader.read(connection.getInputStream()); - definitions.addDefinitions(defsMap, locale); + definitions.addDefinitions(defsMap, + tilesContext.getRequestLocale()); } catch (FileNotFoundException e) { // File not found. continue. } catch (IOException e) { @@ -215,7 +255,7 @@ URL source = (URL) sources.get(i); URLConnection connection = source.openConnection(); connection.connect(); - lastModifiedDates.put(source.toExternalForm(), + lastModifiedDates.put(source.toExternalForm(), new Long(connection.getLastModified())); Map defsMap = reader.read(connection.getInputStream()); definitions.addDefinitions(defsMap); @@ -234,11 +274,11 @@ * isLoacaleProcessed before synchronizing the object and reading * locale-specific definitions. * - * @param locale The locale to check. + * @param tilesContext The Tiles context to check. * @return true if the given lcoale has been processed and false otherwise. */ - public boolean isLocaleProcessed(Locale locale) { - if (processedLocales.contains(locale)) { + protected boolean isContextProcessed(TilesContext tilesContext) { + if (processedLocales.contains(tilesContext.getRequestLocale())) { return true; } else { return false; @@ -253,7 +293,7 @@ * @param postfix Postfix to add. * @return Concatenated filename. */ - private String concatPostfix(String name, String postfix) { + protected String concatPostfix(String name, String postfix) { if (postfix == null) { return name; } @@ -277,7 +317,7 @@ * Method copied from java.util.ResourceBundle * @param locale the locale */ - private static List calculatePostixes(Locale locale) { + protected static List calculatePostixes(Locale locale) { final List result = new ArrayList(); final String language = locale.getLanguage(); final int languageLength = language.length(); Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java?view=diff&rev=464448&r1=464447&r2=464448 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/TestUrlDefinitionsFactory.java Mon Oct 16 04:33:35 2006 @@ -27,7 +27,9 @@ import junit.framework.TestSuite; import org.apache.tiles.definition.UrlDefinitionsFactory; import org.apache.tiles.mock.MockComponentDefinitions; +import org.apache.tiles.mock.MockPublicUrlDefinitionsFactory; import org.apache.tiles.mock.MockDefinitionsReader; +import org.apache.tiles.mock.MockOnlyLocaleTilesContext; /** * Tests the UrlDefinitionsFactory component. @@ -117,7 +119,7 @@ */ public void testReadByLocale() { try { - DefinitionsFactory factory = new UrlDefinitionsFactory(); + MockPublicUrlDefinitionsFactory factory = new MockPublicUrlDefinitionsFactory(); // Set up multiple data sources. URL url1 = this.getClass().getClassLoader().getResource( @@ -137,8 +139,10 @@ // Parse files. ComponentDefinitions definitions = factory.readDefinitions(); - factory.addDefinitions(definitions, Locale.US); - factory.addDefinitions(definitions, Locale.FRENCH); + factory.addDefinitions(definitions, + new MockOnlyLocaleTilesContext(Locale.US)); + factory.addDefinitions(definitions, + new MockOnlyLocaleTilesContext(Locale.FRENCH)); assertNotNull("test.def1 definition not found.", definitions.getDefinition("test.def1")); assertNotNull("test.def1 US definition not found.", definitions.getDefinition("test.def1", Locale.US)); @@ -164,7 +168,7 @@ */ public void testIsLocaleProcessed() { try { - DefinitionsFactory factory = new UrlDefinitionsFactory(); + MockPublicUrlDefinitionsFactory factory = new MockPublicUrlDefinitionsFactory(); // Set up multiple data sources. URL url1 = this.getClass().getClassLoader().getResource( @@ -176,12 +180,14 @@ // Parse files. ComponentDefinitions definitions = factory.readDefinitions(); + TilesContext tilesContext = + new MockOnlyLocaleTilesContext(Locale.US); assertFalse("Locale should not be processed.", - factory.isLocaleProcessed(Locale.US)); + factory.isContextProcessed(tilesContext)); - factory.addDefinitions(definitions, Locale.US); - assertTrue("Locale should be processed.", - factory.isLocaleProcessed(Locale.US)); + factory.addDefinitions(definitions, tilesContext); + assertTrue("Locale should be processed.", + factory.isContextProcessed(tilesContext)); } catch (Exception e) { fail("Error running test: " + e); Added: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockOnlyLocaleTilesContext.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockOnlyLocaleTilesContext.java?view=auto&rev=464448 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockOnlyLocaleTilesContext.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockOnlyLocaleTilesContext.java Mon Oct 16 04:33:35 2006 @@ -0,0 +1,103 @@ +/* + * $Id: MockOnlyLocaleTilesContext.java 350273 2005-12-01 16:50:58Z greddin $ + * + * Copyright 1999-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.tiles.mock; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Locale; +import java.util.Map; + +import org.apache.tiles.TilesContext; + +/** + * Creates a TilesContext that contains only a Locale + * + * @version $Rev: 350273 $ $Date: 2005-12-01 17:50:58 +0100 (gio, 01 dic 2005) $ + */ +public class MockOnlyLocaleTilesContext implements TilesContext { + + /** + * The locale object. + */ + private Locale locale; + + /** Creates a new instance of MockOnlyLocaleTilesContext. + * + * @param locale The locale object to use. + */ + public MockOnlyLocaleTilesContext(Locale locale) { + this.locale = locale; + } + + /** + * Returns the locale specified in the constructor. + * + * @see org.apache.tiles.TilesContext#getRequestLocale() + */ + public Locale getRequestLocale() { + return locale; + } + + // The rest of the implemented methods has a "dummy" behaviour, doing + // nothing or returning null, because they are not needed at all in tests + // that use this class. + + public void dispatch(String path) throws IOException, Exception { + } + + public Map getApplicationScope() { + return null; + } + + public Map getHeader() { + return null; + } + + public Map getHeaderValues() { + return null; + } + + public Map getInitParams() { + return null; + } + + public Map getParam() { + return null; + } + + public Map getParamValues() { + return null; + } + + public Map getRequestScope() { + return null; + } + + public URL getResource(String path) throws MalformedURLException { + return null; + } + + public Map getSessionScope() { + return null; + } + + public void include(String path) throws IOException, Exception { + } +} Added: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockPublicUrlDefinitionsFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockPublicUrlDefinitionsFactory.java?view=auto&rev=464448 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockPublicUrlDefinitionsFactory.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/mock/MockPublicUrlDefinitionsFactory.java Mon Oct 16 04:33:35 2006 @@ -0,0 +1,56 @@ +/* + * $Id: MockPublicUrlDefinitionsFactory.java 350273 2005-12-01 16:50:58Z greddin $ + * + * Copyright 1999-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.tiles.mock; + +import org.apache.tiles.ComponentDefinitions; +import org.apache.tiles.DefinitionsFactoryException; +import org.apache.tiles.TilesContext; +import org.apache.tiles.definition.UrlDefinitionsFactory; + +/** + * Mock implementation of UrlDefinitionsFactory that exposes two of its methods + * as public instead of protected. + * + * @version $Rev: 307013 $ $Date: 2005-10-07 06:49:50 +0200 (ven, 07 ott 2005) $ + */ +public class MockPublicUrlDefinitionsFactory extends UrlDefinitionsFactory { + + /** + * Exposes the <code>addDefinitions</code> method of + * <code>UrlDefinitionsFactory</code> + * + * @see org.apache.tiles.definition.UrlDefinitionsFactory#addDefinitions(org.apache.tiles.ComponentDefinitions, + * org.apache.tiles.TilesContext) + */ + public void addDefinitions(ComponentDefinitions definitions, + TilesContext tilesContext) throws DefinitionsFactoryException { + super.addDefinitions(definitions, tilesContext); + } + + /** + * + * Exposes the <code>isContextProcessed</code> method of + * <code>UrlDefinitionsFactory</code> + * + * @see org.apache.tiles.definition.UrlDefinitionsFactory#isContextProcessed(org.apache.tiles.TilesContext) + */ + public boolean isContextProcessed(TilesContext tilesContext) { + return super.isContextProcessed(tilesContext); + } +}