(no commit message)
authorn.hoffmann <n.hoffmann@localhost>
Thu, 21 Jan 2010 10:18:31 +0000 (10:18 +0000)
committern.hoffmann <n.hoffmann@localhost>
Thu, 21 Jan 2010 10:18:31 +0000 (10:18 +0000)
.gitattributes
taxeditor-editor/plugin.xml
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionElementHandler.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionHandler.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DescriptionsMenuPropertyTester.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ImagesHelper.java

index 3e2f71dc49eb008d6f3ca00625eb50ea8dcc73fb..f3e8de5ae1996fb909979faeadd751660113c78e 100644 (file)
@@ -163,6 +163,7 @@ taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/han
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/CreateImageListHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionElementHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteDescriptionHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteImageHandler.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DescriptionsMenuPropertyTester.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/MoveImageDownInListHandler.java -text
index 01f42dfcc6d6db665893b91b5e15001277382b67..88b743a04d7a5a6e865c2bedc98f39c19ad47d1a 100644 (file)
                   visible="true">
             </separator>
             <command
-                  xcommandId="eu.etaxonomy.taxeditor.editor.name.deleteTaxonBase"
                   commandId="org.eclipse.ui.edit.delete"
                   label="Delete"
                   style="push">
                   visible="true">
             </separator>
             <command
-                  commandId="eu.etaxonomy.taxeditor.description.commands.deletedescription"
-                  label="Delete Description"
-                  style="push">
-               <visibleWhen>
-                  <reference
-                        definitionId="isInDescription">
-                  </reference>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="taxeditor-editor.command.deleteImageGallery"
-                  label="Delete Image Gallery"
-                  style="push">
-               <visibleWhen>
-                  <reference
-                        definitionId="isInImageGallery">
-                  </reference>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="taxeditor-editor.command.deleteImage"
-                  label="Delete Image"
-                  style="push">
-               <visibleWhen>
-                  <reference
-                        definitionId="isImage">
-                  </reference>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="eu.etaxonomy.taxeditor.editor.name.deleteDescriptionElement"
+                  commandId="org.eclipse.ui.edit.delete"
                   label="Delete"
                   style="push">
                <visibleWhen>
                   <reference
-                        definitionId="isNonImageElement">
+                        definitionId="isDeletable">
                   </reference>
                </visibleWhen>
             </command>
                </test>
             </with>
          </definition>
+         <definition
+               id="isDeletable">
+            <with
+                  variable="activeMenuSelection">
+               <or>
+                  <iterate>
+                     <instanceof
+                           value="eu.etaxonomy.cdm.model.description.DescriptionBase">
+                     </instanceof>
+                  </iterate>
+                  <iterate>
+                     <instanceof
+                           value="eu.etaxonomy.cdm.model.description.DescriptionElementBase">
+                     </instanceof>
+                  </iterate>
+                  <iterate>
+                     <instanceof
+                           value="eu.etaxonomy.cdm.model.media.ImageFile">
+                     </instanceof>
+                  </iterate>
+               </or>
+            </with>
+         </definition>
       </extension>
       <extension
             point="org.eclipse.core.expressions.propertyTesters">
                class="eu.etaxonomy.taxeditor.editor.descriptiontree.handler.DescriptionsMenuPropertyTester"
                id="taxeditor-editor.descriptions.PropertyTester"
                namespace="taxeditor-editor.descriptions.propertyTester"
-               properties="isInImageGallery,isInImageList,isImage,isInDescription,isNonImageElement"
+               properties="isInImageGallery,isInImageList,isImage,isInDescription,isNonImageElement,isDescription"
                type="org.eclipse.jface.viewers.TreeSelection">
          </propertyTester>
       </extension>
                name="New Editor">
          </command>
       </extension>
+      <extension
+            point="org.eclipse.ui.handlers">
+         <handler
+               class="eu.etaxonomy.taxeditor.editor.descriptiontree.handler.DeleteHandler"
+               commandId="org.eclipse.ui.edit.delete">
+            <activeWhen>
+               <reference
+                     definitionId="isDeletable">
+               </reference></activeWhen>
+         </handler>
+      </extension>
 </plugin>
index 7b4cac0dc500aa48c423b5c482fd4b8dedc1f971..997aea44d2b66ef5ca6161638c3a365a365d9c1a 100644 (file)
@@ -40,6 +40,7 @@ import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
  * @created 20.04.2009
  * @version 1.0
  */
+@Deprecated
 public class DeleteDescriptionElementHandler extends AbstractHandler implements
                IHandler {
        private static final Logger logger = Logger
index 662f84699672805060d4fe2d2200f25205212318..0af9409f987135e9b8e09aab205604128e7bb911 100644 (file)
@@ -31,6 +31,7 @@ import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
  * @author p.ciardelli\r
  *\r
  */\r
+@Deprecated\r
 public class DeleteDescriptionHandler extends AbstractHandler {\r
        private static final Logger logger = Logger\r
                        .getLogger(DeleteDescriptionHandler.class);\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteHandler.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiontree/handler/DeleteHandler.java
new file mode 100644 (file)
index 0000000..6aade5e
--- /dev/null
@@ -0,0 +1,91 @@
+// $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.editor.descriptiontree.handler;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.media.ImageFile;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
+import eu.etaxonomy.taxeditor.operations.DeleteDescriptionElementOperation;
+import eu.etaxonomy.taxeditor.operations.DeleteImageOperation;
+import eu.etaxonomy.taxeditor.operations.DeleteTaxonDescriptionOperation;
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 19, 2010
+ * @version 1.0
+ */
+public class DeleteHandler extends AbstractHandler {
+       private static final Logger logger = Logger.getLogger(DeleteHandler.class);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);
+               if (editor instanceof FormEditor) {
+                       editor = ((FormEditor) editor).getActiveEditor();
+               }
+               IEditorInput input = editor.getEditorInput();
+               if (input instanceof TaxonEditorInput) {
+                       Taxon taxon = ((TaxonEditorInput) input).getTaxon();
+                       ISelection selection = HandlerUtil.getCurrentSelection(event);
+                       
+                       Object deleteElement = ((TreeSelection) selection).getFirstElement();
+                       
+                       IUndoableOperation operation = null;
+                       try {
+                               
+                               if (deleteElement instanceof DescriptionElementBase) {
+                                       DescriptionElementBase descriptionElement = (DescriptionElementBase) deleteElement;
+                                       // TODO use undo context specific to editor
+                                       operation = new DeleteDescriptionElementOperation(event.getCommand().getName(), 
+                                                       EditorUtil.getUndoContext(), taxon, descriptionElement, (IPostOperationEnabled) editor);
+                               }else if (deleteElement instanceof ImageFile) {
+                                       ImageFile imageFile = (ImageFile) deleteElement;
+                                       TreePath[] paths = ((TreeSelection) selection).getPaths();
+                                       TaxonDescription description = (TaxonDescription) (paths[0]).getFirstSegment();
+                                       operation = new DeleteImageOperation(event.getCommand().getName(), 
+                                                       EditorUtil.getUndoContext(), taxon, description, imageFile, (IPostOperationEnabled) editor);
+                               }else if(deleteElement instanceof TaxonDescription){
+                                       
+                                       TaxonDescription description = (TaxonDescription) deleteElement;
+                                       // TODO use undo context specific to editor
+                                       operation = new DeleteTaxonDescriptionOperation(event.getCommand().getName(), 
+                                                       EditorUtil.getUndoContext(), taxon, description, (IPostOperationEnabled) editor);
+                                       EditorUtil.executeOperation(operation);
+                               }
+                               
+                               EditorUtil.executeOperation(operation);
+                       } catch (NotDefinedException e) {
+                               logger.warn("Command name not set");
+                       }
+               }               
+               return null;
+       }
+}
index 69c7458435d5d290c4fd6105e1439110a1195788..62520e6c1ec0cf5f0005170ee7474bfba88c8dfa 100644 (file)
@@ -9,6 +9,8 @@ import java.util.List;
 import org.eclipse.core.expressions.PropertyTester;\r
 import org.eclipse.jface.viewers.TreePath;\r
 import org.eclipse.jface.viewers.TreeSelection;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.media.ImageFile;\r
@@ -48,10 +50,24 @@ public class DescriptionsMenuPropertyTester extends PropertyTester {
                if ("isNonImageElement".equals(property)) {\r
                        return isInDescription() && isInDescriptionElement();\r
                }\r
+               if("isDescription".equals(property)){\r
+                       return isDescription(); \r
+               }\r
                \r
                return false;\r
        }\r
        \r
+       /**\r
+        * @return\r
+        */\r
+       private boolean isDescription() {\r
+               for (Object o : segments) {\r
+                       if(!(o instanceof DescriptionBase))\r
+                               return false;\r
+               }\r
+               return true;\r
+       }\r
+\r
        /**\r
         * @param receiver\r
         * @return\r
@@ -67,6 +83,8 @@ public class DescriptionsMenuPropertyTester extends PropertyTester {
                return list;\r
        }\r
 \r
+       \r
+       \r
        /**\r
         * @return\r
         */\r
index a93f0382131c823c23b62f79077438a147276ee3..2958e42bdfdfecdba1903c52db54098a14991fc0 100644 (file)
@@ -185,26 +185,42 @@ public class ImagesHelper {
        /**\r
         * @param taxon\r
         * @param imageFile\r
-        * @deprecated\r
+        * @deprecated // move this to library\r
         */\r
        public static void removeTaxonImage(Taxon taxon, DescriptionBase<?> imageGallery, ImageFile imageFile) {\r
-               Set<DescriptionElementBase> elementsToRemove = new HashSet<DescriptionElementBase>();\r
+               Set<DescriptionElementBase> descriptionElementsToRemove = new HashSet<DescriptionElementBase>();\r
+               Set<MediaRepresentationPart> representationPartsToRemove = new HashSet<MediaRepresentationPart>();\r
                \r
                Set<DescriptionElementBase> images = imageGallery.getElements();\r
                \r
+               // overmodelling of media in cdmlib makes this a little bit complicated\r
                for(DescriptionElementBase descriptionElement : images){\r
                        for(Media media : descriptionElement.getMedia()){\r
                                for(MediaRepresentation representation : media.getRepresentations()){\r
                                        for(MediaRepresentationPart part : representation.getParts()){\r
                                                if(part.equals(imageFile)){\r
-                                                       elementsToRemove.add(descriptionElement);\r
+                                                       // because of concurrent modification, we just collect the parts to remove \r
+                                                       representationPartsToRemove.add(part);\r
                                                }\r
                                        }\r
+\r
+                                       // and then remove the representation parts here\r
+                                       for (MediaRepresentationPart part : representationPartsToRemove){\r
+                                               representation.removeRepresentationPart(part);\r
+                                       }\r
+                                       // clear set for next run\r
+                                       representationPartsToRemove.clear();\r
+                                       \r
+                                       // description elements with empty representations should be deleted as well\r
+                                       if(representation.getParts().size() == 0){\r
+                                               descriptionElementsToRemove.add(descriptionElement);\r
+                                       }\r
                                }\r
                        }\r
                }       \r
                \r
-               for(DescriptionElementBase descriptionElement : elementsToRemove){\r
+               // remove the empty description elements\r
+               for(DescriptionElementBase descriptionElement : descriptionElementsToRemove){\r
                        imageGallery.removeElement(descriptionElement);\r
                }               \r
        }\r