Author: hlship
Date: Wed Jul 20 19:14:21 2011
New Revision: 1148905

URL: http://svn.apache.org/viewvc?rev=1148905&view=rev
Log:
TAP5-1565: OrderedConfiguration should have methods to make it easy to add 
elements in sequential order

Modified:
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/OrderedConfiguration.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapper.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FredModule.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapperTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/OrderedConfiguration.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/OrderedConfiguration.java?rev=1148905&r1=1148904&r2=1148905&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/OrderedConfiguration.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/OrderedConfiguration.java
 Wed Jul 20 19:14:21 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2008, 2009, 2010 The Apache Software Foundation
+// Copyright 2006, 2008, 2009, 2010, 2011 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.
@@ -26,7 +26,10 @@ package org.apache.tapestry5.ioc;
  * </ul>
  * <p/>
  * The service defines the <em>type</em> of contribution, in terms of a base 
class or service interface. Contributions
- * must be compatible with the type.
+ * must be compatible with the type, or be {@linkplain 
org.apache.tapestry5.ioc.services.TypeCoercer coercable} to the type.
+ *
+ * @see org.apache.tapestry5.ioc.annotations.Contribute
+ * @see org.apache.tapestry5.ioc.annotations.UsesConfiguration
  */
 public interface OrderedConfiguration<T>
 {
@@ -34,25 +37,23 @@ public interface OrderedConfiguration<T>
      * Adds an ordered object to a service's contribution. Each object has an 
id (which must be unique). Optionally,
      * pre-requisites (a list of ids that must precede this object) and 
post-requisites (ids that must follow) can be
      * provided.
-     * 
-     * @param id
-     *            a unique id for the object; the id will be fully qualified 
with the contributing module's id
-     * @param constraints
-     *            used to order the object relative to other contributed 
objects
-     * @parm object to add to the service's configuration
+     * <p/>
+     * <p>If no constraints are supplied, then an implicit constraint is 
supplied: after the previously
+     * contributed id <em>within the same contribution method</em>.
+     *
+     * @param id          a unique id for the object; the id will be fully 
qualified with the contributing module's id
+     * @param constraints used to order the object relative to other 
contributed objects
+     * @param object      to add to the service's configuration
      */
     void add(String id, T object, String... constraints);
 
     /**
      * Overrides a normally contributed object. Each override must match a 
single normally contributed object.
-     * 
-     * @param id
-     *            identifies object to override
-     * @param object
-     *            overriding object (may be null)
-     * @param constraints
-     *            contrains for the overridden object, replacing constraints 
for the original object (even if
-     *            omitted, in which case the override object will have no 
orderring contraints)
+     *
+     * @param id          identifies object to override
+     * @param object      overriding object (may be null)
+     * @param constraints constraints for the overridden object, replacing 
constraints for the original object (even if
+     *                    omitted, in which case the override object will have 
no ordering constraints)
      * @since 5.1.0.0
      */
     void override(String id, T object, String... constraints);
@@ -61,28 +62,22 @@ public interface OrderedConfiguration<T>
      * Adds an ordered object by instantiating (with dependencies) the 
indicated class. When the configuration type is
      * an interface and the class to be contributed is a local file,
      * then a reloadable proxy for the class will be created and contributed.
-     * 
-     * @param id
-     *            of contribution (used for ordering)
-     * @param clazz
-     *            class to instantiate
-     * @param constraints
-     *            used to order the object relative to other contributed 
objects
+     *
+     * @param id          of contribution (used for ordering)
+     * @param clazz       class to instantiate
+     * @param constraints used to order the object relative to other 
contributed objects
      * @since 5.1.0.0
      */
     void addInstance(String id, Class<? extends T> clazz, String... 
constraints);
 
     /**
      * Instantiates an object and adds it as an override. When the 
configuration type is an interface and the class to
-     * be contributed is a local file,
-     * then a reloadable proxy for the class will be created and contributed.
-     * 
-     * @param id
-     *            of object to override
-     * @param clazz
-     *            to instantiate
-     * @param constraints
-     *            override contraints
+     * be contributed is a local file, then a reloadable proxy for the class 
will be created and contributed.
+     *
+     * @param id          of object to override
+     * @param clazz       to instantiate
+     * @param constraints constraints for the overridden object, replacing 
constraints for the original object (even if
+     *                    omitted, in which case the override object will have 
no ordering constraints)
      * @since 5.1.0.0
      */
     void overrideInstance(String id, Class<? extends T> clazz, String... 
constraints);

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java?rev=1148905&r1=1148904&r2=1148905&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
 Wed Jul 20 19:14:21 2011
@@ -655,7 +655,7 @@ public class RegistryImpl implements Reg
         for (final ContributionDef def : contributions)
         {
             final OrderedConfiguration<T> validating = new 
ValidatingOrderedConfigurationWrapper<T>(valueType,
-                    resources, typeCoercerProxy, orderer, overrides, def, 
serviceId);
+                    resources, typeCoercerProxy, orderer, overrides, def);
 
             String description = IOCMessages.invokingMethod(def);
 

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapper.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapper.java?rev=1148905&r1=1148904&r2=1148905&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapper.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapper.java
 Wed Jul 20 19:14:21 2011
@@ -14,18 +14,18 @@
 
 package org.apache.tapestry5.ioc.internal;
 
-import java.util.Map;
-
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.OrderedConfiguration;
 import org.apache.tapestry5.ioc.def.ContributionDef;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.internal.util.Orderer;
 
+import java.util.Map;
+
 /**
  * Wraps a {@link java.util.List} as a {@link 
org.apache.tapestry5.ioc.OrderedConfiguration}, implementing validation of
  * values provided to an {@link org.apache.tapestry5.ioc.OrderedConfiguration}.
- * 
+ *
  * @param <T>
  */
 public class ValidatingOrderedConfigurationWrapper<T> extends 
AbstractConfigurationImpl<T> implements
@@ -35,17 +35,18 @@ public class ValidatingOrderedConfigurat
 
     private final Orderer<T> orderer;
 
-    private final String serviceId;
-
     private final Class<T> expectedType;
 
     private final Map<String, OrderedConfigurationOverride<T>> overrides;
 
     private final ContributionDef contribDef;
 
+    // Used to supply a default ordering constraint when none is supplied.
+    private String priorId;
+
     public ValidatingOrderedConfigurationWrapper(Class<T> expectedType, 
ObjectLocator locator,
-            TypeCoercerProxy typeCoercer, Orderer<T> orderer, Map<String, 
OrderedConfigurationOverride<T>> overrides,
-            ContributionDef contribDef, String serviceId)
+                                                 TypeCoercerProxy typeCoercer, 
Orderer<T> orderer, Map<String, OrderedConfigurationOverride<T>> overrides,
+                                                 ContributionDef contribDef)
     {
         super(expectedType, locator);
         this.typeCoercer = typeCoercer;
@@ -53,7 +54,6 @@ public class ValidatingOrderedConfigurat
         this.orderer = orderer;
         this.overrides = overrides;
         this.contribDef = contribDef;
-        this.serviceId = serviceId;
         this.expectedType = expectedType;
     }
 
@@ -61,7 +61,18 @@ public class ValidatingOrderedConfigurat
     {
         T coerced = object == null ? null : typeCoercer.coerce(object, 
expectedType);
 
+        // https://issues.apache.org/jira/browse/TAP5-1565
+        // Order each added contribution after the previously added 
contribution
+        // (in the same method) if no other constraint is supplied.
+        if (constraints.length == 0 && priorId != null)
+        {
+            // Ugly: reassigning parameters is yuck.
+            constraints = new String[]{"after:" + priorId};
+        }
+
         orderer.add(id, coerced, constraints);
+
+        priorId = id;
     }
 
     public void override(String id, T object, String... constraints)

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FredModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FredModule.java?rev=1148905&r1=1148904&r2=1148905&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FredModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/FredModule.java
 Wed Jul 20 19:14:21 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2009, 2011 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.
@@ -93,10 +93,8 @@ public class FredModule
 
     public void contributeOrderedNames(OrderedConfiguration<String> 
configuration)
     {
-        // Order "FRED" after "BARNEY"
-
-        configuration.add("fred", "FRED", "after:barney");
         configuration.add("barney", "BARNEY");
+        configuration.add("fred", "FRED");
     }
 
     public void contributeUnorderedNames(Configuration<String> configuration)

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapperTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapperTest.java?rev=1148905&r1=1148904&r2=1148905&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapperTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ValidatingOrderedConfigurationWrapperTest.java
 Wed Jul 20 19:14:21 2011
@@ -46,7 +46,7 @@ public class ValidatingOrderedConfigurat
         replay();
 
         OrderedConfiguration<Runnable> wrapper = new 
ValidatingOrderedConfigurationWrapper<Runnable>(Runnable.class,
-                null, tc, orderer, null, null, "Service");
+                null, tc, orderer, null, null);
 
         wrapper.add("id", contribution, "after:pre", "before:post");
 
@@ -76,7 +76,7 @@ public class ValidatingOrderedConfigurat
         replay();
 
         OrderedConfiguration<Map> wrapper = new 
ValidatingOrderedConfigurationWrapper<Map>(Map.class, locator, tc,
-                orderer, null, null, "Service");
+                orderer, null, null);
 
         wrapper.addInstance("id", HashMap.class, "after:pre", "before:post");
 
@@ -94,7 +94,7 @@ public class ValidatingOrderedConfigurat
         replay();
 
         OrderedConfiguration<Runnable> wrapper = new 
ValidatingOrderedConfigurationWrapper<Runnable>(Runnable.class,
-                null, null, orderer, null, null, "Service");
+                null, null, orderer, null, null);
 
         wrapper.add("id", null);
 


Reply via email to