Οδηγίες ενοποίησης χώρων αποθήκευσης με λογικά μοντέλα

Για την παροχή πλήρους υποστήριξης για τα λογικά μοντέλα, ένας παροχέας χώρου αποθήκευσης μπορεί να επιτελέσει τα ακόλουθα βήματα:

  1. Συνεισφέρει τις κατάλληλες λειτουργίες χώρου αποθήκευσης σε στοιχεία που προσαρμόζονται στην κλάση ResourceMapping.
  2. Διασφαλίζει ότι οι λειτουργίες που εκτελούνται σε αντιστοιχίσεις πόρων περιλαμβάνουν όλα τα κατάλληλα στοιχεία και πόρους μοντέλων, χρησιμοποιώντας μια διεπαφή ISynchronizationScope και ΑΡΙ υποστήριξης.
  3. Επιτρέπει στους παροχείς μοντέλων να συμμετέχουν σε συγχώνευση χωρίς γραφικό περιβάλλον μέσω της διεπαφής IMergeContext και του ΑΡΙ υποστήριξης.
  4. Επιτρέπει στους παροχείς μοντέλων να συμμετέχουν σε προεπισκοπήσεις συγχωνεύσεων χρησιμοποιώντας τα teamContentProviders για τα μοντέλα που εμπλέκονται στη συγχώνευση. Για τη διευκόλυνση της διαχείρισης της σχέσης ανάμεσα στο περιεχόμενο μοντέλου, στο περιεχόμενο για συγχώνευση και στο πλαίσιο σύγκρισης, παρέχεται μια κλάση ModelSynchronizeParticipant.
  5. Παρέχει πρόσβαση στο ιστορικό των αρχείων του χώρου εργασίας μέσω του ΑΡΙ IFileHistoryProvider.
  6. Παρέχει πρόσβαση σε απομακρυσμένα σύνολα ρυθμίσεων χρησιμοποιώντας το ΑΡΙ συστήματος αρχείων Eclipse στην πρόσθετη λειτουργία org.eclipse.core.filesystem και διασυνδέει τα σύνολα αυτά με έργα του χώρου εργασίας μέσω της ProjectSetCapability.
  7. Υποστηρίζει την προσθήκη διακριτικών στα στοιχεία λογικών μοντέλων παρέχοντας ένα χώρο εργασίας Subscriber για να χρησιμοποιηθεί με το ΑΡΙ SynchronizationStateTester.

Οι ακόλουθες ενότητες περιγράφουν με περισσότερες λεπτομέρειες κάθε ένα από αυτά τα σημεία. Η πρόσθετη λειτουργία org.eclipse.team.examples.filesystem περιέχει ένα παράδειγμα που απεικονίζει αρκετά από τα σημεία αυτά. Μπορείτε να αναλάβετε τον έλεγχο του έργου από το χώρο αποθήκευσης CVS και να το χρησιμοποιήσετε ως αναφορά, ενώ διαβάζετε το παρόν πρόγραμμα εκμάθησης. Αποποίηση ευθύνης: Ο πρωτογενής κώδικας στις πρόσθετες λειτουργίες του παραδείγματος μπορεί να αλλάξει με το χρόνο. Για να λάβετε ένα αντίγραφο για το τι ταιριάζει με όσα χρησιμοποιούνται στο παράδειγμα αυτό, μπορείτε να αναλάβετε τον έλεγχο του έργου χρησιμοποιώντας το προσδιοριστικό εκδοχής 3.2 (πιθανότατα R3_2) ή ένα προσδιοριστικό ημερομηνίας της 28ης Ιουνίου 2006.

Συνεισφορά ενεργειών στην αντιστοίχιση πόρων

Το βασικό ΑΡΙ αντιστοίχισης πόρων

Το API αντιστοίχισης πόρων αποτελείται από τις παρακάτω κλάσεις:

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

Αντιστοιχίσεις πόρων και συνεισφορές αντικειμένων

Οι πρόσθετες λειτουργίες που συνεισφέρουν επεκτάσεις σε προσαρμόσιμα σημεία επέκτασης θα πρέπει να προχωρήσουν σε δυο αλλαγές για να υποστηρίξουν τα νέα ΑΡΙ ResourceMapping:

  1. Να προσαρμόσουν όλα τα objectContributions του σημείου επέκτασης popupMenus στο αρχείο plugin.xml με προορισμό τη ResourceMapping αντί της IResource (για όσους αυτό ενδείκνυται).
  2. Να ενημερώσουν τις ενέργειές τους για να εργάζονται στη 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 παρέχεται για το σκοπό αυτό:

Η initialize(IProgressMonitor) μέθοδος της κλάσης SynchronizationScopeManager χειρίζεται ολόκληρη τη διαδικασία της μετατροπής ενός συνόλου δεδομένων εισόδου αντιστοιχίσεων πόρων σε ένα πλήρες σύνολο αντιστοιχίσεων που χρειάζεται να λειτουργήσουν, καθώς και στο πλήρες σύνολο διασχίσεων που καλύπτουν αυτές τις αντιστοιχίσεις. Ένας παροχέας χώρου αποθήκευσης μπορεί να προσαρμόσει τη διαδικασία μέσω:

  1. Της παροχής μιας κλάσης RemoteResourceMappingContext για χρήση στις περιπτώσεις λήψης διασχίσεων πόρων από αντιστοιχίσεις πόρων.
  2. Της αντικατάστασης της κλάσης SynchronizationScopeManager για να προσαρμόσει τη διαδικασία διαχείρισης εμβέλειας όπως απαιτείται.

Οι δυο επόμενες ενότητες περιγράφουν τα σημεία αυτά με περισσότερες λεπτομέρειες.

Περιβάλλον απομακρυσμένης αντιστοίχισης πόρων

Προκειμένου να εγγυηθεί ότι όλοι οι απαραίτητοι πόροι συμπεριλαμβάνονται στη λειτουργία συνεργασίας, οι παροχείς μοντέλων ίσως χρειαστεί να ρίξουν μια ματιά στην κατάσταση ενός ή περισσότερων πόρων στο χώρο αποθήκευσης. Για ορισμένα μοντέλα, αυτό ίσως να μην είναι απαραίτητο. Για παράδειγμα, ένα πακέτο java είναι μια θέση υποδοχής, στην οποία η μετάβαση υπήρξε βάθους ένα (1) ανεξάρτητα από την απομακρυσμένη κατάσταση του μοντέλου. Δεδομένου του παραπάνω, ένας παροχέας χώρου αποθήκευσης μπορεί εύκολα να καθορίσει ότι οι εξερχόμενες διαγραφές θα πρέπει να συμπεριλαμβάνονται σε περιπτώσεις δέσμευσης ή ότι οι εισερχόμενες προσθήκες θα πρέπει να συμπεριλαμβάνονται σε περιπτώσεις ενημέρωσης. Ωστόσο, οι πόροι που αποτελούν ορισμένα λογικά μοντέλα μπορεί να αλλάζουν με τον καιρό. Για παράδειγμα, οι πόροι που αποτελούν ένα στοιχείο μοντέλου ίσως εξαρτώνται από τα περιεχόμενα ενός αρχείου δήλωσης (ή ενός άλλου παρόμοιου μηχανισμού). Προκειμένου η αντιστοίχιση πόρων να επιστρέψει την ορθή διάσχιση, πρέπει να αποκτήσει πρόσβαση στα απομακρυσμένα περιεχόμενα του αρχείου δήλωσης (εάν αυτά διαφέρουν από τα τοπικά περιεχόμενα) έτσι ώστε να διαπιστώσει εάν υπάρχουν πρόσθετοι πόροι που πρέπει να συμπεριληφθούν. Οι πρόσθετοι αυτοί πόροι ίσως να μην υπάρχουν στο χώρο εργασίας, ο παροχέας χώρου αποθήκευσης όμως γνωρίζει πώς να διαπιστώσει ότι υπήρχαν τη στιγμή εκτέλεσης της επιλεγμένης ενέργειας.

Για την υποστήριξη αυτών των συνθετότερων μοντέλων, μια RemoteResourceMappingContext μπορεί να μεταβιβαστεί στη μέθοδο ResourceMapping#getTraversals. Εάν παρέχεται περιβάλλον, η αντιστοίχιση μπορεί να το χρησιμοποιήσει για να διασφαλίσει ότι όλοι οι απαραίτητοι πόροι περιλαμβάνονται στη διάσχιση. Εάν δεν παρέχεται περιβάλλον, η αντιστοίχιση μπορεί να υποθέσει ότι μόνο η τοπική κατάσταση έχει σημασία.

Το περιβάλλον απομακρυσμένης αντιστοίχισης πόρων παρέχει τρία βασικά ερωτήματα:

Η απάντηση στην πρώτη ερώτηση εξαρτάται από το είδος της λειτουργίας που εκτελείται. Τυπικά, οι ενημερώσεις και οι συγχωνεύσεις είναι τριών εκδοχών, ενώ οι συγκρίσεις και οι λειτουργίες αντικατάστασης (τουλάχιστον για το CVS) είναι δυο εκδοχών.

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

Δημιουργία υποκλάσεων SynchronizationScopeManager

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

  1. Ο παροχέας χώρου αποθήκευσης πρέπει να συμπεριλάβει πρόσθετους πόρους εξαιτίας κάποιας σχέσης επιπέδου χώρου αποθήκευσης (για παράδειγμα, αλλαγή συνόλου). Αυτό μπορεί να επιτευχθεί μέσω της αντικατάστασης της μεθόδου adjustInputTraversals(ResourceTraversal[]).
  2. Ο συγχρονισμός έχει μεγαλύτερο κύκλο ζωής (για παράδειγμα, προβολή "Συγχρονισμός" σε αντιδιαστολή προς πλαίσιο διαλόγου) και χρειάζεται την προοπτική αντίδρασης στις αλλαγές εμβέλειας. Η διεπαφή ISynchronizationScopeParticipant ορίζει το ΑΡΙ που μπορεί να χρησιμοποιηθεί από τους παροχείς μοντέλων για να συμμετάσχουν σε μια διαδικασία διαχείρισης εμβέλειας. Η κλάση SubscriberScopeManager είναι μια υποκλάση της SynchronizationScopeManager, βασισμένη στη Subscriber, και περιλαμβάνει στοιχεία συμμετοχής στη διαδικασία διαχείρισης εμβέλειας. Ένα παράδειγμα που εξηγεί γιατί χρειάζεται αυτό το είδος διαδικασίας είναι τα σύνολα εργασίας. Εάν ένα σύνολο εργασίας αποτελεί μια από τις αντιστοιχίσεις πόρων σε μια εμβέλεια, το σύνολο διασχίσεων που καλύπτεται από την εμβέλεια θα αυξανόταν σε περίπτωση προσθήκης πόρων στο σύνολο εργασίας.

Συγχώνευση βάσει μοντέλων

Το κύριο είδος λειτουργίας του χώρου αποθήκευσης που απαιτεί τη συμμετοχή μοντέλων είναι η συγχώνευση. Σε πολλές περιπτώσεις, η συμμετοχή μοντέλων απαιτείται μόνο σε επίπεδο αρχείου. Για αυτό, εισήχθη το ΑΡΙ IStorageMerger που επιτρέπει στους παροχείς μοντέλων να συνεισφέρουν συγχωνεύσεις, οι οποίες θα πρέπει να χρησιμοποιηθούν για τη συγχώνευση αρχείων συγκεκριμένης επέκτασης ή είδους περιεχομένων. Ωστόσο, σε ορισμένες περιπτώσεις τα μοντέλα ίσως χρειάζονται πρόσθετο περιβάλλον για να συμμετάσχουν κατάλληλα σε μια συγχώνευση. Για το σκοπό αυτό, εισαγάγαμε τα ΑΡΙ IResourceMappingMerger και IMergeContext.

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

Υπάρχουν δυο κύρια μέρη του ΑΡΙ παροχέα χώρου αποθήκευσης που σχετίζονται με την υποστήριξη της συγχώνευσης βάσει μοντέλων.

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

Το API για την περιγραφή της κατάστασης συγχρονισμού

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

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

Το API για τη συγχώνευση μοντέλων

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

Μια αφηρημένη κλάση MergeContext παρέχεται, η οποία περιέχει προεπιλεγμένες υλοποιήσεις για το μεγαλύτερο μέρος της συμπεριφοράς υλοποίησης και συγχρόνως χρησιμοποιεί την IStorageMerger για να εκτελέσει συγχωνεύσεις τριών εκδοχών. Παρέχεται ακόμα μια κλάση SubscriberMergeContext, η οποία χειρίζεται the population και συντήρηση της περιγραφής της κατάστασης συγχρονισμού που σχετίζεται με το περιβάλλον συγχώνευσης.

Παρέχεται η κλάση λειτουργίας ModelMergeOperation η οποία χρησιμοποιεί το ΑΡΙ IResourceMappingMerger για να εκτελέσει μια λειτουργία συγχώνευσης βάσει μοντέλων. Οι υποκλάσεις χρειάζεται να αντικαταστήσουν τη μέθοδο initializeContext(IProgressMonitor) για να επιστρέψουν ένα περιβάλλον συγχώνευσης. Η λειτουργία χρησιμοποιεί το περιβάλλον αυτό για να αποπειραθεί μια συγχώνευση βάσει μοντέλων χωρίς γραφικό περιβάλλον. Εάν υφίστανται διενέξεις, η προεπισκόπηση της συγχώνευσης αφήνεται στην υποκλάση. Όπως θα δούμε στην επόμενη ενότητα, υπάρχει μια κλάση ModelParticipantMergeOperation που παρέχει δυνατότητες προεπισκόπησης μέσω της χρήσης μιας κλάσης ModelSynchronizeParticipant.

Περιεχόμενο μοντέλων σε λειτουργίες προβολής συνεργασίας

Παρέχεται υποστήριξη για την παρουσίαση λογικών μοντέλων σε μια λειτουργία συνεργασίας μέσω της χρήσης του πλαισίου κοινής λειτουργίας πλοήγησης, το οποίο εισάγεται στο Eclipse 3.2. Τα λογικά μοντέλα μπορούν να συσχετίσουν μια επέκταση περιεχομένου με έναν παροχέα μοντέλων χρησιμοποιώντας το σημείο επέκτασης org.eclipse.team.ui.teamContentProvider. Οι παροχείς συνεργασίας έχουν πρόσβαση σε αυτούς τους παροχείς περιεχομένου μέσω της ITeamContentProviderManager.

Υπάρχουν αρκετά μέρη στα οποία ένας παροχέας συνεργασίας μπορεί να επιθυμεί την παρουσίαση λογικών μοντέλων:

Η ModelSynchronizeParticipant παρέχει ενοποίηση στην προβολή "Συγχρονισμός" ή σε κάθε θέση υποδοχής που μπορεί να παρουσιάσει την iSynchronizePages. Το στοιχείο συμμετοχής χρησιμοποιεί τόσο τις δυνατότητες του προϋπάρχοντος στοιχείου συμμετοχής συγχρονισμού όσο και τις δυνατότητες της κοινής λειτουργίας πλοήγησης για να επιτρέψει στους παροχείς συνεργασίας και τα μοντέλα να προσαρμόσουν τη γραμμή εργαλείων, το μενού περιβάλλοντος και άλλες πτυχές της προεπισκόπησης συγχώνευσης. Η ModelSynchronizeParticipant παρέχει τα εξής:

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

Τα ακόλουθα τμήματα κώδικα 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, προστέθηκε και μια προβολή γενικού ιστορικού αρχείου. Αυτό θα επιτρέψει στου παροχείς συνεργασίας να εμφανίσουν το ιστορικό του αρχείου ή του πόρου σε μια κοινόχρηστη προβολή. Επιπλέον, θα επιτρέψει στα μοντέλα να εμφανίσουν το ιστορικό των στοιχείων μοντέλου για τα στοιχεία εκείνα που δεν αντιστοιχίζονται απευθείας σε αρχεία. Η προβολή "Ιστορικό" είναι μια προβολή βασιζόμενη στις σελίδες. Παρακάτω, περιγράφεται ο τρόπος με τον οποίο η προβολή "Ιστορικό" λαμβάνει τις σελίδες για τα επιλεγμένα στοιχεία:

Δυνατότητες συνόλου έργων

Στην κλάση ProjectSetCapability προστέθηκαν μέθοδοι προκειμένου να υποστηριχθεί η μετάφραση μεταξύ μιας σειράς χαρακτήρων παραπομπών (που χρησιμοποιείται για τον προσδιορισμό της αντιστοίχισης ανάμεσα σε ένα έργο και ένα απομακρυσμένο περιεχόμενο) και των URI που προσδιορίζουν ένα σχήμα συστήματος αρχείων, το οποίο έχει καταχωρηθεί με το σημείο επέκτασης org.eclipse.core.filesystem.filesystems. Οι παροχείς συνεργασίας παρέχουν προαιρετικά υποστήριξη για αυτό προκειμένου να επιτραπεί στα λογικά μοντέλα να εκτελέσουν απομακρυσμένη αναζήτηση και φόρτωση έργου.

Προσθήκη διακριτικών στα στοιχεία μοντέλου

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

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