Author: hlship
Date: Sun Mar 11 11:39:49 2007
New Revision: 516982

URL: http://svn.apache.org/viewvc?view=rev&rev=516982
Log:
TAPESTRY-1341: Allow service builders named "build" and determine service id 
from the result type
Also, correct some documentation errors related to TAPESTRY-1339.

Added:
    
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultServiceIdModule.java
Modified:
    
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImpl.java
    
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/InterceptorStackBuilder.java
    
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/util/InternalUtils.java
    
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/services/TapestryIOCModule.java
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/case.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/command.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/configuration.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/decorator.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/module.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/pipeline.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/service.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/shadow.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/strategy.apt
    tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/symbols.apt
    
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImplTest.java
    
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/util/InternalUtilsTest.java

Modified: 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImpl.java?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImpl.java
 (original)
+++ 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImpl.java
 Sun Mar 11 11:39:49 2007
@@ -267,6 +267,11 @@
         // TODO: Methods named just "build"
         String serviceId = stripMethodPrefix(method, BUILD_METHOD_NAME_PREFIX);
 
+        // If the method name was just "build()", then work from the return 
type.
+
+        if (serviceId.equals(""))
+            serviceId = 
InternalUtils.lastTerm(method.getReturnType().getName());
+
         ServiceDef existing = _serviceDefs.get(serviceId);
         if (existing != null)
         {

Modified: 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/InterceptorStackBuilder.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/InterceptorStackBuilder.java?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/InterceptorStackBuilder.java
 (original)
+++ 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/InterceptorStackBuilder.java
 Sun Mar 11 11:39:49 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 2007 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.

Modified: 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/util/InternalUtils.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/util/InternalUtils.java?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/util/InternalUtils.java
 (original)
+++ 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/util/InternalUtils.java
 Sun Mar 11 11:39:49 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.
@@ -46,10 +46,6 @@
      */
     public static final String NAME_PREFIX = "_$";
 
-    private InternalUtils()
-    {
-    }
-
     /**
      * 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,
@@ -375,5 +371,22 @@
     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)
+    {
+        Defense.notBlank(input, "input");
+
+        int dotx = input.lastIndexOf('.');
+
+        if (dotx < 0) return input;
+
+        return input.substring(dotx + 1);
     }
 }

Modified: 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/services/TapestryIOCModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/services/TapestryIOCModule.java?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/services/TapestryIOCModule.java
 (original)
+++ 
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/services/TapestryIOCModule.java
 Sun Mar 11 11:39:49 2007
@@ -55,17 +55,23 @@
 {
     private final ClassFactory _classFactory;
 
+    private final PropertyAccess _propertyAccess;
+
     public TapestryIOCModule(@InjectService("ClassFactory")
-    ClassFactory classFactory)
+    ClassFactory classFactory,
+
+    @InjectService("PropertyAccess")
+    PropertyAccess propertyAccess)
     {
         _classFactory = classFactory;
+        _propertyAccess = propertyAccess;
     }
 
     /**
      * The LoggingDecorator service is used to decorate a service 
implementation so that it logs
      * method entry and exit (at level debug).
      */
-    public LoggingDecorator 
buildLoggingDecorator(@InjectService("ExceptionTracker")
+    public LoggingDecorator build(@InjectService("ExceptionTracker")
     ExceptionTracker exceptionTracker)
     {
         return new LoggingDecoratorImpl(_classFactory, exceptionTracker);
@@ -76,8 +82,7 @@
      * and "primitive") but additional ones are accessed via this service (and 
its mapped
      * configuration).
      */
-    public static ServiceLifecycleSource buildServiceLifecycleSource(
-            final Map<String, ServiceLifecycle> configuration)
+    public static ServiceLifecycleSource build(final Map<String, 
ServiceLifecycle> configuration)
     {
         return new ServiceLifecycleSource()
         {
@@ -127,16 +132,15 @@
     /**
      * Builder that creates a shadow, a projection of a property of some other 
object.
      */
-    public PropertyShadowBuilder 
buildPropertyShadowBuilder(@InjectService("PropertyAccess")
-    PropertyAccess propertyAccess)
+    public PropertyShadowBuilder buildPropertyShadowBuilder()
     {
-        return new PropertyShadowBuilderImpl(_classFactory, propertyAccess);
+        return new PropertyShadowBuilderImpl(_classFactory, _propertyAccess);
     }
 
     /**
      * Builder that creates a filter pipeline around a simple service 
interface.
      */
-    public PipelineBuilder 
buildPipelineBuilder(@InjectService("DefaultImplementationBuilder")
+    public PipelineBuilder build(@InjectService("DefaultImplementationBuilder")
     DefaultImplementationBuilder builder)
     {
         return new PipelineBuilderImpl(_classFactory, builder);
@@ -181,16 +185,15 @@
         return new ExceptionTrackerImpl();
     }
 
-    public static ExceptionAnalyzer 
buildExceptionAnalyzer(@InjectService("PropertyAccess")
-    PropertyAccess access)
+    public ExceptionAnalyzer buildExceptionAnalyzer()
     {
-        return new ExceptionAnalyzerImpl(access);
+        return new ExceptionAnalyzerImpl(_propertyAccess);
     }
 
     /**
      * Returns the service that can coerce between different types.
      */
-    public static TypeCoercer buildTypeCoercer(Collection<CoercionTuple> 
configuration)
+    public static TypeCoercer build(Collection<CoercionTuple> configuration)
     {
         return new TypeCoercerImpl(configuration);
     }
@@ -426,7 +429,7 @@
         return new ThreadLocaleImpl();
     }
 
-    public static SymbolSource buildSymbolSource(List<SymbolProvider> 
configuration)
+    public static SymbolSource build(List<SymbolProvider> configuration)
     {
         return new SymbolSourceImpl(configuration);
     }

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/case.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/case.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/case.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/case.apt Sun Mar 11 
11:39:49 2007
@@ -7,9 +7,7 @@
   Ever get frustrated because you typed the right thing with the wrong case 
and your system blew up?  We do.
   
   Tapestry IOC attempts to be case insensitive for all the main constructs:
-  
-  * Module ids.
-  
+   
   * Service ids.
   
   * Object provider prefixes.
@@ -18,7 +16,7 @@
   
   []
   
-  Thus, <<<getService("fBaz", Baz.class)>>> is preferred, but 
<<<getService("BAZ", Baz.class)>>> (or any variation thereof) will work just 
exactly as well.  This also extends to other naming conventions,
+  Thus, <<<getService("Baz", Baz.class)>>> is preferred, but 
<<<getService("BAZ", Baz.class)>>> (or any variation thereof) will work just 
exactly as well.  This also extends to other naming conventions,
   such as <<<contributeFoo>>> methods. It also applies to values inside 
annotations.
   
   Just case is ignored --

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/command.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/command.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/command.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/command.apt Sun Mar 11 
11:39:49 2007
@@ -54,7 +54,7 @@
   We can just let the ChainBuilder service create that object.
   
 +----+
-  public static MyChainService buildMyChainService(List<MyChainService> 
commands,
+  public static MyChainService build(List<MyChainService> commands,
     @InjectService("ChainBuilder")
     ChainBuilder chainBuilder)
   {

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/configuration.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/configuration.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/configuration.apt 
(original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/configuration.apt Sun 
Mar 11 11:39:49 2007
@@ -40,8 +40,7 @@
   "contribute":
   
 +------+
-  @Contribute("FileServicerDispatcher")
-  public static void 
contributeFileServicers(MappedConfiguration<String,FileServicer> configuration)
+  public static void 
contributeFileServicerDispatcher(MappedConfiguration<String,FileServicer> 
configuration)
   {
     configuration.add("txt", new TextFileServicer());
     configuration.add("pdf", new PDFFileServicer());
@@ -51,8 +50,7 @@
   Like service builder and service decorator methods, we can inject services 
if we like:
   
 +------+
-  @Contribute("FileServicerDispatcher")
-  public static void 
contributeFileServicers(MappedConfiguration<String,FileServicer> configuration,
+  public static void 
contributFileServicerDispatcher(MappedConfiguration<String,FileServicer> 
configuration,
   
     @InjectService("TextFileServicer") FileServicer textFileServicer,
     
@@ -67,7 +65,7 @@
   service configuration:
   
 +------+
-   public static void 
contributeFileServicers(MappedConfiguration<String,FileServicer> configuration)
+   public static void 
contributeFileServicerDispatcher(MappedConfiguration<String,FileServicer> 
configuration)
   {
     configuration.add("doc", new WordFileServicer());
     configuration.add("ppt", new PowerPointFileServicer());

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/decorator.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/decorator.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/decorator.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/decorator.apt Sun Mar 11 
11:39:49 2007
@@ -61,7 +61,7 @@
 
 public class MyAppModule
 {
-  public static Indexer buildIndexer()
+  public static Indexer build()
   {
     return new IndexerImpl();
   }
@@ -115,7 +115,7 @@
 
 public class MyAppModule
 {
-  public static Indexer buildIndexer(Class serviceInterface, Log serviceLog,
+  public static Indexer build(Class serviceInterface, Log serviceLog,
     @InjectService("LoggingDecorator")
     LoggingInterceptorFactory decorator)
   {

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/module.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/module.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/module.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/module.apt Sun Mar 11 
11:39:49 2007
@@ -18,7 +18,7 @@
 
 public class MyAppModule
 {
-  public static Indexer buildIndexer()
+  public static Indexer build()
   {
     return new IndexerImpl();
   }
@@ -26,13 +26,28 @@
 
+-----------------------------------------------------------------------------------+
 
   Any public method (static or instance) whose name starts with "build" is a 
service builder method, implicitly
-  defining a service within the module.  Here we're defining a service around
+  defining a service within the module. 
+  
+  
+  Here we're defining a service around
   the Indexer service interface (presumably also in the 
org.example.myapp.services
   package).
-
-  The service's unique id is derived from the method name.
-  Here "build" was stripped off of "buildIndexer", leaving "Indexer".  This id 
is how
-  other services will refer to the Indexer service.  Tapestry IoC is case 
insensitive; later we can
+  
+  
+  Every service has a unique id, used to identify it throughout the Registry 
of services (the Registry
+  is the combined sum of all services from all modules). If you don't provide 
an explicit service id,
+  as in this example, the service id  is drawn from the return type; this 
service has an id of "Indexer".
+  
+  
+  You can give a service an explicit id by adding it to the method name:  
buildIndexer().  This is useful
+  when you do not want the service id to match the service interface name (for 
example, when you have different
+  services that implement the same interface), or when you need to avoid name 
collisions on the 
+  method name (Java allows only a single method with a given name and set of 
parameters, even if the return
+  types are differenty, so if you have two different service builder methods 
that take the same parameters,
+  you should give them explicit service ids in the method name).
+  
+  
+  Tapestry IoC is {{{case.html}case insensitive}}; later we can
   refer to this service as "indexer" or "INDEXER" or any variation thereof, 
and connect to
   this service.
   
@@ -72,7 +87,7 @@
     _fileSystem = fileSystem;
   }
   
-  public Indexer buildIndexer()
+  public Indexer build()
   {
     IndexerImpl indexer = new IndexerImpl(_fileSystem);
       

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/pipeline.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/pipeline.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/pipeline.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/pipeline.apt Sun Mar 11 
11:39:49 2007
@@ -72,7 +72,7 @@
   must be provided.  The bridges and the terminator implement the service 
interface.
   
 +-----+
-  public static StringTransformService buildStringTransform(
+  public static StringTransformService build(
     @InjectService("PipelineBuilder")
     PipelineBuilder builder,
     List<StringTransformFilter> configuration,

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/service.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/service.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/service.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/service.apt Sun Mar 11 
11:39:49 2007
@@ -22,7 +22,7 @@
 
 public class MyAppModule
 {
-  public static Indexer buildIndexer()
+  public static Indexer build()
   {
     return new IndexerImpl();
   }
@@ -32,7 +32,16 @@
   Here the service interface is Indexer (presumably inside the 
org.example.myapp.services package,
   since there isn't an import).  Tapestry IoC doesn't know about the 
IndexerImpl class (the
   service implementation of the Indexer service), but it does know 
-  about the buildIndexer() method.
+  about the build() method.
+  
+  That's one of the great innovations of Tapestry IoC: we don't try to 
encapsulate in XML or annotations
+  all the different ways possible to create a service; those things are best 
expressed in Java code.
+  For a simple case (as here), it would be hard for external configuration 
(again, in XML or Java annotations)
+  to be shorter than "new IndexerImpl()".
+  
+  For more complex and realistic scenarios, such as injecting dependencies via 
the constructor, or
+  doing more interest work (such as registering the newly created service for 
events published by some other service),
+  the Java code is simply the most direct, flexible, extensible and readable 
approach.
   
 {Injecting Dependencies} with @InjectService
 
@@ -41,7 +50,7 @@
   when it executes, and a FileSystem to access files and store indexes.
   
 
+-----------------------------------------------------------------------------------+
-  public static Indexer buildIndexer(@InjectService("JobScheduler")
+  public static Indexer build(@InjectService("JobScheduler")
     JobScheduler scheduler, 
     
     @InjectService("FileSystem")
@@ -82,7 +91,7 @@
   as:
     
 
+-----------------------------------------------------------------------------------+
-  public static Indexer buildIndexer(@Inject("service:JobScheduler")
+  public static Indexer build(@Inject("service:JobScheduler")
     JobScheduler scheduler, @Inject("service:FileSystem")
     FileSystem fileSystem)
   {
@@ -199,7 +208,7 @@
   Example:
   
 
+-----------------------------------------------------------------------------------+
-  public static Indexer buildIndexer(String serviceId, Log serviceLog, 
+  public static Indexer build(String serviceId, Log serviceLog, 
   
     @InjectService("JobScheduler")
     JobScheduler scheduler, 
@@ -247,7 +256,7 @@
   Example:
   
 
+-----------------------------------------------------------------------------------+
-  public static Indexer buildIndexer(JobScheduler scheduler, FileSystem 
fileSystem)
+  public static Indexer build(JobScheduler scheduler, FileSystem fileSystem)
   {
     IndexerImpl indexer = new IndexerImpl(fileSystem);
       
@@ -292,7 +301,7 @@
   With Tapestry IoC, this is not even considered a special case:
   
 
+-----------------------------------------------------------------------------------+
-  public static Indexer buildIndexer(JobScheduler scheduler, FileSystem 
fileSystem)
+  public static Indexer build(JobScheduler scheduler, FileSystem fileSystem)
   {
     IndexerImpl indexer = new IndexerImpl(fileSystem);
   
@@ -301,7 +310,7 @@
     return indexer;
   }
     
-  public static buildFileSystem(Indexer indexer)
+  public static build(Indexer indexer)
   {
     return new FileSystemImpl(indexer);
   }  

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/shadow.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/shadow.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/shadow.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/shadow.apt Sun Mar 11 
11:39:49 2007
@@ -10,7 +10,7 @@
   
   Effectively, it is used to allow a property of another service to be exposed 
as its own service.
   
-  For example, the tapestry module provides a WebRequest property as a shadow 
of the RequestGlobals
+  For example, the tapestry-core module provides a WebRequest property as a 
shadow of the RequestGlobals
   service's request property:
   
 +----+
@@ -41,9 +41,13 @@
 Non-Reflective
 
   When the shadow is created, reflection is used to translate the property 
name to a method name.
-  At runtime, reflection is not used.  A typical method is implemented is 
(approximately):
+  This information is used to build a new class (at runtime) that is 
instantiated as the service implementation.
+  
+  A typical method is implemented as (approximately):
   
 +----+
+private RequestGlobals _source;
+
 public String getParameter(String name)
 {
   return _source.getRequest().getParameter(name);
@@ -51,6 +55,7 @@
 +----+
 
   That is, the shadow implementation holds onto the target object (in the 
above example,
-  the RequestGlobals service) and invokes a method on it directly, not using 
reflection.
+  the RequestGlobals service) and invokes a method on it directly, not using 
reflection, no differently
+  than you would if you wrote the code yourself.
   
   

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/strategy.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/strategy.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/strategy.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/strategy.apt Sun Mar 11 
11:39:49 2007
@@ -42,7 +42,7 @@
   You conver the configuration into a StrategyRegistry, and use that to build 
the final service:
   
 +---+
-  public static MyStrategyService buildMyStrategyService(Map<Class, 
MyStrategyService> configuration,
+  public static MyStrategyService build(Map<Class, MyStrategyService> 
configuration,
     @InjectService("StrategyBuilder")
     StrategyBuilder builder)
   {

Modified: tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/symbols.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/symbols.apt?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/symbols.apt (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/src/site/apt/symbols.apt Sun Mar 11 
11:39:49 2007
@@ -18,7 +18,7 @@
   For example:
   
 +----+
-  public static MyService buildMyService(@Inject("${some-reference}") 
CollaboratorA collabA,
+  public static MyService build(@Inject("${some-reference}") CollaboratorA 
collabA,
       @InjectService("${some-service-id}") CollaboratorB collabB)
   {
     return . . . ;

Modified: 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImplTest.java?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImplTest.java
 (original)
+++ 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultModuleDefImplTest.java
 Sun Mar 11 11:39:49 2007
@@ -78,7 +78,24 @@
         assertEquals(dd.toString(), className + ".decorateLogging(Class, 
Object)");
 
         verify();
+    }
 
+    @Test
+    public void default_service_id_from_return_type()
+    {
+        Log log = newLog();
+
+        replay();
+
+        ModuleDef def = new DefaultModuleDefImpl(DefaultServiceIdModule.class, 
log);
+
+        assertEquals(def.getServiceIds().size(), 1);
+
+        ServiceDef sd = def.getServiceDef("FieService");
+
+        assertEquals(sd.getServiceId(), "FieService");
+
+        verify();
     }
 
     /** Two different methods both claim to build the same service. */

Added: 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultServiceIdModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultServiceIdModule.java?view=auto&rev=516982
==============================================================================
--- 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultServiceIdModule.java
 (added)
+++ 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/DefaultServiceIdModule.java
 Sun Mar 11 11:39:49 2007
@@ -0,0 +1,23 @@
+// 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.tapestry.ioc.internal;
+
+public class DefaultServiceIdModule
+{
+    public FieService build()
+    {
+        return null;
+    }
+}

Modified: 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/util/InternalUtilsTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/util/InternalUtilsTest.java?view=diff&rev=516982&r1=516981&r2=516982
==============================================================================
--- 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/util/InternalUtilsTest.java
 (original)
+++ 
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/util/InternalUtilsTest.java
 Sun Mar 11 11:39:49 2007
@@ -278,4 +278,13 @@
         }
     }
 
+    @Test
+    public void last_term()
+    {
+        String input = "SimpleInput";
+
+        assertSame(InternalUtils.lastTerm(input), input);
+
+        assertEquals(InternalUtils.lastTerm("fie.fie.foe.fum"), "fum");
+    }
 }


Reply via email to