package org.eclipse.uml2.diagram.sequence.model.builder; import java.util.HashMap; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDBracket; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDBracketContainer; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDLifeLine; import org.eclipse.uml2.uml.Lifeline; public class LifeLineCallStack { private final HashMap<Lifeline, SDBracketContainer> myLifeline2Container = new HashMap<Lifeline, SDBracketContainer>(); void clear(){ myLifeline2Container.clear(); } void push(Lifeline lifeline, SDBracketContainer sdContainer){ if (sdContainer instanceof SDBracket && ((SDBracket)sdContainer).getBracketContainer() == null){ throw new SDBuilderInternalProblem("SDBracket without container: " + sdContainer); } myLifeline2Container.put(lifeline, sdContainer); } public SDBracketContainer peek(Lifeline lifeline){ SDBracketContainer result = myLifeline2Container.get(lifeline); if (result == null){ throw new SDBuilderInternalProblem("No active bracket containers for lifeline: " + lifeline); } return result; } void pop(Lifeline lifeline){ SDBracketContainer bottom = myLifeline2Container.remove(lifeline); if (bottom == null){ throw new SDBuilderInternalProblem("No active bracket containers for lifeline: " + lifeline); } if (bottom instanceof SDLifeLine){ throw new SDBuilderInternalProblem("Topmost container reached for lifeline: " + lifeline); } SDBracket bracket = (SDBracket)bottom; if (bracket.getBracketContainer() == null){ throw new SDBuilderInternalProblem("SDBracket without container: " + bracket); } myLifeline2Container.put(lifeline, bracket.getBracketContainer()); } }