all polytomouskey related handler are now extended from RemotingCdmHandler
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / polytomous / PolytomousKeyListEditor.java
index 67236cfc13c9cd17a1d5597394c38969371e8dfd..8dcc87f8cf4002be16902a83686079ec249c7b17 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
  * Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy 
+ * 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.
  */
@@ -33,16 +33,21 @@ import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.EditorPart;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 
 /**
  * @author n.hoffmann
@@ -50,12 +55,15 @@ import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
  * @version 1.0
  */
 public class PolytomousKeyListEditor extends EditorPart implements
-               IConversationEnabled, IDirtyMarkableSelectionProvider {
+               IConversationEnabled, IDirtyMarkable,
+               IPolytomousKeyEditorPage {
 
        private class LinkListener extends MouseAdapter {
+
+
                /*
                 * (non-Javadoc)
-                * 
+                *
                 * @see
                 * org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events
                 * .MouseEvent)
@@ -63,29 +71,47 @@ public class PolytomousKeyListEditor extends EditorPart implements
                @Override
                public void mouseUp(MouseEvent event) {
 
-                       Table table = (Table) event.widget;
-                       // Determine where the mouse was clicked
-                       Point point = new Point(event.x, event.y);
-
-                       int selectedColumn = getSelectedColumn(table, point);
-
-                       if (selectedColumn == 3) {
-                               PolytomousKeyNode node = (PolytomousKeyNode) getTableItem(
-                                               table, point).getData();
-                               Object linkData = getItemLinkData(node);
-                               if (linkData instanceof PolytomousKeyNode) {
-                                       viewer.setSelection(new StructuredSelection(linkData), true);
-                               } else if (linkData instanceof Taxon) {
-                                       try {
-                                               EditorUtil.openTaxonBase(((Taxon) linkData).getUuid());
-                                       } catch (PartInitException e) {
-                                               EditorUtil.error(getClass(), e);
-                                       }
-                               }
-                       }
+                       if(event.button == 1 && event.count == 2) {
+                       Table table = (Table) event.widget;
+                       // Determine where the mouse was clicked
+                       Point point = new Point(event.x, event.y);
+
+                       int selectedColumn = getSelectedColumn(table, point);
+
+                       if (table == null || point == null ){
+                           return;
+                       }
+
+                      TableItem item = getTableItem(
+                        table, point);
+                      PolytomousKeyNode node ;
+                      if (item != null){
+                        node =(PolytomousKeyNode) item.getData();
+                      } else{
+                          return;
+                      }
+                       if (selectedColumn == 4) {
+                           PolytomousKeyNode linkData = getItemLinkData(node);
+                           if (linkData != null) {
+                               viewer.setSelection(new StructuredSelection(linkData), true);
+                           }
+                       }
+                       if (selectedColumn == 5) {
+                           Taxon taxon = getItemTaxon(node);
+                           if (taxon != null) {
+                               try {
+                                   EditorUtil.openTaxonBase((taxon).getUuid());
+                               } catch (PartInitException e) {
+                                   MessagingUtils.error(getClass(), e);
+                               }
+                           }
+                       }
+                   }
+
 
                }
 
+
                private int getSelectedColumn(Table table, Point point) {
                        TableItem item = getTableItem(table, point);
                        if (item != null) {
@@ -107,19 +133,32 @@ public class PolytomousKeyListEditor extends EditorPart implements
                /**
                 * @return
                 */
-               private Object getItemLinkData(PolytomousKeyNode node) {
-                       return node.getChildren().isEmpty() ? node.getTaxon() : node
+               private PolytomousKeyNode getItemLinkData(PolytomousKeyNode node) {
+                       return node.getChildren().isEmpty() ? null : node
                                        .getChildAt(0);
                }
+
+             /**
+         * @return
+         */
+        private Taxon getItemTaxon(PolytomousKeyNode node) {
+            return node.getTaxon();
+        }
        }
 
        public static final String ID = "eu.etaxonomy.taxeditor.editor.key.polytomous.list";
 
        private TableViewer viewer;
 
+       private final KeyEditor editor;
+
+       public PolytomousKeyListEditor(KeyEditor editor) {
+               this.editor = editor;
+       }
+
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
         * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
@@ -131,7 +170,7 @@ public class PolytomousKeyListEditor extends EditorPart implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
         * ()
@@ -144,18 +183,17 @@ public class PolytomousKeyListEditor extends EditorPart implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
         * IProgressMonitor)
         */
        @Override
        public void doSave(IProgressMonitor monitor) {
-
        }
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.EditorPart#doSaveAs()
         */
        @Override
@@ -164,7 +202,7 @@ public class PolytomousKeyListEditor extends EditorPart implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
         * org.eclipse.ui.IEditorInput)
         */
@@ -177,18 +215,17 @@ public class PolytomousKeyListEditor extends EditorPart implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.EditorPart#isDirty()
         */
        @Override
        public boolean isDirty() {
-               // TODO Auto-generated method stub
                return false;
        }
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
         */
        @Override
@@ -198,7 +235,7 @@ public class PolytomousKeyListEditor extends EditorPart implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
         * .Composite)
@@ -225,12 +262,24 @@ public class PolytomousKeyListEditor extends EditorPart implements
 
                PolytomousKey key = ((PolytomousKeyEditorInput) getEditorInput())
                                .getKey();
-
+               key = HibernateProxyHelper.deproxy(key, PolytomousKey.class);
+               key.setRoot(HibernateProxyHelper.deproxy(key.getRoot(), PolytomousKeyNode.class));
                setPartName(key.getTitleCache());
 
-               viewer.setInput(key);
+               viewer.setInput(getEditorInput());
        }
 
+       public int getTableItemCount() {
+           if (viewer != null && viewer.getTable() != null) {
+               return viewer.getTable().getItemCount();
+           }
+
+           return 0;
+       }
+
+       public PolytomousKey getViewerInputKey() {
+           return ((PolytomousKeyEditorInput) viewer.getInput()).getKey();
+       }
        private void createMenu() {
                // register context menu
                MenuManager menuManager = new MenuManager();
@@ -240,14 +289,15 @@ public class PolytomousKeyListEditor extends EditorPart implements
 
                Control control = viewer.getControl();
                Menu menu = menuManager.createContextMenu(control);
+               menuManager.setRemoveAllWhenShown(true);
                control.setMenu(menu);
        }
 
        // This will create the columns for the table
        private void createColumns(TableViewer viewer) {
                Table table = viewer.getTable();
-               String[] titles = { "Node Number", "Question", "Statement", "Link" };
-               int[] bounds = { 50, 200, 200, 100 };
+               String[] titles = { "Node", "Question", "Edge",  "Statement", "Link", "Taxon" };
+               int[] bounds = { 50, 200, 50, 200, 100, 200 };
 
                for (int i = 0; i < titles.length; i++) {
                        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
@@ -263,33 +313,77 @@ public class PolytomousKeyListEditor extends EditorPart implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
         */
        @Override
        public void setFocus() {
-               setPartName("Test");
+               PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setFocus();
        }
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
         * java.lang.Object)
         */
        @Override
        public void changed(Object element) {
-               viewer.update(element, null);
+        if(element != null) {
+            viewer.update(element, null);
 
-               if (element instanceof PolytomousKeyNode) {
-                       List<PolytomousKeyNode> children = ((PolytomousKeyNode) element)
-                                       .getParent().getChildren();
-                       for (PolytomousKeyNode child : children) {
-                               viewer.update(child, null);
-                       }
+        }
+
+        if (element instanceof PolytomousKeyNode) {
+            List<PolytomousKeyNode> children = ((PolytomousKeyNode) element)
+                    .getParent().getChildren();
+            for (PolytomousKeyNode child : children) {
+                viewer.update(child, null);
+            }
+        }
+
+        viewer.refresh();
+
+       }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+     */
+    @Override
+    public void forceDirty() {
+        changed(null);
+    }
+
+       /*
+        * (non-Javadoc)
+        *
+        * @see
+        * eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(
+        * eu.etaxonomy.cdm.model.common.CdmBase)
+        */
+       @Override
+       public boolean postOperation(CdmBase objectAffectedByOperation) {
+               viewer.refresh();
+               getConversationHolder().bind();
+               getConversationHolder().commit(true);
+               editor.changed(objectAffectedByOperation);
+
+               if (objectAffectedByOperation != null) {
+                       viewer.setSelection(new StructuredSelection(
+                                       objectAffectedByOperation), true);
                }
+               return true;
+       }
 
+       /*
+        * (non-Javadoc)
+        *
+        * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete()
+        */
+       @Override
+       public boolean onComplete() {
+               return true;
        }
 
 }