/******************************************************************************* * Copyright (c) 2006 CEA List. * 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: * CEA List - initial API and implementation *******************************************************************************/ package org.eclipse.papyrus.uml.extensionpoints.profile; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.papyrus.uml.extensionpoints.Activator; import org.eclipse.papyrus.uml.extensionpoints.standard.ExtensionIds; import org.eclipse.papyrus.uml.extensionpoints.standard.RegisteredElementExtensionPoint; /** * Class that manages registered profile extension point */ public class RegisteredProfile extends RegisteredElementExtensionPoint { /** name of the extension point (main element name) in the DTD */ private static final String TAG_PROFILE = "profile"; /** List of registered profiles in the platform */ private static RegisteredProfile[] registeredProfiles; /** name of the <code>qualified name</code>attribute in the DTD */ private static final String ATT_QUALIFIED_NAMES = "qualifiednames"; /** * Creates a new RegisteredProfile. * * @param configElt * @param ordinal */ public RegisteredProfile(IConfigurationElement configElt, int ordinal) { super(configElt, ordinal); qualifiednames = getAttribute(configElt, ATT_QUALIFIED_NAMES, "", false); } // /** // * Creates a new RegisteredProfile. // * @param name the name displayed to users // * @param uri the uri where the profile file can be found // */ // public RegisteredProfile(String _name, URI _uri) { // this(_name, _uri, "", "", "", ""); // } // // /** // * Creates a new RegisteredProfile. // * @param _name the name displayed to users // * @param _uri the uri where the profile file can be found // * @param qualifiedNames the list of sub profiles // * @param iconPath plugin relative path to the icon // * @param description description of the profile // * @param provider provider of the profile // */ // public RegisteredProfile(String _name, URI _uri, String qualifiedNamesList, String iconPath, // String description, String provider) { // configElement = null; // ordinal = -1; // // name = _name; // path = "undefined"; // qualifiednames = qualifiedNamesList; // qualifiedNamesList = ""; // this.iconPath = iconPath; // this.description = description; // this.provider = provider; // // uri = _uri; // } /** * Returns a registered profile using its name. If several profiles are found, the first found * is returned * * @param name * the name of the profile to find * @return the RegistredProfile with given name or <code>null</code> if no profile was found. */ public static RegisteredProfile getRegisteredProfile(String name) { return getRegisteredProfile(name, null); } /** * Returns a registered profile using its name and a given path. If several profiles are found, * the first found is returned. * * @param name * the name of the profile to find * @param path * the path of the profile file * @return the RegistredProfile with given name or <code>null</code> if no profile was found. */ public static RegisteredProfile getRegisteredProfile(String name, String path) { Assert.isNotNull(name); RegisteredProfile[] profiles = getRegisteredProfiles(); for(int i = 0; i < profiles.length; i++) { RegisteredProfile profile = profiles[i]; // name corresponds. is path equal? if(name.equals(profile.name)) { // no path indicated => first name that corresponds => profile returned if(path == null) { return profile; } else if(path.equals(profile.path)) { return profile; } } } return null; } /** * Returns the list of registred profiles in the platform, using the papyrus extension point. * * @return the list of registred profiles in the platform */ public static RegisteredProfile[] getRegisteredProfiles() { // if the list is already known, returns it (cache) if(registeredProfiles != null) { return registeredProfiles; } // the list has not been already built. Creates a new one and fill it. List<RegisteredProfile> profiles = new ArrayList<RegisteredProfile>(); // // At least two element : Standard uml profile and Ecore uml profile // RegisteredProfile UmlStdProfile = new RegisteredProfile("Standard", // URI.createURI(UMLResource.STANDARD_PROFILE_URI), "", "icons/uml.gif", // "UML Standard Profile", "Eclipse.org"); // profiles.add(UmlStdProfile); // RegisteredProfile UmlEcoreProfile // = new RegisteredProfile("Ecore", URI.createURI(UMLResource.ECORE_PROFILE_URI), "", // "icons/ecore.gif", "Ecore Profile", "Eclipse.org"); // profiles.add(UmlEcoreProfile); // Reading data from plugins IConfigurationElement[] configElements = Platform.getExtensionRegistry().getConfigurationElementsFor( ExtensionIds.PROFILE_EXTENSION_ID); // Read configuration elements for the current extension for(int j = 0; j < configElements.length; j++) { RegisteredProfile proxy = parseProfileExtension(configElements[j], profiles.size()); if(proxy != null) { profiles.add(proxy); } } // end of configElements loop registeredProfiles = profiles.toArray(new RegisteredProfile[profiles.size()]); return registeredProfiles; } /** * Retrieve all information from the configuration element * * @param ordinal * index in the set of registered profiles * @param configElt * the configuration element from which to retrieve the registered profile * @return the registered profile */ private static RegisteredProfile parseProfileExtension(IConfigurationElement configElt, int ordinal) { if(!TAG_PROFILE.equals(configElt.getName())) { return null; } try { return new RegisteredProfile(configElt, ordinal); } catch (Exception e) { String name = configElt.getAttribute(ExtensionIds.ATT_NAME); if(name == null) { name = "[missing name attribute]"; } String msg = "Failed to load profile named " + name + " in " + configElt.getDeclaringExtension().getExtensionPointUniqueIdentifier(); Activator.log(msg); return null; } } }