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.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionElementComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionFeatureGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionLabelComposite;\r
import eu.etaxonomy.taxeditor.editor.name.AcceptedNameComposite;\r
import eu.etaxonomy.taxeditor.editor.name.ConceptComposite;\r
import eu.etaxonomy.taxeditor.editor.name.ConceptGroupComposite;\r
private static IFreeTextElementFactory factory;\r
\r
private Map<Taxon, IManagedForm> nameForms;\r
- \r
-\r
- /**\r
- * Returns a taxon's composite which holds all misapplied names.\r
- */\r
- private Map<Taxon, Composite> misappliedComposites;\r
+ private Map<Taxon, IManagedForm> descriptionForms;\r
\r
public static IFreeTextElementFactory getDefault() {\r
if (factory == null) {\r
\r
// Put the taxon's form in the form map\r
Assert.isNotNull(form, "A non-null IManagedForm must be provided.");\r
- getTaxonForms().put(taxon, form);\r
+ getTaxonNameForms().put(taxon, form);\r
\r
// Create a homotypic group composite for the accepted taxon\r
HomotypicalGroup group = taxon.getHomotypicGroup();\r
// Create a name composite for the accepted taxon\r
Composite acceptedNameComposite =\r
new AcceptedNameComposite(groupComposite, form, taxon);\r
- \r
\r
// Return the name composite\r
return acceptedNameComposite;\r
public Composite createSynonym(Taxon taxon, Synonym synonym) {\r
\r
// Get the taxon's form\r
- IManagedForm form = getForm(taxon);\r
+ IManagedForm form = getNameForm(taxon);\r
Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");\r
\r
// Get the synonym's homotypic group\r
\r
// If the group doesn't yet have a composite, create one and add it to the repository\r
Composite groupComposite = \r
- EditorController.getEditor(taxon).getHomotypicGroup(group);\r
+ EditorController.getNameEditor(taxon).getHomotypicGroup(group);\r
if (groupComposite == null) {\r
groupComposite = createHomotypicalGroup(taxon, group);\r
}\r
public Composite createMisappliedName(Taxon taxon, Taxon misappliedName) {\r
\r
// Get the taxon's form\r
- IManagedForm form = getForm(taxon);\r
+ IManagedForm form = getNameForm(taxon);\r
Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");\r
\r
// If there is no composite for misapplied names, \r
// create one and add it to the repository\r
Composite groupComposite = \r
- EditorController.getEditor(taxon).getMisappliedGroup();\r
+ EditorController.getNameEditor(taxon).getMisappliedGroup();\r
if (groupComposite == null) {\r
groupComposite = createMisappliedGroup(taxon);\r
}\r
public Composite createMisappliedGroup(Taxon taxon) {\r
\r
// Get the taxon's form\r
- IManagedForm form = getForm(taxon);\r
+ IManagedForm form = getNameForm(taxon);\r
+ Assert.isNotNull(form, "No IManagedForm has been provided for the misapplied group's accepted taxon.");\r
\r
// Create the group composite\r
Composite groupComposite = new MisappliedGroupComposite(getTopLevelComposite(form), taxon);\r
\r
// Put the group composite before concept group composite, if any\r
Composite conceptGroupComposite = \r
- EditorController.getEditor(taxon).getConceptGroup();\r
+ EditorController.getNameEditor(taxon).getConceptGroup();\r
if (conceptGroupComposite != null) {\r
groupComposite.moveAbove(conceptGroupComposite);\r
}\r
public Composite createHomotypicalGroup(Taxon taxon, HomotypicalGroup group) {\r
\r
// Get the taxon's form\r
- IManagedForm form = getForm(taxon);\r
+ IManagedForm form = getNameForm(taxon);\r
+ Assert.isNotNull(form, "No IManagedForm has been provided for the homotypical group's accepted taxon.");\r
\r
// Create the group composite\r
Composite groupComposite = new HomotypicalGroupComposite(getTopLevelComposite(form), taxon, group);\r
return groupComposite;\r
}\r
\r
- private Map<Taxon, IManagedForm> getTaxonForms() {\r
+ private Map<Taxon, IManagedForm> getTaxonNameForms() {\r
if (nameForms == null) {\r
nameForms = new HashMap<Taxon, IManagedForm>();\r
}\r
return nameForms;\r
}\r
\r
- private IManagedForm getForm(Taxon taxon) {\r
- return getTaxonForms().get(taxon);\r
+ private IManagedForm getNameForm(Taxon taxon) {\r
+ return getTaxonNameForms().get(taxon);\r
}\r
\r
private Composite getTopLevelComposite(IManagedForm form) {\r
@Override\r
public Composite createConcept(Taxon taxon, TaxonRelationship relationship) {\r
// Get the taxon's form\r
- IManagedForm form = getForm(taxon);\r
+ IManagedForm form = getNameForm(taxon);\r
Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");\r
\r
// If there is no composite for misapplied names, \r
// create one and add it to the repository\r
Composite groupComposite = \r
- EditorController.getEditor(taxon).getConceptGroup();\r
+ EditorController.getNameEditor(taxon).getConceptGroup();\r
if (groupComposite == null) {\r
groupComposite = createConceptGroup(taxon);\r
}\r
public Composite createConceptGroup(Taxon taxon) {\r
\r
// Get the taxon's form\r
- IManagedForm form = getForm(taxon);\r
+ IManagedForm form = getNameForm(taxon);\r
+ Assert.isNotNull(form, "No IManagedForm has been provided for the concept group's accepted taxon.");\r
\r
// Create the group composite\r
Composite groupComposite = new ConceptGroupComposite(getTopLevelComposite(form), taxon);\r
\r
// Put the group composite after misapplied group composite, if any\r
Composite misappliedGroupComposite = \r
- EditorController.getEditor(taxon).getMisappliedGroup();\r
+ EditorController.getNameEditor(taxon).getMisappliedGroup();\r
if (misappliedGroupComposite != null) {\r
groupComposite.moveBelow(misappliedGroupComposite);\r
}\r
return groupComposite;\r
\r
}\r
+\r
+ @Override\r
+ public Composite createDescriptionLabel(IManagedForm form, Taxon taxon,\r
+ TaxonDescription description) {\r
+ \r
+ // Put the taxon's form in the form map if no other description has done so\r
+ Assert.isNotNull(form, "A non-null IManagedForm must be provided.");\r
+ getTaxonDescriptionForms().put(taxon, form);\r
+ \r
+ // Create a group composite for the description\r
+ Composite groupComposite = createDescriptionGroup(taxon, description);\r
+ \r
+ // Create label composite\r
+ Composite labelComposite =\r
+ new DescriptionLabelComposite(groupComposite, form, description);\r
+ \r
+ // Return the label composite\r
+ return labelComposite;\r
+ }\r
+\r
+ @Override\r
+ public Composite createDescriptionElement(Taxon taxon, TaxonDescription description,\r
+ DescriptionElementBase element) {\r
+ \r
+ // Get the taxon's form\r
+ IManagedForm form = getDescriptionForm(taxon);\r
+ Assert.isNotNull(form, "No IManagedForm has been provided for the element's taxon.");\r
+\r
+ // Get the element's feature\r
+ Feature feature = element.getFeature();\r
+ Assert.isNotNull(feature, "Element does not have a feature.");\r
+ \r
+ // If the feature doesn't yet have a composite, create one and add it to the repository\r
+ Composite groupComposite = EditorController.getDescriptionEditor(taxon)\r
+ .getDescriptionFeatureGroup(description, feature);\r
+ if (groupComposite == null) {\r
+ groupComposite = createDescriptionFeatureGroup(taxon, description, feature);\r
+ }\r
+ \r
+ // Create an element composite in the feature group\r
+ Composite elementComposite = \r
+ new DescriptionElementComposite(groupComposite, form, element);\r
+ \r
+ return elementComposite;\r
+ }\r
+\r
+ @Override\r
+ public Composite createDescriptionGroup(Taxon taxon,\r
+ TaxonDescription description) {\r
+ \r
+ // Get the taxon's form\r
+ IManagedForm form = getDescriptionForm(taxon);\r
+ Assert.isNotNull(form, "No IManagedForm has been provided for the description's taxon.");\r
+\r
+ // Create the group composite\r
+ GroupComposite groupComposite = new DescriptionGroupComposite(getTopLevelComposite(form), taxon, description);\r
+ groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, form));\r
+ groupComposite.setDroppable(false);\r
+ \r
+ return groupComposite;\r
+ }\r
+ \r
+ @Override\r
+ public Composite createDescriptionFeatureGroup(Taxon taxon,\r
+ TaxonDescription description, Feature feature) {\r
+\r
+ // Get the taxon's form\r
+ IManagedForm form = getDescriptionForm(taxon);\r
+ Assert.isNotNull(form, "No IManagedForm has been provided for the feature's taxon.");\r
+ \r
+ // Description label should be created before adding features\r
+ Composite descriptionGroupComposite = \r
+ EditorController.getDescriptionEditor(taxon).getDescriptionGroup(description);\r
+ Assert.isNotNull(descriptionGroupComposite, \r
+ "Description group must be created - usually by creating its label - before adding features.");\r
+ \r
+ // Create the group composite\r
+ Composite groupComposite = new DescriptionFeatureGroupComposite\r
+ (descriptionGroupComposite, taxon, description, feature);\r
+ groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, form)); \r
+ \r
+ return groupComposite; \r
+ }\r
+ \r
+ private Map<Taxon, IManagedForm> getTaxonDescriptionForms() {\r
+ if (descriptionForms == null) {\r
+ descriptionForms = new HashMap<Taxon, IManagedForm>();\r
+ }\r
+ return descriptionForms;\r
+ }\r
+ \r
+\r
+ private IManagedForm getDescriptionForm(Taxon taxon) {\r
+ return getTaxonDescriptionForms().get(taxon);\r
+ }\r
}\r