package org.eclipse.uml2.diagram.common.internal.stereo;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.uml2.diagram.common.stereo.TaggedValueHelper;
import org.eclipse.uml2.diagram.common.stereo.TaggedValueListener;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Stereotype;
public class TaggedValueHelperImpl implements TaggedValueHelper {
private final Element myExistingStereotypedElement;
private final EObject myRawReference;
private final Stereotype myStereo;
public TaggedValueHelperImpl(Element existingStereotypedElement, Stereotype stereo) {
myExistingStereotypedElement = existingStereotypedElement;
myStereo = stereo;
myRawReference = existingStereotypedElement.getStereotypeApplication(stereo);
}
public void addTaggedValueListener(TaggedValueListener listener) {
myRawReference.eAdapters().add(new StereotypeApplicationTaggedValueAdapter(listener));
}
public void removeTaggedValueListener(TaggedValueListener l) {
StereotypeApplicationTaggedValueAdapter forListener = null;
for (Adapter next : myRawReference.eAdapters()) {
if (next instanceof StereotypeApplicationTaggedValueAdapter && ((StereotypeApplicationTaggedValueAdapter) next).isForListener(l)) {
forListener = (StereotypeApplicationTaggedValueAdapter) next;
break;
}
}
if (forListener != null) {
myRawReference.eAdapters().remove(forListener);
}
}
public Stereotype getStereotype() {
return myStereo;
}
public Element getStereotypeOwner() {
return myExistingStereotypedElement;
}
public boolean isAlive() {
return myRawReference != null;
}
};