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