package com.sap.furcas.runtime.parser.impl; import java.util.ArrayList; import java.util.List; import org.antlr.runtime.RecognitionException; import org.antlr.runtime.Token; import com.sap.furcas.runtime.parser.IParsingObserver; /** * Helper class to allow multiple classes implementing IParsingObserver to * listen to one PatchedObservableParser. * * Parsing observers can be added and removed. When added, they will receive all * calls, as if they were attached to the PatchedObservableParser directly. * * Sends all caught exceptions to console. * * @author D052602 * */ public class DelegationParsingObserver implements IParsingObserver { private final List<IParsingObserver> observers = new ArrayList<IParsingObserver>(); public void addParsingObserver(IParsingObserver observer) { observers.add(observer); } public void removeParsingObserver(IParsingObserver observer) { observers.remove(observer); } @Override public void notifyEnterRule(String templateURI) { for (IParsingObserver observer : observers) { observer.notifyEnterRule(templateURI); } } @Override public void notifyEnterSequenceAlternative(int choice) { for (IParsingObserver observer : observers) { observer.notifyEnterSequenceAlternative(choice); } } @Override public void notifyEnterSequenceElement() { for (IParsingObserver observer : observers) { observer.notifyEnterSequenceElement(); } } @Override public void notifyErrorInRule(RecognitionException re) { for (IParsingObserver observer : observers) { observer.notifyErrorInRule(re); } } @Override public void notifyExitRule() { for (IParsingObserver observer : observers) { observer.notifyExitRule(); } } @Override public void notifyExitSequenceAlternative() { for (IParsingObserver observer : observers) { observer.notifyExitSequenceAlternative(); } } @Override public void notifyExitSequenceElement() { for (IParsingObserver observer : observers) { observer.notifyExitSequenceElement(); } } @Override public void notifyCommittedModelElementCreation(Object newModelElement) { for (IParsingObserver observer : observers) { observer.notifyCommittedModelElementCreation(newModelElement); } } @Override public void notifyModelElementResolvedOutOfContext(Object modelElement, Object contextModelElement, Token referenceLocation, DelayedReference reference) { for (IParsingObserver observer : observers) { observer.notifyModelElementResolvedOutOfContext(modelElement, contextModelElement, referenceLocation, reference); } } @Override public void notifyTokenConsume(Token token) { for (IParsingObserver observer : observers) { observer.notifyTokenConsume(token); } } @Override public void notifyTokenConsumeWithError(Token token) { for (IParsingObserver observer : observers) { observer.notifyTokenConsumeWithError(token); } } /* * (non-Javadoc) * * @see com.sap.mi.textual.grammar.impl.IParsingObserver#notifyModelElementResolutionFailed() */ @Override public void notifyCommitModelElementFailed() { for (IParsingObserver observer : observers) { observer.notifyCommitModelElementFailed(); } } /* (non-Javadoc) * @see com.sap.mi.textual.grammar.impl.IParsingObserver#notifyEnterSeparatorSequence() */ @Override public void notifyEnterSeparatorSequence() { for (IParsingObserver observer : observers) { observer.notifyEnterSeparatorSequence(); } } /* (non-Javadoc) * @see com.sap.mi.textual.grammar.impl.IParsingObserver#notifyExitSeparatorSequence() */ @Override public void notifyExitSeparatorSequence() { for (IParsingObserver observer : observers) { observer.notifyExitSeparatorSequence(); } } @Override public void notifyEnterSequenceElement(String sequenceElementURI) { for (IParsingObserver observer : observers) { observer.notifyEnterSequenceElement(sequenceElementURI); } } /* (non-Javadoc) * @see com.sap.mi.textual.grammar.impl.IParsingObserver#notifyEnterOperatoredBrackettedSequence() */ @Override public void notifyEnterOperatoredBrackettedSequence() { for (IParsingObserver observer : observers) { observer.notifyEnterOperatoredBrackettedSequence(); } } /* (non-Javadoc) * @see com.sap.mi.textual.grammar.impl.IParsingObserver#notifyExitOperatoredBrackettedSequence() */ @Override public void notifyExitOperatoredBrackettedSequence() { for (IParsingObserver observer : observers) { observer.notifyExitOperatoredBrackettedSequence(); } } /* (non-Javadoc) * @see com.sap.mi.textual.grammar.impl.IParsingObserver#notifyEnterOperatorSequence(java.lang.String, int, boolean) */ @Override public void notifyEnterOperatorSequence(String operator, int arity, boolean isUnaryPostfix) { for (IParsingObserver observer : observers) { observer.notifyEnterOperatorSequence(operator, arity, isUnaryPostfix); } } /* (non-Javadoc) * @see com.sap.mi.textual.grammar.impl.IParsingObserver#notifyExitOperatorSequence() */ @Override public void notifyExitOperatorSequence() { for (IParsingObserver observer : observers) { observer.notifyExitOperatorSequence(); } } @Override public void notifyElementAddedToContext(Object element) { for (IParsingObserver observer : observers) { observer.notifyElementAddedToContext(element); } } @Override public void notifyDelayedReferenceCreated(DelayedReference ref) { for (IParsingObserver observer : observers) { observer.notifyDelayedReferenceCreated(ref); } } @Override public void notifyEnterInjectorAction() { for (IParsingObserver observer : observers) { observer.notifyEnterInjectorAction(); } } @Override public void notifyExitInjectorAction() { for (IParsingObserver observer : observers) { observer.notifyExitInjectorAction(); } } @Override public void reset() { for (IParsingObserver observer : observers) { observer.reset(); } } }