/** * This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details. */ package edu.illinois.codingtracker.listeners; import org.eclipse.compare.internal.CompareEditor; import org.eclipse.core.resources.IFile; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import edu.illinois.codingtracker.compare.helpers.EditorHelper; import edu.illinois.codingtracker.helpers.Debugger; import edu.illinois.codingtracker.listeners.document.ConflictEditorDocumentListener; /** * * @author Stas Negara * @author Mohsen Vakilian, nchen - Registered the listener asynchronously. * */ @SuppressWarnings("restriction") public class SelectionListener extends BasicListener implements ISelectionListener { public static void register() { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { boolean isSelectionListenerRegistered= false; while (!isSelectionListenerRegistered) { IWorkbenchWindow activeWorkbenchWindow= BasicListener.getActiveWorkbenchWindow(); if (activeWorkbenchWindow != null) { activeWorkbenchWindow.getSelectionService().addSelectionListener(new SelectionListener()); isSelectionListenerRegistered= true; } } } }); } @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { Debugger.debugWorkbenchPart("Selected part: ", part); if (EditorHelper.isConflictEditor(part)) { CompareEditor compareEditor= (CompareEditor)part; IFile editedFile= EditorHelper.getEditedJavaFile(compareEditor); handleConflictEditorSelection(compareEditor, editedFile, EditorHelper.getEditingSourceViewer(compareEditor)); } } /** * Note that editedFile might be null. * * @param compareEditor * @param editedFile * @param sourceViewer */ private void handleConflictEditorSelection(CompareEditor compareEditor, IFile editedFile, ISourceViewer sourceViewer) { if (!openConflictEditors.contains(compareEditor)) { openConflictEditors.add(compareEditor); IDocument editedDocument= sourceViewer != null ? sourceViewer.getDocument() : null; String initialContent= ""; if (editedFile != null) { initialContent= EditorHelper.getConflictEditorInitialContent(compareEditor); } else if (editedDocument != null) { initialContent= editedDocument.get(); } operationRecorder.recordOpenedConflictEditor(EditorHelper.getConflictEditorID(compareEditor), editedFile, initialContent); if (editedDocument != null) { editedDocument.addDocumentListener(new ConflictEditorDocumentListener(compareEditor)); } } } }