Fixed #1057 - Implement BulkEditor for editing Authors and AuthorTeams
authorp.ciardelli <p.ciardelli@localhost>
Wed, 23 Sep 2009 14:04:28 +0000 (14:04 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Wed, 23 Sep 2009 14:04:28 +0000 (14:04 +0000)
21 files changed:
.gitattributes
taxeditor-bulkeditor/plugin.xml
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditor.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityCreator.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/handler/NewObjectHandler.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditor.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorEntityCreatorService.java
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/NameCreator.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceCreator.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/TeamOrPersonCreator.java [new file with mode: 0644]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/BulkEditorInputTypeValues.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/BulkEditorPropertyTester.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/DynamicNewObjectMenu.java [new file with mode: 0644]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AgentEditorInput.java [new file with mode: 0644]
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/BulkEditorInput.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameEditorInput.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/ReferenceEditorInput.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java

index 92699303d3af147b53f31114bc0f8d31d19d44cd..c09599fb93a6e5fa0c5a4cffe0d6200ec1b38d67 100644 (file)
@@ -681,9 +681,11 @@ taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IBulkEditor
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/IBulkEditorSortMenuProvider.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/NameCreator.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/ReferenceCreator.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/TeamOrPersonCreator.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/BulkEditorInputTypeValues.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/BulkEditorPropertyTester.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/DeleteObjectContributionItem.java -text
+taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/DynamicNewObjectMenu.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/NewObjectContributionItem.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/OpenBulkEditorContributionItem.java -text
 taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/MergeGroupHandler.java -text
@@ -691,6 +693,7 @@ taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/Ope
 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/AgentEditorInput.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
index a9c835aee84491a0145ca18ed5cb90472747eb81..d0723ba005aaa5e6a59a2d76501f0531bb4510f2 100644 (file)
       </menuContribution>\r
       <menuContribution\r
             locationURI="popup:#BulkEditorContext">\r
-         <dynamic\r
-               class="eu.etaxonomy.taxeditor.bulkeditor.command.NewObjectContributionItem"\r
-               id="taxeditor-bulkeditor.dynamicnewobjectcommand">\r
-         </dynamic>\r
+         <menu\r
+               label="New">\r
+            <dynamic\r
+                  class="eu.etaxonomy.taxeditor.bulkeditor.command.DynamicNewObjectMenu"\r
+                  id="taxeditor-bulkeditor.dynamicNewObjectMenu">\r
+            </dynamic>\r
+         </menu>\r
          <!--dynamic\r
                class="eu.etaxonomy.taxeditor.bulkeditor.command.DeleteObjectContributionItem"\r
                id="taxeditor-bulkeditor.dynamicdeleteobjectcommand">\r
index 6c7f892eac797539dd69a59da88395832e431491..9d3cad94635b41756003bb649bf00f8754336620 100644 (file)
@@ -133,8 +133,11 @@ public class AnnotatedLineEditor extends TextEditor implements IConversationEnab
                return viewer;\r
        }\r
        \r
-       /** \r
-        * @param newInstance\r
+       /**\r
+        * Create an annotated line with an "empty" entity, i.e. using the editor\r
+        * input's default entity type and a zero-length title cache. \r
+        * \r
+        * @return\r
         */\r
        public LineAnnotation createAnnotatedLineNewObject() {\r
                \r
@@ -149,6 +152,28 @@ public class AnnotatedLineEditor extends TextEditor implements IConversationEnab
                return annotation;\r
        }\r
        \r
+       /**\r
+        * Create an annotated line, first creating an entity of type "key" - this key\r
+        * must be recognized by the editor's entity creator.\r
+        *  \r
+        * @param key\r
+        * @param value\r
+        * @return \r
+        */\r
+       public LineAnnotation createAnnotatedLineNewObject(Object key, String titleCache) {\r
+               \r
+               // Create new object\r
+               Object entity = ((AnnotatedLineDocumentProvider) getDocumentProvider()).\r
+                                                       getEntityCreator(getEditorInput()).createEntity(key, titleCache);\r
+\r
+               LineAnnotation annotation = createAnnotatedLine(entity);\r
+               if (annotation != null) {\r
+                       annotation.markAsNew(true);\r
+               }\r
+               return annotation;\r
+               \r
+       }\r
+       \r
        public LineAnnotation createAnnotatedLine(Object entity) {\r
                \r
                IEditorInput input = getEditorInput();\r
index 44c403b912cfcfc0e0a11a7f6b259d077e483850..c5c057b9f88bd5427ece8c655f2a27ff7b0bd519 100644 (file)
@@ -10,6 +10,8 @@
 \r
 package eu.etaxonomy.taxeditor.annotatedlineeditor;\r
 \r
+import java.util.Map;\r
+\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 \r
 \r
@@ -21,4 +23,14 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 public interface IEntityCreator<T extends CdmBase> {\r
        \r
        T createEntity(String text);\r
+       \r
+       T createEntity(Object key, String text);\r
+       \r
+       /**\r
+        * Get a map of keys for all objects that can be created by this entity creator\r
+        * along with their string representations.\r
+        * \r
+        * @return\r
+        */\r
+       Map<Object, String> getKeyLabelPairs();\r
 }\r
index 63c5e77118cd6ee87ee7a72997f331abab318905..4203ca581f7d8439e5dab8650671df734c42b8b4 100644 (file)
@@ -14,6 +14,9 @@ import org.apache.log4j.Logger;
 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.dialogs.InputDialog;\r
+import org.eclipse.jface.window.Window;\r
+import org.eclipse.swt.widgets.Event;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorPart;\r
 import org.eclipse.ui.handlers.HandlerUtil;\r
@@ -37,7 +40,18 @@ public class NewObjectHandler extends AbstractHandler {
                IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
                IEditorInput input = editor.getEditorInput();\r
                if (editor instanceof AnnotatedLineEditor) {\r
-                       ((AnnotatedLineEditor) editor).createAnnotatedLineNewObject();\r
+                       \r
+                       Object key = ((Event)event.getTrigger()).data;\r
+                       if (key != null) {\r
+                               String text = ((Event)event.getTrigger()).text;\r
+                               InputDialog dialog = new InputDialog(HandlerUtil.getActiveShell(event), "Create " + text, "Enter new " + text, "", null);\r
+                               if (dialog.open() == Window.CANCEL) {\r
+                                       return null;\r
+                               }\r
+                               ((AnnotatedLineEditor) editor).createAnnotatedLineNewObject(key, dialog.getValue());\r
+                       } else {\r
+                               ((AnnotatedLineEditor) editor).createAnnotatedLineNewObject();\r
+                       }\r
                }\r
                return null;\r
        }\r
index 1a7df70d8e98037976f1ca948dfd76419154a755..973ab0982d87982b1b6119262ab0ef47f5436121 100644 (file)
@@ -85,7 +85,9 @@ public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeLis
        protected ISourceViewer createSourceViewer(Composite parent,\r
                        IVerticalRuler ruler, int styles) {\r
                ISourceViewer viewer = super.createSourceViewer(parent, ruler, styles);\r
-               addToggleMergeCandidateListener(ruler.getControl());\r
+               if (((BulkEditorInput) getEditorInput()).isMergingEnabled()) {\r
+                       addToggleMergeCandidateListener(ruler.getControl());\r
+               }\r
                return viewer;\r
        }\r
        \r
@@ -187,6 +189,11 @@ public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeLis
         */\r
        public void toggleMergeCandidateAnnotation(int line) {\r
                // TODO merge this with duplicate code in SetMergeCandidateHandler\r
+               \r
+               // Set line as selection\r
+               \r
+               // call handler w handler service\r
+               \r
                IDocument document = getSourceViewer().getDocument();\r
                LineAnnotationModel model = \r
                                (LineAnnotationModel) getSourceViewer().getAnnotationModel();\r
index baef1d1b65074238ba9ea93e6af18a372422b8bb..cf439b3970c100b1453b3cb7ed8cb345fa569ce2 100644 (file)
@@ -14,6 +14,7 @@ import org.apache.log4j.Logger;
 \r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreatorService;\r
+import eu.etaxonomy.taxeditor.bulkeditor.input.AgentEditorInput;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.NameEditorInput;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.ReferenceEditorInput;\r
 \r
@@ -36,6 +37,9 @@ public class BulkEditorEntityCreatorService implements IEntityCreatorService {
                if (element instanceof NameEditorInput) {\r
                        return new NameCreator();\r
                }\r
+               if (element instanceof AgentEditorInput) {\r
+                       return new TeamOrPersonCreator();\r
+               }\r
                return null;\r
        }\r
 \r
index b085c21edb2ceac83de25c7af6d33b9a325e1c04..a9e8fa0ab4906deaf0d1df5804a012a1d820fd16 100644 (file)
@@ -17,11 +17,16 @@ import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorPart;\r
 \r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
+import eu.etaxonomy.cdm.model.agent.AgentBase;\r
+import eu.etaxonomy.cdm.model.agent.Institution;\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+import eu.etaxonomy.cdm.model.agent.Team;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.EntityListener;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.ILineDisplayStrategy;\r
+import eu.etaxonomy.taxeditor.propertysheet.AgentBasePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.NonViralNamePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
 \r
@@ -69,7 +74,9 @@ public class BulkEditorLineDisplay implements ILineDisplayStrategy {
                if (entity instanceof NonViralName) {\r
                        return new NonViralNamePropertySource((NonViralName) entity);\r
                }\r
-               \r
+               if (entity instanceof AgentBase) {\r
+                       return new AgentBasePropertySource((AgentBase) entity);\r
+               }\r
                return null;\r
        }\r
 \r
@@ -96,6 +103,19 @@ public class BulkEditorLineDisplay implements ILineDisplayStrategy {
                        String text = ((TaxonNameBase) entity).getTitleCache(); \r
                        return text == null ? "" : text;\r
                }\r
+               if (entity instanceof AgentBase) {\r
+                       String text = ((AgentBase) entity).getTitleCache();\r
+                       if (entity instanceof Team) {\r
+                               text += " [Author Team]";\r
+                       }\r
+                       if (entity instanceof Person) {\r
+                               text += " [Person]";\r
+                       }\r
+                       if (entity instanceof Institution) {\r
+                               text += " [Institution]";\r
+                       }\r
+                       return text == null ? "" : text;\r
+               }\r
                return "";\r
        }\r
 \r
@@ -145,6 +165,9 @@ public class BulkEditorLineDisplay implements ILineDisplayStrategy {
                if (entity instanceof TaxonNameBase) {\r
                        return "No name title cache";\r
                }\r
+               if (entity instanceof AgentBase) {\r
+                       return "No title cache";\r
+               }\r
                return "";\r
        }\r
 \r
@@ -160,6 +183,10 @@ public class BulkEditorLineDisplay implements ILineDisplayStrategy {
                        String text = ((TaxonNameBase) entity).getTitleCache(); \r
                        return (text == null || text.equals(""));\r
                }\r
+               if (entity instanceof AgentBase) {\r
+                       String text = ((AgentBase) entity).getTitleCache(); \r
+                       return (text == null || text.equals(""));\r
+               }\r
                return false;\r
        }\r
 \r
index 28b42525a554f93cdcf0baf9fb34d38db7077cfe..ed4d1e112531a6e3a50a76ac0ed0dd74b4b870b2 100644 (file)
@@ -18,12 +18,13 @@ import java.util.List;
 import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;\r
-import eu.etaxonomy.cdm.model.common.TimePeriod;\r
+import eu.etaxonomy.cdm.model.agent.AgentBase;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\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.AgentEditorInput;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.NameEditorInput;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.ReferenceEditorInput;\r
@@ -38,16 +39,6 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
        private static final Logger logger = Logger\r
                        .getLogger(BulkEditorPersistenceService.class);\r
        \r
-       \r
-       public ReferenceBase makeTestReference(String titleCache, int year) {\r
-               ReferenceBase ref = (ReferenceBase) creator.createEntity(titleCache);\r
-               if (year > 0)\r
-                       ref.setDatePublished(TimePeriod.NewInstance(year));\r
-               return ref;\r
-       }\r
-\r
-       ReferenceCreator creator = new ReferenceCreator();\r
-       \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityPersistenceService#getEntityList(java.lang.Object)\r
         */\r
@@ -68,10 +59,10 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
                                if (element instanceof NameEditorInput) {\r
                                        entityList = CdmStore.findNames(configurator);\r
                                }\r
-                               // TODO enable when implementing AgentEditor\r
-//                             if (element instanceof AgentEditorInput){\r
-//                                     entityList = CdmStore.findAgents(configurator);\r
-//                             }\r
+                               if (element instanceof AgentEditorInput){\r
+                                       entityList = CdmStore.findTeamOrPersons(configurator);\r
+                                       \r
+                               }\r
                                if (queryComparator != null) {\r
                                        Collections.sort(entityList, queryComparator);                          \r
                                } else {\r
@@ -79,11 +70,6 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
                                }\r
                                ((BulkEditorInput) element).setQuery(null);\r
                        }\r
-//                     entityList.add(makeTestReference("Acta universitatis carolinae. Biologica Prague",1932));\r
-//                     entityList.add(makeTestReference("Acta universitatis asiae mediae. Botanica",1753));\r
-//                     entityList.add(makeTestReference("Acta phytogeographica suecica Uppsala",1900));\r
-//                     entityList.add(makeTestReference("Acta botanica neerlandica Amsterdam",1864));\r
-//                     entityList.add(makeTestReference("Acta geobotanica hungarica Debrecen, Hungary",0));\r
                }\r
                return entityList;\r
        }\r
@@ -107,6 +93,9 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
                if (entity instanceof TaxonNameBase) {\r
                        CdmStore.getNameService().delete((TaxonNameBase) entity);                       \r
                }\r
+               if (entity instanceof AgentBase) {\r
+                       CdmStore.getAgentService().delete((AgentBase) entity);                  \r
+               }\r
                return true;\r
        }\r
        \r
@@ -123,9 +112,6 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
                                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
@@ -140,6 +126,9 @@ public class BulkEditorPersistenceService implements IEntityPersistenceService {
                if (entity instanceof TaxonNameBase) {\r
                        CdmStore.getNameService().saveOrUpdate((TaxonNameBase) entity);                         \r
                }\r
+               if (entity instanceof AgentBase) {\r
+                       CdmStore.getAgentService().saveOrUpdate((AgentBase) entity);                            \r
+               }\r
                return true;\r
        }\r
 }\r
index 1ca9df6f16f099596ee1c1944706842840061356..2258abb62fd9afb9eeb25d5d2e1bd2c154d69512 100644 (file)
 \r
 package eu.etaxonomy.taxeditor.bulkeditor;\r
 \r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;\r
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
@@ -29,4 +33,24 @@ public class NameCreator implements IEntityCreator<TaxonNameBase> {
                name.setTitleCache(text);\r
                return name;\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator#createEntity(java.lang.Class, java.lang.String)\r
+        */\r
+       public TaxonNameBase createEntity(Object key, String text) {\r
+               TaxonNameBase name = PreferencesUtil.getPreferredNomenclaturalCode().getNewTaxonNameInstance((Rank) key);\r
+               name.setTitleCache(text);\r
+               return name;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator#getClassLabelPairs()\r
+        */\r
+       public Map<Object, String> getKeyLabelPairs() {\r
+               Map<Object, String> result = new HashMap<Object, String>();\r
+               for (Rank rank : PreferencesUtil.getPreferredRanks()) {\r
+                       result.put(rank, rank.getLabel());\r
+               }\r
+               return result;\r
+       }\r
 }\r
index b8e1b18e6763e16731604b5014c99c9658675e4e..47cdfad38a2708c9aebafa0468f862ef9fa4c17a 100644 (file)
 \r
 package eu.etaxonomy.taxeditor.bulkeditor;\r
 \r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
 import org.apache.log4j.Logger;\r
 \r
+import eu.etaxonomy.cdm.model.reference.Article;\r
 import eu.etaxonomy.cdm.model.reference.Book;\r
+import eu.etaxonomy.cdm.model.reference.BookSection;\r
+import eu.etaxonomy.cdm.model.reference.CdDvd;\r
+import eu.etaxonomy.cdm.model.reference.Database;\r
+import eu.etaxonomy.cdm.model.reference.Generic;\r
+import eu.etaxonomy.cdm.model.reference.InProceedings;\r
+import eu.etaxonomy.cdm.model.reference.Journal;\r
+import eu.etaxonomy.cdm.model.reference.Patent;\r
+import eu.etaxonomy.cdm.model.reference.PersonalCommunication;\r
+import eu.etaxonomy.cdm.model.reference.PrintSeries;\r
+import eu.etaxonomy.cdm.model.reference.Proceedings;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceType;\r
+import eu.etaxonomy.cdm.model.reference.Report;\r
+import eu.etaxonomy.cdm.model.reference.Thesis;\r
+import eu.etaxonomy.cdm.model.reference.WebPage;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;\r
 \r
 /**\r
@@ -30,8 +48,78 @@ public class ReferenceCreator implements IEntityCreator<ReferenceBase> {
         */\r
        public ReferenceBase createEntity(String text) {\r
                // TODO configure default reference type\r
-               Book reference = Book.NewInstance();\r
+               return createEntity(Book.class, text);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator#createEntity(java.lang.Class, java.lang.String)\r
+        */\r
+       public ReferenceBase createEntity(Object key, String text) {\r
+               ReferenceBase reference = null;\r
+               if  (ReferenceType.Article.getMessage().equals(key)) {\r
+                       reference = Article.NewInstance();\r
+               }\r
+               if  (ReferenceType.Book.getMessage().equals(key)) {\r
+                       reference = Book.NewInstance();\r
+               }\r
+               if  (ReferenceType.BookSection.getMessage().equals(key)) {\r
+                       reference = BookSection.NewInstance();\r
+               }\r
+               if  (ReferenceType.CdDvd.getMessage().equals(key)) {\r
+                       reference = CdDvd.NewInstance();\r
+               }\r
+               if  (ReferenceType.Database.getMessage().equals(key)) {\r
+                       reference = Database.NewInstance();\r
+               }\r
+               if  (ReferenceType.Generic.getMessage().equals(key)) {\r
+                       reference = Generic.NewInstance();\r
+               }\r
+               if  (ReferenceType.InProceedings.getMessage().equals(key)) {\r
+                       reference = InProceedings.NewInstance();\r
+               }\r
+               if  (ReferenceType.Journal.getMessage().equals(key)) {\r
+                       reference = Journal.NewInstance();\r
+               }\r
+               if  (ReferenceType.Map.getMessage().equals(key)) {\r
+                       reference = eu.etaxonomy.cdm.model.reference.Map.NewInstance();\r
+               }\r
+               if  (ReferenceType.Patent.getMessage().equals(key)) {\r
+                       reference = Patent.NewInstance();\r
+               }\r
+               if  (ReferenceType.PersonalCommunication.getMessage().equals(key)) {\r
+                       reference = PersonalCommunication.NewInstance();\r
+               }\r
+               if  (ReferenceType.PrintSeries.getMessage().equals(key)) {\r
+                       reference = PrintSeries.NewInstance();\r
+               }\r
+               if  (ReferenceType.Proceedings.getMessage().equals(key)) {\r
+                       reference = Proceedings.NewInstance();\r
+               }\r
+               if  (ReferenceType.Report.getMessage().equals(key)) {\r
+                       reference = Report.NewInstance();\r
+               }\r
+               if  (ReferenceType.Thesis.getMessage().equals(key)) {\r
+                       reference = Thesis.NewInstance();\r
+               }\r
+               if  (ReferenceType.WebPage.getMessage().equals(key)) {\r
+                       reference = WebPage.NewInstance();\r
+               }\r
+               if (reference == null) {\r
+                       logger.warn("Reference type " + key + " not found. Creating reference with default type.");\r
+                       reference = Book.NewInstance();\r
+               }\r
                reference.setTitleCache(text);\r
                return reference;\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator#getClassLabelPairs()\r
+        */\r
+       public Map<Object, String> getKeyLabelPairs() {\r
+               Map<Object, String> result = new HashMap<Object, String>();\r
+               for (ReferenceType type : ReferenceType.values()) {\r
+                       result.put(type.getMessage(), type.getMessage());\r
+               }\r
+               return result;\r
+       }\r
 }\r
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/TeamOrPersonCreator.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/TeamOrPersonCreator.java
new file mode 100644 (file)
index 0000000..e1c727c
--- /dev/null
@@ -0,0 +1,65 @@
+// $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 java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+import eu.etaxonomy.cdm.model.agent.Team;\r
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
+import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 18.09.2009\r
+ * @version 1.0\r
+ */\r
+public class TeamOrPersonCreator implements IEntityCreator<TeamOrPersonBase> {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(TeamOrPersonCreator.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator#createEntity(java.lang.String)\r
+        */\r
+       public TeamOrPersonBase createEntity(String text) {\r
+               return createEntity(Person.class, text);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator#createEntity(java.lang.Class, java.lang.String)\r
+        */\r
+       public TeamOrPersonBase createEntity(Object key, String text) {\r
+               TeamOrPersonBase teamOrPerson = null;\r
+               if (Team.class.equals(((Class) key))) {\r
+                       teamOrPerson = Team.NewInstance();\r
+               }\r
+               if (Person.class.equals(((Class) key))) {\r
+                       teamOrPerson = Person.NewInstance();\r
+               }               \r
+               if (teamOrPerson != null) {\r
+                       teamOrPerson.setTitleCache(text);\r
+               }\r
+               return teamOrPerson;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator#getClassLabelPairs()\r
+        */\r
+       public Map<Object, String> getKeyLabelPairs() {\r
+               Map<Object, String> result = new HashMap<Object, String>();\r
+               result.put(Team.class, "Author Team");\r
+               result.put(Person.class, "Author");\r
+               return result;\r
+       }\r
+}\r
index 2e106e7e8e1ab2cc8c849a7c35e7f4688a1db270..f04ddad130b4806520fad4441501f771b9b3c61e 100644 (file)
@@ -17,6 +17,7 @@ import org.apache.log4j.Logger;
 import org.eclipse.core.commands.IParameterValues;\r
 import org.eclipse.ui.IEditorInput;\r
 \r
+import eu.etaxonomy.taxeditor.bulkeditor.input.AgentEditorInput;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.NameEditorInput;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.ReferenceEditorInput;\r
 \r
@@ -38,6 +39,7 @@ public class BulkEditorInputTypeValues implements IParameterValues {
                // TODO user role determines which editor inputs are returned\r
                values.put("Reference", ReferenceEditorInput.getID());\r
                values.put("Name", NameEditorInput.getID());\r
+               values.put("Authors and Author Teams", AgentEditorInput.getID());\r
                \r
                return values;\r
        }\r
@@ -52,6 +54,9 @@ public class BulkEditorInputTypeValues implements IParameterValues {
                if (input instanceof NameEditorInput) {\r
                        return "Name";\r
                }\r
+               if (input instanceof AgentEditorInput) {\r
+                       return "Authors and Author Teams";\r
+               }\r
                return "";\r
        }\r
 }\r
index 3202d3f180636d5cee8766e155eed9342b1f84d2..b4c2f482fb01e78be705ab95f464d19d976a5861 100644 (file)
@@ -26,15 +26,13 @@ public class BulkEditorPropertyTester extends PropertyTester {
        private static final Logger logger = Logger\r
                        .getLogger(BulkEditorPropertyTester.class);\r
 \r
-\r
        /* (non-Javadoc)\r
         * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)\r
         */\r
        public boolean test(Object receiver, String property, Object[] args,\r
                        Object expectedValue) {\r
                BulkEditor bulkEditor = (BulkEditor) receiver;\r
-               if ("isMergingEnabled".equals(property)) {\r
-                       \r
+               if ("isMergingEnabled".equals(property)) {                      \r
                        IEditorInput input = bulkEditor.getEditorInput();\r
                        if (input instanceof NameEditorInput) {\r
                                return false;\r
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/DynamicNewObjectMenu.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/DynamicNewObjectMenu.java
new file mode 100644 (file)
index 0000000..60c6aa8
--- /dev/null
@@ -0,0 +1,98 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.bulkeditor.command;
+
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.action.ContributionItem;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.CompoundContributionItem;
+import org.eclipse.ui.handlers.IHandlerService;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineDocumentProvider;
+import eu.etaxonomy.taxeditor.annotatedlineeditor.AnnotatedLineEditor;
+import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
+import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorConstants;
+import eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput;
+import eu.etaxonomy.taxeditor.bulkeditor.input.ReferenceEditorInput;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+
+/**
+ * @author n.hoffmann
+ * @created 17.04.2009
+ * @version 1.0
+ */
+public class DynamicNewObjectMenu extends CompoundContributionItem {
+       private static final Logger logger = Logger
+                       .getLogger(DynamicNewObjectMenu.class);
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
+        */
+       @Override
+       protected IContributionItem[] getContributionItems() {
+               
+               return new IContributionItem[] {
+                               new ContributionItem() {
+                                       public void fill(Menu menu, int index){
+                                               
+                                               final Map<Object, String> classLabelPairs = getClassLabelPairs();
+                                               
+                                               final IHandlerService handlerService = 
+                                                                               (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
+                                               
+                                               for(final Object key : classLabelPairs.keySet()){
+                                                       MenuItem menuItem = new MenuItem(menu, -1);
+                                                       menuItem.setText(classLabelPairs.get(key));
+                                                       menuItem.addSelectionListener(new SelectionListener(){
+                               
+                                                               public void widgetDefaultSelected(SelectionEvent e) {}
+                               
+                                                               public void widgetSelected(SelectionEvent ev) {
+                                                                       Event event = new Event();
+                                                                       event.data = key;
+                                                                       event.text = classLabelPairs.get(key);
+                                                                       try {
+                                                                               handlerService.executeCommand(IBulkEditorConstants.DYNAMIC_OPEN_OBJECT_ID, event);
+                                                                       } catch (Exception e) {
+                                                                               logger.error("Error executing command", e);
+                                                                       }
+                                                               }                               
+                                                       });
+                                               }                       
+                                       }
+                               }
+               };
+       }
+
+       /**
+        * Get class label pairs from Annotated Line Editor's entity creator.
+        * @return
+        */
+       private Map<Object, String> getClassLabelPairs() {
+               IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+               if (editor == null || !(editor instanceof AnnotatedLineEditor) || !(((AnnotatedLineEditor) editor).getDocumentProvider() instanceof AnnotatedLineDocumentProvider)) {
+                       return null;
+               }
+               IEntityCreator<?> entityCreator = ((AnnotatedLineDocumentProvider) ((AnnotatedLineEditor) editor).getDocumentProvider()).getEntityCreator(editor.getEditorInput());
+               return entityCreator.getKeyLabelPairs();
+       }       
+}
\ No newline at end of file
diff --git a/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AgentEditorInput.java b/taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AgentEditorInput.java
new file mode 100644 (file)
index 0000000..cc0bc0c
--- /dev/null
@@ -0,0 +1,69 @@
+// $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.input;\r
+\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 25.06.2009\r
+ * @version 1.0\r
+ */\r
+public class AgentEditorInput extends BulkEditorInput {\r
+\r
+       public static final String ID = "bulkeditor.input.author";\r
+       \r
+       private static AgentEditorInput instance;\r
+\r
+       /**\r
+        * @param sourceBean\r
+        */\r
+       public AgentEditorInput() {\r
+               super(new Object());\r
+       }\r
+\r
+       /**\r
+        * @return the iD\r
+        */\r
+       public static String getID() {\r
+               return ID;\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.IEditorInput#getName()\r
+        */\r
+       public String getName() {\r
+               return "Bulk Editor - Authors";\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.IEditorInput#getToolTipText()\r
+        */\r
+       public String getToolTipText() {\r
+               return getName();\r
+       }\r
+\r
+       /**\r
+        * @return\r
+        */\r
+       public static BulkEditorInput getInstance() {\r
+               if (instance == null) {\r
+                       instance = new AgentEditorInput();\r
+               }\r
+               return instance;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled()\r
+        */\r
+       @Override\r
+       public boolean isMergingEnabled() {\r
+               return false;\r
+       }\r
+}
\ No newline at end of file
index fe132239542e1586bdf44d59553688142a256b66..cbd1d98d86c74484bb638259da1e3db4157f6ffc 100644 (file)
@@ -37,14 +37,16 @@ abstract public class BulkEditorInput extends PropertyChangeSupport implements I
        static public BulkEditorInput NewInstance(String inputType) {\r
                                \r
                if (ReferenceEditorInput.getID().equals(inputType)) {\r
-//                     return ReferenceEditorInput.getInstance();\r
                        return new ReferenceEditorInput();\r
                }\r
 \r
                if (NameEditorInput.getID().equals(inputType)) {\r
-//                     return NameEditorInput.getInstance();\r
                        return new NameEditorInput();\r
                }\r
+\r
+               if (AgentEditorInput.getID().equals(inputType)) {\r
+                       return new AgentEditorInput();\r
+               }\r
                \r
                return null;\r
        }\r
@@ -97,4 +99,6 @@ abstract public class BulkEditorInput extends PropertyChangeSupport implements I
        public IBulkEditorQuery getQuery() {\r
                return query;\r
        }\r
+       \r
+       abstract public boolean isMergingEnabled();\r
 }
\ No newline at end of file
index 499abb9123110f1a4602bc215dc63c7c3924825d..04554639105fa84d3979da1c6275560c98794a5b 100644 (file)
@@ -59,4 +59,12 @@ public class NameEditorInput extends BulkEditorInput {
        public static Object getID() {\r
                return ID;\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled()\r
+        */\r
+       @Override\r
+       public boolean isMergingEnabled() {\r
+               return false;\r
+       }\r
 }\r
index 9ce4b68d20a8f31c0f5932147dc2c89d74d0ba1c..2f12a41c8fc8e946c411e88f34184d931f98260f 100644 (file)
@@ -58,4 +58,12 @@ public class ReferenceEditorInput extends BulkEditorInput {
                }\r
                return instance;\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled()\r
+        */\r
+       @Override\r
+       public boolean isMergingEnabled() {\r
+               return true;\r
+       }\r
 }
\ No newline at end of file
index a2af4d9177483aa8e674ac610d9ad4f8a00b2419..53c132470b286b76c2f157853323c04ff9734f61 100644 (file)
@@ -35,6 +35,7 @@ import org.eclipse.ui.progress.IProgressService;
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.LineSelection;\r
 import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
+import eu.etaxonomy.taxeditor.propertysheet.AgentBasePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.NonViralNamePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
@@ -182,7 +183,10 @@ public class ReferencingObjectsView extends ViewPart {
                }\r
                if (entity instanceof NonViralNamePropertySource) {\r
                        return ((NonViralNamePropertySource) entity).getName();\r
-               }               \r
+               }\r
+               if (entity instanceof AgentBasePropertySource) {\r
+                       return ((AgentBasePropertySource) entity).getAgentBase();\r
+               }\r
                return null;\r
        }\r
 }\r
index af85a18bb1b81576295390234d0cf64a952aedbf..972bd99a45b4de659feed27bd335f82677828a88 100644 (file)
@@ -9,6 +9,7 @@
 
 package eu.etaxonomy.taxeditor.store;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.log4j.Logger;
@@ -28,18 +29,17 @@ import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.api.service.ITaxonTreeService;
 import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.api.service.IUserService;
-import eu.etaxonomy.cdm.api.service.TaxonTreeServiceImpl;
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
 import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.ext.IEditGeoService;
 import eu.etaxonomy.cdm.model.agent.AgentBase;
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
-import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
 import eu.etaxonomy.taxeditor.datasource.DatasourceLauncherDialog;
 import eu.etaxonomy.taxeditor.io.ExportHandler;
@@ -264,6 +264,17 @@ public class CdmStore{
                
                return getAgentService().findAgentsByTitle(titleSearchString);
        }
+
+       public static List<TeamOrPersonBase> findTeamOrPersons(IIdentifiableEntityServiceConfigurator configurator){
+               // TODO move this to cdmlib
+               List<TeamOrPersonBase> result = new ArrayList<TeamOrPersonBase>();
+               for (AgentBase agent : findAgents(configurator)) {
+                       if (agent instanceof TeamOrPersonBase) {
+                               result.add((TeamOrPersonBase) agent);
+                       }
+               }
+               return result;
+       }
        
        /*
         * LANGUAGE