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 }