Charaktery projektů umožňují modulu plug-in označit projekt jako určitý typ projektu. Například vývojářské nástroje Java (JDT) používají "charakter Java", aby do projektů přidaly chování charakteristické pro prostředí Java. Charaktery projektů jsou definovány moduly plug-in a zpravidla jsou přidávány nebo odebírány projekt od projektu, když uživatel provede nějakou akci definovanou modulem plug-in.
Projekt může mít více než jeden charakter. Když však definujete charakter projektu, můžete definovat speciální omezení daného charakteru:
Chcete-li implementovat vlastní charakter, musíte definovat rozšíření a dodat třídu, která implementuje IProjectNature.
K přidání definice charakteru projektu se používá bod rozšíření org.eclipse.core.resources.natures. Následující markup přidává charakter pro hypotetický plug-in com.example.natures.
<extension
point="org.eclipse.core.resources.natures"
id="mynature"
name="My Nature">
<runtime>
<run class="com.example.natures.MyNature">
</run>
</runtime>
</extension>
Třída označená v tomto rozšíření musí implementovat rozhraní platformy IProjectNature. Tato třída implementuje chování modulu plug-in pro přiřazení informací o charakteru k projektu, když je charakter konfigurován.
public class MyNature implements IProjectNature {
private IProject project;
public void configure() throws CoreException {
// Přidat informace o charakteru
// pro daný projekt, jako např. přidání tvůrce
// ke specifikacím sestavení projektu.
}
public void deconfigure() throws CoreException {
// Zde odebrat informace o charakteru.
}
public IProject getProject() {
return project;
}
public void setProject(IProject value) {
project = value;
}
}
Metody configure() a deconfigure() platforma posílá, když jsou k projektu přidávány, nebo z něj odebírány charaktery. Metodu configure() můžete implementovat pro přidání tvůrce k projektu, jak je popsáno v tématu Tvůrci.
Pro přiřazení charakteru k projektu jej nestačí pouze definovat. Charakter musíte k projektu přiřadit prostřednictvím aktualizace popisu projektu tak, aby zahrnoval váš charakter. K tomu obvykle dochází, když uživatel vytvoří nový projekt pomocí specializovaného průvodce novým projektem, který přiřazuje charakter. Následující úsek kódu ukazuje, jak přiřadit náš nový charakter určitému projektu.
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) {
// Někde je problém
}
POZNÁMKA: ID charakteru je úplné ID rozšíření charakteru. Úplné ID rozšíření se vytváří kombinací ID modulu plug-in a ID jednoduchého rozšíření v souboru plugin.xml. Například charakter s ID jednoduchého rozšíření "mynature" v modulu plug-in "com.example.natures" by se jmenoval "com.example.natures.mynature"
Charaktery ve skutečnosti nejsou k projektu přiřazeny (a konfigurovány pro něj), dokud do projektu nenastavíte popis projektu. Všimněte si také, že identifikátor používaný pro charakter je úplné jméno (ID modulu plug-in + ID rozšíření) rozšíření daného charakteru.
Pokud byl charakter definován s omezeními, je možné použít pro ověření nového charakteru API pracovního prostoru. Předpokládejme například, že je charakter definovaný s nezbytným předchůdcem:
<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>
Nový charakter není platný, pokud neexistuje první charakter pro daný projekt. V závislosti na návrhu vašeho modulu plug-in možná budete chtít zkontrolovat, zda byl nainstalován charakter nezbytného předchůdce, nebo jej budete chtít přidat sami. V každém případě můžete překontrolovat platnost navrhované kombinace charakterů projektů pomocí API pracovního prostoru.
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);
// zkontrolovat stav a rozhodnout, co dělat
if (status.getCode() == IStatus.OK) {
description.setNatureIds(newNatures);
project.setDescription(description, null);
} else {
// spustit chybu uživatele
...
}
} catch (CoreException e) {
// Někde je problém
}
Kromě práce s charaktery podle jejich ID můžete získat deskriptor (IProjectNatureDescriptor), který popisuje charakter, jeho omezení a štítek. Na deskriptor se můžete dotázat příslušného charakteru, nebo získat deskriptory z pracovního prostoru. Následující úsek získává deskriptor charakteru projektu pro náš nový charakter:
IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor("com.example.natures.myOtherNature");
Také můžete dostat pole deskriptorů pro všechny instalované charaktery:
IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();