001 /*****************************************************************************
002 * Copyright (C) PicoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 * *
008 * Original code by Paul Hammant *
009 *****************************************************************************/
010 package org.picocontainer.alternatives;
011
012 import org.picocontainer.ComponentAdapter;
013 import org.picocontainer.PicoContainer;
014 import org.picocontainer.PicoException;
015 import org.picocontainer.PicoVerificationException;
016 import org.picocontainer.PicoVisitor;
017 import org.picocontainer.defaults.VerifyingVisitor;
018
019 import java.io.Serializable;
020 import java.util.Collection;
021 import java.util.List;
022
023 // TODO: replace this with a proxy? It don't do nothing! (AH)
024 // Am open to elegant solution. This, at least, is instantiable (PH)
025
026 /**
027 * @author Paul Hammant
028 * @version $Revision: 2286 $
029 * @since 1.1
030 * @deprecated since 1.2, use the {@link org.picocontainer.defaults.ImmutablePicoContainerProxyFactory}
031 */
032 public class ImmutablePicoContainer implements PicoContainer, Serializable {
033
034 private PicoContainer delegate;
035
036 public ImmutablePicoContainer(PicoContainer delegate) {
037 if(delegate == null) throw new NullPointerException("You must pass in a picoContainer instance");
038 this.delegate = delegate;
039 }
040
041 public Object getComponentInstance(Object componentKey) {
042 return delegate.getComponentInstance(componentKey);
043 }
044
045 public Object getComponentInstanceOfType(Class componentType) {
046 return delegate.getComponentInstanceOfType(componentType);
047 }
048
049 public List getComponentInstances() {
050 return delegate.getComponentInstances();
051 }
052
053 public synchronized PicoContainer getParent() {
054 return delegate.getParent();
055 }
056
057 public ComponentAdapter getComponentAdapter(Object componentKey) {
058 return delegate.getComponentAdapter(componentKey);
059 }
060
061 public ComponentAdapter getComponentAdapterOfType(Class componentType) {
062 return delegate.getComponentAdapterOfType(componentType);
063 }
064
065 public Collection getComponentAdapters() {
066 return delegate.getComponentAdapters();
067 }
068
069 public List getComponentAdaptersOfType(Class componentType) {
070 return delegate.getComponentAdaptersOfType(componentType);
071 }
072
073 /**
074 * @deprecated since 1.1 - Use "new VerifyingVisitor().traverse(this)"
075 */
076 public void verify() throws PicoVerificationException {
077 new VerifyingVisitor().traverse(this);
078 }
079
080 public List getComponentInstancesOfType(Class type) throws PicoException {
081 return delegate.getComponentInstancesOfType(type);
082 }
083
084 public void accept(PicoVisitor visitor) {
085 delegate.accept(visitor);
086 }
087
088 public void start() {
089 // This is false security. As long as components can be accessed with getComponentInstance(), they can also be started. (AH).
090 throw new UnsupportedOperationException("This container is immutable, start() is not allowed");
091 }
092
093 public void stop() {
094 // This is false security. As long as components can be accessed with getComponentInstance(), they can also be stopped. (AH).
095 throw new UnsupportedOperationException("This container is immutable, stop() is not allowed");
096 }
097
098 public void dispose() {
099 // This is false security. As long as components can be accessed with getComponentInstance(), they can also be disposed. (AH).
100 throw new UnsupportedOperationException("This container is immutable, dispose() is not allowed");
101 }
102 }