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 }