/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.core.util;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.emf.ecore.resource.Resource;
import org.teiid.core.designer.plugin.PluginUtilities;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.resource.xmi.MtkXmiResourceImpl;
import org.teiid.designer.core.workspace.ModelStatusImpl;
import org.teiid.designer.core.workspace.ModelWorkspaceException;
import org.teiid.designer.metamodels.core.ModelAnnotation;
/**
* Util
*
* @since 8.0
*/
public class Util {
public static CoreException newCoreException( final int errorCode, final String msg ) {
return new ModelWorkspaceException(new ModelStatusImpl(errorCode,msg));
}
public static CoreException newCoreException( final int errorCode, final Throwable t, final String msg ) {
return new ModelWorkspaceException(new ModelStatusImpl(errorCode,t,msg));
}
/**
* Load the given Map with all extensions for the specified extension point.
* Each extension will be loaded into the map using the extension label as
* the key.
* @param extensionPointID
* @param extensionMap the map into which all extensions will be loaded
*/
public static void loadExtensionMap(final String extensionPointID, final Map extensionMap) {
if (extensionPointID == null) {
final String msg = ModelerCore.Util.getString("Util.The_extension_ID_may_not_be_null_1"); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
}
if (extensionMap == null) {
final String msg = ModelerCore.Util.getString("Util.The_Map_reference_may_not_be_null_2"); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
}
//System.err.println("loadExtensionMap for ID \""+extensionPointID+"\"");
final IExtension[] extensions = PluginUtilities.getExtensions(extensionPointID);
for (int i = 0; i < extensions.length; i++) {
final IExtension extension = extensions[i];
final String uniqueID = extension.getUniqueIdentifier();
//System.err.println("Loading extension with uniqueID \""+uniqueID+"\"");
extensionMap.put(uniqueID,extension);
}
}
/**
* Load the given Map with all extensions for the specified extension point.
* Each extension will be loaded into the map using the extension label as
* the key.
* @param extensionPointID
* @param extensionMap the map into which all extensions will be loaded
*/
public static Object createExtensionInstance(final String uniqueID, final Map extensionMap) throws CoreException {
if (uniqueID == null) {
final String msg = ModelerCore.Util.getString("Util.The_extension_uniqueID_may_not_be_null_3"); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
}
if (extensionMap == null) {
final String msg = ModelerCore.Util.getString("Util.The_Map_reference_may_not_be_null_4"); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
}
// Attempt to lookup the extension by name
IExtension extension = (IExtension) extensionMap.get(uniqueID);
if (extension == null) {
throw newCoreException(1,ModelerCore.Util.getString("Util.Unable_to_find_an_extension_with_unique_ID___5")+uniqueID+"\""); //$NON-NLS-1$ //$NON-NLS-2$
}
// Activate the extension ...
return createExecutableExtension(extension);
}
public static Object createExecutableExtension(IExtension extension) throws CoreException {
if (extension == null) {
final String msg = ModelerCore.Util.getString("Util.The_IExtension_reference_may_not_be_null_7"); //$NON-NLS-1$
throw new IllegalArgumentException(msg);
}
try {
return PluginUtilities.createExecutableExtension(extension,"class","name"); //$NON-NLS-1$ //$NON-NLS-2$
} catch (CoreException e) {
throw newCoreException(1,ModelerCore.Util.getString("Util.Error_creating_instance_of_extension_with_ID___10")+extension.getUniqueIdentifier()+"\""); //$NON-NLS-1$ //$NON-NLS-2$
}
}
/**
* Return the ModelAnnotation for the provided Resource
* @param resource the provided resource
* @return the modelAnnotation - null if not found.
*/
public static ModelAnnotation getModelAnnotation(final Resource resource) {
ModelAnnotation modelAnnotation = null;
if(resource instanceof MtkXmiResourceImpl){
modelAnnotation = ((MtkXmiResourceImpl)resource).getModelAnnotation();
}else{
final Iterator roots = resource.getContents().iterator();
while (roots.hasNext()) {
Object next = roots.next();
if(next instanceof ModelAnnotation){
modelAnnotation = (ModelAnnotation)next;
break;
}
}
}
return modelAnnotation;
}
}