Για την παροχή πλήρους υποστήριξης για τα λογικά μοντέλα, ένας παροχέας χώρου αποθήκευσης μπορεί να επιτελέσει τα ακόλουθα βήματα:
ResourceMapping
.ISynchronizationScope
και ΑΡΙ υποστήριξης.IMergeContext
και του
ΑΡΙ υποστήριξης.teamContentProviders
για τα μοντέλα που εμπλέκονται στη συγχώνευση. Για τη διευκόλυνση της διαχείρισης της
σχέσης ανάμεσα στο περιεχόμενο μοντέλου, στο περιεχόμενο για συγχώνευση και στο πλαίσιο
σύγκρισης, παρέχεται μια κλάση ModelSynchronizeParticipant
.IFileHistoryProvider
.ProjectSetCapability
.
Subscriber
για να χρησιμοποιηθεί με το ΑΡΙ SynchronizationStateTester
.Οι ακόλουθες ενότητες περιγράφουν με περισσότερες λεπτομέρειες κάθε ένα από αυτά τα σημεία. Η πρόσθετη λειτουργία org.eclipse.team.examples.filesystem περιέχει ένα παράδειγμα που απεικονίζει αρκετά από τα σημεία αυτά. Μπορείτε να αναλάβετε τον έλεγχο του έργου από το χώρο αποθήκευσης CVS και να το χρησιμοποιήσετε ως αναφορά, ενώ διαβάζετε το παρόν πρόγραμμα εκμάθησης. Αποποίηση ευθύνης: Ο πρωτογενής κώδικας στις πρόσθετες λειτουργίες του παραδείγματος μπορεί να αλλάξει με το χρόνο. Για να λάβετε ένα αντίγραφο για το τι ταιριάζει με όσα χρησιμοποιούνται στο παράδειγμα αυτό, μπορείτε να αναλάβετε τον έλεγχο του έργου χρησιμοποιώντας το προσδιοριστικό εκδοχής 3.2 (πιθανότατα R3_2) ή ένα προσδιοριστικό ημερομηνίας της 28ης Ιουνίου 2006.
Το API αντιστοίχισης πόρων αποτελείται από τις παρακάτω κλάσεις:
Object getModelObject()
: Το αντικείμενο μοντέλου από το οποίο
προήλθε η αντιστοίχιση (ή στο οποίο προσαρμόστηκε).ResourceTraversal[] getTraversals(ResourceMappingContext,
IProgressMonitor)
: Η διάσχιση πόρων που καλύπτει τους πόρους που αποτελούν το
αντικείμενο μοντέλου. ResourceTraversal
περιέχει ένα σύνολο πόρων και έναν ενδείκτη βάθους που δηλώνει το βάθος στο
οποίο οι πόροι στη διάσχιση σχετίζονται με το αντικείμενο μοντέλου από το οποίο
προέρχονται. Οι διασχίσεις πόρων παρέχονται σε έναν πελάτη από μια αντιστοίχιση πόρων
προκειμένου να περιγραφούν τα περιεχόμενα ενός μοντέλου κατά τρόπο τέτοιο ώστε ο πελάτης
(για παράδειγμα, ένας παροχέας χώρου αποθήκευσης) να μπορεί να εκτελέσει τις λειτουργίες
του όσο το δυνατόν αποτελεσματικότερα. Οι μέθοδοι που μας ενδιαφέρουν είναι: getResources()
getDepth()
ResourceMappingContext
και
RemoteResourceMappingContext
είναι λίγο περισσότερο σύνθετη και περιγράφεται
αργότερα.Υπάρχουν δυο είδη πρόσθετων λειτουργιών που ενδιαφέρονται για την αντιστοίχιση πόρων: Εκείνες που παρέχουν ένα μοντέλο που αποτελείται από πόρους στο χώρο εργασίας ή που βρίσκεται μόνιμα αποθηκευμένο σε αυτούς, καθώς και εκείνες που επιθυμούν την εκτέλεση λειτουργιών σε πόρους. Η πρώτη περίπτωση καλύπτεται στην ενότητα Οδηγίες μοντέλων και η δεύτερη καλύπτεται στην επόμενη ενότητα.
Οι πρόσθετες λειτουργίες που συνεισφέρουν επεκτάσεις σε προσαρμόσιμα σημεία
επέκτασης θα πρέπει να προχωρήσουν σε δυο αλλαγές για να υποστηρίξουν τα νέα ΑΡΙ ResourceMapping
:
ResourceMapping
αντί της IResource
(για όσους αυτό ενδείκνυται).ResourceMapping
αντί της IResource
και να συμμορφώνονται με τους περιορισμούς βάθους που
παρέχονται στις διασχίσεις.Οι πρόσθετες λειτουργίες που προσθέτουν συνεισφορές αντικειμένων στην
IResource
τώρα μπορούν να τις προσθέσουν στη ResourceMapping
,
εάν η ενέργεια μπορεί να εφαρμοστεί σε πολλαπλούς πόρους. Ακολουθεί ένα τμήμα κώδικα XML που
συνεισφέρει μια ενέργεια μενού σε αντικείμενα που προσαρμόζονται σε αντιστοιχίσεις
πόρων:
<extension point="org.eclipse.ui.popupMenus"> <objectContribution objectClass="org.eclipse.core.resources.mapping.ResourceMapping" adaptable="true" id="org.eclipse.team.ccvs.ui.ResourceMapperContributions"> <enablement>
<adapt type="org.eclipse.core.resources.mapping.ResourceMapping">
<test
property="org.eclipse.core.resources.projectPersistentProperty"
args="org.eclipse.team.core.repository,org.eclipse.team.cvs.core.cvsnature" />
</adapt>
</enablement>
<action
label="%UpdateAction.label"
definitionId="org.eclipse.team.cvs.ui.update"
class="org.eclipse.team.internal.ccvs.ui.actions.UpdateAction"
tooltip="%UpdateAction.tooltip"
menubarPath="team.main/group2"
id="org.eclipse.team.cvs.ui.update">
</action>
...
</objectContribution>
</extension>
Οι συνεισφορές στη ResourceMapping
θα εφαρμόζονται αυτομάτως σε
αντικείμενα που προσαρμόζονται σε IResource
. Αυτή τη μεταβατική συσχέτιση τη
χειρίζεται ο πάγκος εργασίας. Το φιλτράρισμα των συνεισφορών στις αντιστοιχίσεις
πόρων μπορεί να λάβει χώρα μέσω της χρήσης εκφράσεων ενεργοποίησης. Μια έκφραση για
φιλτράρισμα βάσει μόνιμης ιδιότητας στο έργο έχει προστεθεί για να επιτρέψει στους
παροχείς χώρου αποθήκευσης να εμφανίζουν τα μενού τους σε έργα που αντιστοιχίζονται στους
χώρους αποθήκευσής τους.
Στις ενέργειες που έχουν συνεισφέρει στην κλάση ResourceMapping
θα δοθεί
μια επιλογή, η οποία περιέχει μια ή περισσότερες ResourceMapping
.
Αποτελεί ευθύνη της ενέργειας να μεταφράσει την αντιστοίχιση πόρου σε ένα σύνολο πόρων
που πρόκειται να λειτουργήσουν. Αυτό μπορεί να γίνει μέσω της κλήσης της
getTraversals
για την ανάκτηση των διασχίσεων της αντιστοίχισης. Οι
διασχίσεις χρησιμοποιούνται για να επιτρέψουν στους πελάτες της διάσχισης τη
βελτιστοποίηση των λειτουργιών τους με βάση το βάθος των πόρων στους οποίους η
διάσχιση λαμβάνει χώρα. Ένας πελάτης μπορεί να διασχίσει τον πόρο είτε με μη αυτόματο
τρόπο είτε χρησιμοποιώντας τον πόρο και το βάθος ως δεδομένα εισόδου σε μια λειτουργία,
στην οποία η ενέργεια αναθέτει αυτή την εργασία. Για παράδειγμα, εάν ο χρήστης εκτελέσει
ενημέρωση CVS σε ένα πακέτο java και η αντιστοίχιση πόρων του πακέτου java
αντιστοιχίζεται σε ένα φάκελο βάθους ένα (1), το CVS θα έδινε μια κατάλληλη εντολή ("cvs
update -l" ("ενημέρωση CVS - 1") για όσους είναι περίεργοι), η οποία θα εκτελούσε μια
επιφανειακή ενημέρωση στο
φάκελο που αναπαριστάται από το πακέτο.
ΠαρΆ όλο που η λήψη ενός συνόλου διασχίσεων απευθείας από τις επιλεγμένες αντιστοιχίσεις πόρων είναι πιθανή, υπάρχουν σχέσεις μοντέλων (ή σχέσεις χώρων αποθήκευσης) που ίσως απαιτούν τη συμπερίληψη πρόσθετων πόρων ή στοιχείων μοντέλου σε μια λειτουργία. Η επόμενη ενότητα περιγράφει τον τρόπο διασφάλισης της συμπερίληψης όλων των απαραίτητων πόρων σε μια λειτουργία.
Για τις λειτουργίες συνεργασίας, οι επιλεγμένες αντιστοιχίσεις πρέπει να μεταφραστούν στο σύνολο των αντιστοιχίσεων που πρόκειται να λειτουργήσουν. Μέρος της διαδικασίας αυτής αποτελεί η αναζήτηση συμβουλής από όλους τους παροχείς μοντέλων προκειμένου να διασφαλιστεί ότι συμπεριλαμβάνονται σε λειτουργίες σε πόρους που αντιστοιχίζονται στους κανόνες ενεργοποίησής τους. Ο όρος που χρησιμοποιούμε για να περιγράψουμε το πλήρες σύνολο αντιστοιχίσεων πόρων που πρόκειται να λειτουργήσουν είναι η εμβέλεια λειτουργίας. Το ακόλουθο API παρέχεται για το σκοπό αυτό:
ISynchronizationScope
:
Διεπαφή που ορίζει το API για την πρόσβαση της εμβέλειας της λειτουργίας. Παρέχει
πρόσβαση σε όλες τις αντιστοιχίσεις πόρων που λειτουργούν, καθώς και στις διασχίσεις για
τις αντιστοιχίσεις αυτές μιας και υπολογίστηκαν κατά τη διάρκεια της διαδικασίας δόμησης
της εμβέλειας.ISynchronizationScopeManager
:
Διεπαφή που ορίζει το ΑΡΙ για τη δημιουργία και τη διαχείριση μιας εμβέλειας.SynchronizationScopeManager
:
Επεκτάσιμη κλάση που παρέχει μια προεπιλεγμένη υλοποίηση του ΑΡΙ ISynchronizationScopeManager
.ModelOperation
:
Επεκτάσιμη κλάση λειτουργίας που δημιουργεί μια εμβέλεια μέσω της χρήσης μιας
παρεχόμενης λειτουργίας διαχείρισης εμβέλειας και εμφανίζει ερωτήσεις εάν πρόσθετοι
πόροι ή αντιστοιχίσεις έχουν συμπεριληφθεί στη λειτουργία εξαιτίας των σχέσεων
των παροχέων μοντέλων.Η initialize(IProgressMonitor) μέθοδος της κλάσης SynchronizationScopeManager
χειρίζεται ολόκληρη τη διαδικασία της μετατροπής ενός συνόλου δεδομένων εισόδου
αντιστοιχίσεων πόρων σε ένα πλήρες σύνολο αντιστοιχίσεων που χρειάζεται να λειτουργήσουν,
καθώς και στο πλήρες σύνολο διασχίσεων που καλύπτουν αυτές τις αντιστοιχίσεις. Ένας
παροχέας χώρου αποθήκευσης μπορεί να προσαρμόσει τη διαδικασία μέσω:
RemoteResourceMappingContext
για χρήση στις
περιπτώσεις λήψης διασχίσεων πόρων από αντιστοιχίσεις πόρων.SynchronizationScopeManager
για να
προσαρμόσει τη διαδικασία διαχείρισης εμβέλειας όπως απαιτείται.Οι δυο επόμενες ενότητες περιγράφουν τα σημεία αυτά με περισσότερες λεπτομέρειες.
Προκειμένου να εγγυηθεί ότι όλοι οι απαραίτητοι πόροι συμπεριλαμβάνονται στη λειτουργία συνεργασίας, οι παροχείς μοντέλων ίσως χρειαστεί να ρίξουν μια ματιά στην κατάσταση ενός ή περισσότερων πόρων στο χώρο αποθήκευσης. Για ορισμένα μοντέλα, αυτό ίσως να μην είναι απαραίτητο. Για παράδειγμα, ένα πακέτο java είναι μια θέση υποδοχής, στην οποία η μετάβαση υπήρξε βάθους ένα (1) ανεξάρτητα από την απομακρυσμένη κατάσταση του μοντέλου. Δεδομένου του παραπάνω, ένας παροχέας χώρου αποθήκευσης μπορεί εύκολα να καθορίσει ότι οι εξερχόμενες διαγραφές θα πρέπει να συμπεριλαμβάνονται σε περιπτώσεις δέσμευσης ή ότι οι εισερχόμενες προσθήκες θα πρέπει να συμπεριλαμβάνονται σε περιπτώσεις ενημέρωσης. Ωστόσο, οι πόροι που αποτελούν ορισμένα λογικά μοντέλα μπορεί να αλλάζουν με τον καιρό. Για παράδειγμα, οι πόροι που αποτελούν ένα στοιχείο μοντέλου ίσως εξαρτώνται από τα περιεχόμενα ενός αρχείου δήλωσης (ή ενός άλλου παρόμοιου μηχανισμού). Προκειμένου η αντιστοίχιση πόρων να επιστρέψει την ορθή διάσχιση, πρέπει να αποκτήσει πρόσβαση στα απομακρυσμένα περιεχόμενα του αρχείου δήλωσης (εάν αυτά διαφέρουν από τα τοπικά περιεχόμενα) έτσι ώστε να διαπιστώσει εάν υπάρχουν πρόσθετοι πόροι που πρέπει να συμπεριληφθούν. Οι πρόσθετοι αυτοί πόροι ίσως να μην υπάρχουν στο χώρο εργασίας, ο παροχέας χώρου αποθήκευσης όμως γνωρίζει πώς να διαπιστώσει ότι υπήρχαν τη στιγμή εκτέλεσης της επιλεγμένης ενέργειας.
Για την υποστήριξη αυτών των συνθετότερων μοντέλων,
μια RemoteResourceMappingContext
μπορεί να μεταβιβαστεί στη
μέθοδο ResourceMapping#getTraversals
.
Εάν παρέχεται περιβάλλον, η αντιστοίχιση μπορεί να το χρησιμοποιήσει για να διασφαλίσει
ότι όλοι οι απαραίτητοι πόροι περιλαμβάνονται στη διάσχιση. Εάν δεν παρέχεται περιβάλλον,
η αντιστοίχιση μπορεί να υποθέσει ότι μόνο η τοπική κατάσταση έχει σημασία.
Το περιβάλλον απομακρυσμένης αντιστοίχισης πόρων παρέχει τρία βασικά ερωτήματα:
Η απάντηση στην πρώτη ερώτηση εξαρτάται από το είδος της λειτουργίας που εκτελείται. Τυπικά, οι ενημερώσεις και οι συγχωνεύσεις είναι τριών εκδοχών, ενώ οι συγκρίσεις και οι λειτουργίες αντικατάστασης (τουλάχιστον για το CVS) είναι δυο εκδοχών.
Το ΑΡΙ συνεργασίας Eclipse περιλαμβάνει μια κλάση Subscriber
που ορίζει ένα ΑΡΙ για την παροχή της κατάστασης συγχρονισμού ανάμεσα στον τοπικό χώρο
εργασίας και σε έναν απομακρυσμένο εξυπηρετητή. Παρέχεται μια κλάση SubscriberResourceMappingContext
που χρησιμοποιεί μια κλάση Subscriber
για την πρόσβαση στην απαραίτητη απομακρυσμένη κατάσταση. Οι πελάτες που έχουν μια
Subscriber
δεν χρειάζεται να κάνουν τίποτα παραπάνω για να λάβουν ένα
περιβάλλον αντιστοίχισης πόρων.
Μπορούν να δημιουργηθούν υποκλάσεις για την κλάση
SynchronizationScopeManager
έτσι ώστε να προσαρμοστούν η δημιουργία
εμβέλειας και η διαδικασία
διαχείρισης. Οι δυο βασικότεροι
λόγοι για τη δημιουργία υποκλάσης για τη λειτουργία διαχείρισης
εμβέλειας
είναι:
ISynchronizationScopeParticipant
ορίζει το ΑΡΙ που μπορεί να χρησιμοποιηθεί από τους παροχείς μοντέλων για να
συμμετάσχουν σε μια διαδικασία διαχείρισης εμβέλειας. Η κλάση SubscriberScopeManager
είναι μια υποκλάση της SynchronizationScopeManager
, βασισμένη στη
Subscriber
, και περιλαμβάνει στοιχεία συμμετοχής στη διαδικασία διαχείρισης
εμβέλειας. Ένα παράδειγμα που εξηγεί γιατί χρειάζεται αυτό το είδος διαδικασίας είναι τα
σύνολα εργασίας. Εάν ένα σύνολο εργασίας αποτελεί μια από τις αντιστοιχίσεις πόρων σε μια
εμβέλεια, το σύνολο διασχίσεων που καλύπτεται από την εμβέλεια θα αυξανόταν σε περίπτωση
προσθήκης πόρων στο σύνολο εργασίας.Το κύριο είδος λειτουργίας του χώρου αποθήκευσης που απαιτεί τη συμμετοχή μοντέλων
είναι η συγχώνευση. Σε πολλές περιπτώσεις, η συμμετοχή μοντέλων απαιτείται μόνο σε
επίπεδο αρχείου. Για αυτό, εισήχθη το ΑΡΙ IStorageMerger
που επιτρέπει
στους παροχείς μοντέλων να συνεισφέρουν συγχωνεύσεις, οι οποίες θα πρέπει να
χρησιμοποιηθούν για
τη συγχώνευση αρχείων συγκεκριμένης επέκτασης ή είδους περιεχομένων. Ωστόσο, σε
ορισμένες περιπτώσεις τα μοντέλα ίσως χρειάζονται πρόσθετο περιβάλλον για να
συμμετάσχουν κατάλληλα σε μια συγχώνευση. Για το σκοπό αυτό, εισαγάγαμε τα ΑΡΙ IResourceMappingMerger
και IMergeContext
.
Οι λειτουργίες συγχώνευσης συνεχίζουν να ενεργοποιούνται αυτόματα από ενέργειες που συσχετίζονται με έναν παροχέα χώρου αποθήκευσης. Ωστόσο, εφόσον μια λειτουργία είδους συγχώνευσης ζητηθεί από το χρήστη, ο παροχέας χώρου αποθήκευσης χρειάζεται συμπεριλάβει τους παροχείς μοντέλων στη διαδικασία συγχώνευσης για να διασφαλίσει ότι η συγχώνευση δεν προκαλεί την καταστροφή του μοντέλου με κάποιο τρόπο.
Υπάρχουν δυο κύρια μέρη του ΑΡΙ παροχέα χώρου αποθήκευσης που σχετίζονται με την υποστήριξη της συγχώνευσης βάσει μοντέλων.
Μια σημαντική άποψη της συγχώνευσης που βασίζεται στα μοντέλα είναι το API που χρησιμοποιείται για να επικοινωνήσει την κατάσταση συγχρονισμού των πόρων που συμπεριλαμβάνονται στον παροχέα μοντέλων. Οι ακόλουθες διεπαφές χρησιμοποιούνται για να περιγράψουν την κατάσταση συγχρονισμού:
Για όλες αυτές τις διεπαφές παρέχονται αφηρημένες κλάσεις με τη σύμβαση ότι τα
ονόματα των κλάσεων είναι ίδια με τα ονάματα των διεπαφών εφόσον από τις
τελευταίες αφαιρεθεί το πρόθημα "Ι". Η μοναδική κλάση που πρέπει να αντικαταστήσουν οι
παροχείς χώρου αποθήκευσης για να μπορούν να παρασχεθούν οι κατάλληλες, προγενέστερες και
μεταγενέστερες αναθεωρήσεις του αρχείου είναι η κλάση ResourceDiff
.
Η διεπαφή IMergeContext επεκτείνει το περιβάλλον συγχρονισμού με πρόσθετες μεθόδους, οι οποίες υποστηρίζουν τη συγχώνευση. Μέθοδοι επανάκλησης υπάρχουν για:
Μια αφηρημένη κλάση MergeContext παρέχεται, η οποία περιέχει προεπιλεγμένες υλοποιήσεις για το μεγαλύτερο μέρος της συμπεριφοράς υλοποίησης και συγχρόνως χρησιμοποιεί την IStorageMerger για να εκτελέσει συγχωνεύσεις τριών εκδοχών. Παρέχεται ακόμα μια κλάση SubscriberMergeContext, η οποία χειρίζεται the population και συντήρηση της περιγραφής της κατάστασης συγχρονισμού που σχετίζεται με το περιβάλλον συγχώνευσης.
Παρέχεται η κλάση λειτουργίας ModelMergeOperation
η οποία χρησιμοποιεί το ΑΡΙ IResourceMappingMerger
για να εκτελέσει μια
λειτουργία συγχώνευσης βάσει μοντέλων. Οι υποκλάσεις χρειάζεται να
αντικαταστήσουν τη μέθοδο initializeContext(IProgressMonitor)
για να
επιστρέψουν ένα περιβάλλον συγχώνευσης. Η λειτουργία χρησιμοποιεί το περιβάλλον αυτό για
να αποπειραθεί μια συγχώνευση βάσει μοντέλων χωρίς γραφικό περιβάλλον. Εάν υφίστανται
διενέξεις, η προεπισκόπηση της συγχώνευσης αφήνεται στην υποκλάση. Όπως θα δούμε στην
επόμενη ενότητα, υπάρχει μια κλάση ModelParticipantMergeOperation
που παρέχει δυνατότητες προεπισκόπησης μέσω της χρήσης μιας κλάσης ModelSynchronizeParticipant.
Παρέχεται υποστήριξη για την παρουσίαση λογικών μοντέλων σε μια λειτουργία
συνεργασίας μέσω της χρήσης του πλαισίου κοινής λειτουργίας πλοήγησης, το οποίο
εισάγεται στο Eclipse 3.2. Τα λογικά μοντέλα μπορούν να συσχετίσουν μια επέκταση
περιεχομένου με έναν παροχέα μοντέλων χρησιμοποιώντας το σημείο επέκτασης org.eclipse.team.ui.teamContentProvider. Οι
παροχείς συνεργασίας έχουν πρόσβαση σε αυτούς τους παροχείς περιεχομένου μέσω της ITeamContentProviderManager
.
Υπάρχουν αρκετά μέρη στα οποία ένας παροχέας συνεργασίας μπορεί να επιθυμεί την παρουσίαση λογικών μοντέλων:
ModelOperation
παρέχει μια προτροπή που χρησιμοποιεί
τους καταχωρημένους παροχείς περιεχομένου συνεργασίας για να πληροφορήσει το χρήστη
σχετικά με την επέκταση μιας εμβέλειας. Η ModelSynchronizeParticipant
παρέχει ενοποίηση στην προβολή
"Συγχρονισμός" ή σε κάθε θέση υποδοχής που μπορεί να παρουσιάσει την iSynchronizePages
.
Το στοιχείο συμμετοχής χρησιμοποιεί τόσο τις δυνατότητες του προϋπάρχοντος στοιχείου
συμμετοχής συγχρονισμού όσο και τις δυνατότητες της κοινής λειτουργίας πλοήγησης για να
επιτρέψει στους παροχείς συνεργασίας και τα μοντέλα να προσαρμόσουν τη γραμμή εργαλείων,
το μενού περιβάλλοντος και άλλες πτυχές της προεπισκόπησης συγχώνευσης. Η
ModelSynchronizeParticipant
παρέχει τα εξής:
Ακολουθεί μια λίστα ελέγχου των βημάτων για την προσαρμογή ενός στοιχείου συγχρονισμού μοντέλου για έναν συγκεκριμένο παροχέα συνεργασίας:
ModelSynchronizeParticipant
.ISynchronizePageConfiguration.P_VIEWER_ID
όπως η ταυτότητα της λειτουργίας προβολής που προσδιορίστηκε στο προηγούμενο βήμα.MergeActionGroup
προκειμένου να προσαρμόσετε την
εμφάνιση των ενεργειών που σχετίζονται με τη συγχώνευση.ModelParticipantMergeOperation
για το χειρισμό της μετάβασης από μια συγχώνευση βάσει μοντέλων σε μια προεπισκόπηση εντός
ενός πλαισίου διαλόγου ή της προβολής "Συγχρονισμός".Τα ακόλουθα τμήματα κώδικα XML απεικονίζουν τον τρόπο με τον οποίο καταχωρείται η κλάση του στοιχείου συμμετοχής CVS και πώς ορίζεται η λειτουργία προβολής της.
<extension point="org.eclipse.team.ui.synchronizeParticipants"> <participant name="CVS" icon="$nl$/icons/full/eview16/cvs_persp.gif" class="org.eclipse.team.internal.ccvs.ui.mappings.WorkspaceModelParticipant" id="org.eclipse.team.cvs.ui.workspace-participant"> </participant> </extension> <extension point="org.eclipse.ui.navigator.viewer"> <viewer viewerId="org.eclipse.team.cvs.ui.workspaceSynchronization"> <popupMenu allowsPlatformContributions="false" id="org.eclipse.team.cvs.ui.workspaceSynchronizationMenu"> <insertionPoint name="file"/> <insertionPoint name="edit" separator="true"/> <insertionPoint name="synchronize"/> <insertionPoint name="navigate" separator="true"/> <insertionPoint name="update" separator="true"/> <insertionPoint name="commit" separator="false"/> <insertionPoint name="overrideActions" separator="true"/> <insertionPoint name="otherActions1" separator="true"/> <insertionPoint name="otherActions2" separator="true"/> <insertionPoint name="sort" separator="true"/> <insertionPoint name="additions" separator="true"/> <insertionPoint name="properties" separator="true"/> </popupMenu> </viewer> </extension>
Προστέθηκε ένα ΑΡΙ ιστορικού αρχείου για να επιτραπεί στα μοντέλα η πρόσβαση στο ιστορικό των αρχείων. Το API ιστορικού αρχείου αποτελείται από τις ακόλουθες διεπαφές:
Εκτός από αυτό το API, προστέθηκε και μια προβολή γενικού ιστορικού αρχείου. Αυτό θα επιτρέψει στου παροχείς συνεργασίας να εμφανίσουν το ιστορικό του αρχείου ή του πόρου σε μια κοινόχρηστη προβολή. Επιπλέον, θα επιτρέψει στα μοντέλα να εμφανίσουν το ιστορικό των στοιχείων μοντέλου για τα στοιχεία εκείνα που δεν αντιστοιχίζονται απευθείας σε αρχεία. Η προβολή "Ιστορικό" είναι μια προβολή βασιζόμενη στις σελίδες. Παρακάτω, περιγράφεται ο τρόπος με τον οποίο η προβολή "Ιστορικό" λαμβάνει τις σελίδες για τα επιλεγμένα στοιχεία:
RepositoryProvider
που σχετίζεται με το έργο και
περιέχει τον πόρο σε μια διεπαφή IHistoryPageSource.
IHistoryPageSource
.Στην κλάση ProjectSetCapability
προστέθηκαν μέθοδοι προκειμένου να υποστηριχθεί η μετάφραση μεταξύ μιας σειράς χαρακτήρων
παραπομπών (που χρησιμοποιείται για τον προσδιορισμό της αντιστοίχισης ανάμεσα σε ένα έργο
και ένα απομακρυσμένο περιεχόμενο) και των URI που προσδιορίζουν ένα σχήμα συστήματος
αρχείων, το οποίο έχει καταχωρηθεί με το σημείο επέκτασης org.eclipse.core.filesystem.filesystems. Οι
παροχείς συνεργασίας παρέχουν προαιρετικά υποστήριξη για αυτό προκειμένου να επιτραπεί
στα λογικά μοντέλα να εκτελέσουν απομακρυσμένη αναζήτηση και φόρτωση έργου.
Οι παροχείς συνεργασίας μπορούν να προσθέσουν διακριτικά στα στοιχεία μοντέλου, μετατρέποντας τα διακριτικά μειωμένων λειτουργιών για να εργαστούν για τις αντιστοιχίσεις πόρων με τον ίδιο τρόπο που μετατρέπονται οι συνεισφορές αντικειμένων για να εργαστούν για αντιστοιχίσεις πόρων. Ωστόσο, υπάρχει μια πτυχή της προσθήκης διακριτικών στα στοιχεία λογικών μοντέλων που είναι προβληματική. Εάν ένα στοιχείο μοντέλου δεν έχει αντιστοίχιση ένα-προς-ένα με έναν πόρο, το στοιχείο μοντέλου ίσως να μη λάβει την ενημέρωση ετικέτας όταν ο υποκείμενος πόρος αλλάξει.
Για την αντιμετώπιση αυτού του προβλήματος, εισήχθη η κλάση
ITeamStateProvider
για να παράσχει στους παροχείς μοντέλων πρόσβαση στις αλλαγές κατάστασης που μπορεί να
επηρεάσουν τα διακριτικά συνεργασίας. Επιπλέον, οι προβολές μοντέλων μπορούν να
χρησιμοποιήσουν μια κλάση
SynchronizationStateTester
για να καθορίσουν πότε οι ετικέτες των στοιχείων λογικού μοντέλου χρειάζονται ενημέρωση.
Το API αυτό βασίζεται στη διεπαφή ITeamStateProvider
για να καθορίσει πότε η
κατάσταση συνεργασίας του πόρου άλλαξε και μπορεί να μεταβιβαστεί σε ένα διακριτικό
συνεργασίας ως μέρος μιας διεπαφής
IDecorationContext
.