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();