Am Erweiterungspunkt für Gattungen können Gattungs-Writer ihre Gattungsimplementierung unter einem symbolischen Namen registrieren, der dann im Arbeitsbereich verwendet wird, um Gattungen aufzufinden und zu konfigurieren. Der symbolische Name ist die ID der Gattungserweiterung. Beim Definieren einer Gattungserweiterung sollten Benutzer unbedingt einen aussagekräftigen Wert für das Attribut "name" angeben, der die Bedeutung der Gattung kenntlich macht und auch für Benutzer angezeigt werden kann.
Gattungen können Integritätsbedingungsbeziehungen zu anderen Gattungen angeben. Die Integritätsbedingung "one-of-nature" gibt an, dass in einem Projekt jeweils höchstens eine Gattung aus einer bestimmten Gruppe vorhanden sein kann. Dies setzt den gegenseitigen Ausschluss von Gattungen durch, die nicht miteinander kompatibel sind. Die Integritätsbedingung "requires-nature" gibt die Abhängigkeit von einer anderen Gattung an. Wird eine solche Gattung zu einem Projekt hinzugefügt, müssen alle erforderlichen Gattungen ebenfalls hinzugefügt werden. Die Gattungen werden garantiert so konfiguriert und dekonfiguriert, dass die von ihnen benötigten Gattungen vor ihnen konfiguriert und nach ihnen dekonfiguriert werden. Aus diesem Grund sind zyklische Abhängigkeiten zwischen Gattungen nicht zulässig.
Gattungen können nicht zu einem Projekt hinzugefügt bzw. aus ihm entfernt werden, wenn diese Änderung Integritätsbedingungen verletzen würde, die zuvor erfüllt wurden. Falls eine Gattung für ein Projekt konfiguriert wird, später allerdings feststellt, dass ihre Integritätsbedingungen nicht erfüllt werden, werden diese Gattung und alle Gattungen, die sie voraussetzen, als inaktiviert gekennzeichnet, verbleiben aber im Projekt. Dies kann beispielsweise eintreten, wenn eine erforderliche Gattung bei der Installation fehlt. Gattungen, die bei der Installation fehlen werden ebenso als inaktiviert gekennzeichnet wie Gattungen, die an Abhängigkeitszyklen beteiligt sind.
Gattungen können außerdem angeben, welche schrittweisen Projekterstellungsprogramme ggfs. durch sie konfiguriert werden. Mit diesen Informationen stellt der Arbeitsbereich sicher, dass Erstellungsprogramme nur dann ausgeführt werden, wenn die zugehörige Gattung vorhanden und im Projekt, das erstellt werden soll, aktiviert ist. Falls eine Gattung aus einem Projekt entfernt wurde, die Dekonfigurationsmethode der Gattung jedoch die entsprechenden Erstellungsprogramme nicht entfernen kann, entfernt der Arbeitsbereich diese Erstellungsprogramme automatisch aus der Spezifikation. Zwei Gattungen dürfen in ihren Konfigurationsbefehlen nicht dasselbe schrittweise Projekterstellungsprogramm angeben.
Gattungen können die Erstellung von verlinkten Ressourcen in Projekten, denen sie zugeordnet sind, verhindern. Wenn Sie das Attribut allowLinking
auf "false" setzen, kann eine Gattung deklarieren, dass verlinkte Ressourcen in keinem Fall erstellt werden. Diese Funktionsweise ist erstmals in Release 2.1 verfügbar.
<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder)* , options?)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ATTLIST run
class CDATA #REQUIRED>
<!ELEMENT parameter EMPTY>
<!ATTLIST parameter
name CDATA #REQUIRED
value CDATA #REQUIRED>
<!ELEMENT one-of-nature EMPTY>
<!ATTLIST one-of-nature
id CDATA #REQUIRED>
<!ELEMENT requires-nature EMPTY>
<!ATTLIST requires-nature
id CDATA #REQUIRED>
<!ELEMENT builder EMPTY>
<!ATTLIST builder
id CDATA #REQUIRED>
<!ELEMENT options EMPTY>
<!ATTLIST options
allowLinking (true | false) >
Wenn diese Erweiterungen in einem Plug-in mit der Kennung "com.xyz.coolplugin" definiert wurden, wären die vollständig qualifizierten Namen dieser Gattungen "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" und "com.xyz.coolplugin.snowNature".<extension id=
"fireNature"
name=
"Fire Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Fire"
/>
</runtime>
<one-of-nature id=
"com.xyz.stateSet"
/>
<options allowLinking=
"false"
/>
</extension>
<extension id=
"waterNature"
name=
"Water Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Water"
/>
</runtime>
<one-of-nature id=
"com.xyz.stateSet"
/>
</extension>
<extension id=
"snowNature"
name=
"Snow Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Snow"
>
<parameter name=
"installBuilder"
value=
"true"
/>
</run>
</runtime>
<requires-nature id=
"com.xyz.coolplugin.waterNature"
/>
<builder id=
"com.xyz.snowMaker"
/>
</extension>
Copyright (c) 2002, 2004 IBM Corporation und Andere.
Alle Rechte vorbehalten. Dieses Programm und sein Begleitmaterial werden gemäß
den Bedingungen in der "Common Public License v1.0" zur Verfügung gestellt, die diese Verteilung
begleitet und unter
http://www.eclipse.org/legal/cpl-v10.html abgerufen werden kann.