001    package org.picocontainer.web;
002    
003    import org.picocontainer.lifecycle.LifecycleState;
004    import org.picocontainer.lifecycle.DefaultLifecycleState;
005    
006    public class ThreadLocalLifecycleState implements LifecycleState {
007    
008        private LifecycleStateThreadLocal tl = new LifecycleStateThreadLocal();
009    
010        public void removingComponent() {
011            tl.get().removingComponent();
012        }
013    
014        public void starting() {
015            tl.get().starting();
016        }
017    
018        public void stopping() {
019            tl.get().stopping();
020        }
021    
022        public void stopped() {
023            tl.get().stopped();
024        }
025    
026        public boolean isStarted() {
027            return tl.get().isStarted();
028        }
029    
030        public void disposing() {
031            tl.get().disposing();
032        }
033    
034        public void disposed() {
035            tl.get().disposed();
036        }
037    
038        public void putLifecycleStateModelForThread(DefaultLifecycleState lifecycleState) {
039            tl.set(lifecycleState);
040        }
041    
042        public DefaultLifecycleState resetStateModelForThread() {
043            DefaultLifecycleState dls = new DefaultLifecycleState();
044            tl.set(dls);
045            return dls;
046        }
047    
048        public void invalidateStateModelForThread() {
049            tl.set(null);
050        }
051    
052        private static class LifecycleStateThreadLocal extends ThreadLocal<DefaultLifecycleState> {
053            protected DefaultLifecycleState initialValue() {
054                return new DefaultLifecycleState();
055            }
056        }
057    
058    }