001 /*
002 * Created on Jun 25, 2005 @author paulk
003 */
004 package toolbus.atom.note;
005
006 import toolbus.TBTermFactory;
007 import toolbus.atom.Atom;
008 import toolbus.atom.Ref;
009 import toolbus.exceptions.ToolBusException;
010 import toolbus.exceptions.ToolBusExecutionException;
011 import toolbus.parsercup.PositionInformation;
012 import toolbus.process.ProcessExpression;
013 import aterm.ATerm;
014
015 /**
016 * The unsubscribe atom
017 */
018 public class UnSubscribe extends Atom{
019 private final ATerm msgpat;
020
021 public UnSubscribe(ATerm msgpat, TBTermFactory tbfactory, PositionInformation posInfo){
022 super(tbfactory, posInfo);
023 this.msgpat = msgpat;
024 setAtomArgs(new Ref[]{new Ref(msgpat)});
025 }
026
027 public ProcessExpression copy(){
028 Atom a = new UnSubscribe(msgpat, tbfactory, getPosInfo());
029 a.copyAtomAttributes(this);
030 return a;
031 }
032
033 public boolean execute() throws ToolBusException{
034 if(!isEnabled()) return false;
035
036 ATerm unsubscribePattern = tbfactory.fullSubstitute(msgpat, getEnv());
037 if(unsubscribePattern == null) throw new ToolBusExecutionException("Illegal subscription pattern: "+msgpat+".", getPosInfo());
038
039 getProcess().unsubscribe(unsubscribePattern);
040
041 return true;
042 }
043 }