A projektjellemzők segítségével a bedolgozó a projektet adott típusú projektként címkézheti fel. A Java fejlesztőeszközök (JDT) például a "Java jellemzőt" használják a Java-specifikus viselkedés projektekhez adásához. A projektjellemzőket a bedolgozók adják meg, és jellemzően projektenként kerülnek hozzáadásra vagy eltávolításra, amikor a felhasználó végrehajtja a bedolgozó által megadott tevékenységek egy részét.
A projekt több jellemzővel is rendelkezhet. Projektjellemző megadásakor speciális megszorításokat is megadhat:
Saját jellemző megvalósításához meg kell adni egy kiterjesztést és biztosítani kell egy osztályt, amely megvalósítja az IProjectNature elemet.
Az org.eclipse.core.resources.natures kiterjesztési pont megad egy projektjellemző-definíciót. Az alábbi leírónyelv egy jellemzőt ad az elképzelt com.example.natures bedolgozóhoz.
<extension
point="org.eclipse.core.resources.natures"
id="mynature"
name="My Nature">
<runtime>
<run class="com.example.natures.MyNature">
</run>
</runtime>
</extension>
A kiterjesztésben azonosított osztálynak meg kell valósítania az IProjectNature platformfelületet. Ez az osztály bedolgozó-specifikus viselkedést valósít meg a jellemző-specifikus információk projekthez rendeléséhez, ha a jellemző be van állítva.
public class MyNature implements IProjectNature {
private IProject project;
public void configure() throws CoreException {
// Jellemző-specifikus információk
// projekthez adása, mint például összeépítő
// hozzáadása a projekt összeépítés specifikációjához.
}
public void deconfigure() throws CoreException {
// Jellemző-specifikus információk eltávolítása.
}
public IProject getProject() {
return project;
}
public void setProject(IProject value) {
project = value;
}
}
A platform elküldi a configure() és deconfigure() metódusokat, amikor a jellemzők hozzáadásra vagy eltávolításra kerülnek a a projektből. Az összeépítő projekthez adásához megvalósíthatja a configure() metódust az Összeépítők részben megadott módon.
A jellemző megadása nem elegendő a projekthez társításhoz. A jellemzőt a projekthez a projekt leírásának frissítésével kell hozzáadni, hogy tartalmazza a jellemzőt. Ez általában akkor történik, amikor a felhasználó egy új projektvarázslót hoz létre, amely hozzárendeli a jellemzőt. Az alábbi részlet megjeleníti, hogy hogy kell az új jellemzőt hozzárendelni egy adott projekthez.
try {
IProjectDescription description = project.getDescription();
String[] natures = description.getNatureIds();
String[] newNatures = new String[natures.length + 1];
System.arraycopy(natures, 0, newNatures, 0, natures.length);
newNatures[natures.length] = "com.example.natures.mynature";
description.setNatureIds(newNatures);
project.setDescription(description, null);
} catch (CoreException e) {
// Valami elromlott
}
MEGJEGYZÉS: A jelleg azonosítója a jelleg kiterjesztés teljes képzésű azonosítója. Egy kiterjesztés teljes képzésű azonosítója a bedolgozó azonosítójának és a plugin.xml fájlban lévő egyszerű kiterjesztési azonosítónak az egyesítésével kerül létrehozásra. Például a "com.pelda.jellegek" bedolgozóban lévő "sajat_jelleg" egyszerű névvel rendelkező jelleg neve "com.pelda.jellegek.sajat_jelleg" lenne.
A jellemzők valójában nincsenek hozzárendelve (és beállítva) a projekthez, amíg be nem állítja a projektleírást a projektbe. Azt se feledje el, hogy a jellemzőhöz használt azonosító a jellemző kiterjesztés teljes képzésű neve (bedolgozó azonosító + kiterjesztés azonosító).
Ha a jellemző megszorítással került megadásra, akkor a munkaterület API érvényesíteni tudja az új jellemzőt. Tételezzük fel például, hogy a jellemző előfeltétellel van megadva:
<extension
point="org.eclipse.core.resources.natures"
id="myOtherNature"
name="My Other Nature">
<runtime>
<run class="com.example.natures.MyOtherNature">
</run>
</runtime>
<requires-nature id="com.example.natures.mynature"/>
</extension>
Az új jellemző érvénytelen, hacsak az első jellemző nem létezik a projekthez. A bedolgozó kivitelétől függően elképzelhető, hogy ellenőrizni kívánja, hogy az előfeltétel jellemző telepítésre került-e, vagy hozzá kívánja adni magát az előfeltétel jellemzőt. Ellenőrizheti a projektjellemzők tervezett kombinációinak érvényességét az API munkaterület segítségével.
try {
IProjectDescription description = project.getDescription();
String[] natures = description.getNatureIds();
String[] newNatures = new String[natures.length + 1];
System.arraycopy(natures, 0, newNatures, 0, natures.length);
newNatures[natures.length] = "com.example.natures.myOtherNature";
IStatus status = workspace.validateNatureSet(natures);
// ellenőrzi az állapotot, és eldönti, hogy mit kel csinálni
if (status.getCode() == IStatus.OK) {
description.setNatureIds(newNatures);
project.setDescription(description, null);
} else {
// egy felhasználói hiba merül fel
...
}
} catch (CoreException e) {
// Valami elromlott
}
Ha a jellemzőket azonosító szerint kívánja kezelni, akkor lekérheti a leírót (IProjectNatureDescriptor), amely leírja a jellemzőt, megszorításokat és a címkét. Lekérdezhet egy adott jellemzőt a leíróhoz, vagy lekérheti a jellemzőket a munkaterületről. Az alábbi részlet lekéri a projektjellemző-leírót az új jellemzőhöz:
IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor("com.example.natures.myOtherNature");
A leírók tömbje is lekérhető az összes telepített jellemzőhöz:
IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();