eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyLabelProvider.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java -text
-eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListViewer.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListItem.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListLabelProvider.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/CreateNodeHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/DeleteNodeHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java -text
// $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.
-*/
+ * 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.key.polytomous;
-import org.eclipse.jface.viewers.IContentProvider;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
+import eu.etaxonomy.cdm.model.description.PolytomousKey;
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
+
/**
* @author n.hoffmann
* @created Apr 4, 2011
* @version 1.0
*/
-public class PolytomousKeyListContentProvider implements IContentProvider {
+public class PolytomousKeyListContentProvider implements
+ IStructuredContentProvider {
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
@Override
public void dispose() {
- // TODO Auto-generated method stub
-
}
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface
+ * .viewers.Viewer, java.lang.Object, java.lang.Object)
*/
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- // TODO Auto-generated method stub
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java
+ * .lang.Object)
+ */
+ @Override
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof PolytomousKey) {
+ List result = new ArrayList();
+
+ PolytomousKeyNode root = ((PolytomousKey) inputElement).getRoot();
+ // result.add(root);
+ // result.addAll(root.getChildren());
+ getChildren(result, root);
+ return result.toArray();
+ }
+ // else if (inputElement instanceof PolytomousKeyNode) {
+ // return ((PolytomousKeyNode) inputElement).getChildren().toArray();
+ // }
+
+ return null;
}
+ private void getChildren(List result, PolytomousKeyNode node) {
+ result.add(node);
+
+ for (PolytomousKeyNode internalNode : node.getChildren()) {
+ getChildren(result, internalNode);
+ }
+ }
}
package eu.etaxonomy.taxeditor.editor.key.polytomous;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
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.ui.forms.CdmFormFactory;
/**
public class PolytomousKeyListEditor extends EditorPart implements
IConversationEnabled {
+ 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 pt = new Point(event.x, event.y);
+
+ final TableItem item = table.getItem(pt);
+ if (item != null) {
+ // Determine which column was selected
+ int column = -1;
+ for (int i = 0, n = table.getColumnCount(); i < n; i++) {
+ Rectangle rect = item.getBounds(i);
+ if (rect.contains(pt)) {
+ // This is the selected column
+ column = i;
+ break;
+ }
+ }
+ if (column == 3) {
+ PolytomousKeyNode node = (PolytomousKeyNode) item.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);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @return
+ */
+ private Object getItemLinkData(PolytomousKeyNode node) {
+ return node.getChildren().isEmpty() ? node.getTaxon() : node
+ .getChildAt(0);
+ }
+ }
+
public static final String ID = "eu.etaxonomy.taxeditor.editor.key.polytomous.list";
private CdmFormFactory formFactory;
private Composite container;
- private PolytomousKeyListViewer viewer;
+ private TableViewer viewer;
/*
* (non-Javadoc)
*/
@Override
public void createPartControl(Composite parent) {
- container = formFactory.createComposite(parent);
- viewer = new PolytomousKeyListViewer(container);
+ FillLayout fillLayout = new FillLayout();
+ fillLayout.marginWidth = 0;
+ fillLayout.marginHeight = 0;
+ fillLayout.type = SWT.VERTICAL;
+ parent.setLayout(fillLayout);
+
+ viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
+ | SWT.V_SCROLL | SWT.FULL_SELECTION);
+ getSite().setSelectionProvider(viewer);
+
+ createColumns(viewer);
+ viewer.getControl().addMouseListener(new LinkListener());
+ viewer.setContentProvider(new PolytomousKeyListContentProvider());
+ viewer.setLabelProvider(new PolytomousKeyListLabelProvider());
+
+ // viewer.getControl().setLayoutData(CdmFormFactory.FILL());
+
PolytomousKey key = ((PolytomousKeyEditorInput) getEditorInput())
.getKey();
+
viewer.setInput(key);
}
+ // 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 };
+
+ for (int i = 0; i < titles.length; i++) {
+ TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
+ column.getColumn().setText(titles[i]);
+ column.getColumn().setWidth(bounds[i]);
+ column.getColumn().setResizable(true);
+ column.getColumn().setMoveable(true);
+ }
+ table.setHeaderVisible(true);
+ table.setLinesVisible(false);
+
+ }
+
/*
* (non-Javadoc)
*
--- /dev/null
+// $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.key.polytomous;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.forms.IFormPart;
+import org.eclipse.ui.forms.IManagedForm;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.description.KeyStatement;
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.forms.AbstractCdmFormElement;
+import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
+
+/**
+ * @author n.hoffmann
+ * @created Apr 13, 2011
+ * @version 1.0
+ */
+public class PolytomousKeyListItem extends AbstractCdmFormElement implements
+ IFormPart {
+
+ private boolean dirty;
+ private final PolytomousKeyNode entity;
+
+ private SelectionListener linkSelectionListener;
+
+ /**
+ * @param formFactory
+ * @param layoutComposite
+ */
+ protected PolytomousKeyListItem(CdmFormFactory formFactory,
+ Composite layoutComposite, PolytomousKeyNode entity) {
+ super(formFactory, layoutComposite);
+
+ // layoutComposite.setBackground(Display.getDefault().getSystemColor(
+ // SWT.COLOR_CYAN));
+
+ this.entity = (PolytomousKeyNode) HibernateProxyHelper.deproxy(entity);
+
+ Label label_nodeNumber = new Label(getLayoutComposite(), SWT.NULL);
+ label_nodeNumber.setText(getItemNumber());
+
+ Label label_question = new Label(getLayoutComposite(), SWT.NULL);
+ label_question.setText(getItemQuestion());
+
+ Label label_statement = new Label(getLayoutComposite(), SWT.NULL);
+ label_statement.setText(getItemStatement());
+ label_statement.setLayoutData(CdmFormFactory.FILL_HORIZONTALLY());
+
+ Link link = new Link(getLayoutComposite(), SWT.NONE);
+ link.setText("<a>" + getItemLink() + "</a>");
+ link.setData(getItemLinkData());
+ link.addSelectionListener(getLinkSelectionListener());
+
+ // Label label_link = new Label(getLayoutComposite(), SWT.NULL);
+ // label_link.setText(link);
+
+ }
+
+ /**
+ * @return
+ */
+ private SelectionListener getLinkSelectionListener() {
+ if (linkSelectionListener == null) {
+ linkSelectionListener = new SelectionAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org
+ * .eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ Object data = e.widget.getData();
+
+ if (data instanceof Taxon) {
+ try {
+ EditorUtil.openTaxonBase(((Taxon) data).getUuid());
+ } catch (PartInitException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ }
+ }
+ };
+ }
+ return linkSelectionListener;
+ }
+
+ private String getItemNumber() {
+ if (isParentRoot()) {
+ return "root";
+ } else {
+ PolytomousKeyNode parent = getParent();
+ String itemNumber = parent.getNodeNumber() != null ? parent
+ .getNodeNumber().toString() : "NaN";
+
+ int index = parent.getChildren().indexOf(entity);
+
+ for (int i = 0; i < index; i++) {
+ itemNumber += "'";
+ }
+
+ return itemNumber;
+ }
+ }
+
+ private String getItemQuestion() {
+ if (isParentRoot()) {
+ return "";
+ } else {
+ KeyStatement question = getParent().getQuestion();
+ return question != null ? question.getLabelText(CdmStore
+ .getDefaultLanguage()) : "";
+ }
+
+ }
+
+ private String getItemStatement() {
+ KeyStatement statement = entity.getStatement();
+ return statement != null ? CdmUtils.Nz(statement.getLabelText(CdmStore
+ .getDefaultLanguage())) : "No statement";
+ }
+
+ private String getItemLink() {
+ String taxonString = entity.getTaxon() != null ? entity.getTaxon()
+ .getName().getTitleCache() : "Taxon empty";
+
+ return entity.getChildren().isEmpty() ? taxonString : entity
+ .getNodeNumber().toString();
+ }
+
+ /**
+ * @return
+ */
+ private Object getItemLinkData() {
+ return entity.getChildren().isEmpty() ? entity.getTaxon() : entity
+ .getChildAt(0);
+ }
+
+ private PolytomousKeyNode getParent() {
+ return entity.getParent();
+ }
+
+ private boolean isParentRoot() {
+ return getParent() == null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm
+ * )
+ */
+ @Override
+ public void initialize(IManagedForm form) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.IFormPart#isDirty()
+ */
+ @Override
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.IFormPart#commit(boolean)
+ */
+ @Override
+ public void commit(boolean onSave) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.IFormPart#setFormInput(java.lang.Object)
+ */
+ @Override
+ public boolean setFormInput(Object input) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.IFormPart#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.IFormPart#isStale()
+ */
+ @Override
+ public boolean isStale() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.IFormPart#refresh()
+ */
+ @Override
+ public void refresh() {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see eu.etaxonomy.taxeditor.ui.forms.ISelectable#setSelected(boolean)
+ */
+ @Override
+ public void setSelected(boolean selected) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.IFormPart#dispose()
+ */
+ @Override
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * @return the entity
+ */
+ public PolytomousKeyNode getEntity() {
+ return entity;
+ }
+
+}
--- /dev/null
+// $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.key.polytomous;
+
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.model.description.KeyStatement;
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Apr 18, 2011
+ * @version 1.0
+ */
+public class PolytomousKeyListLabelProvider extends StyledCellLabelProvider
+ implements ITableLabelProvider {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang
+ * .Object, int)
+ */
+ @Override
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang
+ * .Object, int)
+ */
+ @Override
+ public String getColumnText(Object element, int columnIndex) {
+ if (element instanceof PolytomousKeyNode) {
+
+ PolytomousKeyNode node = (PolytomousKeyNode) element;
+
+ switch (columnIndex) {
+ case 0:
+ return getItemNumber(node);
+ case 1:
+ return getItemQuestion(node);
+ case 2:
+ return getItemStatement(node);
+ case 3:
+ return getItemLink(node);
+ }
+ }
+ return null;
+ }
+
+ private String getItemNumber(PolytomousKeyNode node) {
+ if (isParentRoot(node)) {
+ return "root";
+ } else {
+ PolytomousKeyNode parent = getParent(node);
+ String itemNumber = parent.getNodeNumber() != null ? parent
+ .getNodeNumber().toString() : "NaN";
+
+ int index = parent.getChildren().indexOf(node);
+
+ for (int i = 0; i < index; i++) {
+ itemNumber += "'";
+ }
+
+ return itemNumber;
+ }
+ }
+
+ private String getItemQuestion(PolytomousKeyNode node) {
+ if (isParentRoot(node)) {
+ return "";
+ } else {
+ KeyStatement question = getParent(node).getQuestion();
+ return question != null ? question.getLabelText(CdmStore
+ .getDefaultLanguage()) : "";
+ }
+
+ }
+
+ private String getItemStatement(PolytomousKeyNode node) {
+ KeyStatement statement = node.getStatement();
+ return statement != null ? CdmUtils.Nz(statement.getLabelText(CdmStore
+ .getDefaultLanguage())) : "No statement";
+ }
+
+ private String getItemLink(PolytomousKeyNode node) {
+ String taxonString = node.getTaxon() != null ? node.getTaxon()
+ .getName().getTitleCache() : "Taxon empty";
+
+ return node.getChildren().isEmpty() ? taxonString : node
+ .getNodeNumber().toString();
+ }
+
+ private PolytomousKeyNode getParent(PolytomousKeyNode node) {
+ return node.getParent();
+ }
+
+ private boolean isParentRoot(PolytomousKeyNode node) {
+ return getParent(node) == null;
+ }
+
+}
+++ /dev/null
-// $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.key.polytomous;
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.forms.widgets.ScrolledForm;
-
-import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
-
-/**
- * @author n.hoffmann
- * @created Apr 4, 2011
- * @version 1.0
- */
-public class PolytomousKeyListViewer extends Viewer {
-
- private Object input;
- private ISelection selection;
-
- private Control control;
-
- private final CdmFormFactory formFactory;
-
- private final ScrolledForm form;
-
- public PolytomousKeyListViewer(Composite parent) {
- formFactory = new CdmFormFactory(parent.getDisplay());
- form = formFactory.createScrolledForm(parent);
- form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.Viewer#getControl()
- */
- @Override
- public Control getControl() {
- return control;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.Viewer#getInput()
- */
- @Override
- public Object getInput() {
- return input;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.Viewer#getSelection()
- */
- @Override
- public ISelection getSelection() {
- return selection;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.Viewer#refresh()
- */
- @Override
- public void refresh() {
-
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
- */
- @Override
- public void setInput(Object input) {
- this.input = input;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.jface.viewers.Viewer#setSelection(org.eclipse.jface.viewers
- * .ISelection, boolean)
- */
- @Override
- public void setSelection(ISelection selection, boolean reveal) {
- this.selection = selection;
- }
-
-}