package org.eclipse.uml2.diagram.common.editpolicies; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.Request; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.uml2.diagram.common.genapi.IUpdaterLinkDescriptor; import org.eclipse.uml2.diagram.common.genapi.IUpdaterNodeDescriptor; public class UpdateDescriptionRequest extends Request { public static final Object TYPE = new Object(); private final List<Descriptor> myDescriptions; public UpdateDescriptionRequest() { super(TYPE); myDescriptions = new LinkedList<Descriptor>(); } public Descriptor registerDescription(IGraphicalEditPart provider, boolean registerSemanticElement) { Descriptor result = new Descriptor(provider, registerSemanticElement ? provider.resolveSemanticElement() : null); myDescriptions.add(result); return result; } public List<Descriptor> getDescriptions() { return Collections.unmodifiableList(myDescriptions); } public static class Descriptor { private final IGraphicalEditPart myProvider; private final EObject mySemanticElement; private final List<IUpdaterNodeDescriptor> myContainedChildren; private final List<IUpdaterLinkDescriptor> myOutgoingLinks; private final List<IUpdaterLinkDescriptor> myContainedLinks; private Descriptor(IGraphicalEditPart provider, EObject semanticElement) { myProvider = provider; mySemanticElement = semanticElement; myContainedChildren = new LinkedList<IUpdaterNodeDescriptor>(); myOutgoingLinks = new LinkedList<IUpdaterLinkDescriptor>(); myContainedLinks = new LinkedList<IUpdaterLinkDescriptor>(); } public EObject getSemanticElement() { return mySemanticElement; } public void addContainedChildren(Collection<? extends IUpdaterNodeDescriptor> children) { myContainedChildren.addAll(children); } public void addContainedLinks(Collection<? extends IUpdaterLinkDescriptor> links) { myContainedLinks.addAll(links); } public void addOutgoingLinks(Collection<? extends IUpdaterLinkDescriptor> links) { myOutgoingLinks.addAll(links); } public boolean isEmpty() { return myContainedChildren.isEmpty() && myContainedLinks.isEmpty() && myOutgoingLinks.isEmpty(); } public List<IUpdaterNodeDescriptor> getContainedChildren() { return Collections.unmodifiableList(myContainedChildren); } public List<IUpdaterLinkDescriptor> getContainedLinks() { return Collections.unmodifiableList(myContainedLinks); } public List<IUpdaterLinkDescriptor> getOutgoingLinks() { return Collections.unmodifiableList(myOutgoingLinks); } public IGraphicalEditPart getProvider() { return myProvider; } } }