blob: d87d3faf1e443820924d624a5863b27e3147f13b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2009 David A Carlson.
* 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:
* David A Carlson (XMLmodeling.com) - initial API and implementation
*
* $Id$
*******************************************************************************/
package org.eclipse.mdht.uml.ui.navigator.internal;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ui.IActionFilter;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Profile;
public class UMLActionFilter implements IActionFilter {
public static final String UML_TYPE = "umlType";
public static final String UML_STRICT_TYPE = "umlStrictType";
public static final String HAS_PROFILE = "hasProfile";
public static final String HAS_STEREOTYPE = "hasStereotype";
public static final String UML_JAVA_PACKAGE = "org.eclipse.uml2.uml.";
public boolean testAttribute(Object target, String name, String value) {
Element element = null;
if (target instanceof Element) {
element = (Element) target;
} else if (target instanceof IAdaptable) {
element = ((IAdaptable) target).getAdapter(Element.class);
}
if (element != null) {
if (UML_STRICT_TYPE.equals(name)) {
return element.getClass().getName().equals(UML_JAVA_PACKAGE + value);
} else if (UML_TYPE.equals(name)) {
try {
Class umlType = Class.forName(UML_JAVA_PACKAGE + value);
return umlType.isAssignableFrom(element.getClass());
} catch (ClassNotFoundException e) {
}
} else if (HAS_STEREOTYPE.equals(name)) {
return null != element.getAppliedStereotype(value);
} else if (HAS_PROFILE.equals(name)) {
for (Profile profile : element.getNearestPackage().getAllAppliedProfiles()) {
if (profile.getDefinition() != null && profile.getDefinition().getNsURI() != null &&
profile.getDefinition().getNsURI().startsWith(value)) {
return true;
}
}
}
}
return false;
}
}