You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jo...@apache.org on 2014/11/04 14:05:38 UTC
svn commit: r1636573 [1/2] - in /commons/sandbox/commons-inject/trunk: ./
.settings/ src/ src/main/ src/main/java/ src/main/java/org/
src/main/java/org/apache/ src/main/java/org/apache/commons/
src/main/java/org/apache/commons/inject/ src/main/java/org...
Author: jochen
Date: Tue Nov 4 13:05:37 2014
New Revision: 1636573
URL: http://svn.apache.org/r1636573
Log:
Adding Commons Inject to the Sandbox.
Added:
commons/sandbox/commons-inject/trunk/.classpath (with props)
commons/sandbox/commons-inject/trunk/.gitignore
commons/sandbox/commons-inject/trunk/.project (with props)
commons/sandbox/commons-inject/trunk/.settings/
commons/sandbox/commons-inject/trunk/.settings/org.eclipse.core.resources.prefs (with props)
commons/sandbox/commons-inject/trunk/.settings/org.eclipse.jdt.core.prefs (with props)
commons/sandbox/commons-inject/trunk/.settings/org.eclipse.m2e.core.prefs (with props)
commons/sandbox/commons-inject/trunk/pom.xml (with props)
commons/sandbox/commons-inject/trunk/src/
commons/sandbox/commons-inject/trunk/src/main/
commons/sandbox/commons-inject/trunk/src/main/java/
commons/sandbox/commons-inject/trunk/src/main/java/org/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/AbstractLoggerInjectingModule.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsInject.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsLoggingLoggerModule.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IBinding.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjector.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjectorBuilder.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Log4jLoggerModule.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/NoSuchBindingException.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/PostConstructModule.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Slf4JLoggerModule.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IAnnotatedBindingBuilder.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IBinder.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IModule.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IScopedBindingBuilder.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/Scopes.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBaseProvider.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBindingSet.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractInjector.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/BindingProxy.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjector.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjectorBuilder.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultLifecycleController.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultProvider.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FactoryMethodProvider.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FieldPoint.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IInjectorAware.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IMutableBindingSource.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/ImmutableBindingSet.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/Introspector.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/ListPoint.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/MethodPoint.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/MutableBindingSet.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/ResolvableBindingSet.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/DefaultBinding.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/DefaultBindingBuilder.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/EagerSingletonProvider.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/LazySingletonProvider.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/bind/PerCallProvider.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/util/
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/util/Exceptions.java (with props)
commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/util/Generics.java (with props)
commons/sandbox/commons-inject/trunk/src/main/resources/
commons/sandbox/commons-inject/trunk/src/test/
commons/sandbox/commons-inject/trunk/src/test/java/
commons/sandbox/commons-inject/trunk/src/test/java/org/
commons/sandbox/commons-inject/trunk/src/test/java/org/apache/
commons/sandbox/commons-inject/trunk/src/test/java/org/apache/commons/
commons/sandbox/commons-inject/trunk/src/test/java/org/apache/commons/impl/
commons/sandbox/commons-inject/trunk/src/test/java/org/apache/commons/impl/ListenerTest.java (with props)
commons/sandbox/commons-inject/trunk/src/test/java/org/apache/commons/impl/Log4jLoggerModuleTest.java (with props)
commons/sandbox/commons-inject/trunk/src/test/java/org/apache/commons/impl/SimpleInjectorTest.java (with props)
commons/sandbox/commons-inject/trunk/src/test/java/org/apache/commons/impl/TckTest.java (with props)
commons/sandbox/commons-inject/trunk/src/test/java/org/apache/commons/impl/TimeRecordingObject.java (with props)
commons/sandbox/commons-inject/trunk/src/test/resources/
Modified:
commons/sandbox/commons-inject/trunk/ (props changed)
Propchange: commons/sandbox/commons-inject/trunk/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Nov 4 13:05:37 2014
@@ -0,0 +1 @@
+target
Added: commons/sandbox/commons-inject/trunk/.classpath
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/.classpath?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/.classpath (added)
+++ commons/sandbox/commons-inject/trunk/.classpath Tue Nov 4 13:05:37 2014
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Propchange: commons/sandbox/commons-inject/trunk/.classpath
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/.gitignore
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/.gitignore?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/.gitignore (added)
+++ commons/sandbox/commons-inject/trunk/.gitignore Tue Nov 4 13:05:37 2014
@@ -0,0 +1 @@
+/target/
Added: commons/sandbox/commons-inject/trunk/.project
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/.project?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/.project (added)
+++ commons/sandbox/commons-inject/trunk/.project Tue Nov 4 13:05:37 2014
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>commons-inject</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
Propchange: commons/sandbox/commons-inject/trunk/.project
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/.settings/org.eclipse.core.resources.prefs
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/.settings/org.eclipse.core.resources.prefs?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/.settings/org.eclipse.core.resources.prefs (added)
+++ commons/sandbox/commons-inject/trunk/.settings/org.eclipse.core.resources.prefs Tue Nov 4 13:05:37 2014
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=iso-8859-1
+encoding//src/main/resources=1.6
+encoding//src/test/java=iso-8859-1
+encoding//src/test/resources=1.6
+encoding/<project>=1.6
Propchange: commons/sandbox/commons-inject/trunk/.settings/org.eclipse.core.resources.prefs
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/.settings/org.eclipse.jdt.core.prefs?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/.settings/org.eclipse.jdt.core.prefs (added)
+++ commons/sandbox/commons-inject/trunk/.settings/org.eclipse.jdt.core.prefs Tue Nov 4 13:05:37 2014
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
Propchange: commons/sandbox/commons-inject/trunk/.settings/org.eclipse.jdt.core.prefs
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/.settings/org.eclipse.m2e.core.prefs
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/.settings/org.eclipse.m2e.core.prefs?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/.settings/org.eclipse.m2e.core.prefs (added)
+++ commons/sandbox/commons-inject/trunk/.settings/org.eclipse.m2e.core.prefs Tue Nov 4 13:05:37 2014
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
Propchange: commons/sandbox/commons-inject/trunk/.settings/org.eclipse.m2e.core.prefs
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/pom.xml?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/pom.xml (added)
+++ commons/sandbox/commons-inject/trunk/pom.xml Tue Nov 4 13:05:37 2014
@@ -0,0 +1,128 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-sandbox-parent</artifactId>
+ <version>10</version>
+ </parent>
+ <artifactId>commons-inject</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <name>Apache Commons Inject</name>
+ <description>A JSR 330 compliant dependency injection framework.</description>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.felix
+ </groupId>
+ <artifactId>
+ maven-bundle-plugin
+ </artifactId>
+ <versionRange>
+ [2.3.7,)
+ </versionRange>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <execute/>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <artifactId>
+ maven-antrun-plugin
+ </artifactId>
+ <versionRange>
+ [1.7,)
+ </versionRange>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <execute/>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <artifactId>
+ maven-remote-resources-plugin
+ </artifactId>
+ <versionRange>
+ [1.4,)
+ </versionRange>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <execute/>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <properties>
+ <maven.compile.target>1.6</maven.compile.target>
+ <maven.compile.source>1.6</maven.compile.source>
+ <project.build.sourceEncoding>1.6</project.build.sourceEncoding>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject-tck</artifactId>
+ <version>1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject</groupId>
+ <artifactId>guice</artifactId>
+ <version>4.0-beta5</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.17</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.7</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.2</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Propchange: commons/sandbox/commons-inject/trunk/pom.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/AbstractLoggerInjectingModule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/AbstractLoggerInjectingModule.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/AbstractLoggerInjectingModule.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/AbstractLoggerInjectingModule.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,67 @@
+package org.apache.commons.inject.api;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.inject.api.bind.IBinder;
+import org.apache.commons.inject.api.bind.IModule;
+import org.apache.commons.inject.api.bind.IBinder.IInjectionParticipator;
+import org.apache.commons.inject.util.Exceptions;
+
+public abstract class AbstractLoggerInjectingModule<Log> implements IModule {
+
+ @Override
+ public void configure(IBinder pBinder) {
+ pBinder.add(new IInjectionParticipator() {
+ @Override
+ public List<IPoint<Object>> getPoints(IKey<?> pKey, Class<?> pType) {
+ final List<IPoint<Object>> points = new ArrayList<IPoint<Object>>();
+ final Field[] fields = pType.getDeclaredFields();
+ final Class<? extends Annotation> annotationClass = getAnnotationClass();
+ for (final Field f : fields) {
+ if (f.isAnnotationPresent(annotationClass)) {
+ final Annotation annotation = f.getAnnotation(annotationClass);
+ String id = getId(annotation, f.getDeclaringClass());
+ if (id == null || id.length() == 0) {
+ id = f.getDeclaringClass().getName();
+ }
+ final Log logger = newLogger(id);
+ points.add(new IPoint<Object>(){
+ @Override
+ public void injectTo(Object pInstance,
+ IInjector pInjector) {
+ try {
+ if (!f.isAccessible()) {
+ f.setAccessible(true);
+ }
+ f.set(pInstance, logger);
+ } catch (Throwable t) {
+ throw Exceptions.show(t);
+ }
+ }
+ });
+ }
+ }
+ return points;
+ }
+ });
+ }
+
+ protected abstract Log newLogger(String pId);
+
+ protected Class<? extends Annotation> getAnnotationClass() {
+ return InjLogger.class;
+ }
+
+ protected String getId(Annotation pAnnotation, Class<?> pClass) {
+ final InjLogger injLogger = (InjLogger) pAnnotation;
+ final String id = injLogger.id();
+ if (id == null || id.length() == 0) {
+ return pClass.getName();
+ } else {
+ return id;
+ }
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/AbstractLoggerInjectingModule.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsInject.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsInject.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsInject.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsInject.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,29 @@
+package org.apache.commons.inject.api;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.commons.inject.api.bind.IModule;
+import org.apache.commons.inject.impl.DefaultInjectorBuilder;
+
+public class CommonsInject {
+ public static IInjector build(IModule... pModules) {
+ if (pModules == null) {
+ throw new NullPointerException("The module list must not be null.");
+ }
+ final Collection<IModule> modules = Arrays.asList(pModules);
+ return build(modules);
+ }
+ public static IInjector build(Collection<IModule> pModules) {
+ if (pModules == null) {
+ throw new NullPointerException("The module list must not be null.");
+ }
+ if (pModules.isEmpty()) {
+ throw new IllegalArgumentException("The module list must not be empty.");
+ }
+ return new DefaultInjectorBuilder(pModules).build();
+ }
+ public static IInjectorBuilder newBuilder() {
+ return new DefaultInjectorBuilder();
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsInject.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsLoggingLoggerModule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsLoggingLoggerModule.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsLoggingLoggerModule.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsLoggingLoggerModule.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,11 @@
+package org.apache.commons.inject.api;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class CommonsLoggingLoggerModule extends AbstractLoggerInjectingModule<Log> {
+ @Override
+ protected Log newLogger(String pId) {
+ return LogFactory.getLog(pId);
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/CommonsLoggingLoggerModule.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IBinding.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IBinding.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IBinding.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IBinding.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,6 @@
+package org.apache.commons.inject.api;
+
+public interface IBinding<T> {
+ IProvider<T> getProvider();
+ IPoint<T> getPoint();
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IBinding.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjector.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjector.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjector.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjector.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,13 @@
+package org.apache.commons.inject.api;
+
+public interface IInjector {
+ <T> T getInstance(Class<T> pType);
+ <T> T getInstance(Class<T> pType, String pName);
+ <T> T getInstance(IKey<T> pKey);
+
+ <T> T requireInstance(Class<T> pType) throws NoSuchBindingException;
+ <T> T requireInstance(Class<T> pType, String pName) throws NoSuchBindingException;
+ <T> T requireInstance(IKey<T> pKey) throws NoSuchBindingException;
+
+ void injectMembers(Object pInstance);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjector.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjectorBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjectorBuilder.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjectorBuilder.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjectorBuilder.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,10 @@
+package org.apache.commons.inject.api;
+
+import java.util.Collection;
+
+import org.apache.commons.inject.api.bind.IModule;
+
+public interface IInjectorBuilder {
+ IInjectorBuilder modules(IModule... pModules);
+ IInjectorBuilder modules(Collection<IModule> pModules);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IInjectorBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,9 @@
+package org.apache.commons.inject.api;
+
+import java.lang.annotation.Annotation;
+
+public interface IKey<T> {
+ Class<T> getType();
+ String getName();
+ Annotation[] getAnnotations();
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IKey.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,6 @@
+package org.apache.commons.inject.api;
+
+public interface ILifecycleController extends ILifecycleListener {
+ boolean add(ILifecycleListener pListener);
+ boolean remove(ILifecycleListener pListener);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleController.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,6 @@
+package org.apache.commons.inject.api;
+
+public interface ILifecycleListener {
+ void start();
+ void shutdown();
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/ILifecycleListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,5 @@
+package org.apache.commons.inject.api;
+
+public interface IPoint<T> {
+ void injectTo(T pInstance, IInjector pInjector);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IPoint.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,8 @@
+package org.apache.commons.inject.api;
+
+import javax.inject.Provider;
+
+public interface IProvider<T> extends Provider<T> {
+ Class<? extends T> getType();
+ T get(IInjector pInjector);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/IProvider.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,5 @@
+package org.apache.commons.inject.api;
+
+public @interface InjLogger {
+ String id();
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/InjLogger.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,80 @@
+package org.apache.commons.inject.api;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+
+public class Key<T> implements IKey<T> {
+ public static final String NO_NAME = "";
+ public static final Annotation[] NO_ANNOTATIONS = (Annotation[]) Array.newInstance(Annotation.class, 0);
+ private final Class<T> type;
+ private final String name;
+ private final Annotation[] annotations;
+
+ public Key(Class<T> pType, String pName, Annotation[] pAnnotations) {
+ if (pType == null) {
+ throw new NullPointerException("The keys type must not be null.");
+ }
+ this.type = pType;
+ if (pName == null) {
+ name = NO_NAME;
+ } else {
+ name = pName;
+ }
+ if (pAnnotations == null) {
+ annotations = NO_ANNOTATIONS;
+ } else {
+ annotations = pAnnotations;
+ }
+ }
+
+ public Key(Class<T> pType, String pName) {
+ this(pType, pName, NO_ANNOTATIONS);
+ }
+
+ public Key(Class<T> pType) {
+ this(pType, NO_NAME, NO_ANNOTATIONS);
+ }
+
+ @Override
+ public Class<T> getType() {
+ return type;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public Annotation[] getAnnotations() {
+ return annotations;
+ }
+
+ @Override
+ public String toString() {
+ return toString(this);
+ }
+
+ public static String toString(IKey<?> pKey) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("Type=");
+ sb.append(pKey.getType().getName());
+ final String name = pKey.getName();
+ if (name.length() > 0) {
+ sb.append(", Name=");
+ sb.append(name);
+ }
+ final Annotation[] annotations = pKey.getAnnotations();
+ if (annotations.length > 0) {
+ sb.append(", Annotations=[");
+ for (int i = 0; i < annotations.length; i++) {
+ if (i > 0) {
+ sb.append(",");
+ }
+ sb.append(annotations[i]);
+ }
+ sb.append("]");
+ }
+ return sb.toString();
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Key.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Log4jLoggerModule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Log4jLoggerModule.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Log4jLoggerModule.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Log4jLoggerModule.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,10 @@
+package org.apache.commons.inject.api;
+
+import org.apache.log4j.Logger;
+
+public class Log4jLoggerModule extends AbstractLoggerInjectingModule<Logger> {
+ @Override
+ protected Logger newLogger(String pId) {
+ return Logger.getLogger(pId);
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Log4jLoggerModule.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/NoSuchBindingException.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/NoSuchBindingException.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/NoSuchBindingException.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/NoSuchBindingException.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,18 @@
+package org.apache.commons.inject.api;
+
+public class NoSuchBindingException extends RuntimeException {
+ private static final long serialVersionUID = -2705857473161808565L;
+
+ public NoSuchBindingException(String message) {
+ super(message);
+ }
+
+ public NoSuchBindingException(Throwable cause) {
+ super(cause);
+ }
+
+ public NoSuchBindingException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/NoSuchBindingException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/PostConstructModule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/PostConstructModule.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/PostConstructModule.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/PostConstructModule.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,88 @@
+package org.apache.commons.inject.api;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.apache.commons.inject.api.bind.IBinder;
+import org.apache.commons.inject.api.bind.IModule;
+import org.apache.commons.inject.api.bind.IBinder.IInjectionListener;
+import org.apache.commons.inject.impl.DefaultLifecycleController;
+import org.apache.commons.inject.util.Exceptions;
+
+public class PostConstructModule implements IModule {
+ private ILifecycleController controller;
+
+ public ILifecycleController getLifecycleController() {
+ if (controller == null) {
+ controller = new DefaultLifecycleController();
+ }
+ return controller;
+ }
+
+ public void setLifecycleController(ILifecycleController pController) {
+ controller = pController;
+ }
+
+ @Override
+ public void configure(IBinder pBinder) {
+ pBinder.add(new IInjectionListener() {
+ @Override
+ public void initialized(IKey<?> pKey, Object pObject) {
+ final ILifecycleListener listener = getListenerFor(pObject);
+ if (listener != null && listener != controller) {
+ controller.add(listener);
+ }
+ }
+ });
+ pBinder.bind(ILifecycleController.class).toInstance(controller);
+ }
+
+ protected ILifecycleListener getListenerFor(final Object pObject) {
+ if (pObject instanceof ILifecycleListener) {
+ return (ILifecycleListener) pObject;
+ }
+ final Method postConstructMethod = findMethod(PostConstruct.class, pObject.getClass());
+ final Method preDestroyMethod = findMethod(PreDestroy.class, pObject.getClass());
+ if (postConstructMethod == null && preDestroyMethod == null) {
+ return null;
+ }
+ return new ILifecycleListener(){
+ @Override
+ public void start() {
+ invoke(postConstructMethod, pObject);
+ }
+
+ @Override
+ public void shutdown() {
+ invoke(preDestroyMethod, pObject);
+ }
+
+ private void invoke(Method pMethod, Object pObject) {
+ if (pMethod == null) {
+ return;
+ }
+ try {
+ if (!pMethod.isAccessible()) {
+ pMethod.setAccessible(true);
+ }
+ pMethod.invoke(pObject);
+ } catch (Throwable t) {
+ throw Exceptions.show(t);
+ }
+ }
+ };
+ }
+
+ private Method findMethod(Class<? extends Annotation> pAnnotationClass, Class<?> pType) {
+ final Method[] methods = pType.getDeclaredMethods();
+ for (Method method : methods) {
+ if (method.isAnnotationPresent(pAnnotationClass)) {
+ return method;
+ }
+ }
+ return null;
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/PostConstructModule.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Slf4JLoggerModule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Slf4JLoggerModule.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Slf4JLoggerModule.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Slf4JLoggerModule.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,11 @@
+package org.apache.commons.inject.api;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Slf4JLoggerModule extends AbstractLoggerInjectingModule<Logger> {
+ @Override
+ protected Logger newLogger(String pId) {
+ return LoggerFactory.getLogger(pId);
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/Slf4JLoggerModule.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IAnnotatedBindingBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IAnnotatedBindingBuilder.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IAnnotatedBindingBuilder.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IAnnotatedBindingBuilder.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,8 @@
+package org.apache.commons.inject.api.bind;
+
+import java.lang.annotation.Annotation;
+
+public interface IAnnotatedBindingBuilder<T> extends ILinkedBindingBuilder<T> {
+ ILinkedBindingBuilder<T> annotatedWith(Annotation pAnnotation);
+ ILinkedBindingBuilder<T> annotatedWith(Class<? extends Annotation> pAnnotation);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IAnnotatedBindingBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IBinder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IBinder.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IBinder.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IBinder.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,25 @@
+package org.apache.commons.inject.api.bind;
+
+import java.util.List;
+
+import org.apache.commons.inject.api.IInjector;
+import org.apache.commons.inject.api.IKey;
+import org.apache.commons.inject.api.IPoint;
+
+public interface IBinder {
+ public interface IInjectionParticipator {
+ List<IPoint<Object>> getPoints(IKey<?> pKey, Class<?> pType);
+ }
+ public interface IInjectionListener {
+ void initialized(IKey<?> pKey, Object pObject);
+ }
+ public interface IInjectorBuildListener {
+ void created(IInjector pInjector);
+ }
+ <T> IAnnotatedBindingBuilder<T> bind(Class<T> pType);
+ <T> IAnnotatedBindingBuilder<T> bind(Class<T> pType, String pName);
+ <T> ILinkedBindingBuilder<T> bind(IKey<T> pKey);
+ boolean add(IInjectionListener pListener);
+ boolean add(IInjectorBuildListener pListener);
+ boolean add(IInjectionParticipator pParticipator);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IBinder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,17 @@
+package org.apache.commons.inject.api.bind;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+import org.apache.commons.inject.api.IProvider;
+
+import com.google.inject.Provider;
+
+public interface ILinkedBindingBuilder<T> extends IScopedBindingBuilder<T> {
+ void toInstance(T pInstance);
+ IScopedBindingBuilder<T> to(Class<? extends T> pImplClass);
+ IScopedBindingBuilder<T> to(Constructor<? extends T> pConstructor);
+ IScopedBindingBuilder<T> to(Method pFactoryMethod);
+ <S extends T> IScopedBindingBuilder<T> to(Class<S> pType, Provider<S> pProvider);
+ IScopedBindingBuilder<T> to(IProvider<? extends T> pProvider);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/ILinkedBindingBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IModule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IModule.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IModule.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IModule.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,5 @@
+package org.apache.commons.inject.api.bind;
+
+public interface IModule {
+ void configure(IBinder pBinder);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IModule.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IScopedBindingBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IScopedBindingBuilder.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IScopedBindingBuilder.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IScopedBindingBuilder.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,7 @@
+package org.apache.commons.inject.api.bind;
+
+public interface IScopedBindingBuilder<T> {
+ void scope(Scopes pScope);
+ void asEagerSingleton();
+ void asLazySingleton();
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/IScopedBindingBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/Scopes.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/Scopes.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/Scopes.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/Scopes.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,7 @@
+package org.apache.commons.inject.api.bind;
+
+public enum Scopes {
+ PER_CALL,
+ EAGER_SINGLETON,
+ LAZY_SINGLETON
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/api/bind/Scopes.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBaseProvider.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBaseProvider.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBaseProvider.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBaseProvider.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,27 @@
+package org.apache.commons.inject.impl;
+
+import org.apache.commons.inject.api.IInjector;
+import org.apache.commons.inject.api.IPoint;
+import org.apache.commons.inject.api.IProvider;
+
+public abstract class AbstractBaseProvider<T> implements IProvider<T> {
+ private final Class<T> type;
+ private final IPoint<T> point;
+
+ protected AbstractBaseProvider(Class<T> pType, IPoint<T> pPoint) {
+ type = pType;
+ point = pPoint;
+ }
+
+ @Override
+ public T get(IInjector pInjector) {
+ final T t = get();
+ point.injectTo(t, pInjector);
+ return t;
+ }
+
+ @Override
+ public Class<T> getType() {
+ return type;
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBaseProvider.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBindingSet.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBindingSet.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBindingSet.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBindingSet.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,144 @@
+package org.apache.commons.inject.impl;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IKey;
+import org.apache.commons.inject.api.Key;
+
+
+public class AbstractBindingSet {
+ public static class MappedKey<T> extends Key<T> {
+ private final Class<? extends Annotation> annotationType;
+ public MappedKey(Class<T> pType, String pName, Annotation[] pAnnotations, Class<? extends Annotation> pAnnotationType) {
+ super(pType, pName, pAnnotations);
+ annotationType = null;
+ }
+
+ public Class<? extends Annotation> getAnnotationType() {
+ return annotationType;
+ }
+ }
+ protected static class BindingAndKey<T> {
+ private IBinding<T> binding;
+ private final MappedKey<T> key;
+
+ BindingAndKey(IBinding<T> pBinding, MappedKey<T> pKey) {
+ binding = pBinding;
+ key = pKey;
+ }
+
+ public IBinding<T> getBinding() {
+ return binding;
+ }
+
+ public void setBinding(IBinding<T> pBinding) {
+ binding = pBinding;
+ }
+
+ public MappedKey<T> getKey() {
+ return key;
+ }
+ }
+ protected static class ReducedKey<T> {
+ private final Class<T> type;
+ private final String name;
+ ReducedKey(Class<T> pType, String pName) {
+ type = pType;
+ name = pName;
+ }
+ public Class<T> getType() {
+ return type;
+ }
+ public String getName() {
+ return name;
+ }
+ @Override
+ public int hashCode() {
+ return 31 * (31 + name.hashCode()) + type.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ReducedKey<?> other = (ReducedKey<?>) obj;
+ return getType() == other.getType() && getName().equals(other.getName());
+ }
+
+
+ }
+
+ protected final Map<ReducedKey<?>, List<BindingAndKey<?>>> map;
+
+ protected AbstractBindingSet(Map<ReducedKey<?>, List<BindingAndKey<?>>> pMap) {
+ map = pMap;
+ }
+
+ protected AbstractBindingSet() {
+ this(new HashMap<ReducedKey<?>, List<BindingAndKey<?>>>());
+ }
+
+
+ protected <T> ReducedKey<T> newReducedKey(IKey<T> pKey) {
+ return new ReducedKey<T>(pKey.getType(), pKey.getName());
+ }
+
+ protected List<BindingAndKey<?>> findOrCreateList(ReducedKey<?> pKey) {
+ List<BindingAndKey<?>> list = map.get(pKey);
+ if (list == null) {
+ list = new ArrayList<BindingAndKey<?>>();
+ map.put(pKey, list);
+ }
+ return list;
+ }
+
+ protected boolean isMatching(IKey<?> pSearchKey, MappedKey<?> pMapKey) {
+ // No need to compare type and name. They are matching, because
+ // we did a lookup with a ReducedKey to find the list of
+ // bindings and keys, from which pMapKey was taken.
+ if (!hasAnnotations(pMapKey.getAnnotations(), pSearchKey)
+ || !hasAnnotations(pSearchKey.getAnnotations(), pMapKey)) {
+ return false;
+ }
+ final Class<? extends Annotation> mappedAnnotationType = pMapKey.getAnnotationType();
+ if (mappedAnnotationType != null) {
+ boolean found = false;
+ for (Annotation searchAnnotation : pSearchKey.getAnnotations()) {
+ if (searchAnnotation != null && mappedAnnotationType == searchAnnotation.getClass()) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ return false;
+ }
+
+ }
+ return true;
+ }
+
+ private boolean hasAnnotations(Annotation[] pAnnotations, IKey<?> pKey) {
+ for (Annotation annotation : pAnnotations) {
+ boolean found = false;
+ for (Annotation ann : pKey.getAnnotations()) {
+ if (annotation.equals(ann)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractBindingSet.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractInjector.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractInjector.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractInjector.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractInjector.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,69 @@
+package org.apache.commons.inject.impl;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IInjector;
+import org.apache.commons.inject.api.IKey;
+import org.apache.commons.inject.api.Key;
+import org.apache.commons.inject.api.NoSuchBindingException;
+
+public abstract class AbstractInjector implements IInjector {
+ protected abstract <T> IBinding<T> getBinding(IKey<T> pKey);
+ protected abstract <T> IBinding<T> requireBinding(IKey<T> pKey);
+
+ @Override
+ public <T> T getInstance(Class<T> pType) {
+ final IKey<T> key = new Key<T>(pType);
+ return getInstance(key);
+ }
+
+ @Override
+ public <T> T getInstance(Class<T> pType, String pName) {
+ final IKey<T> key = new Key<T>(pType, pName);
+ return getInstance(key);
+ }
+
+ @Override
+ public <T> T getInstance(IKey<T> pKey) {
+ final IBinding<T> binding = getBinding(pKey);
+ if (binding == null) {
+ return null;
+ } else {
+ return binding.getProvider().get();
+ }
+ }
+
+ @Override
+ public <T> T requireInstance(Class<T> pType) throws NoSuchBindingException {
+ final IKey<T> key = new Key<T>(pType);
+ return requireInstance(key);
+ }
+
+ @Override
+ public <T> T requireInstance(Class<T> pType, String pName)
+ throws NoSuchBindingException {
+ final IKey<T> key = new Key<T>(pType, pName);
+ return requireInstance(key);
+ }
+
+ @Override
+ public <T> T requireInstance(IKey<T> pKey) throws NoSuchBindingException {
+ final IBinding<T> binding = getBinding(pKey);
+ if (binding == null) {
+ throw new NoSuchBindingException("No binding registered for key: " + pKey);
+ } else {
+ return binding.getProvider().get();
+ }
+ }
+
+ @Override
+ public void injectMembers(Object pInstance) {
+ if (pInstance == null) {
+ throw new NullPointerException("The instance must not be null.");
+ }
+ @SuppressWarnings("unchecked")
+ final Class<Object> cl = (Class<Object>) pInstance.getClass();
+ final IKey<Object> key = new Key<Object>(cl);
+ IBinding<Object> binding = requireBinding(key);
+ binding.getPoint().injectTo(pInstance, this);
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractInjector.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,44 @@
+package org.apache.commons.inject.impl;
+
+import org.apache.commons.inject.api.IInjector;
+import org.apache.commons.inject.api.IProvider;
+
+public abstract class AbstractScopedProvider<T> implements IProvider<T>, IInjectorAware {
+ private final IProvider<T> baseProvider;
+ private IInjector injector;
+
+ public AbstractScopedProvider(IProvider<T> pBaseProvider) {
+ baseProvider = pBaseProvider;
+ }
+
+ protected IInjector getInjector() {
+ if (injector == null) {
+ throw new IllegalStateException("The Injector has not been initialized.");
+ }
+ return injector;
+ }
+
+ @Override
+ public T get() {
+ final T t = baseProvider.get(getInjector());
+ return t;
+ }
+
+ @Override
+ public Class<? extends T> getType() {
+ return baseProvider.getType();
+ }
+
+ @Override
+ public T get(IInjector pInjector) {
+ return get();
+ }
+
+ @Override
+ public void init(IInjector pInjector) {
+ injector = pInjector;
+ if (baseProvider instanceof IInjectorAware) {
+ ((IInjectorAware) baseProvider).init(pInjector);
+ }
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/AbstractScopedProvider.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/BindingProxy.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/BindingProxy.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/BindingProxy.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/BindingProxy.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,52 @@
+package org.apache.commons.inject.impl;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IInjector;
+import org.apache.commons.inject.api.IPoint;
+import org.apache.commons.inject.api.IProvider;
+
+public class BindingProxy<T> implements IBinding<T>, IInjectorAware {
+ private IBinding<T> binding;
+ private boolean initialized;
+ private final String cause;
+ private final RuntimeException rte = new RuntimeException();
+
+ public BindingProxy(String pCause) {
+ cause = pCause;
+ }
+
+ @Override
+ public synchronized IProvider<T> getProvider() {
+ if (!initialized) {
+ throw new IllegalStateException("This Binding hasn't been initialized.", rte);
+ }
+ return binding.getProvider();
+ }
+
+ @Override
+ public IPoint<T> getPoint() {
+ if (!initialized) {
+ throw new IllegalStateException("This Binding hasn't been initialized.");
+ }
+ return binding.getPoint();
+ }
+
+ public synchronized void setBinding(IBinding<T> pBinding) {
+ if (pBinding == null) {
+ throw new NullPointerException("The proxied binding must not be null.");
+ }
+ binding = pBinding;
+ initialized = true;
+ }
+
+ public String getCause() {
+ return cause;
+ }
+
+ @Override
+ public void init(IInjector pInjector) {
+ if (binding != null && binding instanceof IInjectorAware) {
+ ((IInjectorAware) binding).init(pInjector);
+ }
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/BindingProxy.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjector.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjector.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjector.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjector.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,57 @@
+package org.apache.commons.inject.impl;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IKey;
+import org.apache.commons.inject.api.IPoint;
+import org.apache.commons.inject.api.IProvider;
+import org.apache.commons.inject.api.NoSuchBindingException;
+import org.apache.commons.inject.impl.AbstractBindingSet.MappedKey;
+import org.apache.commons.inject.impl.AbstractBindingSet.ReducedKey;
+import org.apache.commons.inject.impl.bind.DefaultBinding;
+
+public class DefaultInjector extends AbstractInjector {
+ private final ImmutableBindingSet bindings;
+
+ public DefaultInjector(ImmutableBindingSet pBindings) {
+ bindings = pBindings;
+ }
+
+ protected <T> IBinding<T> getBinding(IKey<T> pKey) {
+ synchronized(bindings) {
+ return bindings.getBinding(pKey);
+ }
+ }
+
+ protected <T> IBinding<T> requireBinding(IKey<T> pKey) {
+ synchronized(bindings) {
+ IBinding<T> binding;
+ binding = bindings.getBinding(pKey);
+ if (binding == null) {
+ final IMutableBindingSource bindingSource = getBindingSource();
+ final Class<T> cl = pKey.getType();
+ final IPoint<T> point = Introspector.getInstance().getPoint(cl, bindingSource);
+ final IProvider<T> provider = Introspector.getInstance().getProvider(cl, point, bindingSource);
+ binding = new DefaultBinding<T>(provider, point);
+ final ReducedKey<T> rkey = new ReducedKey<T>(cl, pKey.getName());
+ final MappedKey<T> key = new MappedKey<T>(cl, pKey.getName(), null, null);
+ bindings.add(rkey, key, binding);
+ }
+ return binding;
+ }
+ }
+
+ protected IMutableBindingSource getBindingSource() {
+ return new IMutableBindingSource() {
+ @Override
+ public <T> IBinding<T> requireBinding(IKey<T> pKey, String pCause) {
+ final IBinding<T> binding = bindings.getBinding(pKey);
+ if (binding == null) {
+ throw new NoSuchBindingException("No binding registered for key: " + pKey);
+ }
+ return binding;
+ }
+
+ };
+ }
+
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjector.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjectorBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjectorBuilder.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjectorBuilder.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjectorBuilder.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,137 @@
+package org.apache.commons.inject.impl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IInjector;
+import org.apache.commons.inject.api.IInjectorBuilder;
+import org.apache.commons.inject.api.IKey;
+import org.apache.commons.inject.api.bind.IAnnotatedBindingBuilder;
+import org.apache.commons.inject.api.bind.IBinder;
+import org.apache.commons.inject.api.bind.ILinkedBindingBuilder;
+import org.apache.commons.inject.api.bind.IModule;
+import org.apache.commons.inject.api.bind.IBinder.IInjectionListener;
+import org.apache.commons.inject.api.bind.IBinder.IInjectionParticipator;
+import org.apache.commons.inject.api.bind.IBinder.IInjectorBuildListener;
+import org.apache.commons.inject.impl.bind.DefaultBindingBuilder;
+
+public class DefaultInjectorBuilder implements IInjectorBuilder {
+ private final Collection<IModule> modules;
+ private final List<IInjectionListener> injectionListeners = new ArrayList<IInjectionListener>();
+ private final List<IInjectionParticipator> injectionParticipators = new ArrayList<IInjectionParticipator>();
+ private final List<IInjectorBuildListener> injectorBuildListeners = new ArrayList<IInjectorBuildListener>();
+
+ public DefaultInjectorBuilder(Collection<IModule> pModules) {
+ modules = pModules;
+ }
+
+ public DefaultInjectorBuilder() {
+ modules = new ArrayList<IModule>();
+ }
+
+ public IInjector build() {
+ final MutableBindingSet mutableBindings = new MutableBindingSet();
+ configure(mutableBindings);
+ final ResolvableBindingSet resolvableBindings = new ResolvableBindingSet(mutableBindings);
+ resolve(resolvableBindings);
+ final ImmutableBindingSet immutableBindings = new ImmutableBindingSet(resolvableBindings);
+ final DefaultInjector injector = new DefaultInjector(immutableBindings);
+ for (IBinding<?> binding : immutableBindings.getAllBindings()) {
+ if (binding instanceof IInjectorAware) {
+ ((IInjectorAware) binding).init(injector);
+ } else {
+ throw new IllegalStateException("No InjectorAware: " + binding);
+ }
+ }
+ for (IInjectorBuildListener listener : injectorBuildListeners) {
+ listener.created(injector);
+ }
+ return injector;
+ }
+
+ protected void resolve(ResolvableBindingSet pBindings) {
+ pBindings.resolve();
+ }
+
+ protected void configure(final MutableBindingSet mutableBindings) {
+ final List<DefaultBindingBuilder<?>> builders = new ArrayList<DefaultBindingBuilder<?>>();
+ final IBinder binder = newBinder(builders);
+ for (IModule module : modules) {
+ module.configure(binder);
+ }
+ for (DefaultBindingBuilder<?> builder : builders) {
+ builder.build(mutableBindings, injectionListeners, injectionParticipators);
+ }
+ }
+
+ private IBinder newBinder(final List<DefaultBindingBuilder<?>> builders) {
+ return new IBinder(){
+ @Override
+ public <T> IAnnotatedBindingBuilder<T> bind(Class<T> pType) {
+ final DefaultBindingBuilder<T> builder = new DefaultBindingBuilder<T>(pType);
+ builders.add(builder);
+ return builder;
+ }
+
+ @Override
+ public <T> IAnnotatedBindingBuilder<T> bind(Class<T> pType,
+ String pName) {
+ final DefaultBindingBuilder<T> builder = new DefaultBindingBuilder<T>(pType, pName);
+ builders.add(builder);
+ return builder;
+ }
+
+ @Override
+ public <T> ILinkedBindingBuilder<T> bind(IKey<T> pKey) {
+ final DefaultBindingBuilder<T> builder = new DefaultBindingBuilder<T>(pKey);
+ builders.add(builder);
+ return builder;
+ }
+
+ @Override
+ public boolean add(IInjectionParticipator pParticipator) {
+ if (pParticipator == null) {
+ throw new NullPointerException("The participator must not be null.");
+ }
+ return injectionParticipators.add(pParticipator);
+ }
+
+ @Override
+ public boolean add(IInjectionListener pListener) {
+ if (pListener == null) {
+ throw new NullPointerException("The listener must not be null.");
+ }
+ return injectionListeners.add(pListener);
+ }
+
+ @Override
+ public boolean add(IInjectorBuildListener pListener) {
+ if (pListener == null) {
+ throw new NullPointerException("The listener must not be null.");
+ }
+ return injectorBuildListeners.add(pListener);
+ }
+ };
+ }
+
+ @Override
+ public IInjectorBuilder modules(IModule... pModules) {
+ if (pModules == null) {
+ throw new NullPointerException("The module list must not be null.");
+ }
+ modules.addAll(Arrays.asList(pModules));
+ return this;
+ }
+
+ @Override
+ public IInjectorBuilder modules(Collection<IModule> pModules) {
+ if (pModules == null) {
+ throw new NullPointerException("The module list must not be null.");
+ }
+ modules.addAll(pModules);
+ return this;
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultInjectorBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultLifecycleController.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultLifecycleController.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultLifecycleController.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultLifecycleController.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,82 @@
+package org.apache.commons.inject.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.inject.api.ILifecycleController;
+import org.apache.commons.inject.api.ILifecycleListener;
+import org.apache.commons.inject.util.Exceptions;
+
+public class DefaultLifecycleController implements ILifecycleController {
+ private static enum State {
+ NOT_STARTED,
+ STARTED,
+ TERMINATED
+ }
+ private State state = State.NOT_STARTED;
+ private List<ILifecycleListener> listeners = new ArrayList<ILifecycleListener>();
+
+ @Override
+ public void start() {
+ if (state == State.NOT_STARTED) {
+ for (ILifecycleListener listener : listeners) {
+ try {
+ listener.start();
+ } catch (Throwable t) {
+ throw Exceptions.show(t);
+ }
+ }
+ state = State.STARTED;
+ }
+ }
+
+ @Override
+ public void shutdown() {
+ if (state == State.STARTED) {
+ Throwable th = null;
+ // Shutdown in reverse order.
+ for (int i = listeners.size()-1; i >= 0; i--) {
+ final ILifecycleListener listener = listeners.get(i);
+ try {
+ listener.shutdown();
+ listeners.remove(i);
+ } catch (Throwable t) {
+ if (th == null) {
+ th = t;
+ }
+ }
+ if (th != null) {
+ throw Exceptions.show(th);
+ }
+ }
+ state = State.TERMINATED;
+ }
+ }
+
+ @Override
+ public boolean add(ILifecycleListener pListener) {
+ if (state == State.STARTED) {
+ try {
+ pListener.start();
+ } catch (Throwable t) {
+ throw Exceptions.show(t);
+ }
+ }
+ return listeners.add(pListener);
+ }
+
+ @Override
+ public boolean remove(ILifecycleListener pListener) {
+ boolean result = listeners.remove(pListener);
+ if (state == State.STARTED) {
+ try {
+ pListener.shutdown();
+ } catch (Throwable t) {
+ throw Exceptions.show(t);
+ }
+ }
+ return result;
+
+ }
+
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultLifecycleController.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultProvider.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultProvider.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultProvider.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultProvider.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,19 @@
+package org.apache.commons.inject.impl;
+
+import org.apache.commons.inject.api.IPoint;
+import org.apache.commons.inject.util.Exceptions;
+
+public class DefaultProvider<T> extends AbstractBaseProvider<T> {
+ public DefaultProvider(Class<T> pType, IPoint<T> pPoint) {
+ super(pType, pPoint);
+ }
+
+ @Override
+ public T get() {
+ try {
+ return getType().newInstance();
+ } catch (Throwable t) {
+ throw Exceptions.show(t);
+ }
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/DefaultProvider.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FactoryMethodProvider.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FactoryMethodProvider.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FactoryMethodProvider.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FactoryMethodProvider.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,62 @@
+package org.apache.commons.inject.impl;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IInjector;
+import org.apache.commons.inject.api.IPoint;
+import org.apache.commons.inject.util.Exceptions;
+
+public class FactoryMethodProvider<T> extends AbstractBaseProvider<T> implements IInjectorAware {
+ private final Constructor<T> constructor;
+ private final Method method;
+ private final IBinding<Object>[] parameterBindings;
+
+ public FactoryMethodProvider(Constructor<T> pConstructor, IPoint<T> pPoint, IBinding<Object>[] pBindings) {
+ super(pConstructor.getDeclaringClass(), pPoint);
+ constructor = pConstructor;
+ method = null;
+ parameterBindings = pBindings;
+ }
+
+ @SuppressWarnings("unchecked")
+ public FactoryMethodProvider(Method pMethod, IBinding<Object>[] pBindings, IPoint<T> pPoint) {
+ super((Class<T>) pMethod.getReturnType(), pPoint);
+ constructor = null;
+ method = pMethod;
+ parameterBindings = pBindings;
+
+ }
+
+ @Override
+ public T get() {
+ try {
+ final Object[] parameters = new Object[parameterBindings.length];
+ for (int i = 0; i < parameters.length; i++) {
+ parameters[i] = parameterBindings[i].getProvider().get();
+ }
+ if (constructor == null) {
+ @SuppressWarnings("unchecked")
+ final T instance = (T) method.invoke(null, parameters);
+ return instance;
+ } else {
+ if (!constructor.isAccessible()) {
+ constructor.setAccessible(true);
+ }
+ return constructor.newInstance(parameters);
+ }
+ } catch (Throwable t) {
+ throw Exceptions.show(t);
+ }
+ }
+
+ @Override
+ public void init(IInjector pInjector) {
+ for (IBinding<Object> binding : parameterBindings) {
+ if (binding instanceof IInjectorAware) {
+ ((IInjectorAware) binding).init(pInjector);
+ }
+ }
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FactoryMethodProvider.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FieldPoint.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FieldPoint.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FieldPoint.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FieldPoint.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,30 @@
+package org.apache.commons.inject.impl;
+
+import java.lang.reflect.Field;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IInjector;
+import org.apache.commons.inject.api.IPoint;
+import org.apache.commons.inject.util.Exceptions;
+
+public class FieldPoint<T> implements IPoint<T> {
+ private final IBinding<Object> binding;
+ private final Field f;
+
+ FieldPoint(IBinding<Object> pBinding, Field pF) {
+ binding = pBinding;
+ f = pF;
+ }
+
+ @Override
+ public void injectTo(T pInstance, IInjector pInjector) {
+ try {
+ if (!f.isAccessible()) {
+ f.setAccessible(true);
+ }
+ f.set(pInstance, binding.getProvider().get());
+ } catch (Throwable t) {
+ throw Exceptions.show(t);
+ }
+ }
+}
\ No newline at end of file
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/FieldPoint.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IInjectorAware.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IInjectorAware.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IInjectorAware.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IInjectorAware.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,7 @@
+package org.apache.commons.inject.impl;
+
+import org.apache.commons.inject.api.IInjector;
+
+public interface IInjectorAware {
+ void init(IInjector pInjector);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IInjectorAware.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IMutableBindingSource.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IMutableBindingSource.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IMutableBindingSource.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IMutableBindingSource.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,8 @@
+package org.apache.commons.inject.impl;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IKey;
+
+public interface IMutableBindingSource {
+ <T> IBinding<T> requireBinding(IKey<T> pKey, String pCause);
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/IMutableBindingSource.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/ImmutableBindingSet.java
URL: http://svn.apache.org/viewvc/commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/ImmutableBindingSet.java?rev=1636573&view=auto
==============================================================================
--- commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/ImmutableBindingSet.java (added)
+++ commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/ImmutableBindingSet.java Tue Nov 4 13:05:37 2014
@@ -0,0 +1,46 @@
+package org.apache.commons.inject.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.inject.api.IBinding;
+import org.apache.commons.inject.api.IKey;
+
+public class ImmutableBindingSet extends AbstractBindingSet {
+ public ImmutableBindingSet(ResolvableBindingSet pResolvableBindings) {
+ super(pResolvableBindings.map);
+ }
+
+ <T> IBinding<T> getBinding(IKey<T> pKey) {
+ final ReducedKey<T> rkey = new ReducedKey<T>(pKey.getType(), pKey.getName());
+ final List<BindingAndKey<?>> list = map.get(rkey);
+ if (list != null) {
+ for (BindingAndKey<?> bak : list) {
+ if (isMatching(pKey, bak.getKey())) {
+ @SuppressWarnings("unchecked")
+ final IBinding<T> binding = (IBinding<T>) bak.getBinding();
+ return binding;
+ }
+ }
+ }
+ return null;
+ }
+
+ <T> void add(ReducedKey<T> pRKey, MappedKey<T> pMKey, IBinding<T> pBinding) {
+ final List<BindingAndKey<?>> list = findOrCreateList(pRKey);
+ final BindingAndKey<T> bak = new BindingAndKey<T>(pBinding, pMKey);
+ list.add(bak);
+ }
+
+ Iterable<IBinding<?>> getAllBindings() {
+ final List<IBinding<?>> list = new ArrayList<IBinding<?>>();
+ for (Map.Entry<ReducedKey<?>,List<BindingAndKey<?>>> en : map.entrySet()) {
+ final List<BindingAndKey<?>> baklist = en.getValue();
+ for (BindingAndKey<?> bak : baklist) {
+ list.add(bak.getBinding());
+ }
+ }
+ return list;
+ }
+}
Propchange: commons/sandbox/commons-inject/trunk/src/main/java/org/apache/commons/inject/impl/ImmutableBindingSet.java
------------------------------------------------------------------------------
svn:mime-type = text/plain