Μια λειτουργία προβολής συγχώνευσης δομών εκτελεί σύγκριση δύο ή τριών εκδοχών των δεδομένων εισόδου της, παρουσιάζει το αποτέλεσμα σε μια ιεραρχική προβολή και επιτρέπει στο χρήστη τη συγχώνευση μεταξύ δεδομένων εισόδου. Οι λειτουργίες προβολής συγχώνευσης δομών είναι κοινές για πόρους του χώρου εργασίας ή για τα μέλη ενός αρχείου αποθήκευσης.
Επειδή η υλοποίηση πολλών λειτουργιών προβολής σύγκρισης δομών βασίζεται σε μια διακλάδωση, η πρόσθετη λειτουργία σύγκρισης παρέχει μια γενική διακλάδωση που βασίζεται στο StructureDiffViewer. Η πρόσθετη λειτουργία σας είναι υπεύθυνη για τη παροχή μιας λειτουργίας δημιουργίας δομής που χωρίζει ένα μοναδικό αντικείμενο εισόδου σε μια ιεραρχική δομή. Το StructureDiffViewer εκτελεί τη σύγκριση στη δομή που προκύπτει και εμφανίζει το αποτέλεσμα ως μια διακλάδωση.
Καθορίζετε μια λειτουργία δημιουργίας δομής για την πρόσθετη λειτουργία σας χρησιμοποιώντας την επέκταση org.eclipse.compare.structureCreators. Σχεδόν όπως συμβαίνει και με τις λειτουργίες προβολής περιεχομένου, μια λειτουργία δημιουργίας δομής μπορεί να οριστεί για ένα σύνολο επεκτάσεων αρχείου, ή μπορεί να χρησιμοποιηθεί μια contentTypeBinding για το συσχετισμό ενός είδους περιεχομένου με μια συγκεκριμένη λειτουργία δημιουργίας δομής. Δεν θα εξετάσουμε εδώ τον κώδικα αφού είναι παρόμοιος με αυτόν των λειτουργιών προβολής περιεχομένου. Η πρόσθετη λειτουργία JDT ορίζει διάφορες συνεισφορές για το org.eclipse.compare.structureCreators.
Σε μερικές περιπτώσεις, το StructureDiffViewer που βασίζεται σε διακλάδωση μπορεί να μην είναι κατάλληλο για την πρόσθετη λειτουργία σας. Το σημείο επέκτασης org.eclipse.compare.structureMergeViewers σας επιτρέπει να ορίσετε τη δική σας υλοποίηση για μια λειτουργία προβολής συγχώνευσης δομών. Μια λειτουργία προβολής συγχώνευσης δομών μπορεί να καθοριστεί για επεκτάσεις αρχείων ή μπορεί να χρησιμοποιηθεί ένα contentTypeBinding για το συσχετισμό ενός είδους περιεχομένου με μια συγκεκριμένη λειτουργία προβολής συγχώνευσης δομών. Δείτε την πρόσθετη λειτουργία JDT για παραδείγματα των συνεισφορών org.eclipse.compare.structureMergeViewers.
Η πρόσθετη λειτουργία αναζήτησης παρέχει αρκετές κλάσεις βοηθήματος για να σας βοηθήσει να υλοποιήσετε μια λειτουργία προβολής αναζήτησης.
Η Differencer αποτελεί ένα μηχανισμό εντοπισμού διαφορών για ιεραρχικά δομημένα δεδομένα. Δέχεται δύο ή τρεις εισόδους και εκτελεί σύγκριση δύο ή τριών εκδοχών σε αυτές.
Εάν τα στοιχεία εισόδου στο μηχανισμό εντοπισμού διαφορών υλοποιούν τη διεπαφή IStructureComparator, ο μηχανισμός εφαρμόζεται αναδρομικά στα θυγατρικά του στοιχείου εισόδου. Τα τελικά στοιχεία πρέπει να υλοποιούν τη διεπαφή IStreamContentAccessor ούτως ώστε ο μηχανισμός εντοπισμού διαφορών να μπορεί να εκτελέσει μια σύγκριση σχετική με τα byte στα περιεχόμενά τους.
Υπάρχουν αρκετά καλά παραδείγματα μηχανισμών εντοπισμού διαφορών που περιλαμβάνονται στην υλοποίηση της πλατφόρμας:
Ως προεπιλογή, ο μηχανισμός εντοπισμού διαφορών επιστρέφει το αποτέλεσμα της λειτουργίας σύγκρισης ως μια διακλάδωση των αντικειμένων DiffNode. Ένα DiffNode περιγράφει τις αλλαγές ανάμεσα σε δύο ή τρεις εισόδους. Το είδος των κόμβων αποτελέσματος μπορεί να αλλάξει αντικαθιστώντας μια μοναδική μέθοδο του μηχανισμού.
Μια διακλάδωση των DiffNode μπορεί να εμφανιστεί σε μια DiffTreeViewer. Η DiffTreeViewer απαιτεί οι εσωτερικοί κόμβοι της διακλάδωσης να υλοποιούν τη διεπαφή IDiffContainer και τα τελικά στοιχεία να υλοποιούν τη διεπαφή IDiffElement.
Τα συνηθισμένα βήματα για τη σύγκριση ιεραρχικά δομημένων δεδομένων και την εμφάνιση των διαφορών είναι τα ακόλουθα:
Η StructureDiffViewer αποτελεί μια εξειδικευμένη DiffTreeViewer η οποία αυτοματοποιεί τα τρία παραπάνω βήματα. Απαιτεί ένα μοναδικό αντικείμενο εισόδου του είδους ICompareInput από το οποίο να ανακτά τα δύο ή τρία στοιχεία εισόδου προς σύγκριση. Χρησιμοποιεί μια IStructureCreator για την εξαγωγή μιας διακλάδωσης που να περιέχει τα αντικείμενα IStructureComparator και IStreamContentAccessor από αυτά. Αυτές οι διακλαδώσεις συγκρίνονται με το μηχανισμό εντοπισμού διαφορών και το αποτέλεσμα εμφανίζεται στη λειτουργία προβολής της διακλάδωσης.
Η ZipFileStructureCreator αποτελεί μια υλοποίηση της διεπαφής IStructureCreator και καθιστά τα περιεχόμενα ενός αρχείου αποθήκευσης zip διαθέσιμα ως μια ιεραρχική δομή των IStructureComparator που μπορούν εύκολα να συγκριθούν από το μηχανισμό εντοπισμού διαφορών (Differencer). Αποτελεί ένα καλό παράδειγμα του τρόπου με τον οποίο τα δομημένα αρχεία μπορούν να διατεθούν στη λειτουργία ιεραρχικής σύγκρισης της πρόσθετης λειτουργίας σύγκρισης.