| package org.eclipse.uml2.diagram.common.parser.association; |
| |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.uml2.diagram.common.parser.association.end.AssociationEndToString; |
| import org.eclipse.uml2.diagram.parser.ApplyStrategy; |
| import org.eclipse.uml2.diagram.parser.BasicApplyStrategy; |
| import org.eclipse.uml2.diagram.parser.ExternalParserBase; |
| import org.eclipse.uml2.diagram.parser.ExternalParserException; |
| import org.eclipse.uml2.diagram.parser.SemanticParserAdapter; |
| import org.eclipse.uml2.diagram.parser.ExternalToString.WithReferences; |
| import org.eclipse.uml2.uml.Association; |
| import org.eclipse.uml2.uml.Property; |
| import org.eclipse.uml2.uml.Slot; |
| import org.eclipse.uml2.uml.StructuralFeature; |
| import org.eclipse.uml2.uml.UMLPackage; |
| |
| public class AssociationInstanceParser extends SemanticParserAdapter { |
| |
| private AssociationInstanceParser(WithReferences viewAndEdit) { |
| super(EMPTY_PARSER_DELEGATE, EMPTY_APPLIER, viewAndEdit); |
| } |
| |
| public static class ROLE_PARSER extends AssociationInstanceParser { |
| |
| public ROLE_PARSER(boolean sourceNotTarget) { |
| super(new AssociationEndToString.ROLE_VIEW(sourceNotTarget){ |
| |
| @Override |
| public String getToString(EObject object, int flags) { |
| // TODO Auto-generated method stub |
| return super.getToString(object, flags); |
| } |
| }); |
| } |
| |
| } |
| |
| @Override |
| protected boolean isAffectingEvent(Object event) { |
| if (event instanceof Notification) { |
| Object feature = ((Notification) event).getFeature(); |
| if ((feature instanceof EStructuralFeature) && UMLPackage.eINSTANCE.getSlot_DefiningFeature().equals(feature)) { |
| return true; |
| } |
| } |
| return super.isAffectingEvent(event); |
| } |
| |
| @Override |
| public List<?> getSemanticElementsBeingParsed(EObject element) { |
| if (false == element instanceof Slot) { |
| return Collections.EMPTY_LIST; |
| } |
| StructuralFeature definingFeature = ((Slot) element).getDefiningFeature(); |
| if (definingFeature == null || false == definingFeature instanceof Property) { |
| return Collections.EMPTY_LIST; |
| } |
| Association a = ((Property) definingFeature).getAssociation(); |
| if (a != null) { |
| return super.getSemanticElementsBeingParsed(a); |
| } |
| return Collections.EMPTY_LIST; |
| } |
| |
| private static final ExternalParserBase EMPTY_PARSER_DELEGATE = new ExternalParserBase() { |
| |
| @Override |
| public EClass getSubjectClass() { |
| return UMLPackage.eINSTANCE.getAssociation(); |
| } |
| |
| @Override |
| public void parse(EObject target, String text) throws ExternalParserException { |
| throw new ExternalParserException("Parsing is not supported"); |
| } |
| }; |
| |
| private static final ApplyStrategy EMPTY_APPLIER = new BasicApplyStrategy(); |
| |
| } |