package org.eclipse.uml2.diagram.common.parser.imports; import java.util.List; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.uml2.diagram.common.parser.ElementProvider; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.NamedElement; import org.eclipse.uml2.uml.PackageableElement; import org.eclipse.uml2.uml.Relationship; import org.eclipse.uml2.uml.resource.UMLResource; public class ElementImportProvider extends ElementProvider { private org.eclipse.uml2.uml.Package myContextPackage; public ElementImportProvider() { super(); } @Override protected List<NamedElement> loadAllElements(ResourceSet resourceSet) { preloadLibraries(resourceSet); return super.loadAllElements(resourceSet); } @Override protected void setContext(EObject context) { myContextPackage = null; if (context instanceof Element) { Element element = (Element) context; myContextPackage = element.getNearestPackage(); } super.setContext(context); } @Override protected String getDisplayProposal(NamedElement element) { String result = element.getQualifiedName(); if (result == null || result.length() == 0) { result = element.getName(); } return result; } @Override protected boolean isSuitable(Object object) { if (!super.isSuitable(object)) { return false; } PackageableElement next = (PackageableElement) object; if (false == next instanceof org.eclipse.uml2.uml.Classifier) { return false; } //not usefull to add imports to associations and other similar constructs if (next instanceof Relationship) { return false; } //for now, expliciltly remove metaclasses, too many of them and they seems to be not usefull here if (next instanceof org.eclipse.uml2.uml.Class && ((org.eclipse.uml2.uml.Class) next).isMetaclass()) { return false; } org.eclipse.uml2.uml.Package pakkage = next.getNearestPackage(); return pakkage != null && pakkage != myContextPackage; } private void preloadLibraries(ResourceSet resourceSet) { resourceSet.getResource(URI.createURI(UMLResource.UML_PRIMITIVE_TYPES_LIBRARY_URI), true); } }