You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/02/11 21:26:12 UTC
svn commit: r506120 - in /tapestry/tapestry5/tapestry-core/trunk/src:
main/java/org/apache/tapestry/beaneditor/ main/java/org/apache/tapestry/grid/
main/java/org/apache/tapestry/internal/beaneditor/
main/java/org/apache/tapestry/internal/grid/ main/jav...
Author: hlship
Date: Sun Feb 11 12:26:11 2007
New Revision: 506120
URL: http://svn.apache.org/viewvc?view=rev&rev=506120
Log:
Make use of new tapestry-ioc utility classes: Stack and CaseInsensitiveMap.
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridDataModel.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/grid/GridDataModelImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassLocatorImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/HeartbeatImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureManagerImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MessagesSourceImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/InfrastructureManager.java
tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/coercion.apt
tapestry/tapestry5/tapestry-core/trunk/src/site/apt/index.apt
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InjectDemo.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/services/MusicLibraryParser.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/beaneditor/BeanEditorModel.java Sun Feb 11 12:26:11 2007
@@ -35,7 +35,7 @@
* Returns the named model.
*
* @param propertyName
- * name of property to retrieve model for
+ * name of property to retrieve model for (case is ignored)
* @return the model for the property
* @throws RuntimeException
* if the bean editor model does not have a property model for the provided name
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridDataModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridDataModel.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridDataModel.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/grid/GridDataModel.java Sun Feb 11 12:26:11 2007
@@ -37,7 +37,7 @@
* Returns the named column model.
*
* @param name
- * the name of the column to retrieve
+ * the name of the column to retrieve (case is ignored)
* @return the named column
* @throws RuntimeException
* if no such column exists
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/beaneditor/BeanEditorModelImpl.java Sun Feb 11 12:26:11 2007
@@ -14,8 +14,8 @@
package org.apache.tapestry.internal.beaneditor;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
import java.util.Collections;
import java.util.Comparator;
@@ -40,7 +40,7 @@
private final Messages _messages;
- private final Map<String, PropertyEditModel> _properties = newMap();
+ private final Map<String, PropertyEditModel> _properties = newCaseInsensitiveMap();
public BeanEditorModelImpl(Class beanType, PropertyConduitSource propertyConduitSource,
TypeCoercer typeCoercer, Messages messages)
@@ -75,7 +75,7 @@
propertyName), _typeCoercer);
}
- public PropertyEditModel edit(String propertyName)
+ public PropertyEditModel get(String propertyName)
{
PropertyEditModel propertyModel = _properties.get(propertyName);
@@ -88,15 +88,12 @@
return propertyModel;
}
- public PropertyEditModel get(String propertyName)
- {
- return edit(propertyName);
- }
-
public List<String> getPropertyNames()
{
List<PropertyEditModel> propertyModels = newList(_properties.values());
+ // Sort the list of models by their order property.
+
Collections.sort(propertyModels, this);
List<String> result = newList();
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/grid/GridDataModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/grid/GridDataModelImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/grid/GridDataModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/grid/GridDataModelImpl.java Sun Feb 11 12:26:11 2007
@@ -14,8 +14,8 @@
package org.apache.tapestry.internal.grid;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
import static org.apache.tapestry.ioc.internal.util.Defense.notBlank;
import static org.apache.tapestry.ioc.internal.util.Defense.notNull;
@@ -38,7 +38,7 @@
private final PropertyConduitSource _propertyConduitSource;
- private final Map<String, ColumnModel> _columns = newMap();
+ private final Map<String, ColumnModel> _columns = newCaseInsensitiveMap();
public GridDataModelImpl(final Class rowType, final Messages messages,
final PropertyConduitSource propertyConduitSource)
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/model/MutableComponentModelImpl.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -14,6 +14,7 @@
package org.apache.tapestry.internal.model;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
import static org.apache.tapestry.ioc.internal.util.Defense.notBlank;
@@ -107,21 +108,19 @@
notBlank(name, "name");
notBlank(defaultBindingPrefix, "defaultBindingPrefix");
- String caseless = name.toLowerCase();
-
// TODO: Check for conflict with base model
if (_parameters == null)
- _parameters = newMap();
+ _parameters = newCaseInsensitiveMap();
else
{
- if (_parameters.containsKey(caseless))
+ if (_parameters.containsKey(name))
throw new IllegalArgumentException(ModelMessages.duplicateParameter(
name,
_componentClassName));
}
- _parameters.put(caseless, new ParameterModelImpl(name, required, defaultBindingPrefix));
+ _parameters.put(name, new ParameterModelImpl(name, required, defaultBindingPrefix));
}
public ParameterModel getParameterModel(String parameterName)
@@ -160,7 +159,7 @@
// TODO: Parent compent model? Or would we simply override the parent?
if (_embeddedComponents == null)
- _embeddedComponents = newMap();
+ _embeddedComponents = newCaseInsensitiveMap();
else if (_embeddedComponents.containsKey(id))
throw new IllegalArgumentException(ModelMessages.duplicateComponentId(
id,
@@ -290,7 +289,7 @@
notBlank(value, "value");
if (_metaData == null)
- _metaData = newMap();
+ _metaData = newCaseInsensitiveMap();
// TODO: Error if duplicate?
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassLocatorImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassLocatorImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassLocatorImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassLocatorImpl.java Sun Feb 11 12:26:11 2007
@@ -14,8 +14,6 @@
package org.apache.tapestry.internal.services;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newLinkedList;
-
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -27,11 +25,11 @@
import java.net.URLConnection;
import java.util.Collection;
import java.util.Enumeration;
-import java.util.LinkedList;
import java.util.jar.JarEntry;
import org.apache.tapestry.internal.TapestryUtils;
import org.apache.tapestry.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry.ioc.util.Stack;
public class ComponentClassLocatorImpl implements ComponentClassLocator
{
@@ -92,13 +90,13 @@
// Otherwise, we're forced to assume that it is a file: URL for files in the user's
// workspace.
- LinkedList<Queued> queue = newLinkedList();
+ Stack<Queued> queue = CollectionFactory.newStack();
- queue.addFirst(new Queued(url, packagePath));
+ queue.push(new Queued(url, packagePath));
while (!queue.isEmpty())
{
- Queued queued = queue.removeFirst();
+ Queued queued = queue.pop();
scan(queued._packagePath, queued._packageURL, componentClassNames, queue);
}
@@ -106,7 +104,7 @@
}
private void scan(String packagePath, URL packageURL, Collection<String> componentClassNames,
- LinkedList<Queued> queue) throws IOException
+ Stack<Queued> queue) throws IOException
{
InputStream is = new BufferedInputStream(packageURL.openStream());
Reader reader = new InputStreamReader(is);
@@ -151,7 +149,7 @@
URL newURL = new URL(packageURL.toExternalForm() + line + "/");
String newPackagePath = packagePath + line + "/";
- queue.addFirst(new Queued(newURL, newPackagePath));
+ queue.push(new Queued(newURL, newPackagePath));
}
lineReader.close();
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentClassResolverImpl.java Sun Feb 11 12:26:11 2007
@@ -14,6 +14,7 @@
package org.apache.tapestry.internal.services;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
@@ -42,7 +43,7 @@
// Map from folder name to a list of root package names.
// The key does not begin or end with a slash.
- private final Map<String, List<String>> _mappings = newMap();
+ private final Map<String, List<String>> _mappings = newCaseInsensitiveMap();
// Flag indicating that the maps have been cleared following an invalidation
// and need to be rebuilt. The flag and the four maps below are not synchronized
@@ -53,12 +54,13 @@
private boolean _rebuild = true;
- private final Map<String, String> _pageToClassName = newMap();
+ private final Map<String, String> _pageToClassName = newCaseInsensitiveMap();
- private final Map<String, String> _componentToClassName = newMap();
+ private final Map<String, String> _componentToClassName = newCaseInsensitiveMap();
- private final Map<String, String> _mixinToClassName = newMap();
+ private final Map<String, String> _mixinToClassName = newCaseInsensitiveMap();
+ /** This one is case sensitive, since class names do always have a particular case. */
private final Map<String, String> _pageClassNameToLogicalName = newMap();
public ComponentClassResolverImpl(ComponentInstantiatorSource componentInstantiatorSource,
@@ -136,12 +138,16 @@
private void rebuild(String pathPrefix, String rootPackage)
{
- fillCaselessMap(pathPrefix, rootPackage, PAGES_SUBPACKAGE, _pageToClassName);
- fillCaselessMap(pathPrefix, rootPackage, COMPONENTS_SUBPACKAGE, _componentToClassName);
- fillCaselessMap(pathPrefix, rootPackage, MIXINS_SUBPACKAGE, _mixinToClassName);
+ fillNameToClassNameMap(pathPrefix, rootPackage, PAGES_SUBPACKAGE, _pageToClassName);
+ fillNameToClassNameMap(
+ pathPrefix,
+ rootPackage,
+ COMPONENTS_SUBPACKAGE,
+ _componentToClassName);
+ fillNameToClassNameMap(pathPrefix, rootPackage, MIXINS_SUBPACKAGE, _mixinToClassName);
}
- private void fillCaselessMap(String pathPrefix, String rootPackage, String subPackage,
+ private void fillNameToClassNameMap(String pathPrefix, String rootPackage, String subPackage,
Map<String, String> logicalNameToClassName)
{
String searchPackage = rootPackage + "." + subPackage;
@@ -161,7 +167,7 @@
if (isPage)
_pageClassNameToLogicalName.put(name, logicalName);
- logicalNameToClassName.put(logicalName.toLowerCase(), name);
+ logicalNameToClassName.put(logicalName, name);
}
}
@@ -215,15 +221,13 @@
{
rebuild();
- String key = logicalName.toLowerCase();
-
- String result = logicalNameToClassName.get(key);
+ String result = logicalNameToClassName.get(logicalName);
// If not found, see if it exists under the core package. In this way,
// anything in core is "inherited" (but overridable) by the application.
if (result == null)
- result = logicalNameToClassName.get("core/" + key);
+ result = logicalNameToClassName.get("core/" + logicalName);
return result;
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/HeartbeatImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/HeartbeatImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/HeartbeatImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/HeartbeatImpl.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -14,37 +14,37 @@
package org.apache.tapestry.internal.services;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newLinkedList;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newStack;
-import java.util.LinkedList;
import java.util.List;
import org.apache.tapestry.ioc.internal.util.CollectionFactory;
import org.apache.tapestry.ioc.internal.util.Defense;
+import org.apache.tapestry.ioc.util.Stack;
import org.apache.tapestry.services.Heartbeat;
public class HeartbeatImpl implements Heartbeat
{
- private final LinkedList<List<Runnable>> _stack = newLinkedList();
+ private final Stack<List<Runnable>> _stack = newStack();
public void begin()
{
List<Runnable> beat = CollectionFactory.newList();
- _stack.addFirst(beat);
+ _stack.push(beat);
}
public void defer(Runnable command)
{
Defense.notNull(command, "command");
- _stack.getFirst().add(command);
+ _stack.peek().add(command);
}
public void end()
{
- List<Runnable> beat = _stack.removeFirst();
+ List<Runnable> beat = _stack.pop();
for (Runnable r : beat)
r.run();
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureImpl.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -12,81 +12,73 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry.internal.services;
-
-import java.util.Map;
-
-import org.apache.tapestry.ioc.ObjectProvider;
-import org.apache.tapestry.ioc.ServiceLocator;
-import org.apache.tapestry.ioc.internal.util.Defense;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.InfrastructureManager;
-
-/**
- * TODO: Extra configuration to support application overrides.
- */
-public class InfrastructureImpl implements Infrastructure, ObjectProvider
-{
- private InfrastructureManager _manager;
-
- // Derived from the manager when first needed
-
- private Map<String, Object> _properties;
-
- private String _mode;
-
- public InfrastructureImpl(InfrastructureManager manager)
- {
- _manager = manager;
- }
-
- public ObjectProvider getObjectProvider()
- {
- return this;
- }
-
- // Probably don't need to make this concurrent, since it executes at startup,
- // before multithreading takes hold.
-
- public synchronized void setMode(String mode)
- {
- _mode = Defense.notNull(mode, "mode");
-
- deriveProperties();
- }
-
- private void deriveProperties()
- {
- _properties = _manager.getContributionsForMode(_mode);
-
- // Don't need this again.
-
- _manager = null;
- }
-
- public <T> T provide(String expression, Class<T> objectType, ServiceLocator locator)
- {
- if (_properties == null)
- throw new RuntimeException(ServicesMessages.infrastructureModeNotSet());
-
- Object object = _properties.get(expression);
-
- if (object == null)
- throw new RuntimeException(ServicesMessages.infrastructurePropertyNotFound(
- expression,
- _properties.keySet()));
-
- try
- {
- return objectType.cast(object);
- }
- catch (ClassCastException ex)
- {
- throw new RuntimeException(ServicesMessages.infrastructurePropertyWrongType(
- expression,
- object,
- objectType), ex);
- }
- }
-
-}
+package org.apache.tapestry.internal.services;
+
+import static org.apache.tapestry.ioc.internal.util.Defense.notNull;
+
+import java.util.Map;
+
+import org.apache.tapestry.ioc.ObjectProvider;
+import org.apache.tapestry.ioc.ServiceLocator;
+import org.apache.tapestry.services.Infrastructure;
+import org.apache.tapestry.services.InfrastructureManager;
+
+/**
+ * TODO: Extra configuration to support application overrides.
+ */
+public class InfrastructureImpl implements Infrastructure, ObjectProvider
+{
+ private final InfrastructureManager _manager;
+
+ // Derived from the manager when first needed
+
+ private Map<String, Object> _properties;
+
+ private String _mode;
+
+ public InfrastructureImpl(InfrastructureManager manager)
+ {
+ _manager = manager;
+ }
+
+ public ObjectProvider getObjectProvider()
+ {
+ return this;
+ }
+
+ // Probably don't need to make this concurrent, since it executes at startup,
+ // before multithreading takes hold.
+
+ public synchronized void setMode(String mode)
+ {
+ _mode = notNull(mode, "mode");
+
+ _properties = _manager.getContributionsForMode(_mode);
+ }
+
+ public <T> T provide(String expression, Class<T> objectType, ServiceLocator locator)
+ {
+ if (_properties == null)
+ throw new RuntimeException(ServicesMessages.infrastructureModeNotSet());
+
+ Object object = _properties.get(expression);
+
+ if (object == null)
+ throw new RuntimeException(ServicesMessages.infrastructurePropertyNotFound(
+ expression,
+ _properties.keySet()));
+
+ try
+ {
+ return objectType.cast(object);
+ }
+ catch (ClassCastException ex)
+ {
+ throw new RuntimeException(ServicesMessages.infrastructurePropertyWrongType(
+ expression,
+ object,
+ objectType), ex);
+ }
+ }
+
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureManagerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureManagerImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureManagerImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InfrastructureManagerImpl.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -12,66 +12,64 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry.internal.services;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.tapestry.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry.services.InfrastructureContribution;
-import org.apache.tapestry.services.InfrastructureManager;
-
-/**
- *
- */
-public class InfrastructureManagerImpl implements InfrastructureManager
-{
- private final Log _log;
-
- private final Collection<InfrastructureContribution> _contributions;
-
- public InfrastructureManagerImpl(Log log, Collection<InfrastructureContribution> contributions)
- {
- _log = log;
- _contributions = contributions;
- }
-
- public Map<String, Object> getContributionsForMode(String mode)
- {
- Map<String, Object> general = buildMapForMode("");
- Map<String, Object> specific = buildMapForMode(mode);
-
- // Anything in specific overrides anything in general
-
- general.putAll(specific);
-
- return general;
- }
-
- private Map<String, Object> buildMapForMode(String mode)
- {
- Map<String, Object> result = CollectionFactory.newMap();
-
- for (InfrastructureContribution ic : _contributions)
- {
- if (!ic.getMode().equals(mode))
- continue;
-
- String name = ic.getName();
-
- Object existing = result.get(name);
-
- if (existing != null)
- {
- _log.warn(ServicesMessages.duplicateContribution(ic.getObject(), name, existing));
- continue;
- }
-
- result.put(name, ic.getObject());
- }
-
- return result;
- }
-
-}
+package org.apache.tapestry.internal.services;
+
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.tapestry.services.InfrastructureContribution;
+import org.apache.tapestry.services.InfrastructureManager;
+
+public class InfrastructureManagerImpl implements InfrastructureManager
+{
+ private final Log _log;
+
+ private final Collection<InfrastructureContribution> _contributions;
+
+ public InfrastructureManagerImpl(Log log, Collection<InfrastructureContribution> contributions)
+ {
+ _log = log;
+ _contributions = contributions;
+ }
+
+ public Map<String, Object> getContributionsForMode(String mode)
+ {
+ Map<String, Object> general = buildMapForMode("");
+ Map<String, Object> specific = buildMapForMode(mode);
+
+ // Anything in specific overrides anything in general
+
+ general.putAll(specific);
+
+ return general;
+ }
+
+ private Map<String, Object> buildMapForMode(String mode)
+ {
+ Map<String, Object> result = newCaseInsensitiveMap();
+
+ for (InfrastructureContribution ic : _contributions)
+ {
+ if (!ic.getMode().equals(mode))
+ continue;
+
+ String name = ic.getName();
+
+ Object existing = result.get(name);
+
+ if (existing != null)
+ {
+ _log.warn(ServicesMessages.duplicateContribution(ic.getObject(), name, existing));
+ continue;
+ }
+
+ result.put(name, ic.getObject());
+ }
+
+ return result;
+ }
+
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.services;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import java.util.List;
import java.util.Map;
@@ -377,7 +377,7 @@
{
BindingFactory keywordFactory = new BindingFactory()
{
- private final Map<String, Object> _keywords = newMap();
+ private final Map<String, Object> _keywords = newCaseInsensitiveMap();
{
_keywords.put("true", Boolean.TRUE);
@@ -388,7 +388,7 @@
public Binding newBinding(String description, ComponentResources container,
ComponentResources component, String expression, Location location)
{
- String key = expression.trim().toLowerCase();
+ String key = expression.trim();
if (_keywords.containsKey(key))
return new LiteralBinding(description, _keywords.get(key), location);
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MessagesSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MessagesSourceImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MessagesSourceImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/MessagesSourceImpl.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -14,8 +14,8 @@
package org.apache.tapestry.internal.services;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newThreadSafeMap;
import java.io.BufferedInputStream;
@@ -172,7 +172,7 @@
// Make a copy of the base Map
- Map<String, String> result = newMap(base);
+ Map<String, String> result = newCaseInsensitiveMap(base);
// Add or overwrite properties to the copy
@@ -207,7 +207,7 @@
_tracker.add(url);
- Map<String, String> result = newMap();
+ Map<String, String> result = newCaseInsensitiveMap();
Properties p = new Properties();
InputStream is = null;
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLoaderProcessor.java Sun Feb 11 12:26:11 2007
@@ -14,11 +14,10 @@
package org.apache.tapestry.internal.services;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newLinkedList;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newStack;
import static org.apache.tapestry.ioc.internal.util.InternalUtils.isBlank;
import static org.apache.tapestry.ioc.internal.util.InternalUtils.isNonBlank;
-import java.util.LinkedList;
import java.util.Locale;
import java.util.Set;
@@ -49,6 +48,7 @@
import org.apache.tapestry.ioc.internal.util.IdAllocator;
import org.apache.tapestry.ioc.internal.util.OneShotLock;
import org.apache.tapestry.ioc.internal.util.TapestryException;
+import org.apache.tapestry.ioc.util.Stack;
import org.apache.tapestry.model.ComponentModel;
import org.apache.tapestry.model.EmbeddedComponentModel;
import org.apache.tapestry.services.BindingSource;
@@ -67,19 +67,20 @@
}
};
- private LinkedList<ComponentPageElement> _activeElementStack = newLinkedList();
+ private Stack<ComponentPageElement> _activeElementStack = newStack();
private boolean _addAttributesAsComponentBindings = false;
private final BindingSource _bindingSource;
- private final LinkedList<BodyPageElement> _bodyPageElementStack = newLinkedList();
+ private final Stack<BodyPageElement> _bodyPageElementStack = newStack();
- private final LinkedList<ComponentPageElement> _componentQueue = newLinkedList();
+ // You can use a stack as a queue
+ private final Stack<ComponentPageElement> _componentQueue = newStack();
- private final LinkedList<Boolean> _discardEndTagStack = newLinkedList();
+ private final Stack<Boolean> _discardEndTagStack = newStack();
- private final LinkedList<Runnable> _endElementCommandStack = newLinkedList();
+ private final Stack<Runnable> _endElementCommandStack = newStack();
private final IdAllocator _idAllocator = new IdAllocator();
@@ -266,8 +267,8 @@
*/
private void configureEnd(boolean discard, Runnable command)
{
- _discardEndTagStack.addFirst(discard);
- _endElementCommandStack.addFirst(command);
+ _discardEndTagStack.push(discard);
+ _endElementCommandStack.push(command);
}
private void endElement(EndElementToken token)
@@ -275,7 +276,7 @@
// discard will be false if the matching start token was for a static element, and will be
// true otherwise (component, block, parameter).
- boolean discard = _discardEndTagStack.removeFirst();
+ boolean discard = _discardEndTagStack.pop();
if (!discard)
{
@@ -284,7 +285,7 @@
addToBody(element);
}
- Runnable command = _endElementCommandStack.removeFirst();
+ Runnable command = _endElementCommandStack.pop();
// Used to return environment to prior state.
@@ -349,7 +350,7 @@
_page.setRootElement(rootComponent);
- _componentQueue.addFirst(rootComponent);
+ _componentQueue.push(rootComponent);
}
/**
@@ -410,7 +411,7 @@
}
};
- _bodyPageElementStack.addFirst(shunt);
+ _bodyPageElementStack.push(shunt);
for (TemplateToken token : template.getTokens())
{
@@ -463,7 +464,7 @@
// For neatness / symmetry:
- _bodyPageElementStack.removeFirst(); // the shunt
+ _bodyPageElementStack.pop(); // the shunt
// TODO: Check that all stacks are empty. That should never happen, as long
// as the ComponentTemplate is valid.
@@ -485,13 +486,13 @@
private void setupBlock(BodyPageElement block)
{
- _bodyPageElementStack.addFirst(block);
+ _bodyPageElementStack.push(block);
Runnable cleanup = new Runnable()
{
public void run()
{
- _bodyPageElementStack.removeFirst();
+ _bodyPageElementStack.pop();
}
};
@@ -576,7 +577,7 @@
addToBody(newComponent);
// Remember to load the template for this new component
- _componentQueue.addFirst(newComponent);
+ _componentQueue.push(newComponent);
// Any attribute tokens that immediately follow should be
// used to bind parameters.
@@ -585,11 +586,11 @@
// Any attributes (including component parameters) that come up belong on this component.
- _activeElementStack.addFirst(newComponent);
+ _activeElementStack.push(newComponent);
// Set things up so that content inside the component is added to the component's body.
- _bodyPageElementStack.addFirst(newComponent);
+ _bodyPageElementStack.push(newComponent);
// And clean that up when the end element is reached.
@@ -597,8 +598,8 @@
{
public void run()
{
- _activeElementStack.removeFirst();
- _bodyPageElementStack.removeFirst();
+ _activeElementStack.pop();
+ _bodyPageElementStack.pop();
}
};
@@ -635,7 +636,7 @@
{
while (!_componentQueue.isEmpty())
{
- ComponentPageElement componentElement = _componentQueue.removeFirst();
+ ComponentPageElement componentElement = _componentQueue.pop();
loadTemplateForComponent(componentElement);
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -14,18 +14,17 @@
package org.apache.tapestry.internal.services;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newLinkedList;
-
-import java.util.LinkedList;
-
import org.apache.commons.logging.Log;
import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.ioc.util.Stack;
import org.apache.tapestry.runtime.RenderCommand;
import org.apache.tapestry.runtime.RenderQueue;
public class RenderQueueImpl implements RenderQueue
{
- private final LinkedList<RenderCommand> _queue = newLinkedList();
+ private static final int INITIAL_QUEUE_DEPTH = 100;
+
+ private final Stack<RenderCommand> _queue = new Stack<RenderCommand>(INITIAL_QUEUE_DEPTH);
private final Log _log;
@@ -36,7 +35,7 @@
public void push(RenderCommand command)
{
- _queue.addFirst(command);
+ _queue.push(command);
}
public void run(MarkupWriter writer)
@@ -50,7 +49,7 @@
{
while (!_queue.isEmpty())
{
- command = _queue.removeFirst();
+ command = _queue.pop();
if (_log.isDebugEnabled())
_log.debug(String.format("Executing: %s", command));
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java Sun Feb 11 12:26:11 2007
@@ -14,8 +14,8 @@
package org.apache.tapestry.internal.structure;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
import static org.apache.tapestry.ioc.internal.util.Defense.notBlank;
import java.util.Iterator;
@@ -590,17 +590,15 @@
public void addEmbeddedElement(ComponentPageElement child)
{
if (_children == null)
- _children = newMap();
+ _children = newCaseInsensitiveMap();
- String childId = child.getId().toLowerCase();
+ String childId = child.getId();
ComponentPageElement existing = _children.get(childId);
if (existing != null)
throw new TapestryException(StructureMessages.duplicateChildComponent(this, childId),
child, null);
- // TODO: Check for conflicts!
-
_children.put(childId, child);
}
@@ -608,7 +606,7 @@
{
if (_mixinsByShortName == null)
{
- _mixinsByShortName = newMap();
+ _mixinsByShortName = newCaseInsensitiveMap();
_components = newList();
}
@@ -1051,7 +1049,7 @@
{
notBlank(id, "id");
- Block result = InternalUtils.get(_blocks, id.toLowerCase());
+ Block result = InternalUtils.get(_blocks, id);
if (result == null)
throw new BlockNotFoundException(StructureMessages.blockNotFound(_completeId, id),
@@ -1063,15 +1061,13 @@
public void addBlock(String blockId, Block block)
{
if (_blocks == null)
- _blocks = newMap();
-
- String caselessId = blockId.toLowerCase();
+ _blocks = newCaseInsensitiveMap();
- if (_blocks.containsKey(caselessId))
+ if (_blocks.containsKey(blockId))
throw new TapestryException(StructureMessages.duplicateBlock(this, blockId), block,
null);
- _blocks.put(caselessId, block);
+ _blocks.put(blockId, block);
}
public String getDefaultBindingPrefix(String parameterName)
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java Sun Feb 11 12:26:11 2007
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.structure;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
import java.util.Locale;
import java.util.Map;
@@ -55,6 +55,7 @@
private final ComponentResources _containerResources;
+ // Case insensitive
private Map<String, Binding> _bindings;
private final ComponentMessagesSource _messagesSource;
@@ -170,9 +171,9 @@
public void bindParameter(String parameterName, Binding binding)
{
if (_bindings == null)
- _bindings = newMap();
+ _bindings = newCaseInsensitiveMap();
- _bindings.put(parameterName.toLowerCase(), binding);
+ _bindings.put(parameterName, binding);
}
@SuppressWarnings("unchecked")
@@ -229,7 +230,7 @@
private Binding getBinding(String parameterName)
{
- return _bindings == null ? null : _bindings.get(parameterName.toLowerCase());
+ return _bindings == null ? null : _bindings.get(parameterName);
}
public AnnotationProvider getAnnotationProvider(String parameterName)
@@ -255,7 +256,7 @@
for (String name : _bindings.keySet())
{
// Skip all formal parameters.
-
+
if (_componentModel.getParameterModel(name) != null)
continue;
@@ -333,10 +334,8 @@
if (_bindings == null)
return null;
- String key = parameterName.toLowerCase();
-
- if (_bindings.containsKey(key))
- return (Block) _bindings.get(key).get();
+ if (_bindings.containsKey(parameterName))
+ return (Block) _bindings.get(parameterName).get();
return null;
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/InfrastructureManager.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/InfrastructureManager.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/InfrastructureManager.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/InfrastructureManager.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -12,25 +12,23 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry.services;
-
-import java.util.Map;
-
-/**
- * A thin wrapper around a set of {@link org.apache.tapestry.services.InfrastructureContribution}s.
- *
- *
- */
-public interface InfrastructureManager
-{
- /**
- * Filters down the contributions based on the mode. Each contribution will identify a name and
- * object and may identify a mode. Only contributions where the mode is blank or the mode
- * matches the provided mode are returned. Mode specific contributions quietly override
- * non-specific contributions (where the mode is blank).
- *
- * @param mode
- * @return
- */
- Map<String, Object> getContributionsForMode(String mode);
-}
+package org.apache.tapestry.services;
+
+import java.util.Map;
+
+/**
+ * A thin wrapper around a set of {@link org.apache.tapestry.services.InfrastructureContribution}s.
+ */
+public interface InfrastructureManager
+{
+ /**
+ * Filters down the contributions based on the mode. Each contribution will identify a name and
+ * object and may identify a mode. Only contributions where the mode is blank or the mode
+ * matches the provided mode are returned. Mode specific contributions quietly override
+ * non-specific contributions (where the mode is blank).
+ *
+ * @param mode
+ * @return
+ */
+ Map<String, Object> getContributionsForMode(String mode);
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/coercion.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/coercion.apt?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/coercion.apt (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/coercion.apt Sun Feb 11 12:26:11 2007
@@ -42,49 +42,10 @@
TypeCoercer Service
- The {{{../apidoc/org/apache/tapestry/ioc/services/TypeCoercer.html}tapestry.ioc.TypeCoercer}} service
- is responsible for this type coercion.
+ The tapestry.ioc.TypeCoercer service
+ is responsible for this type coercion. This service is part of the tapestry-ioc module, and
+ is {{{http://tapestry.apache.org/tapestry5/tapestry-ioc/coerce.html}documented there}}. The service
+ is quite extensible, allowing for new types and coercions to be added easily.
- The service is quite flexible; it is configured with a
- basic set of coercions
- for common cases, such as String --\> Long or Object --\> String, and can automatically
- discover more complex coercions (for example, StringBuffer --\> String --\> Long --\> Integer).
-
- The service's configuration is a collection of
- {{{../apidoc/org/apache/tapestry/ioc/service/CoercionTuple.html}CoercionTuple}}s. Each of
- these tuples defines a source type, a target type, and a bit of code to perform the coersion.
-
- An example tuple, to convert from a String to a Double:
-
-+---+
-new CoercionTuple<String,Double>(String.class, Double.class,
- new Coercer<String,Double>()
- {
- public Double coerce(String input)
- {
- return new Double(input);
- }
- }
-);
-+---+
-
- As a special case, the service treats null input values as if they were instances of the special type Void.
- This allows tuples for converting nulls:
-
-+---+
-new CoercionTuple<Void,Boolean>(Void.class, Boolean.class,
- new Coercer<String,Boolean>()
- {
- public Boolean coerce(Void input)
- {
- return false;
- }
- }
-);
-+---+
-
-Contributing New Coercions
-
- To be documented.
Modified: tapestry/tapestry5/tapestry-core/trunk/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/site/apt/index.apt?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/site/apt/index.apt (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/site/apt/index.apt Sun Feb 11 12:26:11 2007
@@ -38,6 +38,10 @@
Progress on Tapestry 5 is really taking off. This space lists some cool new features that have been added
recently.
+ * Named-based lookups of messages, resources, etc., are all case-insensitive.
+
+ * Fast, smart, fully customizable Grid component for displaying tabular data.
+
* Validating form components will use the same system as BeanEditForm to determine default validation for fields.
* Select component will automatically provide a ValueEncoder and SelectModel when the value parameter is bound to an Enum type.
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InjectDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InjectDemo.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InjectDemo.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/InjectDemo.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -25,8 +25,8 @@
@ComponentClass
public class InjectDemo
{
- // Named
- @Inject("infrastructure:Request")
+ // Named --- now demonstrating case insensitivity
+ @Inject("Infrastructure:request")
private Request _request;
// Via ComponentResourcesInjectionProvider
@@ -41,7 +41,8 @@
@InjectPage
private Fred _fred;
- @InjectPage("Barney")
+ // Again, demonstrates case insensitivity
+ @InjectPage("barney")
private Runnable _barney;
public BindingSource getBindingSource()
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/services/MusicLibraryParser.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/services/MusicLibraryParser.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/services/MusicLibraryParser.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/services/MusicLibraryParser.java Sun Feb 11 12:26:11 2007
@@ -15,17 +15,17 @@
package org.apache.tapestry.integration.app1.services;
import static java.lang.String.format;
-import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newLinkedList;
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newList;
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newStack;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;
-import java.util.LinkedList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.tapestry.integration.app1.data.Track;
+import org.apache.tapestry.ioc.util.Stack;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -95,7 +95,7 @@
{
private final List<Track> _tracks = newList();
- private LinkedList<Item> _stack = newLinkedList();
+ private Stack<Item> _stack = newStack();
private int _state = STATE_START;
@@ -117,9 +117,7 @@
private void pop()
{
- _state = peek()._priorState;
-
- _stack.removeFirst();
+ _state = _stack.pop()._priorState;
}
private void push(int newState)
@@ -131,7 +129,7 @@
{
Item item = new Item(_state, ignoreCharacterData);
- _stack.addFirst(item);
+ _stack.push(item);
_state = newState;
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java Sun Feb 11 12:26:11 2007
@@ -223,6 +223,12 @@
assertSame(model.getEmbeddedComponentModel("fred"), fred);
assertSame(model.getEmbeddedComponentModel("barney"), barney);
+ // Access by id is case insensitive
+
+ assertSame(model.getEmbeddedComponentModel("FRED"), fred);
+ assertSame(model.getEmbeddedComponentModel("BARNEY"), barney);
+
+
assertEquals(
fred.toString(),
"EmbeddedComponentModel[id=fred type=Fred class=org.example.components.Fred]");
@@ -255,7 +261,33 @@
}
verify();
+ }
+
+ @Test
+ public void add_embedded_is_case_insensitive()
+ {
+ Resource r = newResource();
+ Log log = newLog();
+
+ replay();
+
+ MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, r, null);
+ model.addEmbeddedComponent("fred", "Fred1", COMPONENT_CLASS_NAME);
+
+ try
+ {
+ model.addEmbeddedComponent("FRED", "Fred2", COMPONENT_CLASS_NAME);
+ unreachable();
+ }
+ catch (IllegalArgumentException ex)
+ {
+ assertEquals(
+ ex.getMessage(),
+ "Embedded component 'FRED' has already been defined for component class org.example.components.Foo.");
+ }
+
+ verify();
}
@Test
@@ -641,6 +673,12 @@
assertEquals(model.getMeta("fred"), "flintstone");
assertEquals(model.getMeta("barney"), "rubble");
+
+ // Ensure case insensitive:
+
+ assertEquals(model.getMeta("FRED"), "flintstone");
+ assertEquals(model.getMeta("BARNEY"), "rubble");
+
verify();
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java Sun Feb 11 12:26:11 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 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.
@@ -109,6 +109,29 @@
assertEquals(messages.get("framework"), "Tapestry");
verify();
+ }
+
+ @Test
+ public void messages_keys_are_case_insensitive()
+ {
+ ComponentModel model = newComponentModel();
+
+ train_getComponentClassName(model, SIMPLE_COMPONENT_CLASS_NAME);
+
+ train_getBaseResource(model, _simpleComponentResource);
+
+ train_getParentModel(model, null);
+
+ replay();
+
+ forceCacheClear();
+
+ Messages messages = _source.getMessages(model, Locale.UK);
+
+ assertEquals(messages.get("COlor"), "colour");
+ assertEquals(messages.get("Framework"), "Tapestry");
+
+ verify();
}
@Test
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java?view=diff&rev=506120&r1=506119&r2=506120
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java Sun Feb 11 12:26:11 2007
@@ -452,7 +452,7 @@
catch (TapestryException ex)
{
assertTrue(ex.getMessage().contains(
- "already contains a child component with id 'child'."));
+ "already contains a child component with id 'CHILD'."));
}
verify();