Υλοποίηση μιας λειτουργίας προβολής περιεχομένου

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

Απλές λειτουργίες προβολής περιεχομένου

Μια λειτουργία προβολής περιεχομένου χρησιμοποιείται σε θέσεις όπου μόνο μια μοναδική είσοδος είναι διαθέσιμη και συνεπώς δεν χρειάζεται σύγκριση.  Ένα συνηθισμένο παράδειγμα αυτού αποτελεί η λειτουργία "Επαναφορά από τοπικό ιστορικό".  Το σημείο επέκτασης org.eclipse.compare.contentViewers σας επιτρέπει να ορίσετε μια εξειδικευμένη λειτουργία προβολής περιεχομένου η οποία να μην συγκρίνει τα δεδομένα εισόδου της.

<extension
	point="org.eclipse.compare.contentViewers">
	<viewer
		extensions="java,java2"
		class="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator"
		id="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator">
	</viewer>
	<contentTypeBinding
		contentTypeId="org.eclipse.jdt.core.javaSource"
		contentViewerId="org.eclipse.jdt.internal.ui.compare.JavaTextViewerCreator">
	</contentTypeBinding>
</extension>   

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

Μπορείτε επίσης να χρησιμοποιήσετε το στοιχείο contentTypeBinding για να συσχετίσετε ένα είδος περιεχομένου με μια λειτουργία προβολής περιεχομένου.

Λειτουργίες προβολής συγχώνευσης περιεχομένου

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

Εάν οι συνηθισμένες λειτουργίες προβολής δεν είναι κατάλληλες για τη λειτουργία της πρόσθετης λειτουργίας σας, μπορείτε να επιλέξετε να υλοποιήσετε τη δικιά σας λειτουργία προβολής συγχώνευσης περιεχομένου.  Η λειτουργία προβολής συγχώνευσης περιεχομένου σας θα πρέπει να καταχωρηθεί με την πλατφόρμα χρησιμοποιώντας το σημείο επέκτασης org.eclipse.compare.contentMergeViewers.  Ο κώδικας που ακολουθεί δείχνει τον ορισμό των εξειδικευμένων λειτουργιών προβολής συγχώνευσης περιεχομένου για την προβολή των αρχείων Java και των αρχείων ιδιοτήτων στο Java IDE:

<extension
	point="org.eclipse.compare.contentMergeViewers">
	<viewer
		extensions="java,java2"
		class="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator"
		id="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator">
	</viewer>
	<contentTypeBinding
		contentTypeId="org.eclipse.jdt.core.javaProperties"
		contentMergeViewerId="org.eclipse.compare.TextMergeViewerCreator">
	</contentTypeBinding>
	<contentTypeBinding
		contentTypeId="org.eclipse.jdt.core.javaSource"
		contentMergeViewerId="org.eclipse.jdt.internal.ui.compare.JavaContentViewerCreator">
	</contentTypeBinding>
</extension>   

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

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

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

Το ImageMergeViewer στο org.eclipse.compare.internal δείχνει τον τρόπο υλοποίησης μιας απλής λειτουργίας προβολής συγχώνευσης για εικόνες χρησιμοποιώντας το ContentMergeViewer.  Το ContentMergeViewer έχει πρόσβαση στο μοντέλο του μέσω ενός παροχέα περιεχομένου ο οποίος πρέπει να υλοποιεί τη διεπαφή IMergeViewerContentProvider.

Συγχώνευση κειμένου

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

Το TextMergeViewer αποτελεί την κανονική υποκλάση του ContentMergeViewer που χρησιμοποιείται για τη σύγκριση και συγχώνευση περιεχομένου κειμένου.  Μια λειτουργία προβολής συγχώνευσης κειμένου χρησιμοποιεί το RangeDifferencer για την εκτέλεση μιας σύγκρισης κειμένου γραμμή προς γραμμή δυο (ή τριών) εγγράφων εισόδου.

Για γραμμές κειμένου που διαφέρουν, το TextMergeViewer χρησιμοποιεί ένα ITokenComparator για την εύρεση των μακρύτερων ακολουθιών στοιχείων που αντιστοιχούνται ή δεν αντιστοιχούνται. Η προεπιλεγμένη σύγκριση στοιχείου του TextMergeViewer λειτουργεί σε χαρακτήρες που χωρίζονται από κενά διαστήματα. Εάν απαιτείται διαφορετική στρατηγική (για παράδειγμα, στοιχεία Java σε μια λειτουργία προβολής συγχώνευσης με Java), οι πελάτες μπορούν να δημιουργήσουν τις δικές τους ρουτίνες σύγκρισης στοιχείων υλοποιώντας τη διεπαφή ITokenComparator.

Το TextMergeViewer λειτουργεί σε ολόκληρα έγγραφα και στις υποπεριοχές εγγράφων. Για τμηματικά έγγραφα, τα δεδομένα εισόδου της λειτουργίας προβολής πρέπει να αποτελούν μια IDocumentRange αντί μιας IDocument.

Διαφοροποίηση περιοχών

Το RangeDifferencer εντοπίζει τις μακρύτερες ακολουθίεςσυγκρίσιμων οντοτήτων που αντιστοιχούνται ή δεν αντιστοιχούνται σε περιεχόμενο κειμένου. Η υλοποίησή του βασίζεται σε μια αντικειμενοποιημένη εκδοχή του αλγορίθμου που περιγράφεται στο: A File Comparison Program, των Webb Miller και Eugene W. Myers, Software Practice and Experience, Vol. 15, Νοε. 1985.  Οι πελάτες πρέπει να παρέχουν δεδομένα εισόδου στο μηχανισμό εντοπισμού διαφορών που υλοποιεί τη διεπαφή IRangeComparator. Η IRangeComparator χωρίζει τα δεδομένα εισόδου σε μια ακολουθία οντοτήτων και παρέχει μια μέθοδο σύγκρισης μιας οντότητας την οντότητα σε μια άλλη IRangeComparator.

Για παράδειγμα, για τη σύγκριση δυο εγγράφων κειμένου και την εύρεση της μεγαλύτερης κοινής ακολουθίας γραμμών που αντιστοιχούνται ή δεν αντιστοιχούνται, η υλοποίηση της IRangeComparator πρέπει να χωρίσει το έγγραφο σε γραμμές και να παράσχει μια μέθοδο για τη δοκιμή εάν δυο γραμμές θα θεωρούνται ίσες. Δείτε το org.eclipse.compare.internal.DocLineComparator για ένα παράδειγμα του τρόπου εκτέλεσης αυτού.

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