Φύσεις έργου

Οι φύσεις έργου επιτρέπουν σε μια πρόσθετη εργασία να επισημαίνει κάποιο έργο ως ένα συγκεκριμένο είδος έργου. Για παράδειγμα, τα εργαλεία ανάπτυξης Java (JDT) χρησιμοποιούν μια "Φύση Java" προκειμένου να προσθέσουν συμπεριφορά Java σε έργα.  Οι φύσεις έργου καθορίζονται από τις πρόσθετες εργασίες και συνήθως προστίθενται και αφαιρούνται ανά έργο όταν ο χρήστης εκτελεί κάποιες ενέργειες οι οποίες καθορίζονται από την πρόσθετη λειτουργία.

Ένα έργο μπορεί να έχει περισσότερες από μία φύσεις.  Ωστόσο, όταν ορίζετε τη φύση ενός έργου, μπορείτε να καθορίσετε ειδικούς περιορισμούς για τη φύση.

Για να υλοποιήσετε τη δική σας φύση, πρέπει να ορίσετε μια επέκταση και να παρέχετε μια κλάση η οποία να υλοποιεί την κλάση IProjectNature.

Καθορισμός μιας φύσης

Το σημείο επέκτασης org.eclipse.core.resources.natures χρησιμοποιείται για την προσθήκη ενός ορισμού φύσης έργου. Η ακόλουθη σήμανση προσθέτει μια φύση για την υποθετική πρόσθετη λειτουργία 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>

Η κλάση που αναγνωρίζεται στην επέκταση πρέπει να υλοποιεί τη διασύνδεση πλατφόρμας IProjectNature. Αυτή η κλάση υλοποιεί ανάλογη συμπεριφορά πρόσθετης λειτουργίας για το συσχετισμό πληροφοριών που αφορούν τη φύση με ένα έργο, όταν η φύση του έργου αυτού έχει ρυθμιστεί.

   public class MyNature implements IProjectNature {

      private IProject project;

      public void configure() throws CoreException {
         // Add nature-specific information
         // for the project, such as adding a builder
         // to a project's build spec.
      }
      public void deconfigure() throws CoreException {
         // Remove the nature-specific information here.
      }
      public IProject getProject() {
         return project;
      }
      public void setProject(IProject value) {
         project = value;
      }
   }

Οι μέθοδοι configure() και deconfigure() αποστέλλονται από την πλατφόρμα όταν οι φύσεις προστίθενται και αφαιρούνται από κάποιο έργο.  Μπορείτε να υλοποιήσετε τη μέθοδο configure() για να προσθέσετε ένα εργαλείο δόμησης σε κάποιο έργο με τον τρόπο που είδαμε στην ενότητα Εργαλεία δόμησης.

Συσχετισμός τη φύσης με ένα έργο

Ο καθορισμός της φύσης δεν αρκεί για το συσχετισμό της με κάποιο έργο.  Πρέπει να αντιστοιχίζετε τη φύση σε κάποιο έργο ενημερώνοντας την περιγραφή του έργου ώστε να περιλαμβάνει τη φύση που θέλετε. Αυτό συμβαίνει συνήθως όταν ο χρήστης δημιουργεί ένα νέο έργο με τη βοήθεια κάποιου εξειδικευμένου καινούργιου οδηγού που αντιστοιχίζει τη φύση.  Το ακόλουθο τμήμα κώδικα δείχνει πώς να αντιστοιχίζετε μια φύση με κάποιο δεδομένο έργο.

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) {
      // Something went wrong
   }

ΣΗΜΕΙΩΣΗ: Η ταυτότητα της φύσης είναι η πλήρης ταυτότητα επέκτασης φύσης. Η πλήρης ταυτότητα μιας επέκτασης δημιουργείται από το συνδυασμό της ταυτότητας της πρόσθετης λειτουργίας με την απλή ταυτότητα επέκτασης στο αρχείο xml της πρόσθετης λειτουργίας. Για παράδειγμα, μια φύση με απλή ταυτότητα επέκτασης "mynature" στην πρόσθετη λειτουργία "com.example.natures" θα είχε το όνομα "com.example.natures.mynature"

Οι φύσεις δεν αντιστοιχίζονται (και ρυθμίζονται) για το έργο μέχρι να ρυθμίσετε την περιγραφή έργου μέσα στο έργο.  Επίσης να έχετε υπόψη σας ότι η ταυτότητα που χρησιμοποιείται για τη φύση είναι το πλήρες όνομα (ταυτότητα πρόσθετης λειτουργίας + ταυτότητα επέκτασης) της επέκτασης της φύσης.

Αν η φύση έχει οριστεί με περιορισμούς, το API χώρου εργασίας μπορεί να χρησιμοποιηθεί για την επικύρωση της νέας φύσης.  Για παράδειγμα, ας υποθέσουμε ότι η φύση καθορίζεται με ένα προαπαιτούμενο στοιχείο:

   <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>

Η νέα φύση δεν είναι έγκυρη εκτός κι αν στο έργο υπάρχει η πρώτη φύση.  Ανάλογα με τη σχεδίαση της πρόσθετης λειτουργίας σας, ίσως θελήσετε να ελέγξετε εάν έχει γίνει εγκατάσταση της προαπαιτούμενης φύσης, ή να την προσθέσετε ο ίδιος.  Όπως και να έχει, μπορείτε να ελέγξετε την εγκυρότητα των προτεινόμενων συνδυασμών των φύσεων έργου με χρήση του API του χώρου εργασίας.

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

      // check the status and decide what to do
      if (status.getCode() == IStatus.OK) {
      	description.setNatureIds(newNatures);
      	project.setDescription(description, null);
        } else {
      	// raise a user error
	...
      }
  } catch (CoreException e) {
      // Something went wrong
   }

Αρχεία περιγραφής φύσης

Εκτός από την εργασία με φύσεις με βάση την ταυτότητά τους, μπορείτε να αποκτήσετε τα αρχεία περιγραφής (IProjectNatureDescriptor) που περιγράφουν μια φύση, τους περιορισμούς της και την ετικέτα της.  Μπορείτε να υποβάλλετε ερώτημα για μια συγκεκριμένη φύση και το αρχείο περιγραφής της ή να λάβετε τα αρχεία περιγραφής από το χώρο εργασίας.  Το ακόλουθο τμήμα κώδικα λαμβάνει το αρχείο περιγραφής φύσης έργου για το νέο μας έργο:

      IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor("com.example.natures.myOtherNature");

Επίσης μπορείτε να λάβετε έναν πίνακα με αρχεία περιγραφής για όλες τις εγκατεστημένες φύσεις:

      IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();