2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.taxeditor
.bulkeditor
.handler
;
11 import org
.eclipse
.core
.commands
.AbstractHandler
;
12 import org
.eclipse
.core
.commands
.ExecutionEvent
;
13 import org
.eclipse
.core
.commands
.ExecutionException
;
14 import org
.eclipse
.jface
.text
.IDocument
;
15 import org
.eclipse
.jface
.text
.TextSelection
;
16 import org
.eclipse
.jface
.text
.source
.Annotation
;
17 import org
.eclipse
.jface
.viewers
.ISelection
;
18 import org
.eclipse
.ui
.IEditorInput
;
19 import org
.eclipse
.ui
.IEditorPart
;
20 import org
.eclipse
.ui
.handlers
.HandlerUtil
;
21 import org
.eclipse
.ui
.texteditor
.IDocumentProvider
;
23 import eu
.etaxonomy
.taxeditor
.annotatedlineeditor
.AnnotatedLineEditor
;
24 import eu
.etaxonomy
.taxeditor
.annotatedlineeditor
.LineAnnotationModel
;
25 import eu
.etaxonomy
.taxeditor
.bulkeditor
.IBulkEditorConstants
;
26 import eu
.etaxonomy
.taxeditor
.bulkeditor
.input
.AbstractBulkEditorInput
;
29 * <p>SetMergeTargetHandler class.</p>
35 public class SetMergeTargetHandler
extends AbstractHandler
{
38 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
41 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
43 IEditorPart editor
= HandlerUtil
.getActiveEditor(event
);
44 IEditorInput input
= editor
.getEditorInput();
46 if (editor
instanceof AnnotatedLineEditor
&& input
instanceof AbstractBulkEditorInput
) {
48 IDocumentProvider provider
= ((AnnotatedLineEditor
) editor
).getDocumentProvider();
49 LineAnnotationModel model
=
50 (LineAnnotationModel
) provider
.getAnnotationModel(input
);
51 IDocument document
= provider
.getDocument(input
);
53 ISelection selection
= HandlerUtil
.getCurrentSelection(event
);
54 if (selection
instanceof TextSelection
) {
55 Annotation annotation
= null;
57 // Get annotation in current line
58 int line
= ((TextSelection
) selection
).getStartLine();
59 annotation
= model
.getAnnotationAtLine(line
, document
);
61 // Remove existing merge target
62 model
.removeTypeFromAllAnnotations(IBulkEditorConstants
.TYPE_MERGE_TARGET
);
64 // Set annotation in current line to merge target
65 if (annotation
!= null) {
66 model
.changeAnnotationType(
67 annotation
, IBulkEditorConstants
.TYPE_MERGE_TARGET
);