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    }