Fifth pass creating the BeanModel and Commons packages. Initial testing looks good.
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/31208705 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/31208705 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/31208705 Branch: refs/heads/beanmodel-split Commit: 312087057c8ddfb463256ac4eec155f3afde4ac1 Parents: c7bf35c Author: Thiago H. de Paula Figueiredo <thiag...@apache.org> Authored: Sat Dec 6 20:29:20 2014 -0200 Committer: Thiago H. de Paula Figueiredo <thiag...@apache.org> Committed: Sat Dec 6 20:32:39 2014 -0200 ---------------------------------------------------------------------- .../org/apache/tapestry5/PropertyConduit2.java | 2 +- .../beaneditor/BeanModelSourceBuilder.java | 159 ++--- .../CoercingPropertyConduitWrapper.java | 8 +- .../services/LiteralPropertyConduit.java | 2 +- .../services/PropertyConduitSourceImpl.java | 46 +- .../services/ClassPropertyAdapterImpl.java | 92 +-- .../services/AnnotationDataTypeAnalyzer.java | 32 + .../ioc/internal/BasicDataTypeAnalyzers.java | 151 +++++ .../ioc/internal/util/InternalCommonsUtils.java | 608 +++++++++---------- .../internal/TapestryInternalUtils.java | 4 +- .../internal/bindings/AbstractBinding.java | 2 +- .../internal/bindings/PropBinding.java | 8 +- .../services/AnnotationDataTypeAnalyzer.java | 32 - .../InternalComponentResourcesImpl.java | 4 +- .../tapestry5/modules/TapestryModule.java | 14 +- .../app1/components/GenericTypeDisplay.java | 34 +- .../integration/app1/pages/GenericTypeDemo.java | 24 +- .../pages/GridWithSubmitWithContextDemo.java | 4 +- .../integration/app2/base/ChildBasePage.java | 8 +- .../integration/app2/base/ParentBasePage.java | 2 +- .../pagelevel/OverrideMethodsTest.java | 14 +- .../services/PropertyConduitSourceImplTest.java | 34 +- .../org/apache/tapestry5/json/JSONArray.java | 2 +- .../org/apache/tapestry5/json/JSONObject.java | 2 +- 24 files changed, 723 insertions(+), 565 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java ---------------------------------------------------------------------- diff --git a/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java b/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java index 839d70f..1577a3d 100644 --- a/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java +++ b/beanmodel/src/main/java/org/apache/tapestry5/PropertyConduit2.java @@ -36,5 +36,5 @@ public interface PropertyConduit2 extends PropertyConduit * @see java.lang.reflect.Field#getGenericType() * */ - Type getPropertyGenericType(); + Type getPropertyGenericType(); } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java ---------------------------------------------------------------------- diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java b/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java index 8cef66e..4ac3373 100644 --- a/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java +++ b/beanmodel/src/main/java/org/apache/tapestry5/beaneditor/BeanModelSourceBuilder.java @@ -15,15 +15,22 @@ package org.apache.tapestry5.beaneditor; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; import javax.naming.OperationNotSupportedException; +import javax.swing.JFrame; import org.apache.tapestry5.internal.services.BeanModelSourceImpl; import org.apache.tapestry5.internal.services.PropertyConduitSourceImpl; import org.apache.tapestry5.internal.services.StringInterner; import org.apache.tapestry5.internal.services.StringInternerImpl; import org.apache.tapestry5.ioc.Configuration; +import org.apache.tapestry5.ioc.MessageFormatter; +import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.ObjectLocator; +import org.apache.tapestry5.ioc.internal.BasicDataTypeAnalyzers; import org.apache.tapestry5.ioc.internal.BasicTypeCoercions; import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl; import org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl; @@ -31,6 +38,7 @@ import org.apache.tapestry5.ioc.internal.services.TypeCoercerImpl; import org.apache.tapestry5.ioc.services.CoercionTuple; import org.apache.tapestry5.ioc.services.PlasticProxyFactory; import org.apache.tapestry5.ioc.services.PropertyAccess; +import org.apache.tapestry5.ioc.services.PropertyAdapter; import org.apache.tapestry5.ioc.services.TypeCoercer; import org.apache.tapestry5.services.BeanModelSource; import org.apache.tapestry5.services.DataTypeAnalyzer; @@ -42,80 +50,89 @@ import org.slf4j.LoggerFactory; * Tapestry-IoC. Usage of Tapestry-IoC is still recommended. */ public class BeanModelSourceBuilder { - - private TypeCoercer typeCoercer; - private PropertyAccess propertyAccess; - private PropertyConduitSource propertyConduitSource; - private PlasticProxyFactory plasticProxyFactory; - private DataTypeAnalyzer dataTypeAnalyzer; - private ObjectLocator objectLocator; - private StringInterner stringInterner; - /** - * Sets the {@link TypeCoercer} to be used. - */ - public BeanModelSourceBuilder setTypeCoercer(TypeCoercer typeCoercer) { - this.typeCoercer = typeCoercer; -// propertyAccess = new PropertyAcc - return this; - } + private TypeCoercer typeCoercer; + private PropertyAccess propertyAccess; + private PropertyConduitSource propertyConduitSource; + private PlasticProxyFactory plasticProxyFactory; + private DataTypeAnalyzer dataTypeAnalyzer; + private ObjectLocator objectLocator; + private StringInterner stringInterner; - public BeanModelSource build() - { - - if (typeCoercer == null) - { - createTypeCoercer(); - } - - if (propertyAccess == null) - { - propertyAccess = new PropertyAccessImpl(); - } - - if (stringInterner == null) - { - stringInterner = new StringInternerImpl(); - } - - if (plasticProxyFactory == null) - { - plasticProxyFactory = new PlasticProxyFactoryImpl(getClass().getClassLoader(), LoggerFactory.getLogger(PlasticProxyFactory.class)); - } - - if (propertyConduitSource == null) - { - propertyConduitSource = new PropertyConduitSourceImpl(propertyAccess, plasticProxyFactory, typeCoercer, stringInterner); - } - - return new BeanModelSourceImpl(typeCoercer, propertyAccess, propertyConduitSource, plasticProxyFactory, dataTypeAnalyzer, objectLocator); - - } + /** + * Sets the {@link TypeCoercer} to be used. + */ + public BeanModelSourceBuilder setTypeCoercer(TypeCoercer typeCoercer) + { + this.typeCoercer = typeCoercer; + return this; + } - private void createTypeCoercer() { - CoercionTupleConfiguration configuration = new CoercionTupleConfiguration(); - BasicTypeCoercions.provideBasicTypeCoercions(configuration); - typeCoercer = new TypeCoercerImpl(configuration.getTuples()); - } - - final private static class CoercionTupleConfiguration implements Configuration<CoercionTuple> { - - final private Collection<CoercionTuple> tuples = new ArrayList<CoercionTuple>(); + public BeanModelSource build() + { + + if (typeCoercer == null) + { + createTypeCoercer(); + } + + if (propertyAccess == null) + { + propertyAccess = new PropertyAccessImpl(); + } + + if (dataTypeAnalyzer == null) + { + dataTypeAnalyzer = BasicDataTypeAnalyzers.createDefaultDataTypeAnalyzer(); + } + + if (stringInterner == null) + { + stringInterner = new StringInternerImpl(); + } + + if (plasticProxyFactory == null) + { + plasticProxyFactory = new PlasticProxyFactoryImpl(getClass().getClassLoader(), LoggerFactory.getLogger(PlasticProxyFactory.class)); + } + + if (propertyConduitSource == null) + { + propertyConduitSource = new PropertyConduitSourceImpl(propertyAccess, plasticProxyFactory, typeCoercer, stringInterner); + } + + return new BeanModelSourceImpl(typeCoercer, propertyAccess, propertyConduitSource, plasticProxyFactory, dataTypeAnalyzer, objectLocator); + + } + private void createTypeCoercer() + { + CoercionTupleConfiguration configuration = new CoercionTupleConfiguration(); + BasicTypeCoercions.provideBasicTypeCoercions(configuration); + typeCoercer = new TypeCoercerImpl(configuration.getTuples()); + } - @Override - public void add(CoercionTuple tuble) { - tuples.add(tuble); - } + final private static class CoercionTupleConfiguration implements Configuration<CoercionTuple> + { + + final private Collection<CoercionTuple> tuples = new ArrayList<CoercionTuple>(); + + @Override + public void add(CoercionTuple tuble) + { + tuples.add(tuble); + } + + @Override + public void addInstance(Class<? extends CoercionTuple> clazz) + { + throw new RuntimeException("Not implemented"); + } + + public Collection<CoercionTuple> getTuples() + { + return tuples; + } + + } - @Override - public void addInstance(Class<? extends CoercionTuple> clazz) { - throw new RuntimeException("Not implemented"); - } - - public Collection<CoercionTuple> getTuples() { - return tuples; - } - - } - } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java ---------------------------------------------------------------------- diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java b/beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java index 4dbfb2d..2127696 100644 --- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java +++ b/beanmodel/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java @@ -50,10 +50,10 @@ public class CoercingPropertyConduitWrapper implements PropertyConduit2 public Type getPropertyGenericType() { - if (conduit instanceof PropertyConduit2) { - return ((PropertyConduit2) conduit).getPropertyGenericType(); - } - return conduit.getPropertyType(); + if (conduit instanceof PropertyConduit2) { + return ((PropertyConduit2) conduit).getPropertyGenericType(); + } + return conduit.getPropertyType(); } @SuppressWarnings("unchecked") http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java ---------------------------------------------------------------------- diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java b/beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java index 1fffd4f..e8cd58f 100644 --- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java +++ b/beanmodel/src/main/java/org/apache/tapestry5/internal/services/LiteralPropertyConduit.java @@ -63,7 +63,7 @@ public class LiteralPropertyConduit extends PropertyConduitDelegate implements I public Type getPropertyGenericType() { - return propertyType; + return propertyType; } public <T extends Annotation> T getAnnotation(Class<T> annotationClass) http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java ---------------------------------------------------------------------- diff --git a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java index 09d234c..9148b46 100644 --- a/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java +++ b/beanmodel/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java @@ -524,28 +524,28 @@ public class PropertyConduitSourceImpl implements PropertyConduitSource private Type getGenericType(PropertyAdapter adapter) { - Type genericType = null; - if (adapter.getField() != null) - { - genericType = adapter.getField().getGenericType(); - } - else if (adapter.getReadMethod() != null) - { - genericType = adapter.getReadMethod().getGenericReturnType(); - } - else if (adapter.getWriteMethod() != null) - { - genericType = adapter.getWriteMethod().getGenericParameterTypes()[0]; - } - else - { - throw new RuntimeException("Could not find accessor for property " + adapter.getName()); - } - - return genericType == null ? adapter.getType() : genericType; - } - - private void implementSetter(PropertyAdapter adapter) + Type genericType = null; + if (adapter.getField() != null) + { + genericType = adapter.getField().getGenericType(); + } + else if (adapter.getReadMethod() != null) + { + genericType = adapter.getReadMethod().getGenericReturnType(); + } + else if (adapter.getWriteMethod() != null) + { + genericType = adapter.getWriteMethod().getGenericParameterTypes()[0]; + } + else + { + throw new RuntimeException("Could not find accessor for property " + adapter.getName()); + } + + return genericType == null ? adapter.getType() : genericType; + } + + private void implementSetter(PropertyAdapter adapter) { if (adapter.getWriteMethod() != null) { @@ -1488,7 +1488,7 @@ public class PropertyConduitSourceImpl implements PropertyConduitSource public Type getPropertyGenericType() { - return rootClass; + return rootClass; } public <T extends Annotation> T getAnnotation(Class<T> annotationClass) http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java ---------------------------------------------------------------------- diff --git a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java index 5d6dfec..9c5f36c4 100644 --- a/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java +++ b/beanmodel/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java @@ -57,11 +57,11 @@ public class ClassPropertyAdapterImpl implements ClassPropertyAdapter // TAP5-1493 if (readMethod != null && readMethod.isBridge()) { - if (nonBridgeMethods == null) - { - nonBridgeMethods = groupNonBridgeMethodsByName(beanType); - } - readMethod = findMethodWithSameNameAndParamCount(readMethod, nonBridgeMethods); + if (nonBridgeMethods == null) + { + nonBridgeMethods = groupNonBridgeMethodsByName(beanType); + } + readMethod = findMethodWithSameNameAndParamCount(readMethod, nonBridgeMethods); } // TAP5-1548, TAP5-1885: trying to find a getter which Introspector missed @@ -86,11 +86,11 @@ public class ClassPropertyAdapterImpl implements ClassPropertyAdapter if (writeMethod != null && writeMethod.isBridge()) { - if (nonBridgeMethods == null) - { - nonBridgeMethods = groupNonBridgeMethodsByName(beanType); - } - writeMethod = findMethodWithSameNameAndParamCount(writeMethod, nonBridgeMethods); + if (nonBridgeMethods == null) + { + nonBridgeMethods = groupNonBridgeMethodsByName(beanType); + } + writeMethod = findMethodWithSameNameAndParamCount(writeMethod, nonBridgeMethods); } // TAP5-1548, TAP5-1885: trying to find a setter which Introspector missed @@ -149,24 +149,24 @@ public class ClassPropertyAdapterImpl implements ClassPropertyAdapter * (default to providedmethod if none found) */ private Method findMethodWithSameNameAndParamCount(Method method, Map<String, List<Method>> groupedMethods) { - List<Method> methodGroup = groupedMethods.get(method.getName()); - if (methodGroup != null) - { - for (Method nonBridgeMethod : methodGroup) - { - if (nonBridgeMethod.getParameterTypes().length == method.getParameterTypes().length) - { - // return the non-bridge method with the same name / argument count - return nonBridgeMethod; - } - } - } - - // default to the provided method - return method; - } - - /** + List<Method> methodGroup = groupedMethods.get(method.getName()); + if (methodGroup != null) + { + for (Method nonBridgeMethod : methodGroup) + { + if (nonBridgeMethod.getParameterTypes().length == method.getParameterTypes().length) + { + // return the non-bridge method with the same name / argument count + return nonBridgeMethod; + } + } + } + + // default to the provided method + return method; + } + + /** * Find all of the public methods that are not bridge methods and * group them by method name * @@ -176,24 +176,24 @@ public class ClassPropertyAdapterImpl implements ClassPropertyAdapter */ private Map<String, List<Method>> groupNonBridgeMethodsByName(Class type) { - Map<String, List<Method>> methodGroupsByName = CollectionFactory.newMap(); - for (Method method : type.getMethods()) - { - if (!method.isBridge()) - { - List<Method> methodGroup = methodGroupsByName.get(method.getName()); - if (methodGroup == null) - { - methodGroup = CollectionFactory.newList(); - methodGroupsByName.put(method.getName(), methodGroup); - } - methodGroup.add(method); - } - } - return methodGroupsByName; - } - - @Override + Map<String, List<Method>> methodGroupsByName = CollectionFactory.newMap(); + for (Method method : type.getMethods()) + { + if (!method.isBridge()) + { + List<Method> methodGroup = methodGroupsByName.get(method.getName()); + if (methodGroup == null) + { + methodGroup = CollectionFactory.newList(); + methodGroupsByName.put(method.getName(), methodGroup); + } + methodGroup.add(method); + } + } + return methodGroupsByName; + } + + @Override public Class getBeanType() { return beanType; http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/commons/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java ---------------------------------------------------------------------- diff --git a/commons/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java b/commons/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java new file mode 100644 index 0000000..8b20666 --- /dev/null +++ b/commons/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java @@ -0,0 +1,32 @@ +// Copyright 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. +// 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.tapestry5.internal.services; + +import org.apache.tapestry5.beaneditor.DataType; +import org.apache.tapestry5.ioc.services.PropertyAdapter; +import org.apache.tapestry5.services.DataTypeAnalyzer; + +/** + * Checks for the {@link DataType} annotation, returning its value if present. + */ +public class AnnotationDataTypeAnalyzer implements DataTypeAnalyzer +{ + public String identifyDataType(PropertyAdapter adapter) + { + DataType annotation = adapter.getAnnotation(DataType.class); + + return annotation == null ? null : annotation.value(); + } +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/commons/src/main/java/org/apache/tapestry5/ioc/internal/BasicDataTypeAnalyzers.java ---------------------------------------------------------------------- diff --git a/commons/src/main/java/org/apache/tapestry5/ioc/internal/BasicDataTypeAnalyzers.java b/commons/src/main/java/org/apache/tapestry5/ioc/internal/BasicDataTypeAnalyzers.java new file mode 100644 index 0000000..df7564f --- /dev/null +++ b/commons/src/main/java/org/apache/tapestry5/ioc/internal/BasicDataTypeAnalyzers.java @@ -0,0 +1,151 @@ +// Copyright 2014 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.tapestry5.ioc.internal; + +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.tapestry5.beaneditor.DataTypeConstants; +import org.apache.tapestry5.internal.services.AnnotationDataTypeAnalyzer; +import org.apache.tapestry5.ioc.MappedConfiguration; +import org.apache.tapestry5.ioc.OrderedConfiguration; +import org.apache.tapestry5.ioc.services.PropertyAdapter; +import org.apache.tapestry5.services.DataTypeAnalyzer; + +/** + * Class that provides Tapestry's basic default data type analyzers. + */ +public class BasicDataTypeAnalyzers +{ + + public static void contributeDataTypeAnalyzer( + OrderedConfiguration<DataTypeAnalyzer> configuration, + DataTypeAnalyzer defaultDataTypeAnalyzer) { + configuration.add("Annotation", new AnnotationDataTypeAnalyzer()); + if (defaultDataTypeAnalyzer == null) + { + defaultDataTypeAnalyzer = createDefaultDataTypeAnalyzer(); + } + configuration.add("Default", defaultDataTypeAnalyzer, "after:*"); + } + + public static DataTypeAnalyzer createDefaultDataTypeAnalyzer() + { + DefaultDataTypeAnalyzerMappedConfiguration mappedConfiguration = new DefaultDataTypeAnalyzerMappedConfiguration(); + provideDefaultDataTypeAnalyzers(mappedConfiguration); + return new CombinedDataTypeAnalyzer(new AnnotationDataTypeAnalyzer(), new MapDataTypeAnalyzer(mappedConfiguration.getMap())); + } + + /** + * Maps property types to data type names: + * <ul> + * <li>String --> text + * <li>Number --> number + * <li>Enum --> enum + * <li>Boolean --> boolean + * <li>Date --> date + * </ul> + */ + public static void provideDefaultDataTypeAnalyzers(MappedConfiguration<Class, String> configuration) + { + // This is a special case contributed to avoid exceptions when a + // property type can't be + // matched. DefaultDataTypeAnalyzer converts the empty string to null. + + configuration.add(Object.class, ""); + + configuration.add(String.class, DataTypeConstants.TEXT); + configuration.add(Number.class, DataTypeConstants.NUMBER); + configuration.add(Enum.class, DataTypeConstants.ENUM); + configuration.add(Boolean.class, DataTypeConstants.BOOLEAN); + configuration.add(Date.class, DataTypeConstants.DATE); + configuration.add(Calendar.class, DataTypeConstants.CALENDAR); + } + + final private static class DefaultDataTypeAnalyzerMappedConfiguration implements MappedConfiguration<Class, String> + { + + final Map<Class, String> map = new HashMap<Class, String>(); + + @Override + public void add(Class key, String value) { + map.put(key, value); + } + + @Override + public void override(Class key, String value) { + throw new RuntimeException("Not implemented"); + } + + @Override + public void addInstance(Class key, Class<? extends String> clazz) { + throw new RuntimeException("Not implemented"); + } + + @Override + public void overrideInstance(Class key, Class<? extends String> clazz) { + throw new RuntimeException("Not implemented"); + } + + public Map<Class, String> getMap() { + return map; + } + + } + + final private static class MapDataTypeAnalyzer implements DataTypeAnalyzer + { + + final Map<Class, String> map; + + public MapDataTypeAnalyzer(Map<Class, String> map) { + this.map = map; + } + + @Override + public String identifyDataType(PropertyAdapter adapter) { + return map.get(adapter.getType()); + } + + } + + final private static class CombinedDataTypeAnalyzer implements DataTypeAnalyzer + { + + final private DataTypeAnalyzer first, second; + + public CombinedDataTypeAnalyzer(DataTypeAnalyzer first, DataTypeAnalyzer second) + { + super(); + this.first = first; + this.second = second; + } + + @Override + public String identifyDataType(PropertyAdapter adapter) + { + String type = first.identifyDataType(adapter); + if (type == null) + { + type = second.identifyDataType(adapter); + } + return type; + } + + } + + +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/commons/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalCommonsUtils.java ---------------------------------------------------------------------- diff --git a/commons/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalCommonsUtils.java b/commons/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalCommonsUtils.java index 3c391e0..2bc33d8 100644 --- a/commons/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalCommonsUtils.java +++ b/commons/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalCommonsUtils.java @@ -33,11 +33,11 @@ import org.apache.tapestry5.ioc.internal.NullAnnotationProvider; */ public class InternalCommonsUtils { - /** - * @since 5.3 - */ - public final static AnnotationProvider NULL_ANNOTATION_PROVIDER = new NullAnnotationProvider(); - private static final Pattern NON_WORD_PATTERN = Pattern.compile("[^\\w]"); + /** + * @since 5.3 + */ + public final static AnnotationProvider NULL_ANNOTATION_PROVIDER = new NullAnnotationProvider(); + private static final Pattern NON_WORD_PATTERN = Pattern.compile("[^\\w]"); /** * Adds a value to a specially organized map where the values are lists of objects. This somewhat simulates a map @@ -67,322 +67,322 @@ public class InternalCommonsUtils { list.add(value); } - /** - * Sniffs the object to see if it is a {@link Location} or {@link Locatable}. Returns null if null or not - * convertable to a location. - */ - - public static Location locationOf(Object location) - { - if (location == null) - return null; - - if (location instanceof Location) - return (Location) location; - - if (location instanceof Locatable) - return ((Locatable) location).getLocation(); - - return null; - } + /** + * Sniffs the object to see if it is a {@link Location} or {@link Locatable}. Returns null if null or not + * convertable to a location. + */ + + public static Location locationOf(Object location) + { + if (location == null) + return null; + + if (location instanceof Location) + return (Location) location; + + if (location instanceof Locatable) + return ((Locatable) location).getLocation(); + + return null; + } - public static AnnotationProvider toAnnotationProvider(final Method element) - { - if (element == null) - return NULL_ANNOTATION_PROVIDER; - - return new AnnotationProvider() - { - @Override - public <T extends Annotation> T getAnnotation(Class<T> annotationClass) - { - return element.getAnnotation(annotationClass); - } - }; - } + public static AnnotationProvider toAnnotationProvider(final Method element) + { + if (element == null) + return NULL_ANNOTATION_PROVIDER; + + return new AnnotationProvider() + { + @Override + public <T extends Annotation> T getAnnotation(Class<T> annotationClass) + { + return element.getAnnotation(annotationClass); + } + }; + } - /** - * Used to convert a property expression into a key that can be used to locate various resources (Blocks, messages, - * etc.). Strips out any punctuation characters, leaving just words characters (letters, number and the - * underscore). - * - * @param expression a property expression - * @return the expression with punctuation removed - */ - public static String extractIdFromPropertyExpression(String expression) - { - return replace(expression, NON_WORD_PATTERN, ""); - } + /** + * Used to convert a property expression into a key that can be used to locate various resources (Blocks, messages, + * etc.). Strips out any punctuation characters, leaving just words characters (letters, number and the + * underscore). + * + * @param expression a property expression + * @return the expression with punctuation removed + */ + public static String extractIdFromPropertyExpression(String expression) + { + return replace(expression, NON_WORD_PATTERN, ""); + } - public static String replace(String input, Pattern pattern, String replacement) - { - return pattern.matcher(input).replaceAll(replacement); - } + public static String replace(String input, Pattern pattern, String replacement) + { + return pattern.matcher(input).replaceAll(replacement); + } - /** - * Looks for a label within the messages based on the id. If found, it is used, otherwise the name is converted to a - * user presentable form. - */ - public static String defaultLabel(String id, Messages messages, String propertyExpression) - { - String key = id + "-label"; - - if (messages.contains(key)) - return messages.get(key); - - return toUserPresentable(extractIdFromPropertyExpression(InternalCommonsUtils.lastTerm(propertyExpression))); - } + /** + * Looks for a label within the messages based on the id. If found, it is used, otherwise the name is converted to a + * user presentable form. + */ + public static String defaultLabel(String id, Messages messages, String propertyExpression) + { + String key = id + "-label"; + + if (messages.contains(key)) + return messages.get(key); + + return toUserPresentable(extractIdFromPropertyExpression(InternalCommonsUtils.lastTerm(propertyExpression))); + } - /** - * Capitalizes the string, and inserts a space before each upper case character (or sequence of upper case - * characters). Thus "userId" becomes "User Id", etc. Also, converts underscore into space (and capitalizes the - * following word), thus "user_id" also becomes "User Id". - */ - public static String toUserPresentable(String id) - { - StringBuilder builder = new StringBuilder(id.length() * 2); - - char[] chars = id.toCharArray(); - boolean postSpace = true; - boolean upcaseNext = true; - - for (char ch : chars) - { - if (upcaseNext) - { - builder.append(Character.toUpperCase(ch)); - upcaseNext = false; - - continue; - } - - if (ch == '_') - { - builder.append(' '); - upcaseNext = true; - continue; - } - - boolean upperCase = Character.isUpperCase(ch); - - if (upperCase && !postSpace) - builder.append(' '); - - builder.append(ch); - - postSpace = upperCase; - } - - return builder.toString(); - } + /** + * Capitalizes the string, and inserts a space before each upper case character (or sequence of upper case + * characters). Thus "userId" becomes "User Id", etc. Also, converts underscore into space (and capitalizes the + * following word), thus "user_id" also becomes "User Id". + */ + public static String toUserPresentable(String id) + { + StringBuilder builder = new StringBuilder(id.length() * 2); + + char[] chars = id.toCharArray(); + boolean postSpace = true; + boolean upcaseNext = true; + + for (char ch : chars) + { + if (upcaseNext) + { + builder.append(Character.toUpperCase(ch)); + upcaseNext = false; + + continue; + } + + if (ch == '_') + { + builder.append(' '); + upcaseNext = true; + continue; + } + + boolean upperCase = Character.isUpperCase(ch); + + if (upperCase && !postSpace) + builder.append(' '); + + builder.append(ch); + + postSpace = upperCase; + } + + return builder.toString(); + } - /** - * @since 5.3 - */ - public static AnnotationProvider toAnnotationProvider(final Class element) - { - return new AnnotationProvider() - { - @Override - public <T extends Annotation> T getAnnotation(Class<T> annotationClass) - { - return annotationClass.cast(element.getAnnotation(annotationClass)); - } - }; - } + /** + * @since 5.3 + */ + public static AnnotationProvider toAnnotationProvider(final Class element) + { + return new AnnotationProvider() + { + @Override + public <T extends Annotation> T getAnnotation(Class<T> annotationClass) + { + return annotationClass.cast(element.getAnnotation(annotationClass)); + } + }; + } - /** - * Pattern used to eliminate leading and trailing underscores and dollar signs. - */ - static final Pattern NAME_PATTERN = Pattern.compile("^[_|$]*([\\p{javaJavaIdentifierPart}]+?)[_|$]*$", - Pattern.CASE_INSENSITIVE); + /** + * Pattern used to eliminate leading and trailing underscores and dollar signs. + */ + static final Pattern NAME_PATTERN = Pattern.compile("^[_|$]*([\\p{javaJavaIdentifierPart}]+?)[_|$]*$", + Pattern.CASE_INSENSITIVE); - /** - * Converts a method to a user presentable string consisting of the containing class name, the method name, and the - * short form of the parameter list (the class name of each parameter type, shorn of the package name portion). - * - * @param method - * @return short string representation - */ - public static String asString(Method method) - { - StringBuilder buffer = new StringBuilder(); - - buffer.append(method.getDeclaringClass().getName()); - buffer.append("."); - buffer.append(method.getName()); - buffer.append("("); - - for (int i = 0; i < method.getParameterTypes().length; i++) - { - if (i > 0) - buffer.append(", "); - - String name = method.getParameterTypes()[i].getSimpleName(); - - buffer.append(name); - } - - return buffer.append(")").toString(); - } + /** + * Converts a method to a user presentable string consisting of the containing class name, the method name, and the + * short form of the parameter list (the class name of each parameter type, shorn of the package name portion). + * + * @param method + * @return short string representation + */ + public static String asString(Method method) + { + StringBuilder buffer = new StringBuilder(); + + buffer.append(method.getDeclaringClass().getName()); + buffer.append("."); + buffer.append(method.getName()); + buffer.append("("); + + for (int i = 0; i < method.getParameterTypes().length; i++) + { + if (i > 0) + buffer.append(", "); + + String name = method.getParameterTypes()[i].getSimpleName(); + + buffer.append(name); + } + + return buffer.append(")").toString(); + } - /** - * Strips leading "_" and "$" and trailing "_" from the name. - */ - public static String stripMemberName(String memberName) - { - assert InternalCommonsUtils.isNonBlank(memberName); - Matcher matcher = NAME_PATTERN.matcher(memberName); - - if (!matcher.matches()) - throw new IllegalArgumentException(String.format("Input '%s' is not a valid Java identifier.", memberName)); - - return matcher.group(1); - } + /** + * Strips leading "_" and "$" and trailing "_" from the name. + */ + public static String stripMemberName(String memberName) + { + assert InternalCommonsUtils.isNonBlank(memberName); + Matcher matcher = NAME_PATTERN.matcher(memberName); + + if (!matcher.matches()) + throw new IllegalArgumentException(String.format("Input '%s' is not a valid Java identifier.", memberName)); + + return matcher.group(1); + } - /** - * Joins together some number of elements to form a comma separated list. - */ - public static String join(List elements) - { - return InternalCommonsUtils.join(elements, ", "); - } + /** + * Joins together some number of elements to form a comma separated list. + */ + public static String join(List elements) + { + return InternalCommonsUtils.join(elements, ", "); + } - /** - * Joins together some number of elements. If a value in the list is the empty string, it is replaced with the - * string "(blank)". - * - * @param elements - * objects to be joined together - * @param separator - * used between elements when joining - */ - public static String join(List elements, String separator) - { - switch (elements.size()) - { - case 0: - return ""; - - case 1: - return elements.get(0).toString(); - - default: - - StringBuilder buffer = new StringBuilder(); - boolean first = true; - - for (Object o : elements) - { - if (!first) - buffer.append(separator); - - String string = String.valueOf(o); - - if (string.equals("")) - string = "(blank)"; - - buffer.append(string); - - first = false; - } - - return buffer.toString(); - } - } + /** + * Joins together some number of elements. If a value in the list is the empty string, it is replaced with the + * string "(blank)". + * + * @param elements + * objects to be joined together + * @param separator + * used between elements when joining + */ + public static String join(List elements, String separator) + { + switch (elements.size()) + { + case 0: + return ""; + + case 1: + return elements.get(0).toString(); + + default: + + StringBuilder buffer = new StringBuilder(); + boolean first = true; + + for (Object o : elements) + { + if (!first) + buffer.append(separator); + + String string = String.valueOf(o); + + if (string.equals("")) + string = "(blank)"; + + buffer.append(string); + + first = false; + } + + return buffer.toString(); + } + } - /** - * Creates a sorted copy of the provided elements, then turns that into a comma separated list. - * - * @return the elements converted to strings, sorted, joined with comma ... or "(none)" if the elements are null or - * empty - */ - public static String joinSorted(Collection elements) - { - if (elements == null || elements.isEmpty()) - return "(none)"; - - List<String> list = CollectionFactory.newList(); - - for (Object o : elements) - list.add(String.valueOf(o)); - - Collections.sort(list); - - return join(list); - } + /** + * Creates a sorted copy of the provided elements, then turns that into a comma separated list. + * + * @return the elements converted to strings, sorted, joined with comma ... or "(none)" if the elements are null or + * empty + */ + public static String joinSorted(Collection elements) + { + if (elements == null || elements.isEmpty()) + return "(none)"; + + List<String> list = CollectionFactory.newList(); + + for (Object o : elements) + list.add(String.valueOf(o)); + + Collections.sort(list); + + return join(list); + } - /** - * Returns true if the input is null, or is a zero length string (excluding leading/trailing whitespace). - */ - - public static boolean isBlank(String input) - { - return input == null || input.length() == 0 || input.trim().length() == 0; - } + /** + * Returns true if the input is null, or is a zero length string (excluding leading/trailing whitespace). + */ + + public static boolean isBlank(String input) + { + return input == null || input.length() == 0 || input.trim().length() == 0; + } - /** - * Capitalizes a string, converting the first character to uppercase. - */ - public static String capitalize(String input) - { - if (input.length() == 0) - return input; - - return input.substring(0, 1).toUpperCase() + input.substring(1); - } + /** + * Capitalizes a string, converting the first character to uppercase. + */ + public static String capitalize(String input) + { + if (input.length() == 0) + return input; + + return input.substring(0, 1).toUpperCase() + input.substring(1); + } - public static boolean isNonBlank(String input) - { - return !isBlank(input); - } + public static boolean isNonBlank(String input) + { + return !isBlank(input); + } - /** - * Return true if the input string contains the marker for symbols that must be expanded. - */ - public static boolean containsSymbols(String input) - { - return input.contains("${"); - } + /** + * Return true if the input string contains the marker for symbols that must be expanded. + */ + public static boolean containsSymbols(String input) + { + return input.contains("${"); + } - /** - * Searches the string for the final period ('.') character and returns everything after that. The input string is - * generally a fully qualified class name, though tapestry-core also uses this method for the occasional property - * expression (which is also dot separated). Returns the input string unchanged if it does not contain a period - * character. - */ - public static String lastTerm(String input) - { - assert isNonBlank(input); - int dotx = input.lastIndexOf('.'); - - if (dotx < 0) - return input; - - return input.substring(dotx + 1); - } + /** + * Searches the string for the final period ('.') character and returns everything after that. The input string is + * generally a fully qualified class name, though tapestry-core also uses this method for the occasional property + * expression (which is also dot separated). Returns the input string unchanged if it does not contain a period + * character. + */ + public static String lastTerm(String input) + { + assert isNonBlank(input); + int dotx = input.lastIndexOf('.'); + + if (dotx < 0) + return input; + + return input.substring(dotx + 1); + } - /** - * Extracts the string keys from a map and returns them in sorted order. The keys are converted to strings. - * - * @param map - * the map to extract keys from (may be null) - * @return the sorted keys, or the empty set if map is null - */ - - public static List<String> sortedKeys(Map map) - { - if (map == null) - return Collections.emptyList(); - - List<String> keys = CollectionFactory.newList(); - - for (Object o : map.keySet()) - keys.add(String.valueOf(o)); - - Collections.sort(keys); - - return keys; - } + /** + * Extracts the string keys from a map and returns them in sorted order. The keys are converted to strings. + * + * @param map + * the map to extract keys from (may be null) + * @return the sorted keys, or the empty set if map is null + */ + + public static List<String> sortedKeys(Map map) + { + if (map == null) + return Collections.emptyList(); + + List<String> keys = CollectionFactory.newList(); + + for (Object o : map.keySet()) + keys.add(String.valueOf(o)); + + Collections.sort(keys); + + return keys; + } } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java index e032975..5e4ab42 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java @@ -457,9 +457,9 @@ public class TapestryInternalUtils { if (conduit instanceof PropertyConduit2) { - return ((PropertyConduit2) conduit).getPropertyGenericType(); + return ((PropertyConduit2) conduit).getPropertyGenericType(); } - return conduit.getPropertyType(); + return conduit.getPropertyType(); } public Object get(Object instance) http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/AbstractBinding.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/AbstractBinding.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/AbstractBinding.java index 8e731b7..572d61a 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/AbstractBinding.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/AbstractBinding.java @@ -71,7 +71,7 @@ public abstract class AbstractBinding extends BaseLocatable implements Binding2 */ public Type getBindingGenericType() { - return getBindingType(); + return getBindingType(); } /** http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java index afe63eb..da4c53e 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java @@ -111,10 +111,10 @@ public class PropBinding extends AbstractBinding implements InternalPropBinding @Override public Type getBindingGenericType() { - if (conduit instanceof PropertyConduit2) { - return ((PropertyConduit2) conduit).getPropertyGenericType(); - } - return conduit.getPropertyType(); + if (conduit instanceof PropertyConduit2) { + return ((PropertyConduit2) conduit).getPropertyGenericType(); + } + return conduit.getPropertyType(); } @Override http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java deleted file mode 100644 index 8b20666..0000000 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AnnotationDataTypeAnalyzer.java +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 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. -// 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.tapestry5.internal.services; - -import org.apache.tapestry5.beaneditor.DataType; -import org.apache.tapestry5.ioc.services.PropertyAdapter; -import org.apache.tapestry5.services.DataTypeAnalyzer; - -/** - * Checks for the {@link DataType} annotation, returning its value if present. - */ -public class AnnotationDataTypeAnalyzer implements DataTypeAnalyzer -{ - public String identifyDataType(PropertyAdapter adapter) - { - DataType annotation = adapter.getAnnotation(DataType.class); - - return annotation == null ? null : annotation.value(); - } -} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java index c51c086..5d0ac16 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java @@ -351,9 +351,9 @@ public class InternalComponentResourcesImpl extends LockSupport implements Inter Binding binding = getBinding(parameterName); Type genericType; if (binding instanceof Binding2) { - genericType = ((Binding2) binding).getBindingGenericType(); + genericType = ((Binding2) binding).getBindingGenericType(); } else { - genericType = binding.getBindingType(); + genericType = binding.getBindingType(); } return genericType; } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java index e3902de..8a72a4d 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java @@ -59,6 +59,7 @@ import org.apache.tapestry5.internal.util.StringRenderable; import org.apache.tapestry5.internal.validator.ValidatorMacroImpl; import org.apache.tapestry5.ioc.*; import org.apache.tapestry5.ioc.annotations.*; +import org.apache.tapestry5.ioc.internal.BasicDataTypeAnalyzers; import org.apache.tapestry5.ioc.internal.util.CollectionFactory; import org.apache.tapestry5.ioc.services.*; import org.apache.tapestry5.ioc.util.AvailableValues; @@ -621,18 +622,7 @@ public final class TapestryModule */ public static void contributeDefaultDataTypeAnalyzer(MappedConfiguration<Class, String> configuration) { - // This is a special case contributed to avoid exceptions when a - // property type can't be - // matched. DefaultDataTypeAnalyzer converts the empty string to null. - - configuration.add(Object.class, ""); - - configuration.add(String.class, DataTypeConstants.TEXT); - configuration.add(Number.class, DataTypeConstants.NUMBER); - configuration.add(Enum.class, DataTypeConstants.ENUM); - configuration.add(Boolean.class, DataTypeConstants.BOOLEAN); - configuration.add(Date.class, DataTypeConstants.DATE); - configuration.add(Calendar.class, DataTypeConstants.CALENDAR); + BasicDataTypeAnalyzers.provideDefaultDataTypeAnalyzers(configuration); } @Contribute(BeanBlockSource.class) http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/GenericTypeDisplay.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/GenericTypeDisplay.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/GenericTypeDisplay.java index f6d2aa7..0a9365e 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/GenericTypeDisplay.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/GenericTypeDisplay.java @@ -25,21 +25,21 @@ import org.apache.tapestry5.ioc.annotations.Inject; * Outputs the type and genericType of the 'value' binding in a div */ public class GenericTypeDisplay { - @Inject - private ComponentResources resources; - - @Parameter(required=true, defaultPrefix=BindingConstants.LITERAL) - private String description; - - @Parameter(required=true) - private Object value; - - void afterRender(MarkupWriter writer) { - writer.element("div"); - Class<?> type = resources.getBoundType("value"); - Type genericType = resources.getBoundGenericType("value"); - String text = String.format("description=%s,type=%s,genericType=%s", description, type.getName(), genericType.toString()); - writer.write(text); - writer.end(); - } + @Inject + private ComponentResources resources; + + @Parameter(required=true, defaultPrefix=BindingConstants.LITERAL) + private String description; + + @Parameter(required=true) + private Object value; + + void afterRender(MarkupWriter writer) { + writer.element("div"); + Class<?> type = resources.getBoundType("value"); + Type genericType = resources.getBoundGenericType("value"); + String text = String.format("description=%s,type=%s,genericType=%s", description, type.getName(), genericType.toString()); + writer.write(text); + writer.end(); + } } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GenericTypeDemo.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GenericTypeDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GenericTypeDemo.java index 8e9fdd3..4fdc57a 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GenericTypeDemo.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GenericTypeDemo.java @@ -8,16 +8,16 @@ import java.util.Set; import org.apache.tapestry5.annotations.Property; public class GenericTypeDemo { - private Set<Long> setOfLongs; - - @Property - private Map<String, String> mapOfStrings; - - public List<List<Date>> getListOfListOfDates() { - throw new UnsupportedOperationException(); - } - - public void setSetOfLongs(Set<Long> setOfLongs) { - throw new UnsupportedOperationException(); - } + private Set<Long> setOfLongs; + + @Property + private Map<String, String> mapOfStrings; + + public List<List<Date>> getListOfListOfDates() { + throw new UnsupportedOperationException(); + } + + public void setSetOfLongs(Set<Long> setOfLongs) { + throw new UnsupportedOperationException(); + } } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java index 9d4a774..0aac48f 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java @@ -45,9 +45,9 @@ public class GridWithSubmitWithContextDemo { return F.flow(library.getTracks()).sort(new Comparator<Track>(){ - @Override + @Override public int compare(Track arg0, Track arg1) { - return arg0.getId().compareTo(arg1.getId()); + return arg0.getId().compareTo(arg1.getId()); } }); http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ChildBasePage.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ChildBasePage.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ChildBasePage.java index 44e9aff..5a787e9 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ChildBasePage.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ChildBasePage.java @@ -1,8 +1,8 @@ package org.apache.tapestry5.integration.app2.base; public abstract class ChildBasePage extends ParentBasePage { - @Override - public String getObject() { - return "foobar"; - } + @Override + public String getObject() { + return "foobar"; + } } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ParentBasePage.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ParentBasePage.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ParentBasePage.java index 4030128..6c18c43 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ParentBasePage.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app2/base/ParentBasePage.java @@ -1,5 +1,5 @@ package org.apache.tapestry5.integration.app2.base; public abstract class ParentBasePage { - public abstract Object getObject(); + public abstract Object getObject(); } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagelevel/OverrideMethodsTest.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagelevel/OverrideMethodsTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagelevel/OverrideMethodsTest.java index b612d1f..c8e7d48 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagelevel/OverrideMethodsTest.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/pagelevel/OverrideMethodsTest.java @@ -9,13 +9,13 @@ public class OverrideMethodsTest extends Assert { /** TAP5-901 */ @Test public void override_abstract_methods() { - PageTester tester = new PageTester(TestConstants.APP2_PACKAGE, TestConstants.APP2_NAME); - try { - Document doc = tester.renderPage("OverrideAbstractMethods"); - assertEquals("6", doc.getElementById("length").getChildMarkup()); - } finally { - tester.shutdown(); - } + PageTester tester = new PageTester(TestConstants.APP2_PACKAGE, TestConstants.APP2_NAME); + try { + Document doc = tester.renderPage("OverrideAbstractMethods"); + assertEquals("6", doc.getElementById("length").getChildMarkup()); + } finally { + tester.shutdown(); + } } } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java index af25c62..a861883 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java @@ -167,15 +167,15 @@ public class PropertyConduitSourceImplTest extends InternalBaseTestCase } static class GenericBean { - public List<Date> dates; - public List<GenericBean> genericBeans; - - public List<Long> getLongs() { - return Collections.emptyList(); - } - - public void setMap(Map<String, Integer> map) { - } + public List<Date> dates; + public List<GenericBean> genericBeans; + + public List<Long> getLongs() { + return Collections.emptyList(); + } + + public void setMap(Map<String, Integer> map) { + } } @Test @@ -884,15 +884,15 @@ public class PropertyConduitSourceImplTest extends InternalBaseTestCase // example from Howard try { - assertConduitPropertyType(Foo.class, "bar", Bar.class); + assertConduitPropertyType(Foo.class, "bar", Bar.class); } catch (AssertionError e) { - List<Method> matches = CollectionFactory.newList(); - for (Method method : Foo.class.getMethods()) { - if (method.getName().equals("getBar")) { - matches.add(method); - } - } - fail(String.format("%s (possible candidates %s)", e.getMessage(), matches)); + List<Method> matches = CollectionFactory.newList(); + for (Method method : Foo.class.getMethods()) { + if (method.getName().equals("getBar")) { + matches.add(method); + } + } + fail(String.format("%s (possible candidates %s)", e.getMessage(), matches)); } assertConduitPropertyType(AbstractFoo.class, "bar", AbstractBar.class); http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONArray.java ---------------------------------------------------------------------- diff --git a/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONArray.java b/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONArray.java index 76ea531..7cb7d55 100644 --- a/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONArray.java +++ b/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONArray.java @@ -386,7 +386,7 @@ public final class JSONArray extends JSONCollection implements Iterable<Object> */ public JSONArray put(Object value) { - // now testValidity checks for null values. + // now testValidity checks for null values. // assert value != null; JSONObject.testValidity(value); http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/31208705/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONObject.java ---------------------------------------------------------------------- diff --git a/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONObject.java b/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONObject.java index 7c5ccb4..1392bb8 100644 --- a/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONObject.java +++ b/tapestry-json/src/main/java/org/apache/tapestry5/json/JSONObject.java @@ -913,7 +913,7 @@ public final class JSONObject extends JSONCollection */ static void printValue(JSONPrintSession session, Object value) { - + if (value instanceof JSONObject) { ((JSONObject) value).print(session);