/** * <copyright> * </copyright> * * $Id$ */ package org.eclipse.gmf.codegen.gmfgen.impl; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.eclipse.emf.codegen.ecore.genmodel.GenClass; import org.eclipse.emf.codegen.ecore.genmodel.GenFeature; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.ECollections; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList; import org.eclipse.emf.ecore.util.EcoreEList; import org.eclipse.emf.ecore.util.InternalEList; import org.eclipse.gmf.codegen.gmfgen.FeatureLinkModelFacet; import org.eclipse.gmf.codegen.gmfgen.GMFGenPackage; import org.eclipse.gmf.codegen.gmfgen.GenCompartment; import org.eclipse.gmf.codegen.gmfgen.GenLink; import org.eclipse.gmf.codegen.gmfgen.GenLinkEnd; import org.eclipse.gmf.codegen.gmfgen.GenNode; import org.eclipse.gmf.codegen.gmfgen.GenNodeLabel; import org.eclipse.gmf.codegen.gmfgen.GenVisualEffect; import org.eclipse.gmf.codegen.gmfgen.TypeLinkModelFacet; import org.eclipse.gmf.codegen.gmfgen.TypeModelFacet; import org.eclipse.gmf.internal.codegen.util.Extras; /** * <!-- begin-user-doc --> * An implementation of the model object '<em><b>Gen Node</b></em>'. * <!-- end-user-doc --> * <p> * The following features are implemented: * <ul> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getGenOutgoingLinks <em>Gen Outgoing Links</em>}</li> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getGenIncomingLinks <em>Gen Incoming Links</em>}</li> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getModelFacet <em>Model Facet</em>}</li> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getLabels <em>Labels</em>}</li> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getCompartments <em>Compartments</em>}</li> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getPrimaryDragEditPolicyQualifiedClassName <em>Primary Drag Edit Policy Qualified Class Name</em>}</li> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getGraphicalNodeEditPolicyClassName <em>Graphical Node Edit Policy Class Name</em>}</li> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getCreateCommandClassName <em>Create Command Class Name</em>}</li> * <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenNodeImpl#getReorientedIncomingLinks <em>Reoriented Incoming Links</em>}</li> * </ul> * </p> * * @generated */ public abstract class GenNodeImpl extends GenChildContainerImpl implements GenNode { /** * The cached value of the '{@link #getModelFacet() <em>Model Facet</em>}' containment reference. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getModelFacet() * @generated * @ordered */ protected TypeModelFacet modelFacet; /** * The cached value of the '{@link #getLabels() <em>Labels</em>}' containment reference list. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getLabels() * @generated * @ordered */ protected EList<GenNodeLabel> labels; /** * The cached value of the '{@link #getCompartments() <em>Compartments</em>}' reference list. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getCompartments() * @generated * @ordered */ protected EList<GenCompartment> compartments; /** * The default value of the '{@link #getPrimaryDragEditPolicyQualifiedClassName() <em>Primary Drag Edit Policy Qualified Class Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getPrimaryDragEditPolicyQualifiedClassName() * @generated * @ordered */ protected static final String PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME_EDEFAULT = null; /** * The cached value of the '{@link #getPrimaryDragEditPolicyQualifiedClassName() <em>Primary Drag Edit Policy Qualified Class Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getPrimaryDragEditPolicyQualifiedClassName() * @generated * @ordered */ protected String primaryDragEditPolicyQualifiedClassName = PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME_EDEFAULT; /** * The default value of the '{@link #getGraphicalNodeEditPolicyClassName() <em>Graphical Node Edit Policy Class Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getGraphicalNodeEditPolicyClassName() * @generated * @ordered */ protected static final String GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME_EDEFAULT = null; /** * The cached value of the '{@link #getGraphicalNodeEditPolicyClassName() <em>Graphical Node Edit Policy Class Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getGraphicalNodeEditPolicyClassName() * @generated * @ordered */ protected String graphicalNodeEditPolicyClassName = GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME_EDEFAULT; /** * The default value of the '{@link #getCreateCommandClassName() <em>Create Command Class Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getCreateCommandClassName() * @generated * @ordered */ protected static final String CREATE_COMMAND_CLASS_NAME_EDEFAULT = null; /** * The cached value of the '{@link #getCreateCommandClassName() <em>Create Command Class Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getCreateCommandClassName() * @generated * @ordered */ protected String createCommandClassName = CREATE_COMMAND_CLASS_NAME_EDEFAULT; /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ protected GenNodeImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override protected EClass eStaticClass() { return GMFGenPackage.eINSTANCE.getGenNode(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public EList<GenLink> getGenOutgoingLinks() { EList<GenLink> r = GenLinkEndOperations.getGenOutgoingLinks(this); return new EcoreEList.UnmodifiableEList<GenLink>(this, GMFGenPackage.eINSTANCE.getGenLinkEnd_GenOutgoingLinks(), r.size(), r.toArray()); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public EList<GenLink> getGenIncomingLinks() { EList<GenLink> r = GenLinkEndOperations.getGenIncomingLinks(this); return new EcoreEList.UnmodifiableEList<GenLink>(this, GMFGenPackage.eINSTANCE.getGenLinkEnd_GenIncomingLinks(), r.size(), r.toArray()); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public GenClass getDomainMetaClass() { return getModelFacet() == null ? null : getModelFacet().getMetaClass(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public String getGraphicalNodeEditPolicyQualifiedClassName() { return getDiagram().getEditPoliciesPackageName() + '.' + getGraphicalNodeEditPolicyClassName(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public String getCreateCommandQualifiedClassName() { return getDiagram().getEditCommandsPackageName() + '.' + getCreateCommandClassName(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @SuppressWarnings("unchecked") @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case GMFGenPackage.GEN_NODE__LABELS: return ((InternalEList<InternalEObject>)(InternalEList<?>)getLabels()).basicAdd(otherEnd, msgs); case GMFGenPackage.GEN_NODE__COMPARTMENTS: return ((InternalEList<InternalEObject>)(InternalEList<?>)getCompartments()).basicAdd(otherEnd, msgs); } return super.eInverseAdd(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case GMFGenPackage.GEN_NODE__MODEL_FACET: return basicSetModelFacet(null, msgs); case GMFGenPackage.GEN_NODE__LABELS: return ((InternalEList<?>)getLabels()).basicRemove(otherEnd, msgs); case GMFGenPackage.GEN_NODE__COMPARTMENTS: return ((InternalEList<?>)getCompartments()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case GMFGenPackage.GEN_NODE__GEN_OUTGOING_LINKS: return getGenOutgoingLinks(); case GMFGenPackage.GEN_NODE__GEN_INCOMING_LINKS: return getGenIncomingLinks(); case GMFGenPackage.GEN_NODE__MODEL_FACET: return getModelFacet(); case GMFGenPackage.GEN_NODE__LABELS: return getLabels(); case GMFGenPackage.GEN_NODE__COMPARTMENTS: return getCompartments(); case GMFGenPackage.GEN_NODE__PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME: return getPrimaryDragEditPolicyQualifiedClassName(); case GMFGenPackage.GEN_NODE__GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME: return getGraphicalNodeEditPolicyClassName(); case GMFGenPackage.GEN_NODE__CREATE_COMMAND_CLASS_NAME: return getCreateCommandClassName(); case GMFGenPackage.GEN_NODE__REORIENTED_INCOMING_LINKS: return getReorientedIncomingLinks(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case GMFGenPackage.GEN_NODE__MODEL_FACET: setModelFacet((TypeModelFacet)newValue); return; case GMFGenPackage.GEN_NODE__LABELS: getLabels().clear(); getLabels().addAll((Collection<? extends GenNodeLabel>)newValue); return; case GMFGenPackage.GEN_NODE__COMPARTMENTS: getCompartments().clear(); getCompartments().addAll((Collection<? extends GenCompartment>)newValue); return; case GMFGenPackage.GEN_NODE__PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME: setPrimaryDragEditPolicyQualifiedClassName((String)newValue); return; case GMFGenPackage.GEN_NODE__GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME: setGraphicalNodeEditPolicyClassName((String)newValue); return; case GMFGenPackage.GEN_NODE__CREATE_COMMAND_CLASS_NAME: setCreateCommandClassName((String)newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case GMFGenPackage.GEN_NODE__MODEL_FACET: setModelFacet((TypeModelFacet)null); return; case GMFGenPackage.GEN_NODE__LABELS: getLabels().clear(); return; case GMFGenPackage.GEN_NODE__COMPARTMENTS: getCompartments().clear(); return; case GMFGenPackage.GEN_NODE__PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME: setPrimaryDragEditPolicyQualifiedClassName(PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME_EDEFAULT); return; case GMFGenPackage.GEN_NODE__GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME: setGraphicalNodeEditPolicyClassName(GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME_EDEFAULT); return; case GMFGenPackage.GEN_NODE__CREATE_COMMAND_CLASS_NAME: setCreateCommandClassName(CREATE_COMMAND_CLASS_NAME_EDEFAULT); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case GMFGenPackage.GEN_NODE__GEN_OUTGOING_LINKS: return !getGenOutgoingLinks().isEmpty(); case GMFGenPackage.GEN_NODE__GEN_INCOMING_LINKS: return !getGenIncomingLinks().isEmpty(); case GMFGenPackage.GEN_NODE__MODEL_FACET: return modelFacet != null; case GMFGenPackage.GEN_NODE__LABELS: return labels != null && !labels.isEmpty(); case GMFGenPackage.GEN_NODE__COMPARTMENTS: return compartments != null && !compartments.isEmpty(); case GMFGenPackage.GEN_NODE__PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME: return PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME_EDEFAULT == null ? primaryDragEditPolicyQualifiedClassName != null : !PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME_EDEFAULT.equals(primaryDragEditPolicyQualifiedClassName); case GMFGenPackage.GEN_NODE__GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME: return GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME_EDEFAULT == null ? graphicalNodeEditPolicyClassName != null : !GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME_EDEFAULT.equals(graphicalNodeEditPolicyClassName); case GMFGenPackage.GEN_NODE__CREATE_COMMAND_CLASS_NAME: return CREATE_COMMAND_CLASS_NAME_EDEFAULT == null ? createCommandClassName != null : !CREATE_COMMAND_CLASS_NAME_EDEFAULT.equals(createCommandClassName); case GMFGenPackage.GEN_NODE__REORIENTED_INCOMING_LINKS: return !getReorientedIncomingLinks().isEmpty(); } return super.eIsSet(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) { if (baseClass == GenLinkEnd.class) { switch (derivedFeatureID) { case GMFGenPackage.GEN_NODE__GEN_OUTGOING_LINKS: return GMFGenPackage.GEN_LINK_END__GEN_OUTGOING_LINKS; case GMFGenPackage.GEN_NODE__GEN_INCOMING_LINKS: return GMFGenPackage.GEN_LINK_END__GEN_INCOMING_LINKS; default: return -1; } } return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) { if (baseClass == GenLinkEnd.class) { switch (baseFeatureID) { case GMFGenPackage.GEN_LINK_END__GEN_OUTGOING_LINKS: return GMFGenPackage.GEN_NODE__GEN_OUTGOING_LINKS; case GMFGenPackage.GEN_LINK_END__GEN_INCOMING_LINKS: return GMFGenPackage.GEN_NODE__GEN_INCOMING_LINKS; default: return -1; } } return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<GenNodeLabel> getLabels() { if (labels == null) { labels = new EObjectContainmentWithInverseEList<GenNodeLabel>(GenNodeLabel.class, this, GMFGenPackage.GEN_NODE__LABELS, GMFGenPackage.GEN_NODE_LABEL__NODE); } return labels; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<GenCompartment> getCompartments() { if (compartments == null) { compartments = new EObjectWithInverseResolvingEList<GenCompartment>(GenCompartment.class, this, GMFGenPackage.GEN_NODE__COMPARTMENTS, GMFGenPackage.GEN_COMPARTMENT__NODE); } return compartments; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public String getPrimaryDragEditPolicyQualifiedClassName() { return primaryDragEditPolicyQualifiedClassName; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setPrimaryDragEditPolicyQualifiedClassName(String newPrimaryDragEditPolicyQualifiedClassName) { String oldPrimaryDragEditPolicyQualifiedClassName = primaryDragEditPolicyQualifiedClassName; primaryDragEditPolicyQualifiedClassName = newPrimaryDragEditPolicyQualifiedClassName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_NODE__PRIMARY_DRAG_EDIT_POLICY_QUALIFIED_CLASS_NAME, oldPrimaryDragEditPolicyQualifiedClassName, primaryDragEditPolicyQualifiedClassName)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public String getGraphicalNodeEditPolicyClassNameGen() { return graphicalNodeEditPolicyClassName; } public String getGraphicalNodeEditPolicyClassName() { return getValidClassName(getGraphicalNodeEditPolicyClassNameGen(), this, GRAPHICAL_NODE_EDIT_POLICY_SUFFIX); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setGraphicalNodeEditPolicyClassName(String newGraphicalNodeEditPolicyClassName) { String oldGraphicalNodeEditPolicyClassName = graphicalNodeEditPolicyClassName; graphicalNodeEditPolicyClassName = newGraphicalNodeEditPolicyClassName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_NODE__GRAPHICAL_NODE_EDIT_POLICY_CLASS_NAME, oldGraphicalNodeEditPolicyClassName, graphicalNodeEditPolicyClassName)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public String getCreateCommandClassNameGen() { return createCommandClassName; } public String getCreateCommandClassName() { return GenCommonBaseImpl.getValidClassName(getCreateCommandClassNameGen(), this, CREATE_COMMAND_SUFFIX); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setCreateCommandClassName(String newCreateCommandClassName) { String oldCreateCommandClassName = createCommandClassName; createCommandClassName = newCreateCommandClassName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_NODE__CREATE_COMMAND_CLASS_NAME, oldCreateCommandClassName, createCommandClassName)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public TypeModelFacet getModelFacet() { return modelFacet; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public NotificationChain basicSetModelFacet(TypeModelFacet newModelFacet, NotificationChain msgs) { TypeModelFacet oldModelFacet = modelFacet; modelFacet = newModelFacet; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_NODE__MODEL_FACET, oldModelFacet, newModelFacet); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public void setModelFacet(TypeModelFacet newModelFacet) { if (newModelFacet != modelFacet) { NotificationChain msgs = null; if (modelFacet != null) msgs = ((InternalEObject)modelFacet).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GMFGenPackage.GEN_NODE__MODEL_FACET, null, msgs); if (newModelFacet != null) msgs = ((InternalEObject)newModelFacet).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GMFGenPackage.GEN_NODE__MODEL_FACET, null, msgs); msgs = basicSetModelFacet(newModelFacet, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_NODE__MODEL_FACET, newModelFacet, newModelFacet)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (primaryDragEditPolicyQualifiedClassName: "); result.append(primaryDragEditPolicyQualifiedClassName); result.append(", graphicalNodeEditPolicyClassName: "); result.append(graphicalNodeEditPolicyClassName); result.append(", createCommandClassName: "); result.append(createCommandClassName); result.append(')'); return result.toString(); } public String getClassNamePrefix() { // should be consistent with ClassNamingStrategy if (getDomainMetaClass() != null) { String name = getDomainMetaClass().getName(); if (!isEmpty(name)) { return getValidClassName(name); } } return CLASS_NAME_PREFIX; } @Override public EList<GenNode> getAssistantNodes() { BasicEList<GenNode> nodes = new BasicEList<GenNode>(super.getAssistantNodes()); for (GenCompartment compartment : getCompartments()) { if (compartment.isListLayout()) { nodes.addAll(compartment.getContainedNodes()); } } return nodes; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public EList<GenLink> getReorientedIncomingLinks() { if (getModelFacet() == null || getModelFacet().getMetaClass() == null || getModelFacet().getMetaClass().getEcoreClass() == null) { return ECollections.emptyEList(); } // [artem] XXX not sure there might be two equal links in the genDiagram.links // but 'set' was there in the original template. legacy is the only reason i kept it, Set<GenLink> reorientedLinks = new HashSet<GenLink>(); for (GenLink genLink : getDiagram().getLinks()) { if (!genLink.isViewDirectionAlignedWithModel() || genLink.getModelFacet() == null) { continue; } GenClass incomingClass; GenClass outgoingClass; if (genLink.getModelFacet() instanceof TypeLinkModelFacet) { TypeLinkModelFacet modelFacet = (TypeLinkModelFacet) genLink.getModelFacet(); outgoingClass = modelFacet.getSourceMetaFeature() == null ? modelFacet.getContainmentMetaFeature().getGenClass() : modelFacet.getSourceMetaFeature().getTypeGenClass(); incomingClass = modelFacet.getTargetMetaFeature().getTypeGenClass(); } else if (genLink.getModelFacet() instanceof FeatureLinkModelFacet) { GenFeature metaFeature = ((FeatureLinkModelFacet) genLink.getModelFacet()).getMetaFeature(); outgoingClass = metaFeature.getGenClass(); incomingClass = metaFeature.getTypeGenClass(); } else { continue; } if (incomingClass == null || incomingClass.getEcoreClass() == null || outgoingClass == null || outgoingClass.getEcoreClass() == null) { continue; } GenClass nodeMetaClass = getModelFacet().getMetaClass(); boolean canBeSource = Extras.isSuperTypeOf(outgoingClass.getEcoreClass(), nodeMetaClass.getEcoreClass()); boolean canBeTarget = Extras.isSuperTypeOf(incomingClass.getEcoreClass(), nodeMetaClass.getEcoreClass()); /* * This logic is currently aligned with the logic in NodeItemSemanticEditPolicy.javajet i.e.: * * - we do not perform link rotation if this link could be drawn from instance of this EP * to the instance of this EP. * * - if link could be created in "opposite" direction (genLink.isIncomingCreationAllowed() == true) * and this EP could be only a source of the link then we should reverse link at the end of link * creation * */ if (canBeSource && canBeTarget) { continue; } if (genLink.isIncomingCreationAllowed() && canBeSource) { reorientedLinks.add(genLink); } } return new EcoreEList.UnmodifiableEList<GenLink>(this, GMFGenPackage.eINSTANCE.getGenNode_ReorientedIncomingLinks(), reorientedLinks.size(), reorientedLinks.toArray()); } public boolean isSansDomain() { return getModelFacet() == null; } } //GenNodeImpl