? picocontainer/junit1914416751.properties
? picocontainer/junit417279603.properties
? picocontainer/src/java/org/picocontainer/LifecycleManager.java
? picocontainer/src/java/org/picocontainer/defaults/DefaultLifecycleManager.java
? picocontainer/src/java/org/picocontainer/defaults/DefaultLifecycleManagerFactory.java
? picocontainer/src/java/org/picocontainer/defaults/LifecycleManagerFactory.java
Index: picocontainer/maven.xml
===================================================================
RCS file: /home/projects/picocontainer/scm/java/picocontainer/maven.xml,v
retrieving revision 1.24
diff -u -r1.24 maven.xml
--- picocontainer/maven.xml 5 Jun 2004 21:52:51 -0000 1.24
+++ picocontainer/maven.xml 3 Jul 2004 05:19:04 -0000
@@ -6,6 +6,7 @@
+
@@ -37,6 +38,18 @@
artifact="${maven.build.dir}/${pom.artifactId}-tck-${pom.currentVersion}.jar"
type="jars"
/>
+
+
+
+
+
+
+
+
Index: picocontainer/project.xml
===================================================================
RCS file: /home/projects/picocontainer/scm/java/picocontainer/project.xml,v
retrieving revision 1.92
diff -u -r1.92 project.xml
--- picocontainer/project.xml 21 Jul 2004 20:47:28 -0000 1.92
+++ picocontainer/project.xml 23 Jul 2004 20:48:13 -0000
@@ -10,7 +10,7 @@
3
picocontainer
PicoContainer
- 1.1-SNAPSHOT
+ 1.1-beta-1-SNAPSHOT
Codehaus
Index: picocontainer/src/java/org/picocontainer/MutablePicoContainer.java
===================================================================
RCS file: /home/projects/picocontainer/scm/java/picocontainer/src/java/org/picocontainer/MutablePicoContainer.java,v
retrieving revision 1.39
diff -u -r1.39 MutablePicoContainer.java
--- picocontainer/src/java/org/picocontainer/MutablePicoContainer.java 18 Jul 2004 07:29:19 -0000 1.39
+++ picocontainer/src/java/org/picocontainer/MutablePicoContainer.java 23 Jul 2004 20:04:04 -0000
@@ -9,6 +9,7 @@
*****************************************************************************/
package org.picocontainer;
+import java.util.Collection;
import java.util.List;
/**
@@ -20,7 +21,7 @@
* @author Aslak Hellesøy
* @author Jon Tirsén
* @version $Revision: 1.39 $
- * @see "The The package description has a basic overview of how to use the picocontainer package."
+ * @see The package description has a basic overview of how to use the picocontainer package.
* @since 1.0
*/
public interface MutablePicoContainer extends PicoContainer {
@@ -133,5 +134,10 @@
void addChildContainer(PicoContainer child);
void addChildContainer(String name, PicoContainer child);
void removeChildContainer(MutablePicoContainer child);
+
+ LifecycleManager getLifecycleManager();
+ Collection getChildContainers();
+
+ List getComponentInstancesOfType(Class type) throws PicoException;
}
Index: picocontainer/src/java/org/picocontainer/alternatives/ImplementationHidingPicoContainer.java
===================================================================
RCS file: /home/projects/picocontainer/scm/java/picocontainer/src/java/org/picocontainer/alternatives/ImplementationHidingPicoContainer.java,v
retrieving revision 1.3
diff -u -r1.3 ImplementationHidingPicoContainer.java
--- picocontainer/src/java/org/picocontainer/alternatives/ImplementationHidingPicoContainer.java 23 Jul 2004 00:37:35 -0000 1.3
+++ picocontainer/src/java/org/picocontainer/alternatives/ImplementationHidingPicoContainer.java 23 Jul 2004 20:05:11 -0000
@@ -14,6 +14,8 @@
import org.picocontainer.PicoContainer;
import org.picocontainer.PicoRegistrationException;
import org.picocontainer.PicoVerificationException;
+import org.picocontainer.LifecycleManager;
+import org.picocontainer.PicoException;
import org.picocontainer.defaults.CachingComponentAdapter;
import org.picocontainer.defaults.ComponentAdapterFactory;
import org.picocontainer.defaults.DefaultComponentAdapterFactory;
@@ -188,6 +190,18 @@
public void removeChildContainer(MutablePicoContainer child) {
delegate.removeChildContainer(child);
+ }
+
+ public LifecycleManager getLifecycleManager() {
+ return delegate.getLifecycleManager();
+ }
+
+ public Collection getChildContainers() {
+ return delegate.getChildContainers();
+ }
+
+ public List getComponentInstancesOfType(Class type) throws PicoException {
+ return delegate.getComponentInstancesOfType(type);
}
protected Map getNamedContainers() {
Index: picocontainer/src/java/org/picocontainer/defaults/DefaultPicoContainer.java
===================================================================
RCS file: /home/projects/picocontainer/scm/java/picocontainer/src/java/org/picocontainer/defaults/DefaultPicoContainer.java,v
retrieving revision 1.97
diff -u -r1.97 DefaultPicoContainer.java
--- picocontainer/src/java/org/picocontainer/defaults/DefaultPicoContainer.java 23 Jul 2004 16:32:58 -0000 1.97
+++ picocontainer/src/java/org/picocontainer/defaults/DefaultPicoContainer.java 23 Jul 2004 20:32:58 -0000
@@ -10,20 +10,18 @@
package org.picocontainer.defaults;
import org.picocontainer.ComponentAdapter;
-import org.picocontainer.Disposable;
+import org.picocontainer.LifecycleManager;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.Parameter;
import org.picocontainer.PicoContainer;
import org.picocontainer.PicoException;
import org.picocontainer.PicoRegistrationException;
import org.picocontainer.PicoVerificationException;
-import org.picocontainer.Startable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -59,15 +57,15 @@
private Map componentKeyToAdapterCache = new HashMap();
private ComponentAdapterFactory componentAdapterFactory;
+ private final LifecycleManagerFactory lifecycleManagerFactory;
private PicoContainer parent;
private List componentAdapters = new ArrayList();
// Keeps track of instantiation order.
private List orderedComponentAdapters = new ArrayList();
- private boolean started = false;
- private boolean disposed = false;
protected Map namedChildContainers = new HashMap();
+ private LifecycleManager lifecycleManager;
/**
* Creates a new container with a custom ComponentAdapterFactory and a parent container.
@@ -82,20 +80,30 @@
* @param componentAdapterFactory the factory to use for creation of ComponentAdapters.
* @param parent the parent container.
*/
- public DefaultPicoContainer(ComponentAdapterFactory componentAdapterFactory, PicoContainer parent) {
+ public DefaultPicoContainer(ComponentAdapterFactory componentAdapterFactory, LifecycleManagerFactory lifecycleManagerFactory, PicoContainer parent) {
this.componentAdapterFactory = componentAdapterFactory;
+ this.lifecycleManagerFactory = lifecycleManagerFactory;
this.parent = parent;
}
/**
- * Creates a new container with a (caching) {@link DefaultComponentAdapterFactory} and a parent container.
+ * Creates a new container with a {@link DefaultLifecycleManagerFactory} and a parent container.
+ */
+ public DefaultPicoContainer(ComponentAdapterFactory componentAdapterFactory, PicoContainer parent) {
+ this(componentAdapterFactory, new DefaultLifecycleManagerFactory(), parent);
+ }
+
+ /**
+ * Creates a new container with a (caching) {@link DefaultComponentAdapterFactory},
+ * a {@link DefaultLifecycleManagerFactory} and a parent container.
*/
public DefaultPicoContainer(PicoContainer parent) {
this(new DefaultComponentAdapterFactory(), parent);
}
/**
- * Creates a new container with a custom ComponentAdapterFactory and no parent container.
+ * Creates a new container with a custom ComponentAdapterFactory, a
+ * {@link DefaultLifecycleManagerFactory} and no parent container.
*/
public DefaultPicoContainer(ComponentAdapterFactory componentAdapterFactory) {
this(componentAdapterFactory, null);
@@ -157,7 +165,7 @@
found.add(componentAdapter);
}
}
- return Collections.unmodifiableList(found);
+ return found;
}
/**
@@ -290,7 +298,7 @@
result.add(componentInstance);
}
}
- return Collections.unmodifiableList(result);
+ return result;
}
public Object getComponentInstance(Object componentKey) throws PicoException {
@@ -338,65 +346,25 @@
}
}
+ /**
+ * @deprecated Use {@link #getLifecycleManager()}.start()
+ */
public void start() {
- if (disposed) throw new IllegalStateException("Already disposed");
- if (started) throw new IllegalStateException("Already started");
- List componentInstances = getComponentInstancesOfTypeWithContainerAdaptersLast(Startable.class);
- for (Iterator iterator = componentInstances.iterator(); iterator.hasNext();) {
- Startable startable = ((Startable) iterator.next());
- startable.start();
- }
- Iterator it = namedChildContainers.values().iterator();
- while (it.hasNext()) {
- PicoContainer pc = (PicoContainer) it.next();
- pc.getComponentInstances();
- pc.start();
- }
- started = true;
+ getLifecycleManager().start();
}
+ /**
+ * @deprecated Use {@link #getLifecycleManager()}.start()
+ */
public void stop() {
- if (disposed) throw new IllegalStateException("Already disposed");
- if (!started) throw new IllegalStateException("Not started");
- Iterator it = namedChildContainers.values().iterator();
- while (it.hasNext()) {
- PicoContainer pc = (PicoContainer) it.next();
- pc.stop();
- }
- List componentInstances = getComponentInstancesOfTypeWithContainerAdaptersLast(Startable.class);
- Collections.reverse(componentInstances);
- for (Iterator iterator = componentInstances.iterator(); iterator.hasNext();) {
- ((Startable) iterator.next()).stop();
- }
- started = false;
+ getLifecycleManager().stop();
}
+ /**
+ * @deprecated Use {@link #getLifecycleManager()}.start()
+ */
public void dispose() {
- if (disposed) throw new IllegalStateException("Already disposed");
- Iterator it = namedChildContainers.values().iterator();
- while (it.hasNext()) {
- PicoContainer pc = (PicoContainer) it.next();
- pc.dispose();
- }
- List componentInstances = getComponentInstancesOfTypeWithContainerAdaptersLast(Disposable.class);
- Collections.reverse(componentInstances);
- for (Iterator iterator = componentInstances.iterator(); iterator.hasNext();) {
- ((Disposable) iterator.next()).dispose();
- }
- if (parent instanceof MutablePicoContainer) {
- ((MutablePicoContainer) parent).removeChildContainer(this);
- }
- parent = null;
- namedChildContainers = null;
- disposed = true;
-
- }
-
- private List getComponentInstancesOfTypeWithContainerAdaptersLast(Class type) {
- List result = new ArrayList();
- result.addAll(getComponentInstancesOfType(type));
- Collections.sort(result, new StackContainersAtEndComparator());
- return result;
+ getLifecycleManager().dispose();
}
public MutablePicoContainer makeChildContainer() {
@@ -404,7 +372,7 @@
}
public MutablePicoContainer makeChildContainer(String name) {
- DefaultPicoContainer pc = new DefaultPicoContainer(componentAdapterFactory, this);
+ DefaultPicoContainer pc = new DefaultPicoContainer(componentAdapterFactory, lifecycleManagerFactory, this);
addChildContainer(name, pc);
return pc;
}
@@ -431,24 +399,15 @@
}
}
- /**
- * This comparator makes sure containers are always stacked at the end of the collection,
- * leaving the order of the others unchanged. This is needed in order to have proper
- * breadth-first traversal when calling lifecycle methods on container hierarchies.
- *
- * @author Aslak Hellesøy
- * @version $Revision: 1.4 $
- */
- class StackContainersAtEndComparator implements Comparator {
- public int compare(Object o1, Object o2) {
- if (PicoContainer.class.isInstance(o1)) {
- return 1;
- }
- if (PicoContainer.class.isInstance(o2)) {
- return -1;
- }
- return 0;
+ public LifecycleManager getLifecycleManager() {
+ if(lifecycleManager == null) {
+ lifecycleManager = lifecycleManagerFactory.createLifecycleManager(this);
}
+ return lifecycleManager;
+ }
+
+ public Collection getChildContainers() {
+ return namedChildContainers.values();
}
protected Map getNamedContainers() {
Index: picocontainer/src/test/org/picocontainer/alternatives/ImplementationHidingPicoContainerTestCase.java
===================================================================
RCS file: /home/projects/picocontainer/scm/java/picocontainer/src/test/org/picocontainer/alternatives/ImplementationHidingPicoContainerTestCase.java,v
retrieving revision 1.1
diff -u -r1.1 ImplementationHidingPicoContainerTestCase.java
--- picocontainer/src/test/org/picocontainer/alternatives/ImplementationHidingPicoContainerTestCase.java 14 Jul 2004 20:28:36 -0000 1.1
+++ picocontainer/src/test/org/picocontainer/alternatives/ImplementationHidingPicoContainerTestCase.java 23 Jul 2004 20:08:13 -0000
@@ -11,7 +11,6 @@
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.PicoContainer;
import org.picocontainer.defaults.AbstractImplementationHidingPicoContainerTestCase;
-import org.picocontainer.alternatives.ImplementationHidingPicoContainer;
public class ImplementationHidingPicoContainerTestCase extends AbstractImplementationHidingPicoContainerTestCase {
@@ -22,6 +21,4 @@
protected MutablePicoContainer createPicoContainer(PicoContainer parent) {
return new ImplementationHidingPicoContainer(parent);
}
-
-
}
Index: picocontainer/src/test/org/picocontainer/defaults/DefaultPicoContainerLifecycleTestCase.java
===================================================================
RCS file: /home/projects/picocontainer/scm/java/picocontainer/src/test/org/picocontainer/defaults/DefaultPicoContainerLifecycleTestCase.java,v
retrieving revision 1.20
diff -u -r1.20 DefaultPicoContainerLifecycleTestCase.java
--- picocontainer/src/test/org/picocontainer/defaults/DefaultPicoContainerLifecycleTestCase.java 24 Jun 2004 23:27:05 -0000 1.20
+++ picocontainer/src/test/org/picocontainer/defaults/DefaultPicoContainerLifecycleTestCase.java 23 Jul 2004 19:40:00 -0000
@@ -16,6 +16,7 @@
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.PicoContainer;
import org.picocontainer.Startable;
+import org.picocontainer.LifecycleManager;
import java.util.List;
import java.util.ArrayList;
@@ -82,7 +83,6 @@
}
}
-
public void testOrderOfInstantiationShouldBeDependencyOrder() throws Exception {
DefaultPicoContainer pico = new DefaultPicoContainer();
@@ -102,16 +102,17 @@
public void testOrderOfStartShouldBeDependencyOrderAndStopAndDisposeTheOpposite() throws Exception {
- DefaultPicoContainer pico = new DefaultPicoContainer();
+ MutablePicoContainer pico = new DefaultPicoContainer();
pico.registerComponentImplementation("recording", StringBuffer.class);
pico.registerComponentImplementation(Four.class);
pico.registerComponentImplementation(Two.class);
pico.registerComponentImplementation(One.class);
pico.registerComponentImplementation(Three.class);
- pico.start();
- pico.stop();
- pico.dispose();
+ LifecycleManager lm = pico.getLifecycleManager();
+ lm.start();
+ lm.stop();
+ lm.dispose();
assertEquals("Three>Two>One>!Four!Three!Two!One", pico.getComponentInstance("recording").toString());
}
Index: picocontainer/src/test/org/picocontainer/tck/AbstractPicoContainerTestCase.java
===================================================================
RCS file: /home/projects/picocontainer/scm/java/picocontainer/src/test/org/picocontainer/tck/AbstractPicoContainerTestCase.java,v
retrieving revision 1.44
diff -u -r1.44 AbstractPicoContainerTestCase.java
--- picocontainer/src/test/org/picocontainer/tck/AbstractPicoContainerTestCase.java 18 Jul 2004 07:29:20 -0000 1.44
+++ picocontainer/src/test/org/picocontainer/tck/AbstractPicoContainerTestCase.java 23 Jul 2004 19:34:15 -0000
@@ -397,10 +397,8 @@
}
public static class ContainerDependency {
- private PicoContainer pico;
-
public ContainerDependency(PicoContainer container) {
- this.pico = container;
+ assertNotNull(container);
}
}
@@ -536,8 +534,6 @@
parent.dispose();
assertTrue(sb.toString().indexOf("-disposed") != -1);
}
-
-
public static class LifeCycleMonitoring implements Startable, Disposable {
StringBuffer sb;