blob: 236834918b75e4c5f6783f2c848bf1977ff3ef3f [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2002 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM - Initial API and implementation
**********************************************************************/
package org.eclipse.ant.core;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.ant.internal.core.AntCorePreferences;
import org.eclipse.ant.internal.core.IAntCoreConstants;
import org.eclipse.core.runtime.*;
/**
* The plug-in runtime class for the Ant Core plug-in.
*/
public class AntCorePlugin extends Plugin implements IAntCoreConstants {
/**
* The single instance of this plug-in runtime class.
*/
private static AntCorePlugin plugin;
/**
* Table of Ant tasks (IConfigurationElement) added through the tasks extension point
*/
private Map taskExtensions;
/**
* Table of libraries (IConfigurationElement) added through the extraClasspathEntries extension point
*/
private Map extraClasspathExtensions;
/**
* Table of Ant ypes (IConfigurationElement) added through the types extension point
*/
private Map typeExtensions;
/**
*
*/
private AntCorePreferences preferences;
/**
* Unique identifier constant (value <code>"org.eclipse.ant.core"</code>)
* for the Ant Core plug-in.
*/
public static final String PI_ANTCORE= "org.eclipse.ant.core"; //$NON-NLS-1$
/**
* Simple identifier constant (value <code>"antTasks"</code>)
* for the Ant tasks extension point.
*/
public static final String PT_TASKS = "antTasks"; //$NON-NLS-1$
/**
* Simple identifier constant (value <code>"extraClasspathEntries"</code>)
* for the extra classpath entries extension point.
*/
public static final String PT_EXTRA_CLASSPATH = "extraClasspathEntries"; //$NON-NLS-1$
/**
* Simple identifier constant (value <code>"antTypes"</code>)
* for the Ant types extension point.
*/
public static final String PT_TYPES = "antTypes"; //$NON-NLS-1$
/**
* Simple identifier constant (value <code>"class"</code>)
* of a tag that appears in Ant extensions.
*/
public static final String CLASS = "class"; //$NON-NLS-1$
/**
* Simple identifier constant (value <code>"name"</code>)
* of a tag that appears in Ant extensions.
*/
public static final String NAME = "name"; //$NON-NLS-1$
/**
* Simple identifier constant (value <code>"library"</code>)
* of a tag that appears in Ant extensions.
*/
public static final String LIBRARY = "library"; //$NON-NLS-1$
/**
* Key to access the <code>IProgressMonitor</code> reference. When a
* progress monitor is passed to the <code>AntRunner.run(IProgressMonitor)</code>
* method, the object is available as a reference for the current
* Ant project.
*/
public static final String ECLIPSE_PROGRESS_MONITOR = "eclipse.progress.monitor"; //$NON-NLS-1$
/**
* Constructs an instance of this plug-in runtime class.
* <p>
* An instance of this plug-in runtime class is automatically created
* when the facilities provided by the Ant Core plug-in are required.
* <b>Cliens must never explicitly instantiate a plug-in runtime class.</b>
* </p>
*
* @param pluginDescriptor the plug-in descriptor for the
* Ant Core plug-in
*/
public AntCorePlugin(IPluginDescriptor descriptor) {
super(descriptor);
plugin = this;
}
/**
* @see Plugin#startup
*/
public void startup() throws CoreException {
taskExtensions = extractExtensions(PT_TASKS, NAME);
typeExtensions = extractExtensions(PT_TYPES, NAME);
extraClasspathExtensions = extractExtensions(PT_EXTRA_CLASSPATH, LIBRARY);
}
/**
* @see Plugin#shutdown
*/
public void shutdown() throws CoreException {
if (preferences == null)
return;
preferences.updatePluginPreferences();
savePluginPreferences();
}
/**
* Given an extension point name, extract its extensions and return them
* as a Map. It uses as keys the attribute specified by the key parameter.
*/
private Map extractExtensions(String point, String key) {
IExtensionPoint extensionPoint = getDescriptor().getExtensionPoint(point);
if (extensionPoint == null)
return null;
IConfigurationElement[] extensions = extensionPoint.getConfigurationElements();
Map result = new HashMap(extensions.length);
for (int i = 0; i < extensions.length; i++) {
String name = extensions[i].getAttribute(key);
result.put(name, extensions[i]);
}
return result;
}
/**
* Returns an object representing this plug-in's preferences.
* <p>
* This method is for internal use by the platform-related plug-ins.
* Clients should not call this method.
* </p>
*/
public AntCorePreferences getPreferences() {
if (preferences == null)
preferences = new AntCorePreferences(taskExtensions, extraClasspathExtensions, typeExtensions);
return preferences;
}
/**
* Returns this plug-in instance.
*
* @return the single instance of this plug-in runtime class
*/
public static AntCorePlugin getPlugin() {
return plugin;
}
}