.
[taxeditor.git] / taxeditor-bulkeditor / src / main / java / eu / etaxonomy / taxeditor / bulkeditor / BulkEditor.java
index 973ab0982d87982b1b6119262ab0ef47f5436121..88851325fe9e15468f321da8652263bc6e82ef56 100644 (file)
@@ -12,6 +12,7 @@ package eu.etaxonomy.taxeditor.bulkeditor;
 \r
 import java.beans.PropertyChangeEvent;\r
 import java.beans.PropertyChangeListener;\r
+import java.util.Iterator;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.jface.action.IMenuManager;\r
@@ -23,8 +24,10 @@ import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.IDocument;\r
 import org.eclipse.jface.text.source.Annotation;\r
 import org.eclipse.jface.text.source.AnnotationModel;\r
+import org.eclipse.jface.text.source.IAnnotationModel;\r
 import org.eclipse.jface.text.source.ISourceViewer;\r
 import org.eclipse.jface.text.source.IVerticalRuler;\r
+import org.eclipse.jface.util.IPropertyChangeListener;\r
 import org.eclipse.jface.window.Window;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.custom.StyledText;\r
@@ -37,17 +40,21 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorSite;\r
 import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.texteditor.IDocumentProvider;\r
 import org.eclipse.ui.views.properties.IPropertySheetEntry;\r
 import org.eclipse.ui.views.properties.IPropertySheetPage;\r
 import org.eclipse.ui.views.properties.PropertySheetPage;\r
 import org.eclipse.ui.views.properties.PropertySheetSorter;\r
 \r
+import eu.etaxonomy.cdm.model.common.MarkerType;\r
+import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineDocumentProvider;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotationModel;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput;\r
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -66,7 +73,15 @@ public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeLis
         */\r
        public BulkEditor() {\r
                super(CdmStore.NewTransactionalConversation());\r
-               \r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.editors.text.TextEditor#initializeEditor()\r
+        */\r
+       @Override\r
+       protected void initializeEditor() {\r
+               super.initializeEditor();\r
+                               \r
                /**\r
                 * see AbstractTextEditor javadoc for explanation of context menu ids\r
                 */\r
@@ -77,8 +92,10 @@ public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeLis
                setPersistenceService(new BulkEditorPersistenceService());\r
                \r
                setLineDisplayStrategy(new BulkEditorLineDisplay(this));\r
+               \r
+               setSourceViewerConfiguration(new BulkEditorViewerConfiguration(lineDisplayStrategy));\r
        }\r
-\r
+       \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.taxeditor.bulkeditor.ListEditor#createSourceViewer(org.eclipse.swt.widgets.Composite, org.eclipse.jface.text.source.IVerticalRuler, int)\r
         */\r
@@ -118,17 +135,71 @@ public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeLis
                \r
                BulkEditorSearchComposite searchBar = new BulkEditorSearchComposite(this, parent, SWT.NONE);\r
                searchBar.getParent().setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));\r
+\r
+               if (isEditableMarkerTypes()) {\r
+                       createMarkerEditing(parent);\r
+               }\r
                \r
                super.createPartControl(parent);\r
                \r
                // Set viewer composite to fill grid\r
                for (Control control : parent.getChildren()) {\r
-                       if (control instanceof Composite && !(control instanceof BulkEditorSearchComposite)) {\r
+                       if (control instanceof Composite && \r
+                                               !(control instanceof BulkEditorSearchComposite || control instanceof BulkEditorMarkerPreferenceComposite)) {\r
                                control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
                        }\r
                }\r
        }\r
        \r
+       /**\r
+        * @param parent \r
+        * \r
+        */\r
+       private void createMarkerEditing(Composite parent) {\r
+               final BulkEditorMarkerPreferenceComposite markerPreferenceBar = \r
+                               new BulkEditorMarkerPreferenceComposite((BulkEditorInput) getEditorInput(), parent, SWT.NONE);\r
+               PreferencesUtil.getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() {\r
+                       public void propertyChange(\r
+                                       org.eclipse.jface.util.PropertyChangeEvent event) {\r
+                               if (event.getProperty().contains(PreferencesUtil.EDIT_MARKER_TYPE_PREFIX)) {\r
+                                       refreshLineDisplay();\r
+                               }\r
+                       }\r
+               });\r
+       }\r
+       \r
+       /**\r
+        * Can this input type edit any markers?\r
+        * \r
+        * @return\r
+        */\r
+       private boolean isEditableMarkerTypes() { \r
+               for (MarkerType markerType : VocabularyStore.getNonTechnicalMarkerTypes()) {\r
+                       if (((BulkEditorInput) getEditorInput()).isMarkerTypeEditingEnabled(markerType)) {\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;\r
+       }\r
+\r
+       /**\r
+        * Refreshes text in all lines.\r
+        */\r
+       protected void refreshLineDisplay() {\r
+               IDocumentProvider provider = getDocumentProvider();\r
+               IEditorInput input = getEditorInput();\r
+               IAnnotationModel model = provider.getAnnotationModel(input);\r
+               Iterator iter = getDocumentProvider().getAnnotationModel(getEditorInput()).getAnnotationIterator();\r
+               while (iter.hasNext()) {\r
+                       Object next = iter.next();\r
+                       if (next instanceof LineAnnotation) {\r
+                               LineAnnotation annotation = (LineAnnotation) next;\r
+                               ((AnnotatedLineDocumentProvider) getDocumentProvider()).\r
+                                               updateLineFromAnnotation(getEditorInput(), annotation, lineDisplayStrategy.getText(annotation.getEntity()));\r
+                       }\r
+               }\r
+       }\r
+\r
        /* (non-Javadoc)\r
         * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#isEditable()\r
         */\r
@@ -188,11 +259,6 @@ public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeLis
         * @param line\r
         */\r
        public void toggleMergeCandidateAnnotation(int line) {\r
-               // TODO merge this with duplicate code in SetMergeCandidateHandler\r
-               \r
-               // Set line as selection\r
-               \r
-               // call handler w handler service\r
                \r
                IDocument document = getSourceViewer().getDocument();\r
                LineAnnotationModel model = \r