Φύσεις έργου

org.eclipse.core.resources.natures

Ο χώρος εργασίας υποστηρίζει την έννοια των φύσεων έργου (ή "φύσεις" για συντομία). Η φύση συσχετίζει τη συμπεριφορά του κύκλου ζωής με ένα έργο. Φύσεις εγκαθίστανται σε κάθε έργο, με τη χρήση της μεθόδου setDescription που ορίζεται στην org.eclipse.core.resources.IProject. Ρυθμίζονται κατά την προσθήκη τους σε έργο και αναιρείτε η ρύθμισή τους όταν αφαιρούνται από το έργο. Για παράδειγμα, η φύση Java μπορεί να εγκαθιστά ένα εργαλείο δόμησης Java για την πραγματοποίηση των ρυθμίσεων σε άλλο έργο, όταν προστεθεί σε αυτό.

Το σημείο επέκτασης φύσεων επιτρέπει στους μεταγραφείς των φύσεων να καταχωρούν την υλοποίηση της αντίστοιχης φύσης χρησιμοποιώντας ένα συμβολικό όνομα, το οποίο στη συνέχεια χρησιμοποιείται από το χώρο εργασίας για την εύρεση και τη ρύθμιση των φύσεων. Το συμβολικό όνομα είναι η ταυτότητα της επέκτασης της φύσης. Κατά τον ορισμό μιας επέκτασης φύσης, συνιστάται στους χρήστες να συμπεριλαμβάνουν μια αναγνώσιμη από τον άνθρωπο τιμή για το γνώρισμα "name", το οποίο περιγράφει τη σημασία της και μπορεί να εμφανίζεται στους χρήστες.

Οι φύσεις μπορούν να προσδιορίζουν περιορισμούς σχέσεων με άλλες φύσεις. Ο περιορισμός "one-of-nature" ορίζει ότι ανά πάσα στιγμή, σε κάθε έργο μπορεί να υπάρχει το πολύ μία φύση από ένα δεδομένο σύνολο. Έτσι δίνεται η δυνατότητα αμοιβαίας εξαίρεσης ανάμεσα σε φύσεις που δεν είναι συμβατές μεταξύ τους. Ο περιορισμός "requires-nature" ορίζει μια εξάρτηση από μία άλλη φύση. Όταν σε ένα έργο προστίθεται μια φύση, τότε πρέπει να προστεθούν επίσης όλες οι απαιτούμενες φύσεις. Η πραγματοποίηση και αναίρεση των ρυθμίσεων των φύσεων εκτελείται με τέτοιο τρόπο, ώστε να εξασφαλίζεται η πραγματοποίηση και η αναίρεση των ρυθμίσεων των απαιτούμενων φύσεων πριν και μετά από αυτές αντίστοιχα. Για το λόγο αυτό, δεν επιτρέπονται κυκλικές εξαρτήσεις ανάμεσα στις φύσεις.

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

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

Οι φύσεις έχουν επίσης τη δυνατότητα να μην επιτρέπουν τη δημιουργία διασυνδεδεμένων πόρων σε έργα με τα οποία συσχετίζονται. Ορίζοντας το γνώρισμα allowLinking ως "false", μια φύση μπορεί να δηλώσει ότι δεν μπορούν να δημιουργηθούν διασυνδεδεμένοι πόροι. Η λειτουργία αυτή είναι νέα στην έκδοση 2.1.

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

<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder | content-type)* , options?)>>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #REQUIRED

name  CDATA #IMPLIED>


<!ELEMENT runtime (run)>



<!ELEMENT run (parameter*)>

<!ATTLIST run

class CDATA #REQUIRED>


<!ELEMENT parameter EMPTY>

<!ATTLIST parameter

name  CDATA #REQUIRED

value CDATA #REQUIRED>


<!ELEMENT one-of-nature EMPTY>

<!ATTLIST one-of-nature

id CDATA #REQUIRED>


<!ELEMENT requires-nature EMPTY>

<!ATTLIST requires-nature

id CDATA #REQUIRED>


<!ELEMENT builder EMPTY>

<!ATTLIST builder

id CDATA #REQUIRED>


<!ELEMENT options EMPTY>

<!ATTLIST options

allowLinking (true | false) >


<!ELEMENT content-type EMPTY>

<!ATTLIST content-type

id CDATA #REQUIRED>


Παρακάτω δίνεται ένα παράδειγμα τριών ρυθμίσεων φύσης. Η waterNature και η fireNature ανήκουν στο ίδιο αποκλειστικό σύνολο, επομένως δεν μπορούν να συνυπάρχουν στο ίδιο έργο. Η snowNature απαιτεί την waterNature, επομένως η snowNature θα είναι απενεργοποιημένη σε ένα έργο στο οποίο δεν υπάρχει η waterNature. Φυσικά, η snowNature δεν μπορεί να ενεργοποιηθεί σε ένα έργο με την fireNature. Η fireNature δεν επιτρέπει επίσης τη δημιουργία διασυνδεδεμένων πόρων.

 
   

<extension id=

"fireNature"

name=

"Fire Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Fire"

/>

</runtime>

<one-of-nature id=

"com.xyz.stateSet"

/>

<options allowLinking=

"false"

/>

</extension>

<extension id=

"waterNature"

name=

"Water Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Water"

/>

</runtime>

<one-of-nature id=

"com.xyz.stateSet"

/>

</extension>

<extension id=

"snowNature"

name=

"Snow Nature"

point=

"org.eclipse.core.resources.natures"

>

<runtime>

<run class=

"com.xyz.natures.Snow"

>

<parameter name=

"installBuilder"

value=

"true"

/>

</run>

</runtime>

<requires-nature id=

"com.xyz.coolplugin.waterNature"

/>

<builder id=

"com.xyz.snowMaker"

/>

</extension>

Εάν αυτές οι επεκτάσεις έχουν οριστεί σε μια πρόσθετη λειτουργία με την ταυτότητα "com.xyz.coolplugin", το πλήρες όνομα των φύσεων αυτών θα είναι "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" και "com.xyz.coolplugin.snowNature".

Η τιμή του γνωρίσματος class πρέπει να αντιστοιχεί σε έναν υλοποιητή της org.eclipse.core.resources.IProjectNature. Ο έλεγχος των ορισμών φύσεων μπορεί να πραγματοποιηθεί με τη χρήση της διεπαφής org.eclipse.core.resources.IProjectNatureDescriptor. Τα αντικείμενα περιγραφής μπορούν να ληφθούν με τη χρήση των μεθόδων getNatureDescriptor(String) και getNatureDescriptors() στην org.eclipse.core.resources.IWorkspace.

Η ίδια η πλατφόρμα δεν περιέχει προκαθορισμένες φύσεις. Οι εγκαταστάσεις συγκεκριμένων προϊόντων ενδέχεται να συμπεριλαμβάνουν τις απαραίτητες φύσεις.