2010年4月24日

Eclipse dynamic extension API

Contributing items to a toolbar dynamically

New Plug-in Project
Project Name: test.contributing


Add Dependencies
// -- META-INF/MANIFEST.MF --

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Contributing
Bundle-SymbolicName: test.contributing;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: test.contributing.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.ui.ide,
org.eclipse.core.runtime
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6


Add Extensions
// -- plugin.xml --

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension point="org.eclipse.ui.startup">
<startup class="test.contributing.Startup">
</startup>
</extension>
</plugin>


Add Java Class
// -- /src/test/contributing/Startup.java --

package test.contributing;

import java.io.InputStream;

import org.eclipse.core.internal.registry.ExtensionRegistry;
import org.eclipse.core.runtime.ContributorFactoryOSGi;
import org.eclipse.core.runtime.IContributor;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.RegistryFactory;
import org.eclipse.ui.IStartup;
import org.osgi.framework.Bundle;

public class Startup implements IStartup {

@Override public void earlyStartup() {
try {
// use Eclipse Dynamic Extension API
IExtensionRegistry reg = RegistryFactory.getRegistry();
Object key = ((ExtensionRegistry) reg).getTemporaryUserToken();
Bundle bundle = Activator.getDefault().getBundle();
IContributor contributor = ContributorFactoryOSGi
.createContributor(bundle);
InputStream is = Startup.class.getResourceAsStream("dynamically.xml");
try {
reg.addContribution(is, contributor, false, null, null, key);
} finally {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


Add dynamic extension file
// -- src/test/contributing/dynamically.xml --

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.actionSets"
id="test.contributing.dynamically.actionSets">
<actionSet
id="test.contributing.dynamically.actionSet"
label="Dynamically"
visible="true">
<menu
id="test.contributing.dynamically.menu"
label="Dynamically">
<separator
name="test.contributing.dynamically.separator">
</separator>
</menu>
<action
id="test.contributing.dynamically.action"
label="Open Local File"
class="org.eclipse.ui.internal.ide.actions.OpenLocalFileAction"
toolbarPath="test.contributing.dynamically.separator">
</action>
</actionSet>
</extension>
</plugin>

沒有留言:

網誌存檔