.
authorp.ciardelli <p.ciardelli@localhost>
Thu, 3 Sep 2009 08:59:55 +0000 (08:59 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Thu, 3 Sep 2009 08:59:55 +0000 (08:59 +0000)
15 files changed:
.gitattributes
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineDocumentProvider.java [moved from taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditorDocumentProvider.java with 81% similarity]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditor.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/LineAnnotationModel.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/LineSelectionViewer.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditor.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorDocumentProvider.java [deleted file]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorPersistenceService.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceCreator.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/DeleteObjectHandler.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/MergeGroupHandler.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ToggleMergeCandidateHandler.java [new file with mode: 0644]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsService.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java

index 628be1b73918c8ed0464f1b2e7d8ece2bc80c218..5102d9f38d152bc15488c106144d62c734901746 100644 (file)
@@ -647,8 +647,8 @@ taxeditor-bulkeditor/icons/merge_candidate.gif -text
 taxeditor-bulkeditor/icons/merge_target.gif -text
 taxeditor-bulkeditor/plugin.xml -text
 taxeditor-bulkeditor/pom.xml -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineDocumentProvider.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditor.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditorDocumentProvider.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditorReconcilingStrategy.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditorSourceViewerConfiguration.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/EntityDisplayListener.java -text
@@ -665,7 +665,6 @@ taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/Li
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/LineSelectionSource.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/LineSelectionViewer.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditor.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorDocumentProvider.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorEntityCreatorService.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorPersistenceService.java -text
@@ -687,6 +686,7 @@ taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/New
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/OpenBulkEditorHandler.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/SetMergeTargetHandler.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ShowReferencingObjectsHandler.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ToggleMergeCandidateHandler.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/BulkEditorInput.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameEditorInput.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/ReferenceEditorInput.java -text
@@ -47,10 +47,10 @@ import org.eclipse.ui.texteditor.AbstractDocumentProvider;
  * @created 25.06.2009\r
  * @version 1.0\r
  */\r
-public class AnnotatedLineEditorDocumentProvider extends AbstractDocumentProvider {\r
+public class AnnotatedLineDocumentProvider extends AbstractDocumentProvider {\r
 \r
        private static final Logger logger = Logger\r
-                       .getLogger(AnnotatedLineEditorDocumentProvider.class);\r
+                       .getLogger(AnnotatedLineDocumentProvider.class);\r
        \r
        private Map<IEditorInput, IDocument> documents = \r
                        new HashMap<IEditorInput, IDocument>();\r
@@ -134,12 +134,12 @@ public class AnnotatedLineEditorDocumentProvider extends AbstractDocumentProvide
         * @return \r
         * @throws BadLocationException \r
         */\r
-       protected Annotation createAnnotatedLine(Object element, Object entity) throws BadLocationException {\r
+       protected LineAnnotation createAnnotatedLine(Object element, Object entity) throws BadLocationException {\r
                \r
                Document document = (Document) getDocument(element);\r
                ILineDisplayStrategy lineDisplay = getLineDisplayStrategy(element);\r
                \r
-               Annotation annotation = new LineAnnotation(entity, lineDisplay);\r
+               LineAnnotation annotation = new LineAnnotation(entity, lineDisplay);\r
                                \r
                // Is document zero length, or is last char in document line delimiter?\r
                int docLength = document.getLength();\r
@@ -183,9 +183,7 @@ public class AnnotatedLineEditorDocumentProvider extends AbstractDocumentProvide
                \r
                lineDisplay.addDisplayListener(entity, \r
                                                new DisplayListener((LineAnnotation) annotation, element, lineDisplay));\r
-               \r
-               \r
-               \r
+                               \r
                return annotation;\r
        }\r
 \r
@@ -256,7 +254,7 @@ public class AnnotatedLineEditorDocumentProvider extends AbstractDocumentProvide
                                if (annotation instanceof IEntityContainer<?>) {\r
                                        IEntityContainer<?> container = (IEntityContainer<?>) annotation;\r
                                        if (container.isMarkedAsNew() || container.isDirty()) {\r
-                                               persistenceService.save(container.getEntity(), element);\r
+                                               persistenceService.save(container.getEntity(), element); // save\r
                                                container.setDirty(false);\r
                                                container.markAsNew(false);\r
                                        }\r
@@ -267,9 +265,11 @@ public class AnnotatedLineEditorDocumentProvider extends AbstractDocumentProvide
                                        continue;\r
                                }\r
                                if (annotation.isMarkedAsMerged()) {\r
-                                       persistenceService.merge(annotation.getEntity(), annotation.getMergeTarget(), element);                                 \r
+                                       persistenceService.merge(annotation.getEntity(), annotation.getMergeTarget(), element); //  merge                                       \r
+                               } else {\r
+                                       // TODO clarify w AM whether this needs to be executed on merged objects\r
+                                       persistenceService.delete(annotation.getEntity(), element); // delete\r
                                }\r
-                               persistenceService.delete(annotation.getEntity(), element);\r
                        }\r
                        model.clearDeletedAnnotations();\r
                }\r
@@ -357,4 +357,48 @@ public class AnnotatedLineEditorDocumentProvider extends AbstractDocumentProvide
                }\r
                return null;\r
        }\r
+       \r
+       /**\r
+        * @param editorInput\r
+        * @param lineno\r
+        */\r
+       public void removeAnnotatedLine(Object element, int lineno) {\r
+               Document document = (Document) getDocument(element);\r
+               LineAnnotationModel model = (LineAnnotationModel) getAnnotationModel(element);\r
+               LineAnnotation annotation = (LineAnnotation) model.getAnnotationAtLine(lineno, document);\r
+               removeAnnotatedLine(element, annotation);\r
+       }\r
+       \r
+       public void removeAnnotatedLine(Object element, LineAnnotation annotation) {\r
+               if (annotation != null) {\r
+                       Document document = (Document) getDocument(element);\r
+                       LineAnnotationModel model = (LineAnnotationModel) getAnnotationModel(element);\r
+                       \r
+                       Position position = model.getPosition(annotation);\r
+                       int offset = position.getOffset();\r
+                       int length = position.getLength();\r
+                       \r
+                       Object entity = annotation.getEntity();\r
+                       annotation.markAsDeleted();\r
+                       model.removeAnnotation(annotation);\r
+                       \r
+                       // Immediately followed by a delimiter?\r
+                       int annotationEnd = offset + length;\r
+                       try {\r
+                               if (document.getLength() > annotationEnd + 1 && document.get(annotationEnd, 2).equals(document.getDefaultLineDelimiter())) {\r
+                                       length += 2;\r
+                               }\r
+                       } catch (BadLocationException e1) {\r
+                               // TODO Auto-generated catch block\r
+                               e1.printStackTrace();\r
+                       }\r
+                       \r
+                       try {\r
+                               document.replace(offset, length, "");\r
+                       } catch (BadLocationException e) {\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
+                       }\r
+               }               \r
+       }\r
 }
\ No newline at end of file
index 9f685857f90651e2b552076e80f1c21586b81609..76f757cc07438f947b48fabec0e01c6e580d8698 100644 (file)
@@ -10,9 +10,9 @@
 package eu.etaxonomy.taxeditor.annotatedlineeditor;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.jface.text.BadLocationException;\r
 import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.source.Annotation;\r
 import org.eclipse.jface.text.source.ISourceViewer;\r
 import org.eclipse.jface.text.source.IVerticalRuler;\r
 import org.eclipse.swt.SWT;\r
@@ -22,6 +22,13 @@ import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PartInitException;\r
 import org.eclipse.ui.editors.text.TextEditor;\r
 \r
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
+\r
 /**\r
  * A list-based editor, where each line in the editor's document is associated with a domain object.\r
  * <p>\r
@@ -36,21 +43,30 @@ import org.eclipse.ui.editors.text.TextEditor;
  * @created 25.06.2009\r
  * @version 1.0\r
  */\r
-public class AnnotatedLineEditor extends TextEditor {\r
+public class AnnotatedLineEditor extends TextEditor implements IConversationEnabled, IPostOperationEnabled {\r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger\r
                        .getLogger(AnnotatedLineEditor.class);\r
        \r
+       private ConversationHolder conversation;\r
+       \r
        private IEntityPersistenceService persistenceService;\r
        private ILineDisplayStrategy lineDisplayStrategy;\r
        private IEntityCreatorService entityCreatorService;\r
        private IEntityCreator<?> entityCreator;\r
        \r
+       /**\r
+        * \r
+        */\r
+       public AnnotatedLineEditor() {\r
+               this.conversation = CdmStore.NewTransactionalConversation();\r
+       }\r
+       \r
        @Override\r
        public void init(IEditorSite site, IEditorInput input)\r
                        throws PartInitException {\r
                \r
-               AnnotatedLineEditorDocumentProvider provider = \r
+               AnnotatedLineDocumentProvider provider = \r
                                                        createAnnotatedLineEditorDocumentProvider();\r
                if (entityCreatorService != null) {\r
                        provider.setEntityCreator(entityCreatorService.getEntityCreator(input), input);\r
@@ -67,8 +83,8 @@ public class AnnotatedLineEditor extends TextEditor {
        /**\r
         * @return\r
         */\r
-       protected AnnotatedLineEditorDocumentProvider createAnnotatedLineEditorDocumentProvider() {\r
-               return new AnnotatedLineEditorDocumentProvider();\r
+       protected AnnotatedLineDocumentProvider createAnnotatedLineEditorDocumentProvider() {\r
+               return new AnnotatedLineDocumentProvider();\r
        }\r
 \r
        /**\r
@@ -108,8 +124,9 @@ public class AnnotatedLineEditor extends TextEditor {
                \r
                fAnnotationAccess= getAnnotationAccess();\r
                fOverviewRuler= createOverviewRuler(getSharedColors()); \r
-               LineSelectionViewer viewer = new LineSelectionViewer(parent, ruler, getOverviewRuler(), \r
-                                               isOverviewRulerVisible(), styles | SWT.WRAP);\r
+               LineSelectionViewer viewer = new LineSelectionViewer(parent, ruler, getOverviewRuler(),  \r
+                                               isOverviewRulerVisible(), styles);\r
+//                                             isOverviewRulerVisible(), styles | SWT.WRAP);\r
                getSourceViewerDecorationSupport(viewer);\r
                                \r
                return viewer;\r
@@ -118,21 +135,25 @@ public class AnnotatedLineEditor extends TextEditor {
        /** \r
         * @param newInstance\r
         */\r
-       public void createAnnotatedLineNewObject() {\r
+       public LineAnnotation createAnnotatedLineNewObject() {\r
                \r
                // Create new object\r
-               Object entity = ((AnnotatedLineEditorDocumentProvider) getDocumentProvider()).\r
+               Object entity = ((AnnotatedLineDocumentProvider) getDocumentProvider()).\r
                                                        getEntityCreator(getEditorInput()).createEntity(null);\r
 \r
-               createAnnotatedLine(entity);\r
+               LineAnnotation annotation = createAnnotatedLine(entity);\r
+               if (annotation != null) {\r
+                       annotation.markAsNew(true);\r
+               }\r
+               return annotation;\r
        }\r
        \r
-       public void createAnnotatedLine(Object entity) {\r
+       public LineAnnotation createAnnotatedLine(Object entity) {\r
                \r
                IEditorInput input = getEditorInput();\r
-               AnnotatedLineEditorDocumentProvider provider = (AnnotatedLineEditorDocumentProvider) getDocumentProvider();\r
+               AnnotatedLineDocumentProvider provider = (AnnotatedLineDocumentProvider) getDocumentProvider();\r
                \r
-               Annotation annotation;\r
+               LineAnnotation annotation = null;\r
                try {\r
                        annotation = provider.createAnnotatedLine(input, entity);\r
 \r
@@ -145,5 +166,59 @@ public class AnnotatedLineEditor extends TextEditor {
                        // TODO Auto-generated catch block\r
                        e.printStackTrace();\r
                }               \r
+               return annotation;\r
+       }\r
+       \r
+       /**\r
+        * @param line\r
+        */\r
+       public void removeAnnotatedLine(int lineno) {\r
+               ((AnnotatedLineDocumentProvider) getDocumentProvider()).removeAnnotatedLine(getEditorInput(), lineno);\r
+       }\r
+\r
+       /**\r
+        * @param annotation\r
+        */\r
+       public void removeAnnotatedLine(LineAnnotation annotation) {\r
+               ((AnnotatedLineDocumentProvider) getDocumentProvider()).removeAnnotatedLine(getEditorInput(), annotation);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.texteditor.AbstractTextEditor#doSave(org.eclipse.core.runtime.IProgressMonitor)\r
+        */\r
+       @Override\r
+       public void doSave(IProgressMonitor progressMonitor) {\r
+               super.doSave(progressMonitor);\r
+               getConversationHolder().commit(true);\r
+               firePropertyChange(PROP_DIRTY);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.texteditor.AbstractTextEditor#setFocus()\r
+        */\r
+       @Override\r
+       public void setFocus() {\r
+               super.setFocus();\r
+               getConversationHolder().bind();\r
+               // TODO pass focus to underlying widgets?\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()\r
+        */\r
+       public ConversationHolder getConversationHolder() {\r
+               return conversation;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)\r
+        */\r
+       public void update(CdmDataChangeMap changeEvents) {}\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)\r
+        */\r
+       public boolean postOperation(CdmBase objectAffectedByOperation) {\r
+               return false;\r
        }\r
 }
\ No newline at end of file
index 09393009fbd2d52c0e4aee5a78271cacabcadbd9..56cd487c1e19c95afd411198b462a6ae319503d0 100644 (file)
@@ -94,11 +94,11 @@ public class LineAnnotationModel extends AnnotationModel {
         * @param type\r
         * @return\r
         */\r
-       public Set<Annotation> getAllAnnotationsOfType(String type) {\r
-               Set<Annotation> candidates = new HashSet<Annotation>();\r
+       public Set<LineAnnotation> getAllAnnotationsOfType(String type) {\r
+               Set<LineAnnotation> candidates = new HashSet<LineAnnotation>();\r
                Iterator<?> iterator = getAnnotationIterator();\r
                while (iterator.hasNext()) {\r
-                       Annotation annotation = ((Annotation) iterator.next());\r
+                       LineAnnotation annotation = ((LineAnnotation) iterator.next());\r
                        if (annotation.getType().equals(type)) {\r
                                candidates.add(annotation);\r
                        }\r
index f0cc355eed05364d0f2e1f31200ad79b46049ecb..927edab4b585a0fd67757bdfd894786078281ea4 100644 (file)
@@ -61,7 +61,7 @@ public class LineSelectionViewer extends SourceViewer {
        public ISelection getSelection() {\r
                ISelection selection = super.getSelection();\r
                if (getDocument() != null) {\r
-                       return createLineSelection((TextSelection) selection);\r
+                       selection = createLineSelection((TextSelection) selection);\r
                }\r
                return selection;\r
        }\r
index fdd57e4bb5b4eda6d31bc7d3c8230a126c9c7e30..b81ea2a13e3ce9e3ef03af27e03d9e5ddbbdf7b7 100644 (file)
@@ -14,11 +14,16 @@ import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.CoreException;\r
 import org.eclipse.jface.dialogs.MessageDialog;\r
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;\r
+import org.eclipse.jface.preference.IPreferenceStore;\r
 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.ISourceViewer;\r
 import org.eclipse.jface.text.source.IVerticalRuler;\r
+import org.eclipse.jface.window.Window;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.custom.StyledText;\r
 import org.eclipse.swt.events.MouseAdapter;\r
@@ -31,29 +36,23 @@ import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;\r
 import org.eclipse.ui.PartInitException;\r
 \r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor;\r
-import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditorSourceViewerConfiguration;\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.operations.IPostOperationEnabled;\r
-import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
 \r
 /**\r
  * @author p.ciardelli\r
  * @created 07.07.2009\r
  * @version 1.0\r
  */\r
-public class BulkEditor extends AnnotatedLineEditor implements IConversationEnabled, IPostOperationEnabled, PropertyChangeListener {\r
+public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeListener {\r
        private static final Logger logger = Logger.getLogger(BulkEditor.class);\r
 \r
        public static final String ID = "bulkeditor.editor";\r
-       \r
-       private ConversationHolder conversation;\r
+\r
+       private boolean isInitialFocus = true;\r
        \r
        /**\r
         * \r
@@ -61,8 +60,6 @@ public class BulkEditor extends AnnotatedLineEditor implements IConversationEnab
        public BulkEditor() {\r
                super();\r
                \r
-               this.conversation = CdmStore.NewTransactionalConversation();\r
-               \r
                /**\r
                 * see AbstractTextEditor javadoc for explanation of context menu ids\r
                 */\r
@@ -81,7 +78,6 @@ public class BulkEditor extends AnnotatedLineEditor implements IConversationEnab
        protected ISourceViewer createSourceViewer(Composite parent,\r
                        IVerticalRuler ruler, int styles) {\r
                ISourceViewer viewer = super.createSourceViewer(parent, ruler, styles);\r
-               setSourceViewerConfiguration(new AnnotatedLineEditorSourceViewerConfiguration());\r
                addToggleMergeCandidateListener(ruler.getControl());\r
                return viewer;\r
        }\r
@@ -123,6 +119,15 @@ public class BulkEditor extends AnnotatedLineEditor implements IConversationEnab
                        }\r
                }\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.editors.text.TextEditor#doSetInput(org.eclipse.ui.IEditorInput)\r
+        */\r
+       @Override\r
+       protected void doSetInput(IEditorInput input) throws CoreException {\r
+               // TODO Auto-generated method stub\r
+               super.doSetInput(input);\r
+       }\r
        \r
        /* (non-Javadoc)\r
         * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#isEditable()\r
@@ -132,6 +137,40 @@ public class BulkEditor extends AnnotatedLineEditor implements IConversationEnab
                return false;\r
        }\r
 \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor#setFocus()\r
+        */\r
+       @Override\r
+       public void setFocus() {\r
+               // TODO Auto-generated method stub\r
+               super.setFocus();\r
+\r
+               // TODO find a better place to put this - I wanted to show this dialog after initial contents of \r
+               //      Editor are displayed\r
+               if (isInitialFocus) {\r
+                       displayWarningDialog();\r
+                       isInitialFocus = false;\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       private void displayWarningDialog() {\r
+               IPreferenceStore prefs = PreferencesUtil.getPreferenceStore();\r
+               if (!prefs.getBoolean(PreferencesUtil.HIDE_BULKEDITOR_INFO)) {\r
+                       String msg = "The Bulk Editor allows you to edit objects that are used to reference other objects, such as names, references, and authors.\n\n" +\r
+                                                       "Any changes you make to an object in the Bulk Editor will be displayed wherever the object is used.\n\n" +\r
+                                                       "For instance, a reference may be displayed with both a name and a descriptive element. If the reference name is changed here, the display of both the name and the descriptive element will be affected.";\r
+                       MessageDialogWithToggle dialog = MessageDialogWithToggle.openOkCancelConfirm\r
+                                                                                               (getSite().getShell(), "Bulk Editor", msg, "Do not show this message again", \r
+                                                                                                               false, null, PreferencesUtil.HIDE_BULKEDITOR_INFO);\r
+                       if (dialog.getReturnCode() == Window.OK) { \r
+                               prefs.setValue(PreferencesUtil.HIDE_BULKEDITOR_INFO, dialog.getToggleState());\r
+                       }\r
+               }\r
+       }\r
+       \r
        /**\r
         * @param control\r
         */\r
@@ -149,7 +188,8 @@ public class BulkEditor extends AnnotatedLineEditor implements IConversationEnab
        /**\r
         * @param line\r
         */\r
-       private void toggleMergeCandidateAnnotation(int line) {\r
+       public void toggleMergeCandidateAnnotation(int line) {\r
+               // TODO merge this with duplicate code in SetMergeCandidateHandler\r
                IDocument document = getSourceViewer().getDocument();\r
                LineAnnotationModel model = \r
                                (LineAnnotationModel) getSourceViewer().getAnnotationModel();\r
@@ -183,46 +223,8 @@ public class BulkEditor extends AnnotatedLineEditor implements IConversationEnab
                                        return;\r
                                }\r
                        }\r
+                       ((AnnotationModel) getDocumentProvider().getAnnotationModel(getEditorInput())).removeAllAnnotations();\r
                        setInput(getEditorInput());\r
                }\r
        }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.texteditor.AbstractTextEditor#setFocus()\r
-        */\r
-       @Override\r
-       public void setFocus() {\r
-               super.setFocus();\r
-               getConversationHolder().bind();\r
-               // TODO pass focus to underlying widgets?\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()\r
-        */\r
-       public ConversationHolder getConversationHolder() {\r
-               return conversation;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)\r
-        */\r
-       public void update(CdmDataChangeMap changeEvents) {\r
-               // pass\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)\r
-        */\r
-       public boolean postOperation(CdmBase objectAffectedByOperation) {\r
-               // TODO Auto-generated method stub\r
-               return false;\r
-       }\r
-       \r
-       /**\r
-        * @param line\r
-        */\r
-       public void removeAnnotatedLine(int lineno) {\r
-               ((BulkEditorDocumentProvider) getDocumentProvider()).removeAnnotatedLine(getEditorInput(), lineno);\r
-       }\r
 }\r
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorDocumentProvider.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorDocumentProvider.java
deleted file mode 100644 (file)
index c8db07a..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-// $Id$\r
-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-\r
-package eu.etaxonomy.taxeditor.bulkeditor;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jface.text.BadLocationException;\r
-import org.eclipse.jface.text.Document;\r
-import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.Position;\r
-import org.eclipse.jface.text.source.Annotation;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.custom.StyleRange;\r
-import org.eclipse.ui.IEditorInput;\r
-\r
-import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditorDocumentProvider;\r
-import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation;\r
-import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotationModel;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 25.08.2009\r
- * @version 1.0\r
- */\r
-public class BulkEditorDocumentProvider extends\r
-               AnnotatedLineEditorDocumentProvider {\r
-       private static final Logger logger = Logger\r
-                       .getLogger(BulkEditorDocumentProvider.class);\r
-       \r
-       /**\r
-        * @param newInstance\r
-        * @return \r
-        */\r
-       public StyleRange createAnnotatedLine(Object element) {\r
-               // TODO square with reconciler, move to AnnotatedLineEditorDocumentProvider\r
-               Document document = (Document) getDocument(element);\r
-               try {\r
-                       \r
-                       // Create new empty object\r
-                       Annotation annotation = ((LineAnnotationModel) getAnnotationModel(element)).createAnnotation("");\r
-                       Object entity = ((LineAnnotation) annotation).getEntity();\r
-                       \r
-                       // Get text for object w no cache\r
-                       String text = getLineDisplayStrategy(element).getEmptyCacheMessage(entity);\r
-                       \r
-                       int styleLength = text.length();\r
-                       int offset = document.getLength();\r
-                       \r
-                       // Check whether last character is line delimiter\r
-                       String lastChar = null;\r
-                       if (offset > 1) {       \r
-                               lastChar = document.get(offset - 2, 2);\r
-                       }\r
-                       String delimiter = document.getDefaultLineDelimiter();\r
-                       if (delimiter.equals(lastChar) || offset == 0) {\r
-                               // do nothing\r
-                       } else {\r
-                               text = document.getDefaultLineDelimiter() + text; \r
-                       }\r
-                       document.replace(offset, 0, text);\r
-                       \r
-                       StyleRange styleRange = new StyleRange();\r
-                       styleRange.start = offset;\r
-                       styleRange.length = styleLength;\r
-                       styleRange.fontStyle = SWT.ITALIC;\r
-                       \r
-                       // Add annotation to model\r
-                       getAnnotationModel(element).addAnnotation(annotation, new Position(offset, styleLength));\r
-                       \r
-                       return styleRange;\r
-               } catch (BadLocationException e) {\r
-                       // TODO Auto-generated catch block\r
-                       e.printStackTrace();\r
-               }\r
-               return null;\r
-       }\r
-\r
-       /**\r
-        * @param editorInput\r
-        * @param lineno\r
-        */\r
-       public void removeAnnotatedLine(Object element, int lineno) {\r
-               Document document = (Document) getDocument(element);\r
-               LineAnnotationModel model = (LineAnnotationModel) getAnnotationModel(element);\r
-               LineAnnotation annotation = (LineAnnotation) model.getAnnotationAtLine(lineno, document);\r
-               if (annotation != null) {\r
-                       \r
-                       Position position = model.getPosition(annotation);\r
-                       int offset = position.getOffset();\r
-                       int length = position.getLength();\r
-                       \r
-                       Object entity = annotation.getEntity();\r
-                       getPersistenceService(element).delete(entity, element);\r
-                       annotation.markAsDeleted();\r
-                       model.removeAnnotation(annotation);\r
-                       \r
-                       // Immediately followed by a delimiter?\r
-                       int annotationEnd = offset + length;\r
-                       try {\r
-                               if (document.getLength() > annotationEnd + 1 && document.get(annotationEnd, 2).equals(document.getDefaultLineDelimiter())) {\r
-                                       length += 2;\r
-                               }\r
-                       } catch (BadLocationException e1) {\r
-                               // TODO Auto-generated catch block\r
-                               e1.printStackTrace();\r
-                       }\r
-                       \r
-                       try {\r
-                               document.replace(offset, length, "");\r
-                       } catch (BadLocationException e) {\r
-                               // TODO Auto-generated catch block\r
-                               e.printStackTrace();\r
-                       }\r
-               }\r
-       }\r
-}\r
index 8ccdfbb0f4d8f5cd7c716d34586ea3d338949109..2f7015bf76792d74d9273b8bee45af31027bbd8d 100644 (file)
@@ -10,9 +10,6 @@
 \r
 package eu.etaxonomy.taxeditor.bulkeditor;\r
 \r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-\r
 import org.apache.log4j.Logger;\r
 import org.eclipse.jface.action.IStatusLineManager;\r
 import org.eclipse.swt.graphics.Image;\r
index 49b7479e1b2b167f2929ac3c71c626cd45330998..5ecde0756207aae43d639703f4a491eb38dc2c50 100644 (file)
@@ -18,8 +18,10 @@ import java.util.List;
 import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.model.common.TimePeriod;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;\r
+import eu.etaxonomy.cdm.strategy.merge.MergeException;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IdentifiableEntityComparator;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput;\r
@@ -86,7 +88,7 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
         */\r
        public boolean create(Object entity, Object element) {\r
                logger.info("Create "  + entity);\r
-               return true;\r
+               return save(entity, element);\r
        }\r
 \r
        /* (non-Javadoc)\r
@@ -94,6 +96,12 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
         */\r
        public boolean delete(Object entity, Object element) {\r
                logger.info("Delete "  + entity);\r
+               if (entity instanceof ReferenceBase) {\r
+                       CdmStore.getReferenceService().delete((ReferenceBase) entity);\r
+               }\r
+               if (entity instanceof TaxonNameBase) {\r
+                       CdmStore.getNameService().delete((TaxonNameBase) entity);                       \r
+               }\r
                return true;\r
        }\r
        \r
@@ -102,6 +110,17 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
         */\r
        public boolean merge(Object entity, Object mergeTarget, Object element) {\r
                logger.info("Merge "  + entity + " into " + mergeTarget);\r
+               if (entity instanceof ReferenceBase) {\r
+                       try {\r
+                               CdmStore.getCommonService().merge((ReferenceBase) mergeTarget, (ReferenceBase) entity, null);\r
+                       } catch (MergeException e) {\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
+                       }\r
+               }\r
+               if (entity instanceof TaxonNameBase) {\r
+                       logger.warn("Merging not yet implemented for taxon name base");                 \r
+               }\r
                return true;\r
        }\r
 \r
@@ -110,6 +129,12 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
         */\r
        public boolean save(Object entity, Object element) {\r
                logger.info("Save "  + entity);\r
+               if (entity instanceof ReferenceBase) {\r
+                       CdmStore.getReferenceService().saveOrUpdate((ReferenceBase) entity);                    \r
+               }\r
+               if (entity instanceof TaxonNameBase) {\r
+                       CdmStore.getNameService().saveOrUpdate((TaxonNameBase) entity);                         \r
+               }\r
                return true;\r
        }\r
 }\r
index 5fdeac1f2bc52b9f6512d66c294cc121c22cea86..b8e1b18e6763e16731604b5014c99c9658675e4e 100644 (file)
@@ -12,7 +12,7 @@ package eu.etaxonomy.taxeditor.bulkeditor;
 \r
 import org.apache.log4j.Logger;\r
 \r
-import eu.etaxonomy.cdm.model.reference.Journal;\r
+import eu.etaxonomy.cdm.model.reference.Book;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;\r
 \r
@@ -30,7 +30,7 @@ public class ReferenceCreator implements IEntityCreator<ReferenceBase> {
         */\r
        public ReferenceBase createEntity(String text) {\r
                // TODO configure default reference type\r
-               Journal reference = Journal.NewInstance();\r
+               Book reference = Book.NewInstance();\r
                reference.setTitleCache(text);\r
                return reference;\r
        }\r
index 2c68eed961234458ff2d5f2163dd877043a84e40..fd14da26b5a62a5ae8fa0e576e684e21b2843e4f 100644 (file)
@@ -14,7 +14,6 @@ import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;\r
 import org.eclipse.jface.text.IDocument;\r
 import org.eclipse.jface.text.TextSelection;\r
-import org.eclipse.jface.text.source.Annotation;\r
 import org.eclipse.jface.viewers.ISelection;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorPart;\r
@@ -50,9 +49,8 @@ public class DeleteObjectHandler extends AbstractHandler {
                        \r
                        ISelection selection = HandlerUtil.getActiveMenuSelection(event);\r
                        if (selection instanceof TextSelection) {\r
-                               Annotation annotation = null;\r
                                \r
-                               // Get annotation in current line\r
+                               // Get current line\r
                                int line = ((TextSelection) selection).getStartLine();\r
                                \r
                                if (editor instanceof BulkEditor) {\r
index ef76e07283bf9026df9b0723b3cfd78ec683f31b..d3891bec42ae13e69b477d596ac224ac1d3ce736 100644 (file)
@@ -16,19 +16,17 @@ import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;\r
 import org.eclipse.core.commands.ExecutionException;\r
 import org.eclipse.jface.dialogs.MessageDialog;\r
-import org.eclipse.jface.text.BadLocationException;\r
-import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.Position;\r
 import org.eclipse.jface.text.source.Annotation;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorPart;\r
 import org.eclipse.ui.handlers.HandlerUtil;\r
 import org.eclipse.ui.texteditor.IDocumentProvider;\r
 \r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityContainer;\r
+import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotationModel;\r
+import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;\r
 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorConstants;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput;\r
 \r
@@ -48,15 +46,14 @@ public class MergeGroupHandler extends AbstractHandler {
                                \r
                IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
                IEditorInput input = editor.getEditorInput();\r
-               if (editor instanceof AnnotatedLineEditor && input instanceof BulkEditorInput) {\r
+               if (editor instanceof BulkEditor && input instanceof BulkEditorInput) {\r
 \r
-                       IDocumentProvider provider = ((AnnotatedLineEditor) editor).getDocumentProvider();\r
+                       IDocumentProvider provider = ((BulkEditor) editor).getDocumentProvider();\r
                        LineAnnotationModel model = \r
                                        (LineAnnotationModel) provider.getAnnotationModel(input);\r
-                       IDocument document = provider.getDocument(input);\r
                        \r
                        // Check whether there are any group annotations\r
-                       Set<Annotation> candidateAnnotations = model.getAllAnnotationsOfType(IBulkEditorConstants.TYPE_MERGE_CANDIDATE);\r
+                       Set<LineAnnotation> candidateAnnotations = model.getAllAnnotationsOfType(IBulkEditorConstants.TYPE_MERGE_CANDIDATE);\r
                        if (candidateAnnotations.size() == 0) {\r
                                MessageDialog.openWarning(HandlerUtil.getActiveShell(event), \r
                                                "No merge candidates", "No objects have been chosen for merging.");\r
@@ -73,24 +70,19 @@ public class MergeGroupHandler extends AbstractHandler {
                        Object targetEntity = ((IEntityContainer<?>) targetAnnotation).getEntity();\r
                        \r
                        logger.info("Merging group");\r
-                       model.printAnnotations();\r
-                       for (Annotation annotation : candidateAnnotations) {\r
-                               try {\r
-                                       // Remove text from document\r
-                                       Position position = model.getPosition(annotation);\r
-                                       document.replace(position.getOffset(), position.getLength(), "");\r
-                                       \r
-                                       // Mark entity container for merging with target entity\r
-                                       ((IEntityContainer) annotation).markAsMerged(targetEntity);\r
-                                       logger.info("Merging " + annotation + " with " + targetAnnotation);\r
-                                       \r
-                                       // Remove annotation from model\r
-                                       model.removeAnnotation(annotation);\r
-                               } catch (BadLocationException e) {\r
-                                       // Do nothing\r
-                               }\r
+//                     model.printAnnotations();\r
+                       for (LineAnnotation annotation : candidateAnnotations) {\r
+                               \r
+                               ((BulkEditor) editor).removeAnnotatedLine(annotation);\r
+                               \r
+                               // Mark entity container for merging with target entity\r
+                               ((IEntityContainer) annotation).markAsMerged(targetEntity);\r
+                               logger.info("Merging " + annotation + " with " + targetAnnotation);\r
+                               \r
+                               // Remove annotation from model\r
+                               model.removeAnnotation(annotation);\r
                        }\r
-                       model.printAnnotations();       \r
+//                     model.printAnnotations();       \r
                        \r
                        model.removeTypeFromAllAnnotations(IBulkEditorConstants.TYPE_MERGE_CANDIDATE);\r
                        model.removeTypeFromAllAnnotations(IBulkEditorConstants.TYPE_MERGE_TARGET);\r
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ToggleMergeCandidateHandler.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ToggleMergeCandidateHandler.java
new file mode 100644 (file)
index 0000000..bc2b132
--- /dev/null
@@ -0,0 +1,74 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.taxeditor.bulkeditor.handler;\r
+\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.TextSelection;\r
+import org.eclipse.jface.text.source.Annotation;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+import org.eclipse.ui.texteditor.IDocumentProvider;\r
+\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.BulkEditor;\r
+import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorConstants;\r
+import eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 25.06.2009\r
+ * @version 1.0\r
+ */\r
+public class ToggleMergeCandidateHandler extends AbstractHandler {\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+        */\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+                               \r
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+               IEditorInput input = editor.getEditorInput();\r
+               \r
+               if (editor instanceof BulkEditor && input instanceof BulkEditorInput) {\r
+                       \r
+                       IDocumentProvider provider = ((AnnotatedLineEditor) editor).getDocumentProvider();\r
+                       LineAnnotationModel model = \r
+                                       (LineAnnotationModel) provider.getAnnotationModel(input);\r
+                       IDocument document = provider.getDocument(input);\r
+                       \r
+                       ISelection selection = HandlerUtil.getActiveMenuSelection(event);\r
+                       if (selection instanceof TextSelection) {\r
+                               Annotation annotation = null;\r
+                               \r
+                               // Get annotation in current line\r
+                               int line = ((TextSelection) selection).getStartLine();\r
+                               annotation = model.getAnnotationAtLine(line, document);\r
+                               \r
+                               if (annotation != null) {\r
+                                       if (annotation.getType().equals(IBulkEditorConstants.TYPE_MERGE_CANDIDATE)) {\r
+                                               model.changeAnnotationType(\r
+                                                               annotation, LineAnnotation.TYPE_GENERIC);\r
+                                       } else {\r
+                                               model.changeAnnotationType(\r
+                                                               annotation, IBulkEditorConstants.TYPE_MERGE_CANDIDATE);\r
+                                       }\r
+                               }\r
+                       }\r
+               }               \r
+               return null;\r
+       }\r
+}
\ No newline at end of file
index 9574ea913ea40fe10e75e3d5e3af281779e469ef..ba31a83869846215cdc0ecb667e8988526dd271b 100644 (file)
@@ -22,12 +22,19 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.progress.IProgressService;\r
 \r
 import eu.etaxonomy.cdm.api.service.ICommonService;\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
+import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.LanguageStringBase;\r
 import eu.etaxonomy.cdm.model.common.OriginalSource;\r
-import eu.etaxonomy.cdm.model.common.ReferencedEntityBase;\r
+import eu.etaxonomy.cdm.model.description.CommonTaxonName;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Distribution;\r
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
+import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.NonViralNamePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
@@ -120,13 +127,59 @@ public class ReferencingObjectsService implements
                if (element instanceof IdentifiableEntity) {\r
                        return ((IdentifiableEntity) element).getTitleCache();\r
                }\r
-               if (element instanceof ReferencedEntityBase) {\r
-                       return ((ReferencedEntityBase) element).getOriginalNameString();\r
+               if (element instanceof OriginalSource) {\r
+                       OriginalSource originalSource = (OriginalSource) element;\r
+//                     ReferenceBase citation = HibernateProxyHelper.deproxy(originalSource.getCitation(), ReferenceBase.class);\r
+                       return CdmUtils.concat(";", new String[]{originalSource.getIdNamespace(), originalSource.getIdInSource()});\r
                }\r
                if (element instanceof LanguageStringBase) {\r
                        return ((LanguageStringBase) element).getText();\r
                }\r
+               if (element instanceof DescriptionElementBase) {\r
+                       return getCache((DescriptionElementBase) element);              \r
+               }\r
                // TODO write return texts for NameRelationship, HomotypicalGroup, SpecimenTypeDesignation, etc.\r
-               return null;\r
+               return element.toString();\r
+       }\r
+       \r
+       /**\r
+        * Returns whatever the element's title cache equivalent is,\r
+        * depending on its class.\r
+        * \r
+        * @param element\r
+        * @param language\r
+        * @return \r
+        */\r
+       public String getCache(DescriptionElementBase element, \r
+                       Language language) {\r
+               String cache = null;\r
+               if (element instanceof TextData) {\r
+                       cache = ((TextData) element).getText(language);\r
+               }\r
+               if (element instanceof CommonTaxonName) {\r
+                       cache = ((CommonTaxonName) element).getName();\r
+               }\r
+               if (element instanceof Distribution) {\r
+                       Distribution distribution = (Distribution) element;\r
+                       \r
+                       NamedArea area = distribution.getArea();\r
+                       PresenceAbsenceTermBase<?> status = distribution.getStatus();\r
+                       \r
+                       if (status != null) {\r
+                               cache =  area.getLabel() + ", " + status.getLabel();\r
+                       }\r
+               }\r
+               return cache == null ? "" : cache;\r
+       }\r
+\r
+       /**\r
+        * Returns whatever the element's title cache equivalent is,\r
+        * depending on its class, using the default language.\r
+        * \r
+        * @param element\r
+        * @return \r
+        */\r
+       public String getCache(DescriptionElementBase element) {\r
+               return getCache(element, Language.DEFAULT());\r
        }\r
 }\r
index eaf20a152c66e958f87f85fa312c5ffc8b435004..e04ec6890fb86facf54ed993e745f46b6705e485 100644 (file)
 package eu.etaxonomy.taxeditor.bulkeditor.referencingobjects;\r
 \r
 import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
+import java.util.HashSet;\r
+import java.util.List;\r
 import java.util.Set;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.jface.viewers.ISelection;\r
 import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.jface.viewers.ListViewer;\r
 import org.eclipse.jface.viewers.TableViewer;\r
 import org.eclipse.jface.viewers.TableViewerColumn;\r
 import org.eclipse.swt.SWT;\r
@@ -25,25 +28,36 @@ import org.eclipse.swt.widgets.Table;
 import org.eclipse.ui.IEditorPart;\r
 import org.eclipse.ui.part.ViewPart;\r
 \r
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.LineSelection;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
 \r
 /**\r
  * @author p.ciardelli\r
  * @created 08.07.2009\r
  * @version 1.0\r
  */\r
-public class ReferencingObjectsView extends ViewPart {\r
+public class ReferencingObjectsView extends ViewPart implements IConversationEnabled {\r
        private static final Logger logger = Logger\r
                        .getLogger(ReferencingObjectsView.class);\r
 \r
        public static final String ID = "taxeditor-bulkeditor.referencingobjectsview";\r
 \r
        private IReferencingObjectsService referencingObjectsService;\r
-       private Set<CdmBase> referencingObjects;\r
+       private List<CdmBase> referencingObjects;\r
        private CdmBase referencedObject;\r
        \r
        private TableViewer referencingObjectsViewer;\r
+\r
+       private ConversationHolder conversation;\r
+       \r
+       public ReferencingObjectsView() {\r
+               this.conversation = CdmStore.NewTransactionalConversation();\r
+       }\r
        \r
        /* (non-Javadoc)\r
         * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)\r
@@ -88,6 +102,7 @@ public class ReferencingObjectsView extends ViewPart {
         */\r
        @Override\r
        public void setFocus() {\r
+               logger.warn("set focus");\r
                referencingObjectsViewer.getControl().setFocus();\r
        }\r
 \r
@@ -95,6 +110,7 @@ public class ReferencingObjectsView extends ViewPart {
         * \r
         */\r
        public void updateReferencingObjects() {\r
+               getConversationHolder().bind();\r
         try {\r
             IEditorPart editor = getSite().getPage().getActiveEditor();\r
             ISelection selection = editor.getEditorSite().getSelectionProvider()\r
@@ -105,7 +121,12 @@ public class ReferencingObjectsView extends ViewPart {
                CdmBase referencedObject = referencingObjectsService.getReferencedObject(entity);\r
                if (referencedObject != null) {\r
                        this.referencedObject = referencedObject;\r
-                       this.referencingObjects = referencingObjectsService.getReferencingObjects(entity);\r
+                       Set<CdmBase> referencingObjectsTemp = referencingObjectsService.getReferencingObjects(entity);\r
+                       this.referencingObjects = new ArrayList<CdmBase>();\r
+                       for (Object object : referencingObjectsTemp) {\r
+                               this.referencingObjects.add((CdmBase) HibernateProxyHelper.deproxy(object));\r
+                       }\r
+//                     Collections.sort(this.referencingObjects, new ReferencingClassComparator());\r
                        updateView();\r
                }       \r
             }\r
@@ -114,11 +135,47 @@ public class ReferencingObjectsView extends ViewPart {
         }\r
        }\r
 \r
+       class ReferencingClassComparator implements Comparator<CdmBase> {\r
+\r
+               /* (non-Javadoc)\r
+                * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)\r
+                */\r
+               public int compare(CdmBase o1, CdmBase o2) {\r
+                       String string1 = referencingObjectsService.getObjectClass(o1);\r
+                       String string2 = referencingObjectsService.getObjectClass(o2);\r
+                       int classCompare = string1.compareToIgnoreCase(string2);\r
+                       if (classCompare == 0) {\r
+                               string1 = referencingObjectsService.getObjectDescription(o1);\r
+                               string2 = referencingObjectsService.getObjectDescription(o2);\r
+                               return string1.compareToIgnoreCase(string2);\r
+                       } else {\r
+                               return classCompare;\r
+                       }\r
+               }\r
+               \r
+       }\r
+       \r
        /**\r
         * \r
         */\r
        private void updateView() {\r
+               \r
                referencingObjectsViewer.setInput(referencingObjects);\r
                setContentDescription("'" + referencedObject + "' is referenced by:");\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()\r
+        */\r
+       public ConversationHolder getConversationHolder() {\r
+               return conversation;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)\r
+        */\r
+       public void update(CdmDataChangeMap changeEvents) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
 }\r