BUILDERS, NATURES AND MARKERS (PAGE 3)
Natures
Natures are used to link project with various functionalities such as
builders in a project. For ex: if we add java nature to a project inside
eclipse. It associates project with incremental java compiler. natures
are added in .project file of the project. Natures are not only used to
associate builders but are also used to define many other
functionalities for ex: only java nature projects are shown in Package
Explorer. Some of the predefined natures are
org.eclipse.jdt.core.javanature,org.eclipse.pde.PluginNature
Reviewing the generated code
Let’s review the plug-in manifest file to see what it takes to create a
nature. Nature is created by extending
org.eclipse.core.resources.natures extension point. ID is the unique
identifier for this nature. Name is the human readable name of the
nature.

Next element is the builder. Here we will add a builder to this
nature. We have associated SampleBuilder created earlier with this
nature. So that projects with SampleNature use SampleBuilder whenever an
XML file is saved.

Next elements which we are going to discuss are runtime and run. Here
we will specify a class named Sample Nature which will be used to
configure/deconfigure project with Sample Nature. With the help of this
class we will be able to configure non Sample Nature project to Sample
Nature project at run time. OR we will be able to convert Sample Nature
Project to non Sample Nature project. Repercussions of making a Project
as Sample Nature project will be that a Sample builder will be attached
to project which will run whenever an XML file is saved and will look
for any errors in XML.

IProjectNature
Class com.myplugin.rmp.builder.SampleNature declared above implements
IProjectNature interface. It can configure a project with the project
nature, or de-configure it. Please refer to
Eclipse API Specification to know more about this class.
In our example, user is provided with toggle action to convert non
Sample Nature project to Sample Nature project. Following method from
SampleNature class will be called to associate the project with
SampleNature. public void configure() throws CoreException {
IProjectDescription desc = project.getDescription();
get the description of the project basically .project file information
ICommand[] commands = desc.getBuildSpec();
// get the build commands already associated with project.
for (int i = 0; i < commands.length; ++i) {
if (commands[i].getBuilderName().equals(SampleBuilder.BUILDER_ID)) {
return; // Do nothing if Sample builder is already associated with project
}
}
ICommand[] newCommands = new ICommand[commands.length + 1];
// create a new build command
System.arraycopy(commands, 0, newCommands, 0, commands.length);
ICommand command = desc.newCommand();
command.setBuilderName(SampleBuilder.BUILDER_ID); // attach it to sample builder
newCommands[newCommands.length - 1] = command;
desc.setBuildSpec(newCommands);
project.setDescription(desc, null); // write to .project file
}Every workbench project contains a .project file that contains build
commands. Executing above method causes the following to appear in the
buildSpec section of the project's .project file. Also Sample nature is
added in natures section.
<buildSpec>
<buildCommand>
<name>com.myplugin.rmp.sampleBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.myplugin.rmp.sampleNature</nature>
</natures>
|