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 einen aussagekräftigen Wert für das Attribut 'Name' einbeziehen, der ihr Erstellungsprogramm identifiziert und möglicherweise anderen Benutzern 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.
Beginnend mit Release 3.1 können Gattungen Affinität mit beliebigen Inhaltstypen deklarieren und dadurch die Weise der Inhaltstypbestimmung für Dateien in dem Arbeitsbereich beeinflussen. Im falle von Konflikten (wenn zwei oder mehr Inhaltstypen gleichermaßen für eine gegebene Datei geeignet erscheinen), wird der Inhaltstyp gewählt, der eine Affinität zu einer der Gattungen hat, die für das entsprechende Projekt konfiguriert worden sind.
<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder | content-type)* , options?)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #REQUIRED
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) >
<!ELEMENT content-type EMPTY>
<!ATTLIST content-type
id CDATA #REQUIRED>
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, 2005 IBM Corporation und Andere.
Alle Rechte vorbehalten. Dieses Programm und sein Begleitmaterial werden gemäß den Bedingungen der "Eclipse Public License v1.0" zur Verfügung gestellt, die dieser Lieferung beiliegt und unter
http://www.eclipse.org/legal/epl-v10.html abgerufen werden kann.