Check in before further refactoring.
authorp.ciardelli <p.ciardelli@localhost>
Tue, 7 Jul 2009 08:25:12 +0000 (08:25 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Tue, 7 Jul 2009 08:25:12 +0000 (08:25 +0000)
15 files changed:
.gitattributes
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/BulkEditorInput.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorReconcilingStrategy.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainer.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainerCreator.java [deleted file]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityCreator.java [new file with mode: 0644]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineAnnotation.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineAnnotationModel.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineEditorDocumentProvider.java [new file with mode: 0644]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelectionSource.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceContainer.java [deleted file]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceCreator.java [new file with mode: 0644]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/MergeGroupHandler.java

index 31946a3183682649fed7ae4a869386a4e45d04fc..88760cf6ad171928a640404e806a233ef2a75435 100644 (file)
@@ -648,21 +648,21 @@ 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/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/BulkEditorInput.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorInputFactory.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorReconcilingStrategy.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorSourceViewerConfiguration.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IBulkEditorConstants.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainer.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainerCreator.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityCreator.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ILineSelectionSource.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineAnnotation.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineAnnotationModel.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineEditorDocumentProvider.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelection.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelectionSource.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineSelectionViewer.java -text
-taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceContainer.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceCreator.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceEditorInput.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/MergeGroupHandler.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/OpenBulkEditorHandler.java -text
index 7e5f89ef7540854f4ac3b936205b899f458b999b..1510077da26af0bef340b4c4f5faddd99e7f3ba8 100644 (file)
@@ -56,7 +56,9 @@ public class BulkEditor extends TextEditor {
        @Override\r
        public void init(IEditorSite site, IEditorInput input)\r
                        throws PartInitException {\r
-               setDocumentProvider(new BulkEditorDocumentProvider());\r
+               LineEditorDocumentProvider provider = new LineEditorDocumentProvider();\r
+               provider.setEntityCreator(new ReferenceCreator());\r
+               setDocumentProvider(provider);\r
                super.init(site, input);\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 2887c93..0000000
+++ /dev/null
@@ -1,202 +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
-package eu.etaxonomy.taxeditor.bulkeditor;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.operation.IRunnableContext;\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.jface.text.source.IAnnotationModel;\r
-import org.eclipse.ui.texteditor.AbstractDocumentProvider;\r
-\r
-import eu.etaxonomy.cdm.model.reference.Journal;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 25.06.2009\r
- * @version 1.0\r
- */\r
-public class BulkEditorDocumentProvider extends AbstractDocumentProvider implements IEntityContainerCreator {\r
-       private static final Logger logger = Logger\r
-                       .getLogger(BulkEditorDocumentProvider.class);\r
-       \r
-       private Map<BulkEditorInput, IDocument> documents = \r
-                       new HashMap<BulkEditorInput, IDocument>();\r
-\r
-       private Map<BulkEditorInput, IAnnotationModel> models = \r
-               new HashMap<BulkEditorInput, IAnnotationModel>();\r
-\r
-       private ArrayList<IEntityContainer<?>> list;\r
-       \r
-       @Override\r
-       public IAnnotationModel getAnnotationModel(Object element) {\r
-               if (element instanceof BulkEditorInput) {\r
-                       \r
-                       BulkEditorInput input = (BulkEditorInput) element;\r
-                       IAnnotationModel model = models.get((BulkEditorInput) element);\r
-                       \r
-                       // Create model as necessary\r
-                       if (model == null) {\r
-                               model = new LineAnnotationModel();\r
-                               ((LineAnnotationModel) model).setEntityContainerCreator(this);\r
-                               models.put(input, model);\r
-                       }       \r
-                       return model;\r
-               }\r
-               \r
-               return null;\r
-       }\r
-       \r
-       @Override\r
-       protected IAnnotationModel createAnnotationModel(Object element)\r
-                       throws CoreException {\r
-               return getAnnotationModel(element);\r
-       }\r
-\r
-       @Override\r
-       public IDocument getDocument(Object element) {\r
-               if (element instanceof BulkEditorInput) {\r
-                       return documents.get((BulkEditorInput) element);\r
-               }\r
-               return null;\r
-       }\r
-       \r
-       @Override\r
-       protected IDocument createDocument(Object element) throws CoreException {\r
-               \r
-               if (element instanceof BulkEditorInput) {\r
-                       BulkEditorInput input = (BulkEditorInput) element;\r
-                       Document document = new Document("");\r
-                       IAnnotationModel model = getAnnotationModel(element);\r
-                                       \r
-                       String text = "";\r
-                       String line;\r
-                       for (IEntityContainer<?> container : getLineContainers(element)) {\r
-                               if (!container.isMarkedAsDeleted() && !container.isMarkedAsMerged()) {\r
-                                       line = container.getEditableText() \r
-                                                       + document.getDefaultLineDelimiter();\r
-                                       \r
-                                       Position position = new Position(text.length(), line.length());\r
-                                       Annotation annotation = new LineAnnotation(container);\r
-                                       model.addAnnotation(annotation, position);\r
-                                       document.set(document.get() + line);\r
-                                       \r
-                                       text += line;\r
-                               }\r
-                       }\r
-                       documents.put(input, document);\r
-                       if (model instanceof LineAnnotationModel) {\r
-                               ((LineAnnotationModel) model).printAnnotations();\r
-                       }\r
-                       return document;\r
-               }\r
-               return null;\r
-       }\r
-\r
-       /**\r
-        * @param element \r
-        * @return\r
-        */\r
-       private ArrayList<IEntityContainer<?>> getLineContainers(Object element) {\r
-               if (list == null) {\r
-                       list = new ArrayList<IEntityContainer<?>>();\r
-                       list.add(createContainer(createReference("Acta universitatis carolinae. Biologica Prague")));\r
-                       list.add(createContainer(createReference("Acta universitatis asiae mediae. Botanica")));\r
-                       list.add(createContainer(createReference("Acta phytogeographica suecica Uppsala")));\r
-                       list.add(createContainer(createReference("Acta botanica neerlandica Amsterdam")));\r
-                       list.add(createContainer(createReference("Acta geobotanica hungarica Debrecen, Hungary")));\r
-               }\r
-               return list;\r
-       }\r
-\r
-       @Override\r
-       protected void doSaveDocument(IProgressMonitor monitor, Object element,\r
-                       IDocument document, boolean overwrite) throws CoreException {\r
-               if (element instanceof BulkEditorInput) {\r
-                       \r
-                       // Get new containers from annotation model\r
-                       IAnnotationModel model = getAnnotationModel(element);\r
-                       Iterator iterator = model.getAnnotationIterator();\r
-                       while (iterator.hasNext()) {\r
-                               Object object = (Annotation) iterator.next();\r
-                               if (object instanceof LineAnnotation) {\r
-                                       IEntityContainer<?> container = ((LineAnnotation) object).getEntityContainer();\r
-                                       if (container.isMarkedAsNew() && !container.isMarkedAsDeleted()) {\r
-                                               getLineContainers(element).add(container); // prob. not necessary\r
-                                               logger.info("Adding " + container.getEditableText() + " to input");\r
-                                       }\r
-                               }\r
-                       }\r
-                       \r
-                       // Iterate through input's list, deleting or merging as necessary\r
-                       for (IEntityContainer<?> container : getLineContainers(element)) {\r
-                               if (container.isMarkedAsMerged()) {\r
-                                       logger.info("Merge " + container.getEditableText() + " into " + container.getMergeTarget());\r
-                                       // TODO remove from list and from annotation model\r
-                               } else if (container.isMarkedAsDeleted()) {\r
-                                       logger.info("Delete "  + container.getEditableText());\r
-                                       // TODO remove from list and from annotation model\r
-                               } else if (container.isMarkedAsNew() || container.isDirty()) {\r
-                                       logger.info("Save "  + container.getEditableText());\r
-                                       container.setDirty(false);\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       @Override\r
-       protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
-       }\r
-       \r
-       @Override\r
-       public boolean isModifiable(Object element) {\r
-               return true;\r
-       }\r
-       \r
-       @Override\r
-       public boolean isReadOnly(Object element) {\r
-               // enables copy & paste\r
-               return false;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainerCreator#create(java.lang.String)\r
-        */\r
-       public IEntityContainer<?> createContainer(String titleCache) {\r
-               IEntityContainer<?> container = createContainer(createReference(titleCache));\r
-               container.markAsNew();\r
-               return container;\r
-       }\r
-       \r
-       private ReferenceBase createReference(String titleCache) {\r
-               Journal journal = Journal.NewInstance();\r
-               journal.setTitleCache(titleCache);\r
-               return journal;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainerCreator#createContainer(java.lang.Object)\r
-        */\r
-       public IEntityContainer<?> createContainer(Object entity) {\r
-               return new ReferenceContainer((ReferenceBase<?>) entity);\r
-       }\r
-}
\ No newline at end of file
index 9db722f68b2aefdc82fe54ac1faa12a4353f5b72..7c31750341263b94755437144f6dbc62eb7ab651 100644 (file)
@@ -9,8 +9,6 @@
 */\r
 package eu.etaxonomy.taxeditor.bulkeditor;\r
 \r
-import java.util.List;\r
-\r
 import org.apache.log4j.Logger;\r
 import org.eclipse.jface.resource.ImageDescriptor;\r
 import org.eclipse.ui.IEditorInput;\r
index c453802faa781269ba29fb414d740b47369815bf..22b9b78e85f19694925dc70277bc4f6737bce04c 100644 (file)
@@ -76,25 +76,21 @@ public class BulkEditorReconcilingStrategy implements IReconcilingStrategy {
                        IRegion lineRegion = document.getLineInformation(i);\r
                        String lineText = document.get(lineRegion.getOffset(), lineRegion.getLength());\r
                        \r
-                       List<LineAnnotation> annotationsCurrentLine = ((LineAnnotationModel) getAnnotationModel()).\r
-                                                                                               getUndeletedAnnotations(lineOffset, lineLength);\r
+                       List<LineAnnotation> annotationsCurrentLine = \r
+                                       ((LineAnnotationModel) getAnnotationModel()).getUndeletedAnnotations(lineOffset, lineLength);\r
                        \r
                        if (annotationsCurrentLine.size() == 0) {\r
                                logger.debug("Adding new annotation " + lineText);\r
                                addAnnotation(lineText, lineRegion);\r
                        } else {\r
                                LineAnnotation currentAnnotation = annotationsCurrentLine.get(0);\r
-//                             int length = lineLength + document.getLineDelimiter(i).length();\r
                                int length = lineLength;\r
-                               logger.debug("Position before: " + getAnnotationModel().getPosition(currentAnnotation));\r
                                getAnnotationModel().getPosition(currentAnnotation).setLength(length);\r
-                               logger.debug("Position after: " + getAnnotationModel().getPosition(currentAnnotation));\r
                                currentAnnotation.setText(lineText);\r
                                \r
                                for (int j = 1; j < annotationsCurrentLine.size(); j++) {\r
-                                       annotationsCurrentLine.get(j).markDeleted(true);\r
-                                       \r
-//                                     getAnnotationModel().removeAnnotation(annotationsCurrentLine.get(j));\r
+                                       annotationsCurrentLine.get(j).markAsMerged(currentAnnotation.getCdmEntity());\r
+                                       getAnnotationModel().removeAnnotation(annotationsCurrentLine.get(j));\r
                                }\r
                        }\r
                }\r
@@ -103,60 +99,7 @@ public class BulkEditorReconcilingStrategy implements IReconcilingStrategy {
                \r
                ((LineAnnotationModel) getAnnotationModel()).printAnnotations();\r
        }\r
-       \r
-//     @SuppressWarnings("unused")\r
-//     synchronized private void doReconcile_(DirtyRegion dirtyRegion) throws BadLocationException {\r
-//             \r
-//             int dirtyOffset = dirtyRegion.getOffset();\r
-//             int dirtyLength = dirtyRegion.getLength();\r
-//             IRegion firstLineRegion = document.getLineInformationOfOffset(dirtyOffset);\r
-//             String firstLineText = document.get(firstLineRegion.getOffset(), firstLineRegion.getLength());\r
-//             \r
-//             Annotation currentAnnotation = null;\r
-//             Position currentPosition = null;\r
-//             int currentLength = 0; \r
-//             // Get all annotations on current line\r
-//             for (Annotation annotation : \r
-//                             ((CdmEntityAnnotationModel) getAnnotationModel()).getAnnotations(firstLineRegion.getOffset(), firstLineRegion.getLength())) {\r
-//                     if (currentAnnotation == null) {\r
-//                             // First annotation updated w text of entire line\r
-//                             currentAnnotation = annotation;\r
-//                             currentAnnotation.setText(firstLineText);\r
-//                             currentPosition = getAnnotationModel().getPosition(annotation);\r
-//                             currentLength = currentPosition.getLength();\r
-//                     } else {\r
-//                             if (DirtyRegion.REMOVE.equals(dirtyRegion.getType())) {\r
-//                                     // Remove annotations that squirted on to the same line\r
-//                                     currentLength += \r
-//                                                     getAnnotationModel().getPosition(annotation).getLength();\r
-//                                     getAnnotationModel().removeAnnotation(annotation);\r
-//                             }\r
-//                     }\r
-//             }\r
-//             currentPosition.setLength(currentLength);\r
-//             \r
-//             // PROBLEM: 0-length annotations, i.e. <CR>\r
-//             \r
-//             if (DirtyRegion.INSERT.equals(dirtyRegion.getType())) {\r
-//                     int remainingLines = document.getNumberOfLines(dirtyOffset, dirtyLength) - 1;\r
-//                     if (remainingLines > 0) {\r
-//                             // Make annotations out of any new lines\r
-//                             int firstLine = document.getLineOfOffset(dirtyOffset);\r
-//                             for (int i = firstLine + 1; i <= firstLine + remainingLines; i++) {\r
-//                                     IRegion lineRegion = document.getLineInformation(i);\r
-//                                     String lineText = document.get(lineRegion.getOffset(), lineRegion.getLength());\r
-//                                     \r
-//                                     addAnnotation(lineText, lineRegion);\r
-//                             }\r
-//                     }                                               \r
-//             }\r
-//             \r
-//             logger.debug(dirtyRegion.getType());\r
-//             if (getAnnotationModel() instanceof CdmEntityAnnotationModel) {\r
-//                     ((CdmEntityAnnotationModel) getAnnotationModel()).printAnnotations();\r
-//             }\r
-//     }\r
-       \r
+               \r
        private void addAnnotation(String text, IRegion region) {\r
                Position position = new Position(region.getOffset(), region.getLength());\r
                Annotation annotation = ((LineAnnotationModel) getAnnotationModel()).createAnnotation(text);\r
index c0b8499506b48540896acd851bb446e14cf7f980..e580bfabb1094a65b60b2dc792cdc809904cd94a 100644 (file)
@@ -31,7 +31,7 @@ public interface IEntityContainer<T extends CdmBase> {
        \r
        void markAsDeleted();\r
        \r
-       void markAsNew();\r
+       void markAsNew(boolean isNew);\r
        \r
        boolean isMarkedAsMerged();\r
        \r
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainerCreator.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityContainerCreator.java
deleted file mode 100644 (file)
index 557ca46..0000000
+++ /dev/null
@@ -1,37 +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
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 03.07.2009\r
- * @version 1.0\r
- */\r
-public interface IEntityContainerCreator {\r
-\r
-       /**\r
-        * Creates both a new container and a new domain object, using\r
-        * titleCache.\r
-        * \r
-        * @param titleCache\r
-        * @return\r
-        */\r
-       IEntityContainer<?> createContainer(String titleCache);\r
-       \r
-       /**\r
-        * Creates a new container using an existing domain object.\r
-        * \r
-        * @param cdmEntity\r
-        * @return\r
-        */\r
-       IEntityContainer<?> createContainer(Object entity);\r
-}\r
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityCreator.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IEntityCreator.java
new file mode 100644 (file)
index 0000000..6baf11b
--- /dev/null
@@ -0,0 +1,24 @@
+// $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 eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 03.07.2009\r
+ * @version 1.0\r
+ */\r
+public interface IEntityCreator<T extends CdmBase> {\r
+       \r
+       T createEntity(String text);\r
+}\r
index 9131a02950bd78290f13f417198fb9549c1b6f03..8a71ad8a734d066a9b46baac2c1a4bd6df11faa9 100644 (file)
@@ -9,9 +9,15 @@
 */\r
 package eu.etaxonomy.taxeditor.bulkeditor;\r
 \r
-import org.eclipse.core.runtime.Assert;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
 import org.eclipse.jface.text.source.Annotation;\r
 \r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
+\r
 /**\r
  * An <code>Annotation</code> which spans an entire line and holds an object associated\r
  * with the line in an <code>IEntityContainer</code>. \r
@@ -20,37 +26,43 @@ import org.eclipse.jface.text.source.Annotation;
  * @created 25.06.2009\r
  * @version 1.0\r
  */\r
-public class LineAnnotation extends Annotation {\r
+public class LineAnnotation extends Annotation implements IEntityContainer {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger\r
+                       .getLogger(LineAnnotationModel.class);\r
 \r
        public static final String TYPE_GENERIC = Annotation.TYPE_UNKNOWN;\r
        \r
-       private IEntityContainer<?> container;\r
+       private Object entity;\r
 \r
-       public LineAnnotation(IEntityContainer<?> container) {\r
-               Assert.isNotNull(container);\r
-               this.container = container;\r
+       private boolean dirty = false;\r
+       private boolean markedAsMerged;\r
+       private boolean markedAsNew;\r
+       private CdmBase mergeTarget;\r
+       \r
+       public LineAnnotation(Object entity) {\r
+               this.entity = entity;\r
                setType(TYPE_GENERIC);\r
        }\r
-\r
-       public IEntityContainer<?> getEntityContainer() {\r
-               return container;\r
-       }\r
        \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.source.Annotation#getText()\r
+        */\r
        @Override\r
        public String getText() {\r
-               return container.getEditableText();\r
-       }\r
-       \r
-       @Override\r
-       public void markDeleted(boolean deleted) {\r
-               super.markDeleted(deleted);\r
-               container.markAsDeleted();\r
+               return getEditableText();\r
        }\r
        \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.source.Annotation#setText(java.lang.String)\r
+        */\r
        @Override\r
        public void setText(String text) {\r
+               if (entity instanceof ReferenceBase) {\r
+                       ((ReferenceBase) entity).setTitleCache(text);\r
+               }       \r
+               dirty  = true;          \r
                super.setText(text);\r
-               container.setText(text);\r
        }\r
        \r
        @Override\r
@@ -58,4 +70,106 @@ public class LineAnnotation extends Annotation {
                // For debugging\r
                return getText();\r
        }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getAttachedEntities()\r
+        */\r
+       public Set getAttachedEntities() {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getCdmEntity()\r
+        */\r
+       public CdmBase getCdmEntity() {\r
+               if (entity instanceof CdmBase) {\r
+                       return (CdmBase) entity;\r
+               }\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getEditableText()\r
+        */\r
+       public String getEditableText() {\r
+               if (entity instanceof ReferenceBase) {\r
+                       return ((ReferenceBase) entity).getTitleCache();\r
+               }\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getMergeTarget()\r
+        */\r
+       public CdmBase getMergeTarget() {\r
+               return mergeTarget;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getPropertySource()\r
+        */\r
+       public Object getPropertySource() {\r
+               if (entity instanceof ReferenceBase) {\r
+                       return new ReferencePropertySource((ReferenceBase) entity);                     \r
+               }\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isMarkedAsDeleted()\r
+        */\r
+       public boolean isMarkedAsDeleted() {\r
+               return super.isMarkedDeleted();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isMarkedAsMerged()\r
+        */\r
+       public boolean isMarkedAsMerged() {\r
+               return markedAsMerged;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isMarkedAsNew()\r
+        */\r
+       public boolean isMarkedAsNew() {\r
+               return markedAsNew;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#markAsDeleted()\r
+        */\r
+       public void markAsDeleted() {\r
+               super.markDeleted(true);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#markAsMerged(eu.etaxonomy.cdm.model.common.CdmBase)\r
+        */\r
+       public void markAsMerged(CdmBase mergeTarget) {\r
+               this.mergeTarget = mergeTarget;\r
+               markedAsMerged = true;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#markAsNew()\r
+        */\r
+       public void markAsNew(boolean isNew) {\r
+               markedAsNew = isNew;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#setDirty(boolean)\r
+        */\r
+       public void setDirty(boolean dirty) {\r
+               this.dirty = dirty;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isDirty()\r
+        */\r
+       public boolean isDirty() {\r
+               return dirty;\r
+       }\r
 }
\ No newline at end of file
index 54550a359c8578b86cf956a0c9a6e828a8251c72..1052e63df895188c3d0b2c36676b87298028a8cc 100644 (file)
@@ -29,8 +29,10 @@ import org.eclipse.jface.text.source.AnnotationModelEvent;
  * An <code>AnnotationModel</code> which holds <code>LineAnnotation</code>'s.\r
  * <p>\r
  * Major difference with <code>AnnotationModel</code> is that <code>removeAnnotation(Annotation annotation,\r
- * boolean fireModelChanged)</code> does not remove the annotation from the model, but marks it for \r
- * deletion in the persistence layer when the document is saved. \r
+ * boolean fireModelChanged)</code> adds annotations marked for removal to a collection for further\r
+ * processing, i.e. when the document is saved. This collection is accessed via <code>getDeletedAnnotations()</code>\r
+ * and <code>clearDeletedAnnotations()</code>.\r
+ * . \r
  * \r
  * @author p.ciardelli\r
  * @created 25.06.2009\r
@@ -41,8 +43,8 @@ public class LineAnnotationModel extends AnnotationModel {
                        .getLogger(LineAnnotationModel.class);\r
        \r
        private Comparator<Annotation> comparator;\r
-\r
-       private IEntityContainerCreator entityCreator;\r
+       private IEntityCreator entityCreator;\r
+       private Set<LineAnnotation> deletedAnnotations = new HashSet<LineAnnotation>();\r
        \r
        /**\r
         * Changes the annotation's type and fires model changed \r
@@ -64,7 +66,8 @@ public class LineAnnotationModel extends AnnotationModel {
                        boolean fireModelChanged) {\r
                // Set data model element for deletion\r
                annotation.markDeleted(true);\r
-//             super.removeAnnotation(annotation, fireModelChanged);\r
+               deletedAnnotations.add((LineAnnotation) annotation);\r
+               super.removeAnnotation(annotation, fireModelChanged);\r
        }\r
                \r
        /**\r
@@ -144,22 +147,34 @@ public class LineAnnotationModel extends AnnotationModel {
                Collections.sort(list, getAnnotationComparator());\r
                return list;\r
        }\r
-       \r
+               \r
        public void printAnnotations() {\r
-               logger.debug("--------");\r
+               logger.debug("------------------------");\r
+               logger.debug("Active annotations");\r
+               logger.debug("------------------------");\r
                List<Annotation> list = getOrderedAnnotations();\r
                \r
                for (Annotation annotation : list) {\r
                        logger.debug(\r
                                        (annotation.isMarkedDeleted() ?  "DELETED " : "") +\r
-                                       (annotation.getType().equals(IBulkEditorConstants.TYPE_MERGE_CANDIDATE)  ?  "MERGE " : "") +\r
-                                       (annotation.getType().equals(IBulkEditorConstants.TYPE_MERGE_TARGET)  ?  "TARGET " : "") +\r
-                                       (((LineAnnotation) annotation).getEntityContainer().isDirty() ?  "DIRTY " : "") +\r
+                                       (((LineAnnotation) annotation).isMarkedAsMerged() ?  "MERGED " : "") +\r
+                                       (((LineAnnotation) annotation).isDirty() ?  "DIRTY " : "") +\r
+                                       (((LineAnnotation) annotation).isMarkedAsNew() ?  "NEW " : "") +\r
                                        annotation.getText() + ": o " +\r
                                        getPosition(annotation).getOffset() + ", l " + \r
                                        getPosition(annotation).getLength());\r
                }\r
-               logger.debug("--------");\r
+               logger.debug("------------------------");\r
+               logger.debug("Deleted annotations");\r
+               logger.debug("------------------------");\r
+               for (LineAnnotation annotation : deletedAnnotations) {\r
+                       logger.debug(\r
+                                       (annotation.isMarkedDeleted() ?  "DELETED " : "") +\r
+                                       (((LineAnnotation) annotation).isMarkedAsMerged() ?  "MERGED " : "") +\r
+                                       (((LineAnnotation) annotation).isDirty() ?  "DIRTY " : "") +\r
+                                       (((LineAnnotation) annotation).isMarkedAsNew() ?  "NEW " : "") +\r
+                                       annotation.getText() + ": o ");                 \r
+               }\r
        }\r
        \r
        /**\r
@@ -182,6 +197,14 @@ public class LineAnnotationModel extends AnnotationModel {
                return list;\r
        }\r
        \r
+       public Set<LineAnnotation> getDeletedAnnotations() {\r
+               return deletedAnnotations;\r
+       }\r
+       \r
+       public void clearDeletedAnnotations() {\r
+               deletedAnnotations.clear();\r
+       }\r
+       \r
        private Comparator<Annotation> getAnnotationComparator() {\r
                if (comparator == null) {\r
                        this.comparator = new AnnotationComparator();\r
@@ -221,7 +244,7 @@ public class LineAnnotationModel extends AnnotationModel {
         * \r
         * @param entityCreator\r
         */\r
-       public void setEntityContainerCreator(IEntityContainerCreator entityCreator) {\r
+       public void setEntityCreator(IEntityCreator entityCreator) {\r
                this.entityCreator = entityCreator;\r
        }\r
        \r
@@ -234,10 +257,10 @@ public class LineAnnotationModel extends AnnotationModel {
         * @return\r
         */\r
        public Annotation createAnnotation(String text) {\r
-               Annotation annotation = null;\r
+               LineAnnotation annotation = null;\r
                if (entityCreator != null) {\r
-                       IEntityContainer<?> container = entityCreator.createContainer(text);\r
-                       annotation = new LineAnnotation(container);\r
+                       annotation = new LineAnnotation(entityCreator.createEntity(text));\r
+                       annotation.markAsNew(true);\r
                }\r
                return annotation;\r
        }\r
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineEditorDocumentProvider.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/LineEditorDocumentProvider.java
new file mode 100644 (file)
index 0000000..05d4035
--- /dev/null
@@ -0,0 +1,199 @@
+// $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;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.jface.operation.IRunnableContext;\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.jface.text.source.IAnnotationModel;\r
+import org.eclipse.ui.texteditor.AbstractDocumentProvider;\r
+\r
+/**\r
+ * Using an <code>IEditorPart</code>, creates a document where each line is associated\r
+ * with an entity. Mapping between document positions and entities is stored in\r
+ * <code>LineAnnotation</code>s in a <code>LineAnnotationModdel</code>.  \r
+ * <p>\r
+ * Requires an <code>IEntityCreator</code> to create entities for new lines.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 25.06.2009\r
+ * @version 1.0\r
+ */\r
+public class LineEditorDocumentProvider extends AbstractDocumentProvider {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(LineEditorDocumentProvider.class);\r
+       \r
+       private Map<BulkEditorInput, IDocument> documents = \r
+                       new HashMap<BulkEditorInput, IDocument>();\r
+\r
+       private Map<BulkEditorInput, IAnnotationModel> annotationModels = \r
+               new HashMap<BulkEditorInput, IAnnotationModel>();\r
+\r
+       private HashMap<BulkEditorInput, ArrayList<Object>> entityLists = \r
+               new HashMap<BulkEditorInput, ArrayList<Object>>();\r
+\r
+       private IEntityCreator<?> entityCreator;\r
+               \r
+       @Override\r
+       public IAnnotationModel getAnnotationModel(Object element) {\r
+               if (element instanceof BulkEditorInput) {\r
+                       \r
+                       BulkEditorInput input = (BulkEditorInput) element;\r
+                       IAnnotationModel model = annotationModels.get((BulkEditorInput) element);\r
+                       \r
+                       // Create model as necessary\r
+                       if (model == null) {\r
+                               model = new LineAnnotationModel();\r
+                               ((LineAnnotationModel) model).setEntityCreator(getEntityCreator());\r
+                               annotationModels.put(input, model);\r
+                       }       \r
+                       return model;\r
+               }\r
+               \r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       protected IAnnotationModel createAnnotationModel(Object element)\r
+                       throws CoreException {\r
+               return getAnnotationModel(element);\r
+       }\r
+\r
+       @Override\r
+       public IDocument getDocument(Object element) {\r
+               if (element instanceof BulkEditorInput) {\r
+                       return documents.get((BulkEditorInput) element);\r
+               }\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       protected IDocument createDocument(Object element) throws CoreException {\r
+               \r
+               if (element instanceof BulkEditorInput) {\r
+                       BulkEditorInput input = (BulkEditorInput) element;\r
+                       Document document = new Document("");\r
+                       IAnnotationModel model = getAnnotationModel(element);\r
+                                       \r
+                       String text = "";\r
+                       String line;\r
+                       for (Object entity : getEntityList(element)) {\r
+                               \r
+                               Annotation annotation = new LineAnnotation(entity);\r
+                               \r
+                               line = annotation.getText()     + document.getDefaultLineDelimiter();\r
+                               Position position = new Position(text.length(), line.length());\r
+                               model.addAnnotation(annotation, position);\r
+                               document.set(document.get() + line);\r
+                               \r
+                               text += line;\r
+                       }\r
+                       documents.put(input, document);\r
+                       if (model instanceof LineAnnotationModel) {\r
+                               ((LineAnnotationModel) model).printAnnotations();\r
+                       }\r
+                       return document;\r
+               }\r
+               return null;\r
+       }\r
+\r
+       /**\r
+        * @param element \r
+        * @return\r
+        */\r
+       private ArrayList<Object> getEntityList(Object element) {\r
+               if (element instanceof BulkEditorInput) {\r
+                       BulkEditorInput input = (BulkEditorInput) element;\r
+                       ArrayList<Object> entityList = entityLists.get(input);\r
+                       \r
+                       // Create object list for input as necessary\r
+                       if (entityList == null) {\r
+                               entityList = new ArrayList<Object>();\r
+                               entityList.add(getEntityCreator().createEntity("Acta universitatis carolinae. Biologica Prague"));\r
+                               entityList.add(getEntityCreator().createEntity("Acta universitatis asiae mediae. Botanica"));\r
+                               entityList.add(getEntityCreator().createEntity("Acta phytogeographica suecica Uppsala"));\r
+                               entityList.add(getEntityCreator().createEntity("Acta botanica neerlandica Amsterdam"));\r
+                               entityList.add(getEntityCreator().createEntity("Acta geobotanica hungarica Debrecen, Hungary"));\r
+                               entityLists.put(input, entityList);\r
+                       }       \r
+                       return entityList;\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       protected void doSaveDocument(IProgressMonitor monitor, Object element,\r
+                       IDocument document, boolean overwrite) throws CoreException {\r
+               if (element instanceof BulkEditorInput) {\r
+                       \r
+                       // Get new containers from annotation model\r
+                       LineAnnotationModel model = (LineAnnotationModel) getAnnotationModel(element);\r
+                       Iterator iterator = model.getAnnotationIterator();\r
+                       while (iterator.hasNext()) {\r
+                               Annotation annotation = (Annotation) iterator.next();\r
+                               if (annotation instanceof IEntityContainer<?>) {\r
+                                       IEntityContainer<?> container = (IEntityContainer<?>) annotation;\r
+                                       if (container.isMarkedAsNew() || container.isDirty()) {\r
+                                               logger.info("Save "  + container.getEditableText());\r
+                                               container.setDirty(false);\r
+                                               container.markAsNew(false);\r
+                                       }\r
+                               }\r
+                       }\r
+                       for (LineAnnotation annotation : model.getDeletedAnnotations()) {\r
+                               if (annotation.isMarkedAsNew()) {\r
+                                       continue;\r
+                               }\r
+                               if (annotation.isMarkedAsMerged()) {\r
+                                       logger.info("Merge " + annotation.getEditableText() + " into " + annotation.getMergeTarget());                                  \r
+                               }\r
+                               logger.info("Deleting " + annotation.getEditableText());\r
+                       }\r
+                       model.clearDeletedAnnotations();\r
+               }\r
+       }\r
+\r
+       @Override\r
+       protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public boolean isModifiable(Object element) {\r
+               return true;\r
+       }\r
+       \r
+       @Override\r
+       public boolean isReadOnly(Object element) {\r
+               // enables copy & paste\r
+               return false;\r
+       }\r
+\r
+       public void setEntityCreator(IEntityCreator<?> entityCreator) {\r
+               this.entityCreator = entityCreator;\r
+       }\r
+       \r
+       public IEntityCreator<?> getEntityCreator() {\r
+               Assert.isNotNull(entityCreator, "No entity creator set.");\r
+               return entityCreator;\r
+       }\r
+}
\ No newline at end of file
index 4fda27d29630d82b605acf7492f125d7e9f4aeb9..a56207a1cf768934bca2e7af4b1fa8fe5439b0a5 100644 (file)
@@ -53,8 +53,7 @@ public class LineSelectionSource implements ILineSelectionSource {
                        if (iterator.hasNext()) {\r
                                Annotation annotation = (Annotation) iterator.next();\r
                                if (annotation instanceof LineAnnotation) {\r
-                                       IEntityContainer<?> container = ((LineAnnotation) annotation).getEntityContainer();\r
-                                       return container.getPropertySource();\r
+                                       ((IEntityContainer<?>) annotation).getPropertySource();\r
                                }\r
                        }\r
                } catch (BadLocationException e) {\r
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceContainer.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceContainer.java
deleted file mode 100644 (file)
index a0a7e95..0000000
+++ /dev/null
@@ -1,148 +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
-package eu.etaxonomy.taxeditor.bulkeditor;\r
-\r
-import java.util.Set;\r
-\r
-import org.apache.log4j.Logger;\r
-\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 25.06.2009\r
- * @version 1.0\r
- */\r
-public class ReferenceContainer implements IEntityContainer<ReferenceBase<?>> {\r
-       private static final Logger logger = Logger\r
-                       .getLogger(ReferenceContainer.class);\r
-       \r
-       private ReferenceBase<?> reference;\r
-       private boolean deleted;\r
-       private boolean merged;\r
-       private boolean isNew = false;\r
-\r
-       private ReferenceBase<?> mergeTarget;\r
-\r
-       private boolean dirty = false;\r
-\r
-       ReferenceContainer(ReferenceBase<?> reference) {\r
-               this.reference = reference;\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getAttachedEntities()\r
-        */\r
-       public Set<CdmBase> getAttachedEntities() {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getCdmEntity()\r
-        */\r
-       public ReferenceBase<?> getCdmEntity() {\r
-               return reference;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getEditableText()\r
-        */\r
-       public String getEditableText() {\r
-               return reference.getTitleCache();\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#markAsDeleted()\r
-        */\r
-       public void markAsDeleted() {\r
-               logger.debug("Marking  " + reference.getTitleCache() + \r
-                               " as deleted"); \r
-               this.deleted = true;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#markAsMerged(eu.etaxonomy.cdm.model.common.CdmBase)\r
-        */\r
-       public void markAsMerged(ReferenceBase<?> mergeTarget) {\r
-               logger.debug("Marking  " + reference.getTitleCache() + \r
-               " for merger w " + mergeTarget.getTitleCache());        \r
-               this.merged = true;\r
-               this.mergeTarget = mergeTarget;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isMarkedAsDeleted()\r
-        */\r
-       public boolean isMarkedAsDeleted() {\r
-               return deleted;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isMarkedAsMerged()\r
-        */\r
-       public boolean isMarkedAsMerged() {\r
-               return merged;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#setText(java.lang.String)\r
-        */\r
-       public void setText(String titleCache) {\r
-               logger.debug("Changing title cache from " + reference.getTitleCache() + \r
-                               " to " + titleCache);           \r
-               dirty  = true;\r
-               reference.setTitleCache(titleCache);\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getPropertySource()\r
-        */\r
-       public Object getPropertySource() {\r
-               return new ReferencePropertySource(reference);\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isMarkedAsNew()\r
-        */\r
-       public boolean isMarkedAsNew() {\r
-               return isNew;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#markAsNew()\r
-        */\r
-       public void markAsNew() {\r
-               isNew = true;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getMergeTarget()\r
-        */\r
-       public ReferenceBase<?> getMergeTarget() {\r
-               return mergeTarget;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#isDirty()\r
-        */\r
-       public boolean isDirty() {\r
-               return dirty;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#setDirty(boolean)\r
-        */\r
-       public void setDirty(boolean dirty) {\r
-               this.dirty = dirty;\r
-       }\r
-}
\ No newline at end of file
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceCreator.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceCreator.java
new file mode 100644 (file)
index 0000000..9fd9b7c
--- /dev/null
@@ -0,0 +1,35 @@
+// $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
+\r
+import eu.etaxonomy.cdm.model.reference.Journal;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 07.07.2009\r
+ * @version 1.0\r
+ */\r
+public class ReferenceCreator implements IEntityCreator<ReferenceBase> {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ReferenceCreator.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityCreator#createEntity(java.lang.String)\r
+        */\r
+       public ReferenceBase createEntity(String text) {\r
+               Journal reference = Journal.NewInstance();\r
+               reference.setTitleCache(text);\r
+               return reference;\r
+       }\r
+}\r
index 2972f9e8a95e1d03354eaff312a4b879c1f1d47c..04ad0b9b4f249e9ce8092b54c510319eeb0e011f 100644 (file)
@@ -28,10 +28,9 @@ import org.eclipse.ui.texteditor.IDocumentProvider;
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;\r
 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorInput;\r
-import eu.etaxonomy.taxeditor.bulkeditor.LineAnnotation;\r
-import eu.etaxonomy.taxeditor.bulkeditor.LineAnnotationModel;\r
 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorConstants;\r
 import eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer;\r
+import eu.etaxonomy.taxeditor.bulkeditor.LineAnnotationModel;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -71,8 +70,7 @@ public class MergeGroupHandler extends AbstractHandler {
                                                "No group merge target set", "No group merge target has been set.");\r
                                return null;\r
                        }                       \r
-                       CdmBase targetEntity = ((LineAnnotation) targetAnnotation).\r
-                                                                               getEntityContainer().getCdmEntity();\r
+                       CdmBase targetEntity = ((IEntityContainer<?>) targetAnnotation).getCdmEntity();\r
                        \r
                        logger.info("Merging group");\r
                        model.printAnnotations();\r
@@ -83,9 +81,7 @@ public class MergeGroupHandler extends AbstractHandler {
                                        document.replace(position.getOffset(), position.getLength(), "");\r
                                        \r
                                        // Mark entity container for merging with target entity\r
-                                       IEntityContainer container = \r
-                                                       ((LineAnnotation) annotation).getEntityContainer();\r
-                                       container.markAsMerged(targetEntity);\r
+                                       ((IEntityContainer) annotation).markAsMerged(targetEntity);\r
                                        logger.info("Merging " + annotation + " with " + targetAnnotation);\r
                                        \r
                                        // Remove annotation from model\r