001    package sysModel.env;
002    
003    import model.ILambda;
004    import sysModel.NoOpLambda;
005    
006    /**
007     * Decorator for a lambda to make it deactivatable.
008     *
009     * @author Mathias G. Ricken
010     */
011    public class DeactivatableLambda implements ILambda {
012        /**
013         * Decorated command.
014         */
015        private ILambda _decoree;
016    
017        /**
018         * Execute the wrapped command only if action is activated.
019         *
020         * @param param parameter for the decoree
021         * @return return value of the decoree
022         */
023        public Object apply(Object param) {
024            return _decoree.apply(param);
025        }
026    
027        /**
028         * Deactivate action.
029         */
030        public void deactivate() {
031            _decoree = NoOpLambda.instance();
032        }
033    
034        /**
035         * Make a new deactivatable command.
036         *
037         * @param wrapped command to make deactivatable
038         */
039        public DeactivatableLambda(ILambda wrapped) {
040            _decoree = wrapped;
041        }
042    }