Charaktery projektů

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.

Definování charakteru

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.

Přiřazení charakteru k projektu

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
   }

Deskriptory charakteru

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