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 boolean isStopped() {
031            return tl.get().isStopped();
032        }
033    
034        public boolean isDisposed() {
035            return tl.get().isDisposed();
036        }
037    
038        public void disposing() {
039            tl.get().disposing();
040        }
041    
042        public void disposed() {
043            tl.get().disposed();
044        }
045    
046        public void putLifecycleStateModelForThread(LifecycleState lifecycleState) {
047            tl.set(lifecycleState);
048        }
049    
050        public LifecycleState resetStateModelForThread() {
051            DefaultLifecycleState dls = new DefaultLifecycleState();
052            tl.set(dls);
053            return dls;
054        }
055    
056        public void invalidateStateModelForThread() {
057            tl.set(null);
058        }
059    
060        private static class LifecycleStateThreadLocal extends ThreadLocal<LifecycleState> {
061            protected LifecycleState initialValue() {
062                return new DefaultLifecycleState();
063            }
064        }
065    
066    }