merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / reference / ReferenceDetailElement.java
index 1e22c013d5393124f124d63dc3e146f74002972a..31bd726b4aea5249f8ce22cc658bf36301a3497b 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
  * Copyright (C) 2007 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.
  */
@@ -17,41 +17,41 @@ import java.util.List;
 
 import org.eclipse.swt.SWT;
 
+import eu.etaxonomy.cdm.model.agent.AgentBase;
+import eu.etaxonomy.cdm.model.agent.Institution;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
 import eu.etaxonomy.cdm.model.reference.ReferenceType;
 import eu.etaxonomy.taxeditor.model.AuthorHelper;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
-import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
-import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.EnumComboType;
-import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.SelectionType;
-import eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent;
-import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
-import eu.etaxonomy.taxeditor.ui.forms.IErrorIntolerableElement;
-import eu.etaxonomy.taxeditor.ui.forms.IExceptionHandler;
-import eu.etaxonomy.taxeditor.ui.forms.TextWithLabelElement;
-import eu.etaxonomy.taxeditor.ui.forms.TimePeriodElement;
-import eu.etaxonomy.taxeditor.ui.forms.ToggleableTextElement;
-import eu.etaxonomy.taxeditor.ui.forms.UriWithLabelElement;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.IErrorIntolerableElement;
+import eu.etaxonomy.taxeditor.ui.element.IExceptionHandler;
+import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
+import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
+import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
+import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractIdentifiableEntityDetailElement;
-import eu.etaxonomy.taxeditor.ui.selection.AgentSelectionElement;
-import eu.etaxonomy.taxeditor.ui.selection.InstitutionSelectionElement;
-import eu.etaxonomy.taxeditor.ui.selection.ReferenceSelectionElement;
-import eu.etaxonomy.taxeditor.ui.term.ReferenceTypeComboElement;
+import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 
 /**
  * <p>
  * ReferenceBaseDetailElement class.
  * </p>
- * 
+ *
  * @author n.hoffmann
  * @created Mar 2, 2010
  * @version 1.0
  */
 public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElement<Reference>
                implements IErrorIntolerableElement, IExceptionHandler {
-       
+
+    private ToggleableTextElement toggleableAbbrevCache;
+
        private TextWithLabelElement text_edition;
        private TextWithLabelElement text_editor;
        private TextWithLabelElement text_isbn;
@@ -63,27 +63,28 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
        private TextWithLabelElement text_referenceAbstract;
        private TextWithLabelElement text_series;
        private TextWithLabelElement text_seriesPart;
-       private TextWithLabelElement text_title;
        private TextWithLabelElement text_volume;
+       private TextWithLabelElement text_abbrevTitle;
+       private TextWithLabelElement text_title;
        private UriWithLabelElement text_uri;
-       private AgentSelectionElement selection_authorTeam;
+       private EntitySelectionElement<AgentBase> selection_authorTeam;
        private TimePeriodElement element_timePeriod;
-       private ReferenceSelectionElement selection_inReference;
-       private InstitutionSelectionElement selection_institution;
-       private ReferenceTypeComboElement combo_referenceType;
+       private EntitySelectionElement<Reference> selection_inReference;
+       private EntitySelectionElement<Institution> selection_institution;
+       private EnumComboElement<ReferenceType> combo_referenceType;
 
-       private ReferenceSelectionElement selection_inSeries;
+       private EntitySelectionElement<Reference> selection_inSeries;
 
        /**
         * <p>
         * Constructor for ReferenceBaseDetailElement.
         * </p>
-        * 
+        *
         * @param cdmFormFactory
-        *            a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
         *            object.
         * @param formElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
         *            object.
         * @param style
         *            a int.
@@ -95,7 +96,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.section.cdmdetail.AbstractCdmDetailComposite
         * #createControl(org.eclipse.swt.widgets.Composite, int)
@@ -108,8 +109,11 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
                                "Reference Cache", entity.getTitleCache(),
                                entity.isProtectedTitleCache(), style);
 
-               combo_referenceType = (ReferenceTypeComboElement) formFactory
-                               .createEnumComboElement(EnumComboType.REFERENCETYPE,
+               toggleableAbbrevCache = formFactory.createToggleableTextField(formElement,
+                       "Abbrev. Cache", entity.getAbbrevTitleCache(),
+                       entity.isProtectedAbbrevTitleCache(), style);
+
+               combo_referenceType = formFactory.createEnumComboElement(ReferenceType.class,
                                                formElement, style);
 
                combo_referenceType.setSelection(entity.getType());
@@ -117,13 +121,16 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
                // title
                text_title = formFactory.createTextWithLabelElement(formElement,
                                "Title", entity.getTitle(), style);
+               // abbreviated title
+               text_abbrevTitle = formFactory.createTextWithLabelElement(formElement,
+                       "Abbrev. Title", entity.getAbbrevTitle(), style);
 
                // author team
-               selection_authorTeam = (AgentSelectionElement) formFactory
-                               .createSelectionElement(SelectionType.AGENT,
+               selection_authorTeam = formFactory
+                               .createSelectionElement(AgentBase.class,
                                                getConversationHolder(), formElement, "Author",
-                                               AuthorHelper.getAuthor(entity.getAuthorTeam()),
-                                               AgentSelectionElement.DEFAULT, style);
+                                               AuthorHelper.getAuthor(entity.getAuthorship()),
+                                               EntitySelectionElement.ALL, style);
 
                ReferenceType referenceType = entity.getType();
 
@@ -161,7 +168,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.section.cdmdetail.AbstractCdmDetailComposite
         * #updateContent()
@@ -179,13 +186,14 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
                // setEnabled(getEntity().isProtectedTitleCache(), Arrays.asList(new
                // Object[]{text_cache}));
                toggleable_cache.setEnabled(getEntity().isProtectedTitleCache());
-               setIrrelevant(toggleable_cache.getState(),
-                               Arrays.asList(new Object[] { toggleable_cache }));
+               toggleableAbbrevCache.setEnabled(getEntity().isProtectedAbbrevTitleCache());
+        setIrrelevant(toggleable_cache.getState(), Arrays.asList(new Object[] { toggleable_cache }));
+        setIrrelevant(toggleableAbbrevCache.getState(), Arrays.asList(new Object[] { toggleableAbbrevCache}));
        }
 
        /**
         * Creates an in reference for reference types that do hav this.
-        * 
+        *
         * @param element
         * @param referenceType
         * @param reference
@@ -215,17 +223,17 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
                }
 
                if (createInReferenceWidget) {
-                       selection_inReference = (ReferenceSelectionElement) formFactory
-                                       .createSelectionElement(SelectionType.REFERENCE,
+                       selection_inReference = formFactory
+                                       .createSelectionElement(Reference.class,
                                                        getConversationHolder(), element, label,
                                                        reference.getInReference(),
-                                                       ReferenceSelectionElement.DEFAULT, style);
+                                                       EntitySelectionElement.ALL, style);
                }
        }
 
        /**
         * Creates additional controls to edit a generic reference
-        * 
+        *
         * @param element
         * @param reference
         * @param listener
@@ -240,7 +248,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
                // series
                text_series = formFactory.createTextWithLabelElement(element, "Series",
-                               reference.getSeries(), style);
+                               reference.getSeriesPart(), style);
 
                // volume
                text_volume = formFactory.createTextWithLabelElement(element, "Volume",
@@ -253,7 +261,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /**
         * Creates additional controls to edit a publication
-        * 
+        *
         * @param element
         * @param reference
         * @param listener
@@ -278,20 +286,20 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
                if (referenceType.equals(ReferenceType.Report)) {
                        // institution
-                       selection_institution = (InstitutionSelectionElement) formFactory
-                                       .createSelectionElement(SelectionType.INSTITUTION,
+                       selection_institution = formFactory
+                                       .createSelectionElement(Institution.class,
                                                        getConversationHolder(), element, "Institution",
                                                        reference.getInstitution(),
-                                                       InstitutionSelectionElement.DEFAULT, style);
+                                                       EntitySelectionElement.ALL, style);
                }
 
                if (referenceType.equals(ReferenceType.Thesis)) {
                        // school
-                       selection_institution = (InstitutionSelectionElement) formFactory
-                                       .createSelectionElement(SelectionType.INSTITUTION,
+                       selection_institution = formFactory
+                                       .createSelectionElement(Institution.class,
                                                        getConversationHolder(), element, "School",
                                                        reference.getSchool(),
-                                                       InstitutionSelectionElement.DEFAULT, style);
+                                                       EntitySelectionElement.ALL, style);
                }
 
                if (referenceType.equals(ReferenceType.Proceedings)) {
@@ -303,7 +311,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /**
         * Creates additional controls to edit a section
-        * 
+        *
         * @param element
         * @param reference
         * @param style
@@ -317,7 +325,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /**
         * Creates additional controls to edit a volume
-        * 
+        *
         * @param element
         * @param reference
         * @param style
@@ -329,11 +337,11 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
                                reference.getVolume(), style);
 
                text_series = formFactory.createTextWithLabelElement(element, "Series",
-                               reference.getSeries(), style);
+                               reference.getSeriesPart(), style);
        }
 
        /**
-        * 
+        *
         * @param element
         * @param referenceType
         * @param reference
@@ -342,11 +350,11 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
        private void createPrintedUnitControls(ICdmFormElement element,
                        ReferenceType referenceType, Reference reference, int style) {
                // in series
-               selection_inSeries = (ReferenceSelectionElement) formFactory
-                               .createSelectionElement(SelectionType.REFERENCE,
+               selection_inSeries = formFactory
+                               .createSelectionElement(Reference.class,
                                                getConversationHolder(), element, "In Series",
-                                               reference.getInSeries(),
-                                               ReferenceSelectionElement.DEFAULT, style);
+                                               (Reference) reference.getInSeries(),
+                                               EntitySelectionElement.ALL, style);
 
                // editor
                text_editor = formFactory.createTextWithLabelElement(element, "Editor",
@@ -354,7 +362,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
                // series part
                text_seriesPart = formFactory.createTextWithLabelElement(element,
-                               "Series Part", reference.getSeriesPart(), style);
+                               "Series", reference.getSeriesPart(), style);
 
                if (referenceType.equals(ReferenceType.Book)) {
                        // edition
@@ -373,7 +381,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
                text_uri = formFactory.createUriWithLabelElement(element, "URI",
                                reference.getUri(), style);
                // abstract
-               text_referenceAbstract = formFactory.createMultilineTextWithLabel(
+               text_referenceAbstract = formFactory.createMultiLineTextWithLabel(
                                element, "Reference Abstract", 100, style);
                text_referenceAbstract.setText(reference.getReferenceAbstract());
        }
@@ -383,14 +391,14 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
        public void handleEvent(Object eventSource) {
                if (eventSource == combo_referenceType) {
                        getEntity().setType(combo_referenceType.getSelection());
-                       getParentElement().refresh();
+                       updateContent();
                } else if (eventSource == element_timePeriod) {
                        getEntity().setDatePublished(element_timePeriod.getTimePeriod());
                        clearException();
                }
                // selections
                else if (eventSource == selection_authorTeam) {
-                       getEntity().setAuthorTeam(
+                       getEntity().setAuthorship(
                                        (TeamOrPersonBase) selection_authorTeam.getSelection());
                } else if (eventSource == selection_inReference) {
                        getEntity().setInReference(selection_inReference.getSelection());
@@ -403,6 +411,9 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
                // textfields
                else if (eventSource == toggleable_cache) {
                        handleToggleableCacheField();
+               }
+               else if (eventSource == toggleableAbbrevCache) {
+                   handleToggleableAbbrevTitleField();
                } else if (eventSource == text_edition) {
                        getEntity().setEdition(text_edition.getText());
                } else if (eventSource == text_editor) {
@@ -421,33 +432,60 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
                        getEntity().setPublisher(text_publisher.getText());
                } else if (eventSource == text_referenceAbstract) {
                        getEntity().setReferenceAbstract(text_referenceAbstract.getText());
-               } else if (eventSource == text_series) {
-                       getEntity().setSeries(text_series.getText());
                } else if (eventSource == text_seriesPart) {
                        getEntity().setSeriesPart(text_seriesPart.getText());
                } else if (eventSource == text_title) {
                        getEntity().setTitle(text_title.getText());
+                       toggleable_cache.setText(text_title.getText());
+               } else if (eventSource == text_abbrevTitle) {
+                   getEntity().setAbbrevTitle(text_abbrevTitle.getText());
+                   toggleableAbbrevCache.setText(text_abbrevTitle.getText());
                } else if (eventSource == text_uri) {
                        try {
                                getEntity().setUri(text_uri.getUri());
                        } catch (URISyntaxException e) {
-                               StoreUtil.warningDialog("Invlid URI", getClass(),
+                               MessagingUtils.warningDialog("Invalid URI", getClass(),
                                                e.getLocalizedMessage());
                        }
                } else if (eventSource == text_volume) {
                        getEntity().setVolume(text_volume.getText());
                }
 
-               else if (eventSource != toggleable_cache) {
+               if (eventSource != text_title && eventSource != text_abbrevTitle) {
+                   // set abbrev title cache to null to force new generation
+                   // for the standard title cache this is done by a PropertyChangeListener registered
+                   // in IdentifiableEntity.initListeners()
+                   if(!getEntity().isProtectedAbbrevTitleCache()){
+                       getEntity().setAbbrevTitleCache(null, getEntity().isProtectedAbbrevTitleCache());
+                   }
                        toggleable_cache.setText(getEntity().getTitleCache());
+                       toggleableAbbrevCache.setText(getEntity().getAbbrevTitleCache());
                }
 
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
        }
 
+
+    @Override
+    public void updateToggleableCacheField() {
+        if (!getEntity().isProtectedTitleCache()) {
+            toggleable_cache.setText(getEntity().generateTitle());
+        }
+        if (!getEntity().isProtectedAbbrevTitleCache()) {
+            toggleableAbbrevCache.setText(getEntity().generateAbbrevTitle());
+        }
+    }
+
+    protected void handleToggleableAbbrevTitleField() {
+        boolean pushedAbbrevState = toggleableAbbrevCache.getState();
+        getEntity().setAbbrevTitleCache(toggleableAbbrevCache.getText(), pushedAbbrevState);
+        setIrrelevant(pushedAbbrevState, Arrays.asList(new Object[] { toggleableAbbrevCache, toggleable_cache, text_title }));
+        updateToggleableCacheField();
+    }
+
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement#handleException
         * (eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent)
@@ -460,7 +498,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see eu.etaxonomy.taxeditor.forms.IExceptionHandler#clearException()
         */
        /** {@inheritDoc} */
@@ -473,7 +511,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#addExceptionHandler
         * (eu.etaxonomy.taxeditor.forms.IExceptionHandler)
@@ -486,7 +524,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#removeExceptionHandler
         * (eu.etaxonomy.taxeditor.forms.IExceptionHandler)
@@ -499,7 +537,7 @@ public class ReferenceDetailElement extends AbstractIdentifiableEntityDetailElem
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.IErrorIntolerableElement#exceptionOccurred
         * (eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent)