eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/SelectTaxonDialog.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/TaxonNameEditorView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/UndoView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/descriptionviewersupport/DescriptionElementComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/descriptionviewersupport/DescriptionLabelComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/descriptionviewersupport/ElementWithDescription.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/descriptionviewersupport/FeatureGroupComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/descriptionviewersupport/IterableDescriptionList.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/descriptionviewersupport/TaxonDescriptionComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/descriptionviewersupport/TaxonDescriptionEditorView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/CdmUtil.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/NameEditorInput.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/NameTreeContentProvider.java -text
--- /dev/null
+/**\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy \r
+ * http://www.e-taxonomy.eu\r
+ * \r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+\r
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.events.FocusAdapter;\r
+import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.graphics.Font;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.actions.ui.description.DeleteElementCompositeAction;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.editor.NameViewer;\r
+import eu.etaxonomy.taxeditor.editor.name.EditorGroupedComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.LineBreakListener;\r
+import eu.etaxonomy.taxeditor.editor.name.LineWrapSupport;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 02.06.2008\r
+ * @version 1.0\r
+ */\r
+public class DescriptionElementComposite extends EditorGroupedComposite {\r
+ private static final Logger logger = Logger.getLogger(DescriptionElementComposite.class);\r
+\r
+ /**\r
+ * ************ COMPOSITE TYPES ************\r
+ */\r
+ public String compositeType;\r
+ public static final String TEXT_DATA = "text_data";\r
+ public static final String COMMON_TAXON_NAME = "common_taxon_name";\r
+ public static final String DISTRIBUTION = "distribution";\r
+\r
+ /**\r
+ * ************ INDENTATIONS ************\r
+ */\r
+// public static final int ACCEPTED_INDENT = 0;\r
+\r
+ /**\r
+ * ************ FONTS ************\r
+ */\r
+// public static final Font ACCEPTED_FONT = TaxEditorPlugin.getDefault()\r
+// .getFont(ITaxEditorConstants.ACCEPTED_TAXON_FONT);\r
+\r
+ /**\r
+ * ************ ICONS ************\r
+ */\r
+ public static final Image BLACK_SQUARE_ICON = TaxEditorPlugin.getDefault()\r
+ .getImage(ITaxEditorConstants.BLACK_SQUARE_ICON);\r
+\r
+ /**\r
+ * ************ TRANSFORMATIONS ************\r
+ */\r
+// public static final String ADD_GROUP_BASIONYM = "add_group_basionym";\r
+\r
+ /**\r
+ * ************ MENU ACTIONS ************\r
+ */\r
+ public Action CHANGE_TAXON_TO_SYNONYM_ACTION;\r
+\r
+ /**\r
+ * The constructor for a DescriptionElementComposite. Takes a parent Composite on which to\r
+ * create itself, and an IManagedForm for Composite life cycle methods, i.e.\r
+ * drawing borders, creating other Composites, creating line wrap support,\r
+ * etc.\r
+ * \r
+ * @param parent\r
+ * @param managedForm\r
+ */\r
+ public DescriptionElementComposite(Composite parent, IManagedForm managedForm, \r
+ String compositeType, Object data) {\r
+ super(parent, managedForm);\r
+\r
+ createNameViewer();\r
+ createBorderSupport();\r
+ createLineWrapSupport();\r
+\r
+ setData(data);\r
+ transform(compositeType);\r
+ \r
+ setFocus();\r
+ }\r
+\r
+ protected void createLineWrapSupport() {\r
+ new LineWrapSupport(getTextViewer(), managedForm);\r
+ }\r
+\r
+ /**\r
+ * All cosmetic - non-data-related, i.e. icons, fonts, etc. -\r
+ * transformations take place in this method.\r
+ * \r
+ * @param transformation\r
+ */\r
+ public void transform(String transformation) {\r
+\r
+ setIcon(BLACK_SQUARE_ICON);\r
+ createMenu();\r
+\r
+ setDirty(true);\r
+ managedForm.getForm().layout();\r
+ }\r
+\r
+ /**\r
+ * Override of Composite.setData() which passes data along to\r
+ * DescriptionElementComposite's TextViewer where appropriate.\r
+ * \r
+ * @see org.eclipse.swt.widgets.Widget#setData(java.lang.Object)\r
+ */\r
+ public void setData(Object data) {\r
+ super.setData(data);\r
+ if (data instanceof DescriptionElementBase) {\r
+\r
+ String text = "";\r
+// ((DescriptionElementBase) data).getFeature();\r
+ getTextViewer().getTextWidget().setText(text);\r
+\r
+ if (getTextViewer() instanceof NameViewer) {\r
+ ((NameViewer) getTextViewer()).setCursorToEOL();\r
+\r
+ }\r
+ }\r
+ }\r
+\r
+ private NameViewer createNameViewer() {\r
+ final NameViewer nameViewer = new NameViewer(this);\r
+ \r
+ nameViewer.setLineBreakListener(new LineBreakListener() {\r
+\r
+ @Override\r
+ public void handleSplitText(String text) {\r
+\r
+ // Line breaks are allowed in DescriptionElements\r
+\r
+ }\r
+\r
+ });\r
+ /*\r
+ nameViewer.setParseListener(new ParseListener() {\r
+\r
+ @Override\r
+ public void parse(String text) {\r
+\r
+ TaxonBase taxonBase = (TaxonBase) getData();\r
+\r
+ NonViralName nonViralName = (NonViralName) taxonBase.getName();\r
+ if (nonViralName != null) {\r
+ CdmUtil.parseFullName(nonViralName, text, null, true);\r
+ nameViewer.setShowError(nonViralName.getHasProblem());\r
+ }\r
+\r
+ setDirty(true);\r
+ }\r
+ });\r
+ */\r
+\r
+ nameViewer.getTextWidget().addFocusListener(new FocusAdapter() {\r
+ public void focusGained(FocusEvent e) {\r
+ setFocus();\r
+ }\r
+ });\r
+\r
+ this.textViewer = nameViewer;\r
+ return nameViewer;\r
+ }\r
+\r
+ private void createMenu() {\r
+ ContextMenu contextMenu = new ContextMenu(getDraggableLabel());\r
+ \r
+ // Delete this description element\r
+// Action deleteElementAction = new DeleteElementCompositeAction(\r
+// this, getTaxon());\r
+// contextMenu.addAction(deleteElementAction);\r
+ \r
+ // Add new text \r
+ }\r
+ \r
+ \r
+ public boolean setParent(Composite parent) {\r
+\r
+ return super.setParent(parent);\r
+// if (super.setParent(parent)) {\r
+//\r
+// // Has this been moved to the misapplied names group?\r
+// if (parent.getData(ITaxEditorConstants.MISAPPLIED_NAME) != null) {\r
+// new ChangeCompositeToMisappliedNameAction(this, managedForm)\r
+// .run();\r
+// }\r
+//\r
+// // Has this been moved to a HomotypicalGroup?\r
+// if (parent.getData() instanceof HomotypicalGroup) {\r
+// new AdaptCompositeToGroupAction(this,\r
+// (EditorGroupComposite) parent).run();\r
+// }\r
+// return true;\r
+//\r
+// }\r
+// return false;\r
+ }\r
+\r
+ private Taxon getTaxon() {\r
+ Composite parent = getParent();\r
+ Composite grandParent = parent.getParent();\r
+ if (grandParent != null) {\r
+ Object parentData = grandParent.getData();\r
+ if (parentData instanceof Taxon) {\r
+ return (Taxon) parentData;\r
+ }\r
+ }\r
+ throw new IllegalArgumentException(\r
+ "The parent of the DescriptionElementComposite's parent does not have a Taxon in its data field as required.");\r
+ }\r
+ \r
+}
\ No newline at end of file
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.action.MenuManager;\r
+import org.eclipse.jface.text.Document;\r
+import org.eclipse.jface.text.source.SourceViewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.graphics.Font;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
+\r
+import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
+import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.actions.ui.description.AddDescriptionElementCompositeAction;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.editor.name.EditorGroupedComposite;\r
+\r
+/**\r
+ * Composite for editing a description's label / Title Cache information\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 09.09.2008\r
+ * @version 1.0\r
+ */\r
+public class DescriptionLabelComposite extends EditorGroupedComposite {\r
+ private static final Logger logger = Logger\r
+ .getLogger(DescriptionLabelComposite.class);\r
+\r
+ /**\r
+ * ************ FONTS ************\r
+ */\r
+ public static final Font DESCRIPTION_LABEL_FONT = TaxEditorPlugin.getDefault()\r
+ .getFont(ITaxEditorConstants.ACCEPTED_TAXON_FONT);\r
+ \r
+ /**\r
+ * ************ ICONS ************\r
+ */\r
+ public static final Image DESCRIPTION_LABEL_ICON = TaxEditorPlugin.getDefault()\r
+ .getImage(ITaxEditorConstants.BLACK_SQUARE_ICON); \r
+ \r
+ public DescriptionLabelComposite(Composite parent, IManagedForm managedForm, TaxonDescription taxonDescription) {\r
+ super(parent, managedForm);\r
+\r
+ createLabelViewer();\r
+ createBorderSupport();\r
+ createLineWrapSupport();\r
+\r
+ setData(taxonDescription);\r
+ transform(null);\r
+ \r
+ setFocus();\r
+ }\r
+\r
+ @Override\r
+ public void transform(String transformation) {\r
+ setDraggable(false);\r
+ setFont(DESCRIPTION_LABEL_FONT);\r
+ setIcon(DESCRIPTION_LABEL_ICON);\r
+ \r
+ createMenu();\r
+ } \r
+ \r
+ private void createMenu() {\r
+ ContextMenu contextMenu = createContextMenu();\r
+ \r
+ MenuManager menuManager = new MenuManager("Add description element");\r
+ \r
+// if (!(this.getParent() instanceof TaxonDescriptionComposite)) {\r
+// throw new ClassCastException(\r
+// "The DescriptionLabelComposite's parent is not a TaxonDescriptionComposite as expected.");\r
+// }\r
+// TaxonDescriptionComposite parentComposite = (TaxonDescriptionComposite) this.getParent();\r
+ Composite parentComposite = this.getParent();\r
+ \r
+ IDescriptionService descriptionService = TaxEditorPlugin.getDefault().getDescriptionService();\r
+ TermVocabulary<Feature> features = descriptionService.getDefaultFeatureVocabulary();\r
+ for (Feature feature : features) {\r
+ Action action = new AddDescriptionElementCompositeAction(parentComposite, managedForm, feature);\r
+ menuManager.add(action);\r
+ }\r
+ contextMenu.addSubmenu(menuManager);\r
+ }\r
+\r
+ private void createLabelViewer() { \r
+ this.textViewer = new SourceViewer(this, null, SWT.WRAP | SWT.MULTI | SWT.RESIZE);\r
+ this.textViewer.setDocument(new Document("Test me"));\r
+ this.textViewer.getTextWidget().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+ }\r
+\r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 08.09.2008\r
+ * @version 1.0\r
+ * \r
+ * Contains DescriptionElementBase and the Description to which the element\r
+ * belongs. Used as a helper class in the IterableDescriptionList, to tell when\r
+ * the iterator is returning elements from a different description. \r
+ */\r
+public class ElementWithDescription {\r
+ private static final Logger logger = Logger\r
+ .getLogger(ElementWithDescription.class);\r
+ \r
+ DescriptionElementBase element;\r
+ TaxonDescription description;\r
+ \r
+ public DescriptionElementBase getElement() {\r
+ return element;\r
+ }\r
+ public void setElement(DescriptionElementBase element) {\r
+ this.element = element;\r
+ }\r
+ public TaxonDescription getDescription() {\r
+ return description;\r
+ }\r
+ public void setDescription(TaxonDescription description) {\r
+ this.description = description;\r
+ }\r
+ \r
+ \r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.taxeditor.editor.GroupCompositeLabel;\r
+import eu.etaxonomy.taxeditor.editor.name.EditorGroupComposite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 11.09.2008\r
+ * @version 1.0\r
+ */\r
+public class FeatureGroupComposite extends EditorGroupComposite {\r
+ private static final Logger logger = Logger\r
+ .getLogger(FeatureGroupComposite.class);\r
+\r
+ public FeatureGroupComposite(Composite parent, IManagedForm managedForm,\r
+ Feature feature) {\r
+ super(parent, managedForm, feature);\r
+\r
+ TableWrapLayout tlLayout = new TableWrapLayout();\r
+ tlLayout.topMargin = 0;\r
+ tlLayout.leftMargin = 10;\r
+ setLayout(tlLayout);\r
+ \r
+ Composite groupCompositeLabel = new GroupCompositeLabel(this, feature.getLabel());\r
+ }\r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
+/**\r
+ * Retrieves a taxon's descriptive elements, grouped by TaxonDescription, then\r
+ * returns them using an iterator and a sort order optionally passed in.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 09.05.2008\r
+ * @version 1.0\r
+ */\r
+public class IterableDescriptionList implements Iterable<ElementWithDescription> {\r
+ private static final Logger logger = Logger\r
+ .getLogger(IterableDescriptionList.class);\r
+ \r
+ private Taxon taxon;\r
+\r
+ public IterableDescriptionList(Taxon taxon) {\r
+ this.taxon = taxon;\r
+ }\r
+\r
+ @Override\r
+ public Iterator<ElementWithDescription> iterator() {\r
+ return new DescriptionElementIterator(taxon);\r
+ }\r
+ \r
+ class DescriptionElementIterator implements Iterator<ElementWithDescription> {\r
+\r
+ List<ElementWithDescription> elementList;\r
+ int index = 0;\r
+ \r
+ public DescriptionElementIterator(Taxon taxon) {\r
+ elementList = new ArrayList<ElementWithDescription>();\r
+ \r
+ for (TaxonDescription taxonDescription : taxon.getDescriptions()) {\r
+ for (DescriptionElementBase descriptionElement : taxonDescription.getElements()) {\r
+ \r
+ // TODO ask Andreas M. to add a descriptionElement.getTaxonDescription\r
+ ElementWithDescription element = new ElementWithDescription();\r
+ element.setDescription(taxonDescription);\r
+ element.setElement(descriptionElement);\r
+ \r
+ elementList.add(element);\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public boolean hasNext() {\r
+ if (elementList.size() == index) {\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public ElementWithDescription next() {\r
+ ElementWithDescription next = elementList.get(index);\r
+ index++;\r
+ return next;\r
+ }\r
+\r
+ @Override\r
+ public void remove() {}\r
+ }\r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 08.09.2008\r
+ * @version 1.0\r
+ */\r
+public class TaxonDescriptionComposite extends Composite {\r
+ private static final Logger logger = Logger\r
+ .getLogger(TaxonDescriptionComposite.class);\r
+\r
+ TaxonDescriptionComposite(Composite parent) {\r
+ super(parent, SWT.NONE);\r
+\r
+ // TODO take all formatting info out of GroupComposite,\r
+ // EditorGroupComposite, merge this class with one of those\r
+ \r
+ \r
+ }\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.jface.text.Document;\r
+import org.eclipse.jface.text.TextViewer;\r
+import org.eclipse.jface.text.source.SourceViewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditorView;\r
+import eu.etaxonomy.taxeditor.editor.name.EditorGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.EditorGroupedComposite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 25.08.2008\r
+ * @version 1.0\r
+ */\r
+public class TaxonDescriptionEditorView extends AbstractTaxonEditorView {\r
+ private static final Logger logger = Logger\r
+ .getLogger(TaxonDescriptionEditorView.class);\r
+ \r
+\r
+ @Override\r
+ public void doSave(IProgressMonitor monitor) {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+\r
+ @Override\r
+ public void doSaveAs() {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+\r
+ @Override\r
+ public boolean isDirty() {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public boolean isSaveAsAllowed() {\r
+ // TODO Auto-generated method stub\r
+ return false;\r
+ }\r
+ \r
+ @Override\r
+ public void createPartControl(Composite composite) {\r
+\r
+ super.createPartControl(composite);\r
+ \r
+ Taxon taxon = getTaxon();\r
+ \r
+ Set<TaxonDescription> descriptions = taxon.getDescriptions();\r
+ \r
+ // If the Taxon has no descriptions, give it an empty one to display\r
+ if (descriptions == null || descriptions.size() == 0) {\r
+ descriptions.add(TaxonDescription.NewInstance(taxon)); \r
+ }\r
+ \r
+ // Iterate through taxon's descriptions\r
+ for (TaxonDescription description : descriptions) {\r
+ \r
+ // The property sheet should show the first Description upon this EditorView\r
+ // receiving focus\r
+ if (defaultPropertySheetObject == null) {\r
+ setDefaultPropertySheetObject(description);\r
+ }\r
+ \r
+ // Create a composite for the description\r
+ EditorGroupComposite descriptionComposite = new EditorGroupComposite(\r
+ parent, managedForm, description);\r
+ descriptionComposite.setDroppable(false);\r
+ \r
+ // Add a grouped composite for the description's label\r
+ EditorGroupedComposite descriptionLabelComposite = new DescriptionLabelComposite(\r
+ descriptionComposite, managedForm, description);\r
+ \r
+ // Iterate through description's elements, group by feature\r
+ Map<Feature, Set<DescriptionElementBase>> features = \r
+ new HashMap<Feature, Set<DescriptionElementBase>>(); \r
+ for (DescriptionElementBase element : description.getElements()) {\r
+ Feature feature = element.getFeature();\r
+ Set<DescriptionElementBase> elements = features.get(feature);\r
+ if (elements == null) {\r
+ elements = new HashSet<DescriptionElementBase>();\r
+ features.put(feature, elements);\r
+ }\r
+ elements.add(element);\r
+ }\r
+ \r
+ // Create a composite for each feature, composites for its elements\r
+ for (Feature feature : features.keySet()) {\r
+ EditorGroupComposite featureComposite = new FeatureGroupComposite(\r
+ descriptionComposite, managedForm, feature);\r
+ \r
+ for (DescriptionElementBase element : features.get(feature)) {\r
+ new DescriptionElementComposite(\r
+ featureComposite, managedForm, null, element);\r
+ }\r
+ }\r
+ }\r
+ \r
+ \r
+ \r
+// addFeatureComposite(descriptionComposite, "Ecology");\r
+// addFeatureComposite(descriptionComposite, "Etymology"); \r
+ \r
+// Make a Description group to hold all elements\r
+// IterableDescriptionList elementList = new IterableDescriptionList(taxon);\r
+// \r
+// boolean hasElements = false;\r
+// \r
+// for (ElementWithDescription descriptionElement : elementList) {\r
+// \r
+// // Display first DescriptionElement in property sheet \r
+// if (!hasElements) {\r
+// hasElements = true;\r
+// }\r
+// hasElements = true;\r
+// new DescriptionElementComposite(descriptionComposite, managedForm, DescriptionElementComposite.TEXT_DATA, descriptionElement);\r
+// }\r
+// \r
+// // If taxon has no DescriptionElements, create an empty DescriptionElementComposite\r
+// if (!hasElements) {\r
+// DescriptionElementBase newElement = TextData.NewInstance(); \r
+// new DescriptionElementComposite(descriptionComposite, managedForm, DescriptionElementComposite.TEXT_DATA, newElement);\r
+// provider.setSelection(\r
+// new StructuredSelection(\r
+// new PropertySourceAdapter(newElement).getPropertySource()\r
+// ));\r
+// }\r
+\r
+ // Listen for names being dragged outside of existing homotypic groups -\r
+ // user wants to create a new group\r
+// Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};\r
+// int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
+// DropTarget target = new DropTarget(parent, operations);\r
+// target.setTransfer(types);\r
+// target.addDropListener(new DropTargetAdapter() {\r
+// \r
+// public void drop(DropTargetEvent event) {\r
+// \r
+// EditorGroupComposite newGroupComposite = new EditorGroupComposite(parent, managedForm, new HomotypicalGroup()); \r
+// \r
+// NameComposite nameComposite = (NameComposite) event.data;\r
+// nameComposite.setParent(newGroupComposite); \r
+// \r
+// new AdaptCompositeToGroupAction(nameComposite, newGroupComposite).run();\r
+// } \r
+// });\r
+ \r
+ // We've added elements to the managed form, so redraw it\r
+ scrolledForm.reflow(true);\r
+ }\r
+ \r
+ private void addFeatureComposite (Composite composite, String featureString) {\r
+ \r
+ // Add a group composite for a feature type\r
+ Feature feature = Feature.NewInstance();\r
+ EditorGroupComposite featureComposite = new FeatureGroupComposite(composite, managedForm, feature);\r
+ \r
+ addFeatureComposite(featureComposite);\r
+ addFeatureComposite(featureComposite);\r
+ }\r
+ \r
+ private void addFeatureComposite (Composite composite) {\r
+ // Add a feature composite\r
+ EditorGroupedComposite featureComposite = new EditorGroupedComposite(composite, managedForm) {\r
+\r
+ @Override\r
+ public void transform(String transformation) {\r
+ // TODO Auto-generated method stub\r
+ \r
+ }\r
+ };\r
+ \r
+ featureComposite.setIcon(TaxEditorPlugin.getDefault()\r
+ .getImage(ITaxEditorConstants.BLACK_SQUARE_ICON));\r
+ \r
+ TextViewer featureTypeSourceViewer = new SourceViewer(featureComposite, null, SWT.NONE);\r
+ featureTypeSourceViewer.setDocument(new Document(""));\r
+ featureComposite.setTextViewer(featureTypeSourceViewer);\r
+ featureTypeSourceViewer.getTextWidget().setText("Test me");\r
+ \r
+ featureComposite.setDraggable(true);\r
+ }\r
+}\r