cleanup
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / taxon / TaxonRelationshipDetailElement.java
index 4ec672132fe5811b23913d1eff383a6043bc4edd..3862e0bf983f2c0b1d26d88077049cca58b2e5db 100644 (file)
 /**
 * 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 java.util.Arrays;
-
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
-import org.eclipse.ui.IEditorInput;
 
 import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.cdm.model.taxon.Synonym;
-import eu.etaxonomy.cdm.model.taxon.SynonymType;
 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.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.element.CheckboxElement;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
-import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
+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.AbstractCdmDetailElement;
+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 TermComboElement<TaxonRelationshipTypeInverseContainer> combo_taxonRelationshipType;
-//     
-//     private EntitySelectionElement<Taxon> selection_relatedTaxon;
-        protected ToggleableTextElement toggleable_cache;
-       private  EntitySelectionElement<Reference> secReference;
+       private EntitySelectionElement<Taxon> selection_relatedTaxon;
+       private CheckboxElement checkBoxDoubtful;
+       protected ToggleableTextElement toggleable_cache;
+//     private  EntitySelectionElement<Reference> secReference;
        private  EntitySelectionElement<Reference> sensuReference;
        private TextWithLabelElement text_sensu_microreference;
-       private CheckboxElement checkbox_doubtful;
 
-       private TextWithLabelElement text_secundum_microreference;
+//     private TextWithLabelElement text_secundum_microreference;
 
        private TextWithLabelElement text_appendedPhrase;
 
-       private CheckboxElement checkbox_published;
-       
-       private SelectionArbitrator selectionArbitrator;
-       
+    private CheckboxElement checkbox_published;
+
+       private Taxon taxon;
 
-       private Taxon taxon; 
+       private TaxonDetailSection taxonElement;
 
-       public TaxonRelationshipDetailElement(CdmFormFactory formFactory,
+       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);
-               taxon = entity.getFromTaxon();
-               toggleable_cache = formFactory.createToggleableTextField(formElement,
-                               "Title Cache", taxon.getTitleCache(),
-                               taxon.isProtectedTitleCache(), style);
-
-               text_appendedPhrase = formFactory.createTextWithLabelElement(
-                               formElement, "Appended Phrase", taxon.getAppendedPhrase(),
-                               SWT.WRAP);
-
-
-               sensuReference = formFactory.createSelectionElement(Reference.class,
-                       getConversationHolder(), formElement, "Sensu",
-                       taxon.getSec(), EntitySelectionElement.ALL,
-                       style);
-
-               text_sensu_microreference = formFactory.createTextWithLabelElement(
-                               formElement, "Detail",
-                               taxon.getSecMicroReference(),null,
-                               SWT.WRAP);
-
-               
-       
-       
-               checkbox_published = formFactory.createCheckbox(formElement,
-                                       "Published", taxon.isPublish(), style);
-                       
-                       
-               secReference = formFactory.createSelectionElement(Reference.class,
-                               getConversationHolder(), formElement, "Err. Secundum",
-                               entity.getCitation(), EntitySelectionElement.ALL,
-                               style);
-       
-               text_secundum_microreference = formFactory.createTextWithLabelElement(
-                   formElement, "Detail",
-                   entity.getCitationMicroReference(),null,
-                   SWT.WRAP);
-               checkbox_doubtful = formFactory.createCheckbox(formElement,
-                               "Misappl. doubtful", entity.isDoubtful(), 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());
        }
@@ -127,75 +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== toggleable_cache) {
-               handleToggleableCacheField();
-       } else if (eventSource == checkbox_doubtful) {
-               taxon.setDoubtful(checkbox_doubtful.getSelection());
-       }  else if (eventSource == secReference) {
-               taxon.setSec(secReference.getSelection());
-       } else if (eventSource == text_appendedPhrase) {
-               taxon.setAppendedPhrase(text_appendedPhrase.getText());
-       } else if (eventSource == text_secundum_microreference) {
-        taxon.setSecMicroReference(text_secundum_microreference.getText());
-       } else if (eventSource == checkbox_published) {
-           taxon.setPublish(checkbox_published.getSelection());
-       } else if (eventSource == text_sensu_microreference) {
-        getEntity().setCitationMicroReference(text_sensu_microreference.getText());
-       }else if (eventSource == sensuReference) {
-                getEntity().setCitation(sensuReference.getSelection());
-       }
+               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();
        }
-       
-       protected void handleToggleableCacheField() {
-        boolean pushedState = toggleable_cache.getState();
 
-        taxon.setTitleCache(toggleable_cache.getText(), pushedState);
-        setIrrelevant(pushedState, Arrays.asList(new Object[] { toggleable_cache, checkbox_published}));
-        updateToggleableCacheField();
-    }
-       
-        public void updateToggleableCacheField() {
-               if (toggleable_cache != null){
-                   if (!taxon.isProtectedTitleCache()) {
-                       toggleable_cache.setText(taxon.generateTitle());
-                   }
-               }
-           }
-        
-        @Override
-               protected void updateContent() {
-                       super.updateContent();
-                       toggleable_cache.setEnabled(taxon.isProtectedTitleCache());
-                       setIrrelevant(toggleable_cache.getState(),
-                                       Arrays.asList(new Object[] { toggleable_cache, checkbox_published}));
-               }
         @Override
            protected void updateControlStates() {
                super.updateControlStates();
-              
+
            }
         @Override
-               protected void handleTitleCacheRelevantChange(PropertyChangeEvent event) {
+        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();
-                updateToggleableCacheField();
         }
 
-       
-       
-       
-}
+       @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