From cb4c0c929190ef381abfccf7787913abfec9881b Mon Sep 17 00:00:00 2001 From: Andreas Kohlbecker Date: Thu, 16 Feb 2012 13:19:52 +0000 Subject: [PATCH] experimental implementation of ConceptGraphContentProvider --- .gitattributes | 3 + eu.etaxonomy.taxeditor.cdmlib/.classpath | 18 +-- eu.etaxonomy.taxeditor.editor/plugin.xml | 22 +++ .../editor/view/concept/ConceptViewPart.java | 3 +- .../graph/ConceptGraphContentProvider.java | 107 +++++++++++++++ .../graph/ConceptGraphLabelProvider.java | 86 ++++++++++++ .../view/concept/graph/ConceptGraphView.java | 128 ++++++++++++++++++ eu.etaxonomy.taxeditor.store/plugin.xml | 2 +- pom.xml | 2 +- 9 files changed, 359 insertions(+), 12 deletions(-) create mode 100644 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphContentProvider.java create mode 100644 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphLabelProvider.java create mode 100644 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java diff --git a/.gitattributes b/.gitattributes index 2245934e3..55ee497e7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -432,6 +432,9 @@ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/c eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptLabelProvider.java -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewerSorter.java -text +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphContentProvider.java -text +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphLabelProvider.java -text +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/handler/AbstractDynamicConceptRelationMenu.java -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/handler/ChangeConceptRelationshipTypeHandler.java -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/handler/ChangeConceptRelationshipTypeMenu.java -text diff --git a/eu.etaxonomy.taxeditor.cdmlib/.classpath b/eu.etaxonomy.taxeditor.cdmlib/.classpath index d33912548..bab4e6175 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/.classpath +++ b/eu.etaxonomy.taxeditor.cdmlib/.classpath @@ -1,14 +1,5 @@ - - - - - - - - - @@ -115,5 +106,14 @@ + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.editor/plugin.xml b/eu.etaxonomy.taxeditor.editor/plugin.xml index 99bef4cf7..310d67404 100644 --- a/eu.etaxonomy.taxeditor.editor/plugin.xml +++ b/eu.etaxonomy.taxeditor.editor/plugin.xml @@ -77,6 +77,13 @@ name="Concept Relations" restorable="true"> + + @@ -148,6 +155,21 @@ value="eu.etaxonomy.taxeditor.editor.view.concept"> + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java index f44d0b151..4aa081d5c 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java @@ -58,7 +58,8 @@ public class ConceptViewPart extends AbstractCdmEditorViewPart { } if(part instanceof AbstractGraphKeyEditor){ - + showEmptyPage(); + return; } if(part instanceof MultiPageTaxonEditor){ diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphContentProvider.java new file mode 100644 index 000000000..d444bc6d8 --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphContentProvider.java @@ -0,0 +1,107 @@ +/** + * + */ +package eu.etaxonomy.taxeditor.editor.view.concept.graph; + +import java.util.Set; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.zest.core.viewers.IGraphContentProvider; + + + +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonRelationship; +import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType; +import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; + +/** + * @author andreas + * + */ +public class ConceptGraphContentProvider implements IGraphContentProvider { + + /* (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) + */ + @Override + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.zest.core.viewers.IGraphContentProvider#getSource(java.lang.Object) + */ + @Override + public Object getSource(Object taxonRelationship) { + return ((TaxonRelationship)taxonRelationship).getFromTaxon(); + } + + /* (non-Javadoc) + * @see org.eclipse.zest.core.viewers.IGraphContentProvider#getDestination(java.lang.Object) + */ + @Override + public Object getDestination(Object taxonRelationship) { + return ((TaxonRelationship)taxonRelationship).getToTaxon(); + } + + /* (non-Javadoc) + * @see org.eclipse.zest.core.viewers.IGraphContentProvider#getElements(java.lang.Object) + */ + @Override + public Object[] getElements(Object inputElement) { + if(inputElement instanceof TaxonEditorInput){ + Taxon taxon = ((TaxonEditorInput) inputElement).getTaxon(); + + Map filteredTaxonRelations = new HashMap(); + getTaxonRelationshipsRecursive(filteredTaxonRelations, taxon); + + return filteredTaxonRelations.values().toArray(); + } + return new Object[0]; + } + + private void getTaxonRelationshipsRecursive(Map filteredTaxonRelations, Taxon taxon) { + // TODO extract method into new class TaxonHelper in + // eu.etaxonomy.taxeditor.model; + // see also ConceptContentProvider + for (TaxonRelationship relationship : taxon.getTaxonRelations()) { + + if (!relationship.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) + && !relationship.getType().equals(TaxonRelationshipType.INVALID_DESIGNATION_FOR()) + && !relationship.getType().equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) { + + if(!relationship.getToTaxon().equals(taxon)){ + continue; + } + + String key = relationship.getFromTaxon().getUuid().toString() + relationship.getType().getUuid(); + if(!filteredTaxonRelations.containsKey(key)) { + filteredTaxonRelations.put(key, relationship); + Taxon toTaxon = relationship.getToTaxon(); + if(toTaxon != null){ + getTaxonRelationshipsRecursive(filteredTaxonRelations, toTaxon); + + } + } + } + + + } + + + } + +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphLabelProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphLabelProvider.java new file mode 100644 index 000000000..fe431c89c --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphLabelProvider.java @@ -0,0 +1,86 @@ +/** + * + */ +package eu.etaxonomy.taxeditor.editor.view.concept.graph; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.swt.graphics.Color; +import org.eclipse.zest.core.viewers.IEntityStyleProvider; + +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonRelationship; +import eu.etaxonomy.taxeditor.store.CdmStore; + +/** + * @author andreas + * + */ +public class ConceptGraphLabelProvider extends LabelProvider implements + IEntityStyleProvider { + + + + @Override + public String getText(Object element) { + if(element instanceof Taxon){ + return ((Taxon)element).getTitleCache(); + } else if( element instanceof TaxonRelationship) { + return ((TaxonRelationship)element).getType().getRepresentation(Language.ENGLISH()).getAbbreviatedLabel(); + } + return "TODO"; + } + + @Override + public Color getNodeHighlightColor(Object entity) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Color getBorderColor(Object entity) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Color getBorderHighlightColor(Object entity) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getBorderWidth(Object entity) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public Color getBackgroundColour(Object entity) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Color getForegroundColour(Object entity) { + // TODO Auto-generated method stub + return null; + } + + @Override + public IFigure getTooltip(Object element) { + if( element instanceof TaxonRelationship) { + return new Label(((TaxonRelationship)element).getType().getRepresentation(CdmStore.getDefaultLanguage()).getLabel()); + } + return null; + } + + @Override + public boolean fisheyeNode(Object entity) { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java new file mode 100644 index 000000000..c7a2f9c06 --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java @@ -0,0 +1,128 @@ +/** + * + */ +package eu.etaxonomy.taxeditor.editor.view.concept.graph; + +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.zest.core.viewers.GraphViewer; +import org.eclipse.zest.core.widgets.ZestStyles; +import org.eclipse.zest.layouts.LayoutAlgorithm; +import org.eclipse.zest.layouts.LayoutStyles; +import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm; + +import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor; +import eu.etaxonomy.taxeditor.editor.EditorUtil; +import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; +import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor; +import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart; + +/** + * @author andreas + * + */ +public class ConceptGraphView extends AbstractCdmEditorViewPart { + + public static final String ID = "eu.etaxonomy.taxeditor.editor.view.concept.graph"; + + private GraphViewer viewer; + private LayoutAlgorithm layoutAlgoritm; + + /* (non-Javadoc) + * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) + */ + @Override + public void selectionChanged(IWorkbenchPart part, ISelection selection) { + +// if(part instanceof ConceptGraphView){ +// // ConceptGraphView is maximized +// return; +// } + + if(EditorUtil.getActiveEditor() == null){ + showEmptyPage(); + return; + } + + if(part instanceof BulkEditor){ + showEmptyPage(); + return; + } + + + if(part instanceof MultiPageTaxonEditor){ + if(! part.equals(this.part)){ + IEditorInput input = ((IEditorPart) part).getEditorInput(); + showViewer(part, new StructuredSelection(input)); + } + showViewer(); + } + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete() + */ + @Override + public boolean onComplete() { + // TODO IGNORED + return false; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.view.AbstractCdmViewPart#getViewer() + */ + @Override + public Viewer getViewer() { + return viewer; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.view.AbstractCdmViewPart#createViewer(org.eclipse.swt.widgets.Composite) + */ + @Override + public void createViewer(Composite parent) { + + viewer = new GraphViewer(parent, SWT.NONE); + getSite().setSelectionProvider(viewer); + + viewer.setContentProvider(new ConceptGraphContentProvider()); + viewer.setLabelProvider(new ConceptGraphLabelProvider()); + + viewer.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED); + + viewer.setLayoutAlgorithm(getLayoutAlgoritm(), false); + +// createMenu(); +// +// createToolbar(); + + + } + + private LayoutAlgorithm getLayoutAlgoritm() { + + if (layoutAlgoritm == null) { + // layoutAlgoritm = new CompositeLayoutAlgorithm( + // LayoutStyles.NO_LAYOUT_NODE_RESIZING, + // new LayoutAlgorithm[] { + // new TreeLayoutAlgorithm( + // LayoutStyles.NO_LAYOUT_NODE_RESIZING), + // new HorizontalShift( + // LayoutStyles.NO_LAYOUT_NODE_RESIZING) }); + + layoutAlgoritm = new TreeLayoutAlgorithm( + LayoutStyles.NO_LAYOUT_NODE_RESIZING); + layoutAlgoritm.setEntityAspectRatio(0.5); + } + return layoutAlgoritm; + } + +} diff --git a/eu.etaxonomy.taxeditor.store/plugin.xml b/eu.etaxonomy.taxeditor.store/plugin.xml index 8376ad3e2..3e81a8009 100644 --- a/eu.etaxonomy.taxeditor.store/plugin.xml +++ b/eu.etaxonomy.taxeditor.store/plugin.xml @@ -942,7 +942,7 @@ + variable="selection"> diff --git a/pom.xml b/pom.xml index b1ad12be0..9faaaaf30 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ pom UTF-8 - 3.0.10-SNAPSHOT + 3.0.10-SNAPSHOT 0.14.0 3.0.10-SNAPSHOT -- 2.34.1