Προτιμήσεις περιβάλλοντος εκτέλεσης

Το πακέτο org.eclipse.core.runtime.preferences παρέχει την υποδομή για την αποθήκευση των προτιμήσεων μιας πρόσθετης λειτουργίας. Οι προτιμήσεις συνήθως αντιστοιχίζονται με ρυθμίσεις που ελέγχονται από το χρήστη στη σελίδα Προτιμήσεις, αν και αυτό δεν απαιτείται από την υποκείμενη υποδομή. Οι προτιμήσεις πρόσθετων λειτουργιών αποτελούν ζεύγη κλειδιού/τιμής, όπου το κλειδί περιγράφει το όνομα της προτίμησης και η τιμή ανήκει σε ένα από τα πολλά διαφορετικά είδη τιμών (λογική τιμή, διπλής ακρίβειας, κινητής υποδιαστολής, ακέραια, μεγάλου μήκους ή σειρά χαρακτήρων). Η αποθήκευση και η ανάκτηση των προτιμήσεων είναι δυνατή από το σύστημα αρχείων της πλατφόρμας. Η ακριβής θέση των αποθηκευμένων προτιμήσεων εξαρτάται από την εμβέλεια της προτίμησης.

Εμβέλειες προτιμήσεων

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

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

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

Η πρόσβαση στις προτιμήσεις επιτυγχάνεται με χρήση του πρωτοκόλλου IPreferencesService. Η πρόσβαση στην προεπιλεγμένη υπηρεσία προτιμήσεων της πλατφόρμας επιτυγχάνεται με χρήση της κλάσης Platform.

	...
	IPreferencesService service = Platform.getPreferencesService();
	...

Μόλις αποκτήσετε την υπηρεσία προτιμήσεων, μπορείτε να υποβάλλετε ερώτημα για τις τιμές των προτιμήσεων με βάση το όνομά τους, χρησιμοποιώντας οποιαδήποτε από τις μεθόδους get... που παρέχονται στην κλάση IPreferencesService. Για παράδειγμα, το ακόλουθο τμήμα κώδικα υποβάλλει ερώτημα για την τιμή της προτίμησης "MyPreference" στην πρόσθετη λειτουργία "com.example.myplugin".

	...
	IPreferencesService service = Platform.getPreferencesService();
	boolean value = service.getBoolean("com.example.myplugin", "MyPreference", true, null);
	//do something with the value.
	...

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

Χρήση εμβελειών και κόμβων

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

	...
	IPreferencesService service = Platform.getPreferencesService();
	Preferences configurationNode = new ConfigurationScope().getNode("com.example.myplugin");
	Preferences instanceNode = new InstanceScope().getNode("com.example.myplugin");
	Preferences[] nodes = new Preferences[] {configurationNode, instanceNode};
	stringValue = service.get("MyPreference", "true", nodes);
	//do something with the value.
	...

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

	...
	IPreferencesService service = Platform.getPreferencesService();
	Preferences root = service.getRootNode();
	Preferences myInstanceNode = root.node(InstanceScope.SCOPE).node("com.example.myplugin");
	if (myInstanceNode != null) {
		value = node.getBoolean("MyPreference", "true");
		//do something with the value.
	}
	...

Επέκταση των εμβελειών

Οι πρόσθετες λειτουργίες μπορούν να καθορίζουν τις δικές τους εξειδικευμένες εμβέλειες με χρήση της επέκτασης org.eclipse.core.runtime.preferences. Σε αυτή την επέκταση, η πρόσθετη λειτουργία καθορίζει το όνομα της νέας εμβέλειας, καθώς και την κλάση που μπορεί να δημιουργήσει κόμβους προτιμήσεων για τη νέα εμβέλεια. Προεραιτικά, μπορεί να καθορίσει το όνομα μιας κλάσης που αποδίδει αρχικές τιμές στις προεπιλεγμένες τιμές προτιμήσεων σε αυτή την εμβέλεια. Όταν μια πρόσθετη λειτουργία καθορίζει μια νέα εμβέλεια, εξαρτάται από την πρόσθετη λειτουργία να υλοποιήσει τη σειρά διάσχισης για οποιαδήποτε νέα εμβέλεια η οποία σχετίζεται με τη σειρά διάσχισης της πλατφόρμας. Θα εξετάσουμε αυτή τη δυνατότητα λεπτομερέστερα με χρήση του ειδικού παραδείγματος της ενότητας Προτιμήσεις εμβέλειας έργου.