You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/10/11 23:47:16 UTC

svn commit: r1182106 - in /tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc: internal/services/MasterObjectProviderImpl.java internal/services/StaticObjectProvider.java services/MasterObjectProvider.java

Author: hlship
Date: Tue Oct 11 21:47:15 2011
New Revision: 1182106

URL: http://svn.apache.org/viewvc?rev=1182106&view=rev
Log:
TAP5-1690: OperationTracker should be injectable in Tapestry components

Added:
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/StaticObjectProvider.java
Modified:
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/MasterObjectProviderImpl.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/MasterObjectProvider.java

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/MasterObjectProviderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/MasterObjectProviderImpl.java?rev=1182106&r1=1182105&r2=1182106&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/MasterObjectProviderImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/MasterObjectProviderImpl.java Tue Oct 11 21:47:15 2011
@@ -1,4 +1,4 @@
-// Copyright 2007, 2009 The Apache Software Foundation
+// Copyright 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.
@@ -16,8 +16,9 @@ package org.apache.tapestry5.ioc.interna
 
 import org.apache.tapestry5.ioc.*;
 import org.apache.tapestry5.ioc.annotations.PreventServiceDecoration;
-import org.apache.tapestry5.ioc.services.ClassFabUtils;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.services.MasterObjectProvider;
+import org.apache.tapestry5.plastic.PlasticUtils;
 
 import java.util.List;
 
@@ -30,8 +31,11 @@ public class MasterObjectProviderImpl im
 
     public MasterObjectProviderImpl(List<ObjectProvider> configuration, OperationTracker tracker)
     {
-        this.configuration = configuration;
+        this.configuration = CollectionFactory.newList(configuration);
         this.tracker = tracker;
+
+        // Add this special case to the front of the list.
+        this.configuration.add(0, new StaticObjectProvider(OperationTracker.class, tracker));
     }
 
     public <T> T provide(final Class<T> objectType, final AnnotationProvider annotationProvider,
@@ -39,7 +43,7 @@ public class MasterObjectProviderImpl im
                          final boolean required)
     {
         return tracker.invoke(String.format("Resolving object of type %s using MasterObjectProvider",
-                                            ClassFabUtils.toJavaClassName(objectType)), new Invokable<T>()
+                PlasticUtils.toTypeName(objectType)), new Invokable<T>()
         {
             public T invoke()
             {

Added: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/StaticObjectProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/StaticObjectProvider.java?rev=1182106&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/StaticObjectProvider.java (added)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/StaticObjectProvider.java Tue Oct 11 21:47:15 2011
@@ -0,0 +1,51 @@
+// Copyright 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.
+// 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.services;
+
+import org.apache.tapestry5.ioc.AnnotationProvider;
+import org.apache.tapestry5.ioc.ObjectLocator;
+import org.apache.tapestry5.ioc.ObjectProvider;
+
+/**
+ * Provides a single object of a given type.
+ *
+ * @since 5.3
+ */
+public class StaticObjectProvider<S> implements ObjectProvider
+{
+    private final Class<S> valueType;
+
+    private final S value;
+
+    public StaticObjectProvider(Class<S> valueType, S value)
+    {
+        this.valueType = valueType;
+        this.value = value;
+
+        assert valueType != null;
+        assert value != null;
+    }
+
+
+    public <T> T provide(Class<T> objectType, AnnotationProvider annotationProvider, ObjectLocator locator)
+    {
+        if (objectType == valueType)
+        {
+            return objectType.cast(value);
+        }
+
+        return null;
+    }
+}

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/MasterObjectProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/MasterObjectProvider.java?rev=1182106&r1=1182105&r2=1182106&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/MasterObjectProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/MasterObjectProvider.java Tue Oct 11 21:47:15 2011
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 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,6 +26,9 @@ import org.apache.tapestry5.ioc.annotati
  * This service is itself a key part of Tapestry's general injection mechanism; it is used when instantiating a service
  * implementation instance, invoking module methods (service builder, decorator, or contribution methods), when
  * {@linkplain ObjectLocator#autobuild(Class) autobuilding} objects of any type.
+ * <p/>
+ * As of Tapestry 5.3, the MasterObjectProvider allows injection of {@link org.apache.tapestry5.ioc.OperationTracker} as a
+ * special case (not based on a contributed ObjectProvider).
  */
 @UsesOrderedConfiguration(ObjectProvider.class)
 public interface MasterObjectProvider