| /* |
| * Copyright (c) 2007, 2008 Borland Software Corporation |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Alexander Shatalin (Borland) - initial API and implementation |
| */ |
| |
| import "http://www.eclipse.org/gmf/2008/GenModel"; |
| import "http://www.eclipse.org/emf/2002/Ecore"; |
| import "http://www.eclipse.org/emf/2002/GenModel"; |
| |
| boolean isTypeLink(gmfgen::GenLink link) : |
| {link.modelFacet}.typeSelect(gmfgen::TypeLinkModelFacet).size() > 0 |
| ; |
| |
| boolean isRefLink(gmfgen::GenLink link) : |
| {link.modelFacet}.typeSelect(gmfgen::FeatureLinkModelFacet).size() > 0 |
| ; |
| |
| boolean canBeSource(gmfgen::GenLink link, gmfgen::TypeModelFacet modelFacet) : |
| canBeSource(link, modelFacet.metaClass) |
| ; |
| |
| boolean canBeSource(gmfgen::GenLink link, genmodel::GenClass metaClass) : |
| null != link.modelFacet && canBeLinkEnd(link.modelFacet.getSourceType(), metaClass) |
| ; |
| |
| boolean canBeTarget(gmfgen::GenLink link, gmfgen::TypeModelFacet modelFacet) : |
| canBeTarget(link, modelFacet.metaClass) |
| ; |
| |
| boolean canBeTarget(gmfgen::GenLink link, genmodel::GenClass metaClass) : |
| null != link.modelFacet && canBeLinkEnd(link.modelFacet.getTargetType(), metaClass) |
| ; |
| |
| boolean canBeContainer(gmfgen::GenLink link, genmodel::GenClass metaClass) : |
| null != link.modelFacet && canBeLinkEnd(getContainerClass(link.modelFacet), metaClass) |
| ; |
| |
| private genmodel::GenClass getContainerClass(gmfgen::LinkModelFacet modelFacet) : null /* Should not be called */ ; |
| |
| private genmodel::GenClass getContainerClass(gmfgen::TypeLinkModelFacet modelFacet) : |
| // can't use getSourceType() here as it respects sourceMetaFeature, which is irrelevant for containment |
| modelFacet.childMetaFeature.genClass |
| ; |
| |
| private genmodel::GenClass getContainerClass(gmfgen::FeatureLinkModelFacet modelFacet) : modelFacet.getSourceType() ; |
| |
| private boolean canBeLinkEnd(genmodel::GenClass endType, genmodel::GenClass metaClass) : |
| null != endType && endType.ecoreClass.isSuperTypeOf(metaClass.ecoreClass) |
| ; |