You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemind.apache.org by ah...@apache.org on 2007/02/09 08:47:26 UTC

svn commit: r505210 - in /hivemind/hivemind2/trunk: annotations/src/java/org/apache/hivemind/annotations/ annotations/src/java/org/apache/hivemind/annotations/internal/ annotations/src/test/org/apache/hivemind/annotations/ framework/src/java/org/apache...

Author: ahuegen
Date: Thu Feb  8 23:47:25 2007
New Revision: 505210

URL: http://svn.apache.org/viewvc?view=rev&rev=505210
Log:
Submodule annotation added

Added:
    hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Submodule.java
    hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Submodule1.java
    hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Supermodule.java
Modified:
    hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Module.java
    hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java
    hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/TestAnnotatedModules.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParser.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserConstructor.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserDefinition.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConstructionContext.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/Contribution.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionContext.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionDefinition.java
    hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ServicePointDefinition.java

Modified: hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Module.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Module.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Module.java (original)
+++ hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Module.java Thu Feb  8 23:47:25 2007
@@ -8,6 +8,7 @@
 
 /**
  * Marks a class as an annotated module and assigns an id to it. 
+ * The class must be public, non final and must have a no arguments constructor.
  * 
  * @author Achim Huegen
  */

Added: hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Submodule.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Submodule.java?view=auto&rev=505210
==============================================================================
--- hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Submodule.java (added)
+++ hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/Submodule.java Thu Feb  8 23:47:25 2007
@@ -0,0 +1,20 @@
+package org.apache.hivemind.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Defines a submodule of an annotated module. The return type of the annotated method
+ * defines the class of the submodule. This class must be an annotated module class itself.
+ *  
+ * @author Achim Huegen
+ */
+@Documented
+@Retention(value = RetentionPolicy.RUNTIME)
+@Target(value = ElementType.METHOD)
+public @interface Submodule {
+    String id();
+}

Modified: hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java (original)
+++ hivemind/hivemind2/trunk/annotations/src/java/org/apache/hivemind/annotations/internal/AnnotatedModuleProcessor.java Thu Feb  8 23:47:25 2007
@@ -12,6 +12,7 @@
 import org.apache.hivemind.annotations.Configuration;
 import org.apache.hivemind.annotations.Module;
 import org.apache.hivemind.annotations.Service;
+import org.apache.hivemind.annotations.Submodule;
 import org.apache.hivemind.definition.Contribution;
 import org.apache.hivemind.definition.ImplementationConstructor;
 import org.apache.hivemind.definition.ImplementationDefinition;
@@ -50,15 +51,22 @@
         _classResolver = classResolver;
         _errorHandler = errorHandler;
     }
+    
+    public void processModule(Class moduleClass)
+    {
+        String moduleId = determineModuleId(moduleClass);
+        processModule(moduleClass, moduleId);
+    }
 
     /**
-     * Processes a module. Inspects the class
+     * Processes a module. Inspects the class.
+     * 
      * 
      * @param moduleClass
      */
-    public void processModule(Class moduleClass)
+    public void processModule(Class moduleClass, String moduleId)
     {
-        ModuleDefinitionImpl module = new ModuleDefinitionImpl(determineModuleId(moduleClass),
+        ModuleDefinitionImpl module = new ModuleDefinitionImpl(moduleId,
                 createModuleLocation(moduleClass), _classResolver, moduleClass.getPackage().getName());
 
         // processServices(moduleClass);
@@ -74,7 +82,7 @@
 
     }
 
-    public void processModuleMethods(Class moduleClass, ModuleDefinitionImpl module,
+    private void processModuleMethods(Class moduleClass, ModuleDefinitionImpl module,
             ModuleInstanceProvider instanceProvider)
     {
         Method[] methods = moduleClass.getMethods();
@@ -85,7 +93,7 @@
         }
     }
 
-    public void processMethod(Method method, ModuleDefinitionImpl module,
+    private void processMethod(Method method, ModuleDefinitionImpl module,
             ModuleInstanceProvider instanceProvider)
     {
         if (_log.isDebugEnabled())
@@ -122,6 +130,14 @@
                         module,
                         instanceProvider);
             }
+            else if (Submodule.class.equals(annotation.annotationType()))
+            {
+                processAnnotatedSubmoduleMethod(
+                        method,
+                        (Submodule) annotation,
+                        module,
+                        instanceProvider);
+            }
         }
 
     }
@@ -191,6 +207,25 @@
                 contribution.configurationId());
         module.addContribution(qualifiedConfigurationId, cd);
 
+    }
+    
+    /**
+     * Processes a method that is marked as submodule definition.
+     */
+    private void processAnnotatedSubmoduleMethod(Method method, Submodule submodule, ModuleDefinitionImpl module, ModuleInstanceProvider instanceProvider)
+    {
+        if (_log.isDebugEnabled())
+        {
+            _log.debug("Method " + method.getName() + "classified as submodule.");
+        }
+        
+        String fullModuleId = IdUtils.qualify(
+                module.getId(),
+                submodule.id());
+        // TODO: Check if return type is defined
+        AnnotatedModuleProcessor submoduleProcessor = new AnnotatedModuleProcessor(_registryDefinition,
+                _classResolver, _errorHandler);
+        submoduleProcessor.processModule(method.getReturnType(), fullModuleId);
     }
     
     /**

Added: hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Submodule1.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Submodule1.java?view=auto&rev=505210
==============================================================================
--- hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Submodule1.java (added)
+++ hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Submodule1.java Thu Feb  8 23:47:25 2007
@@ -0,0 +1,16 @@
+package org.apache.hivemind.annotations;
+
+import hivemind.test.services.impl.StringHolderImpl;
+
+@Module(id = "theSubModule")
+public class Submodule1 extends AbstractAnnotatedModule
+{
+    @Service(id = "StringHolder")
+    public StringHolderImpl getStringHolderService()
+    {
+        StringHolderImpl result = new StringHolderImpl();
+        result.setValue("test");
+        return result;
+    }
+
+}

Added: hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Supermodule.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Supermodule.java?view=auto&rev=505210
==============================================================================
--- hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Supermodule.java (added)
+++ hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/Supermodule.java Thu Feb  8 23:47:25 2007
@@ -0,0 +1,12 @@
+package org.apache.hivemind.annotations;
+
+@Module(id = "super")
+public class Supermodule extends AbstractAnnotatedModule
+{
+    @Submodule(id = "sub")
+    public Submodule1 getSubmodule()
+    {
+        return null;
+    }
+
+}

Modified: hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/TestAnnotatedModules.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/TestAnnotatedModules.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/TestAnnotatedModules.java (original)
+++ hivemind/hivemind2/trunk/annotations/src/test/org/apache/hivemind/annotations/TestAnnotatedModules.java Thu Feb  8 23:47:25 2007
@@ -1,6 +1,7 @@
 package org.apache.hivemind.annotations;
 
 import hivemind.test.services.ServiceAutowireTarget;
+import hivemind.test.services.StringHolder;
 
 import org.apache.hivemind.Registry;
 
@@ -13,4 +14,11 @@
         assertNotNull(service.getStringHolder());
     }
     
+    public void testSubmodule()
+    {
+        Registry registry = constructRegistry(Supermodule.class);
+        StringHolder service = (StringHolder) registry.getService("super.sub.StringHolder", StringHolder.class);
+        assertNotNull(service);
+    }
+
 }

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParser.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParser.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParser.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParser.java Thu Feb  8 23:47:25 2007
@@ -2,7 +2,12 @@
 
 import java.io.InputStream;
 
-
+/**
+ * Parses configuration data that is provided in a textual format.
+ * A new instance is created for each parsing operation.
+ * 
+ * @author Huegen
+ */
 public interface ConfigurationParser
 {
     /**

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserConstructor.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserConstructor.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserConstructor.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserConstructor.java Thu Feb  8 23:47:25 2007
@@ -1,7 +1,16 @@
 package org.apache.hivemind.definition;
 
-
+/**
+ * Factory for the creation of a {@link ConfigurationParser}.
+ * 
+ * @author Huegen
+ */
 public interface ConfigurationParserConstructor
 {
+    /**
+     * Constructs a parser instance.
+     * @param context  provides access to elements of the registry which are needed for the construction.
+     * @return  the parser 
+     */
     public ConfigurationParser constructParser(ConstructionContext context);
 }

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserDefinition.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserDefinition.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserDefinition.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationParserDefinition.java Thu Feb  8 23:47:25 2007
@@ -1,9 +1,14 @@
 package org.apache.hivemind.definition;
 
-
 /**
  * Defines a parser for the processing of configuration data that is provided
- * in a textual format.
+ * in a textual format.  The parsed data is handled as {@link Contribution} to a 
+ * configuration point. Each parser is associated with a certain input format,
+ * which is specified by {@link #getInputFormat()}.
+ * The parsing is done by an instance of {@link ConfigurationParser}
+ * which is created by a {@link ConfigurationParserConstructor}.
+ * 
+ * @author Huegen
  */
 public interface ConfigurationParserDefinition extends ExtensionDefinition
 {

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConfigurationPointDefinition.java Thu Feb  8 23:47:25 2007
@@ -4,27 +4,53 @@
 
 import org.apache.hivemind.ApplicationRuntimeException;
 
+/**
+ * Defines a configuration extension point.
+ * The definition includes the configuration type, contributions and parsers.
+ * 
+ * @author Achim Huegen
+ */
 public interface ConfigurationPointDefinition extends ExtensionPointDefinition
 {
+    /**
+     * @return  the fully qualified class name of the configuration type
+     */
     public String getConfigurationTypeName();
 
+    /**
+     * @return  the expected number of contributions to this configuration point
+     */
     public Occurances getExpectedContributions();
 
+    /**
+     * @return  the contributions to this configuration as instances of {@link ContributionDefinition}
+     */
     public Collection getContributions();
 
     /**
-     * @param contribution
+     * Adds a contribution.
+     * @param contribution  the contribution
      * @throws ApplicationRuntimeException  if this point is not visible from contribution
      */
     public void addContribution(ContributionDefinition contribution);
 
     /**
-     * @param parser
+     * Adds a parser definition.
+     * @param parser  the parser
      * @throws ApplicationRuntimeException  if this point is not visible from parser
+     *   or if a parser for the specified format is already defined
      */
     public void addParser(ConfigurationParserDefinition parser);
     
+    /**
+     * Returns the parsers which is responsible for processing the specified <code>inputFormat</code>.
+     * @param inputFormat  the input format
+     * @return the parser  
+     */
     public ConfigurationParserDefinition getParser(String inputFormat);
 
+    /**
+     * @return  returns all parsers as instances of {@link ConfigurationParserDefinition}
+     */
     public Collection getParsers();
 }

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConstructionContext.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConstructionContext.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConstructionContext.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ConstructionContext.java Thu Feb  8 23:47:25 2007
@@ -37,5 +37,12 @@
      */
     public Object getConfiguration(String configurationId);
     
+    /**
+     * Returns a reference to the {@link RegistryInfrastructure}. 
+     * This allows access to services and configurations without the visibility checks
+     * performed by the other getter methods. 
+     * 
+     * @return  the registry 
+     */
     public RegistryInfrastructure getRegistry();
 }

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/Contribution.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/Contribution.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/Contribution.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/Contribution.java Thu Feb  8 23:47:25 2007
@@ -16,7 +16,7 @@
 
 
 /**
- * Contributes data to a {@link org.apache.hivemind.definition.ConfigurationPointDefinition}.
+ * Contributes data to a {@link org.apache.hivemind.definition.ConfigurationPointDefinition configuration point}.
  * 
  * @author Achim Huegen
  */
@@ -24,9 +24,10 @@
 {
     /**
      * Contributes to the configuration. The context provides methods to manipulate the
-     * configuration data. 
+     * configuration data, that is to merge with or override data already provided 
+     * by other contributions
      * 
-     * @returns   a configuration object whose type is assignable to the configuration type
+     * @param context  provides access to elements of the registry which are needed for the contribution.
      */
     public void contribute(ContributionContext context);
 }

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionContext.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionContext.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionContext.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionContext.java Thu Feb  8 23:47:25 2007
@@ -28,7 +28,7 @@
      * Replaces all configuration data with <code>data</code>. Overrides data provided by other contributions
      * so should only be called when getConfigurationData() returns null.
      *  
-     * @param data
+     * @param data  the data
      */
     public void setConfigurationData(Object data);
     

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionDefinition.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionDefinition.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionDefinition.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ContributionDefinition.java Thu Feb  8 23:47:25 2007
@@ -1,8 +1,16 @@
 package org.apache.hivemind.definition;
 
-
+/**
+ * Defines a contribution to a {@link ConfigurationPointDefinition}.
+ * The actual contribution is done by an instance of {@link Contribution}.
+ * 
+ * @author Huegen
+ */
 public interface ContributionDefinition extends ExtensionDefinition
 {
+    /**
+     * @return  the contribution implementation.
+     */
     public Contribution getContribution();
 
     /**

Modified: hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ServicePointDefinition.java
URL: http://svn.apache.org/viewvc/hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ServicePointDefinition.java?view=diff&rev=505210&r1=505209&r2=505210
==============================================================================
--- hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ServicePointDefinition.java (original)
+++ hivemind/hivemind2/trunk/framework/src/java/org/apache/hivemind/definition/ServicePointDefinition.java Thu Feb  8 23:47:25 2007
@@ -4,8 +4,7 @@
 
 /**
  * Defines a service extension point.
- * The definition includes the service interface, implementations
- * and interceptors.
+ * The definition includes the service interface, implementations and interceptors.
  * 
  * @author Achim Huegen
  */