// $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.
*/
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
* @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)
@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) {
/**
* @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)
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
* ()
/*
* (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
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
* org.eclipse.ui.IEditorInput)
*/
/*
* (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
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
* .Composite)
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();
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);
/*
* (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;
}
}