/*******************************************************************************
* 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.library;
import java.util.ArrayList;
import java.util.List;
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 library extension point
*/
public class RegisteredLibrary extends RegisteredElementExtensionPoint {
/** name of the extension point (main element name) in the DTD */
private static final String TAG_LIBRARY = "library";
/** attribute that acts as a cache for the list of registered libraries */
private static RegisteredLibrary[] RegisteredLibraries;
/**
* Main constructor.
*
* @param configElt
* the configuration element that defines the given library
* @param ordinal
* the place in the list of registered libraries
*/
public RegisteredLibrary(IConfigurationElement configElt, int ordinal) {
super(configElt, ordinal);
}
/**
* Returns the list of registered libraries in the platform, using the Papyrus extension point.
*
* @return the list of registered libraries in the platform
*/
public static RegisteredLibrary[] getRegisteredLibraries() {
// if the list was already computed, returns it (like a cache)
if(RegisteredLibraries != null) {
return RegisteredLibraries;
}
// the list of libraries was not already computed. Read configuration elements
List<RegisteredLibrary> libraries = new ArrayList<RegisteredLibrary>();
// // Default elements : UML, Ecore, Java, XML PrimitiveTypes model library
// RegisteredLibrary UmlPrimitiveTypes
// = new RegisteredLibrary("UMLPrimitiveTypes",
// URI.createURI(UMLResource.UML_PRIMITIVE_TYPES_LIBRARY_URI));
// libraries.add(UmlPrimitiveTypes);
// RegisteredLibrary EcorePrimitiveTypes
// = new RegisteredLibrary("EcorePrimitiveTypes",
// URI.createURI(UMLResource.ECORE_PRIMITIVE_TYPES_LIBRARY_URI));
// libraries.add(EcorePrimitiveTypes);
// RegisteredLibrary JavaPrimitiveTypes
// = new RegisteredLibrary("JavaPrimitiveTypes",
// URI.createURI(UMLResource.JAVA_PRIMITIVE_TYPES_LIBRARY_URI));
// libraries.add(JavaPrimitiveTypes);
// RegisteredLibrary XMLPrimitiveTypes
// = new RegisteredLibrary("XMLPrimitiveTypes",
// URI.createURI(UMLResource.XML_PRIMITIVE_TYPES_LIBRARY_URI));
// libraries.add(XMLPrimitiveTypes);
// Look for the rest in plugins
IConfigurationElement[] configElements = Platform.getExtensionRegistry().getConfigurationElementsFor(
ExtensionIds.LIBRARY_EXTENSION_ID);
// Read configuration elements for the current extension
for(int j = 0; j < configElements.length; j++) {
RegisteredLibrary proxy = parseLibraryExtension(configElements[j], libraries.size());
if(proxy != null) {
libraries.add(proxy);
}
} // end of configElements loop
RegisteredLibraries = libraries.toArray(new RegisteredLibrary[libraries.size()]);
return RegisteredLibraries;
}
/**
* Parse data from extensions.
*
* @param ordinal
* @param configElt
* @return
*/
private static RegisteredLibrary parseLibraryExtension(IConfigurationElement configElt, int ordinal) {
if(!TAG_LIBRARY.equals(configElt.getName())) {
return null;
}
try {
return new RegisteredLibrary(configElt, ordinal);
} catch (Exception e) {
String name = configElt.getAttribute(ExtensionIds.ATT_NAME);
if(name == null) {
name = "[missing name attribute]";
}
String msg = "Failed to load library named " + name + " in "
+ configElt.getDeclaringExtension().getExtensionPointUniqueIdentifier();
Activator.log(msg);
return null;
}
}
}