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 }