cleanup
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / taxon / TaxonRelationshipDetailElement.java
index ddb0bf7904c32fb4ce0ad3d46cfbbd1734585c9e..3862e0bf983f2c0b1d26d88077049cca58b2e5db 100644 (file)
-// $Id$
 /**
 * Copyright (C) 2009 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.
 */
 package eu.etaxonomy.taxeditor.ui.section.taxon;
 
-import org.eclipse.ui.IEditorInput;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
 
+import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
+import eu.etaxonomy.taxeditor.event.EventUtility;
+import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
 import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
-import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
-import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
+import eu.etaxonomy.taxeditor.ui.combo.MisappliedRelationshipComboElement;
+import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
-import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
+import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
+import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
+import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
+import eu.etaxonomy.taxeditor.ui.section.supplemental.AbstractSingleSourceElement;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 
 /**
  * @author n.hoffmann
  * @date Dec 1, 2011
- *
  */
-public class TaxonRelationshipDetailElement extends AbstractCdmDetailElement<TaxonRelationship> {
+public class TaxonRelationshipDetailElement extends AbstractSingleSourceElement<TaxonRelationship> {//TODO: use AbstractSingleSourcedElement
 
        private TermComboElement<TaxonRelationshipTypeInverseContainer> combo_taxonRelationshipType;
-       
+       private MisappliedRelationshipComboElement combo_misappliedRelationshipType;
+
        private EntitySelectionElement<Taxon> selection_relatedTaxon;
-       
-       public TaxonRelationshipDetailElement(CdmFormFactory formFactory,
+       private CheckboxElement checkBoxDoubtful;
+       protected ToggleableTextElement toggleable_cache;
+//     private  EntitySelectionElement<Reference> secReference;
+       private  EntitySelectionElement<Reference> sensuReference;
+       private TextWithLabelElement text_sensu_microreference;
+
+//     private TextWithLabelElement text_secundum_microreference;
+
+       private TextWithLabelElement text_appendedPhrase;
+
+    private CheckboxElement checkbox_published;
+
+       private Taxon taxon;
+
+       private TaxonDetailSection taxonElement;
+
+       public TaxonDetailSection getTaxonElement() {
+        return taxonElement;
+    }
+
+    public TaxonRelationshipDetailElement(CdmFormFactory formFactory,
                        ICdmFormElement formElement) {
+
                super(formFactory, formElement);
        }
 
        @Override
-       protected void createControls(ICdmFormElement formElement,
+    public void createControls(ICdmFormElement formElement,
                        TaxonRelationship entity, int style) {
-               combo_taxonRelationshipType = formFactory.createTermComboElement(
-                               TaxonRelationshipTypeInverseContainer.class, 
-                               formElement, "Relationship Type", 
-                               getTaxonRelationshipTypeInverseContainer(), style);
-               combo_taxonRelationshipType.setEnabled(false);
-               selection_relatedTaxon = formFactory.createSelectionElement(
-                               Taxon.class, getConversationHolder(), 
-                               formElement, "Related Taxon", getRelatedTaxon(), 
-                               EntitySelectionElement.SELECTABLE, style);
+           if ((entity.getType().isAnyMisappliedName()) ){
+
+                       taxon = entity.getFromTaxon();
+
+            taxonElement = formFactory.createTaxonDetailSection(getConversationHolder(), formElement, null, StoreUtil.getSectionStyle(TaxonDetailSection.class, Taxon.class.getCanonicalName()));
+            taxonElement.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+            addControl(taxonElement);
+            addElement(taxonElement);
+            String label;
+            if (entity.getType().isAnyMisappliedName()) {
+                label = "Sensu";
+            }else{
+                label = "Sec.";
+            }
+            text_appendedPhrase = formFactory.createTextWithLabelElement(
+                    this, "Appended Phrase", taxon.getAppendedPhrase(),
+                    SWT.WRAP);
+
+            checkbox_published = formFactory.createCheckbox(this,
+                    "Published", taxon.isPublish(), style);
+            sensuReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
+                 formElement, label,
+                taxon.getSec(), EntitySelectionElement.ALL,
+                style);
+
+            text_sensu_microreference = formFactory.createTextWithLabelElement(
+                    formElement, "Detail",
+                    taxon.getSecMicroReference(),null,
+                    SWT.WRAP);
+
+            if (entity.getType().isAnyMisappliedName()) {
+                label = "Misapplication Type";
+            }else{
+                label = "Relationship Type";
+            }
+            combo_misappliedRelationshipType = formFactory.createMisappliedRelationshipComboElement(formElement, label,
+                        entity.getType(), style);
+
+            combo_misappliedRelationshipType.setEnabled(true);
+
+
+            if (entity.getType().isAnyMisappliedName()) {
+                label = "Misappl. Sec.";
+            }else{
+                label = "Err. Sec.";
+            }
+
+            /*TODO: use super.createControls(); to create single source element
+            secReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
+                    formElement, label,
+                    entity.getCitation(), EntitySelectionElement.ALL,
+                    style);
+
+            text_secundum_microreference = formFactory.createTextWithLabelElement(
+                    formElement, "Detail",
+                    entity.getCitationMicroReference(),null,
+                    SWT.WRAP);
+                    */
+            super.createControls(formElement, entity, style);
+            setSourceLabel(label);
+
+            if (entity.getType().isAnyMisappliedName()) {
+                label = "Misapplication Doubtful";
+            }else{
+                label = "Relationship Doubtful";
+            }
+            checkBoxDoubtful = formFactory.createCheckbox(formElement, label, entity.isDoubtful(), style);
+               }else if (entity.getType().isAnySynonym() ){
+                   taxon = entity.getFromTaxon();
+
+            taxonElement = formFactory.createTaxonDetailSection(getConversationHolder(), formElement, null, StoreUtil.getSectionStyle(TaxonDetailSection.class, Taxon.class.getCanonicalName()));
+            taxonElement.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+            addControl(taxonElement);
+            addElement(taxonElement);
+
+
+            text_appendedPhrase = formFactory.createTextWithLabelElement(
+                    this, "Appended Phrase", taxon.getAppendedPhrase(),
+                    SWT.WRAP);
+
+            checkbox_published = formFactory.createCheckbox(this,
+                    "Published", taxon.isPublish(), style);
+            /*
+             * secReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
+
+                    formElement, "Syn. Sec.",
+                    entity.getCitation(), EntitySelectionElement.ALL,
+                    style);
+
+            text_secundum_microreference = formFactory.createTextWithLabelElement(
+                    formElement, "Detail",
+                    entity.getCitationMicroReference(),null,
+                    SWT.WRAP);
+                    */
+
+            super.createControls(formElement, entity, style);
+            setSourceLabel("Syn. Sec.");
+            sensuReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
+                    formElement, "Sec",
+                   taxon.getSec(), EntitySelectionElement.ALL,
+                   style);
+
+               text_sensu_microreference = formFactory.createTextWithLabelElement(
+                       formElement, "Detail",
+                       taxon.getSecMicroReference(),null,
+                       SWT.WRAP);
+
+            combo_misappliedRelationshipType = formFactory.createMisappliedRelationshipComboElement(formElement, "Synonym Type",
+                    entity.getType(), style);
+
+            combo_misappliedRelationshipType.setEnabled(true);
+            checkBoxDoubtful = formFactory.createCheckbox(formElement, "Syn. Doubtful", entity.isDoubtful(), style);
+
+        }else{
+            combo_taxonRelationshipType = formFactory.createTermComboElement(
+                    TaxonRelationshipTypeInverseContainer.class,
+                    formElement, "Relationship Type",
+                    getTaxonRelationshipTypeInverseContainer(), style);
+
+            combo_taxonRelationshipType.setEnabled(false);
+            selection_relatedTaxon = formFactory.createSelectionElement(
+                    Taxon.class, //getConversationHolder(),
+                    formElement, "Related Taxon", getRelatedTaxon(),
+                    EntitySelectionElement.SELECTABLE, style);
+            checkBoxDoubtful = formFactory.createCheckbox(formElement, "Relation Doubtful", entity.isDoubtful(), style);
+               }
        }
-       
+
        private Taxon getRelatedTaxon() {
                return TaxonRelationshipTypeInverseContainer.RelatedTaxon(getSourceTaxon(), getEntity());
        }
@@ -59,23 +205,82 @@ public class TaxonRelationshipDetailElement extends AbstractCdmDetailElement<Tax
        private TaxonRelationshipTypeInverseContainer getTaxonRelationshipTypeInverseContainer(){
                return TaxonRelationshipTypeInverseContainer.CreateFromSource(getSourceTaxon(), getEntity());
        }
-       
+
        private Taxon getSourceTaxon(){
-               IEditorInput editorInput = StoreUtil.getActiveEditorInput();
-               return (Taxon) editorInput.getAdapter(Taxon.class);
+               return EventUtility.getCurrentTaxon();
        }
 
        @Override
        public void handleEvent(Object eventSource) {
-               if (eventSource == selection_relatedTaxon){
-                       boolean inverse = getTaxonRelationshipTypeInverseContainer().isInverse();
-                       Taxon relatedTaxon = selection_relatedTaxon.getEntity();
-                       if(inverse){
-                               getEntity().setFromTaxon(relatedTaxon);
-                       }else{
-                               getEntity().setToTaxon(relatedTaxon);
+               if (getEntity().getType().isAnyMisappliedName() || getEntity().getType().isAnySynonym()){
+                       /* if (eventSource == secReference) {
+                               getEntity().setCitation(secReference.getSelection());
+                       } else if (eventSource == text_secundum_microreference) {
+                               getEntity().setCitationMicroReference(text_secundum_microreference.getText());
+                       }  else
+                          */
+                           if (eventSource == text_sensu_microreference) {
+                       taxon.setSecMicroReference(text_sensu_microreference.getText());
+                       } else if (eventSource == sensuReference) {
+                               taxon.setSec(sensuReference.getSelection());
+                       } else if (eventSource == combo_taxonRelationshipType ) {
+                           getEntity().setType(combo_taxonRelationshipType.getSelection().getType());
+                       } else if ( eventSource == combo_misappliedRelationshipType) {
+                getEntity().setType(combo_misappliedRelationshipType.getSelection());
+            } else if (eventSource == text_appendedPhrase) {
+                taxon.setAppendedPhrase(text_appendedPhrase.getText());
+            }  else if (eventSource == checkbox_published) {
+                taxon.setPublish(checkbox_published.getSelection());
+            }
+               }else{
+                       if (eventSource == selection_relatedTaxon){
+                               boolean inverse = getTaxonRelationshipTypeInverseContainer().isInverse();
+                               Taxon relatedTaxon = selection_relatedTaxon.getEntity();
+                               if(inverse){
+                                       getEntity().setFromTaxon(relatedTaxon);
+                               }else{
+                                       getEntity().setToTaxon(relatedTaxon);
+                               }
                        }
                }
+               if(eventSource==checkBoxDoubtful){
+            getEntity().setDoubtful(checkBoxDoubtful.getSelection());
+        }
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+               EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAME_EDITOR, getEntity().getToTaxon());
+               taxonElement.updateTitle();
+       }
+
+        @Override
+           protected void updateControlStates() {
+               super.updateControlStates();
+
+           }
+        @Override
+        protected void handleTitleCacheRelevantChange(PropertyChangeEvent event) {
+                if (getEntity().getType().isAnyMisappliedName() || getEntity().getType().isAnySynonym()){
+                       String title = taxon.generateTitle();
+                       taxon.setTitleCache(title);
+                       super.handleTitleCacheRelevantChange(event);
+                }
+        }
+
+       @Override
+       public void refresh(){
+                updateContent();
+        }
+
+       @Override
+       public void setEntity(TaxonRelationship entity) {
+               super.setEntity(entity);
+               if (taxonElement!=null) {
+                       taxonElement.setEntity(entity.getFromTaxon());
+        }
        }
-}
+
+    @Override
+    public SelectionArbitrator getSelectionArbitrator() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
\ No newline at end of file