X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/b9e77111bbbd3981cf220791b91f3c321e21a1ca..ec07654300339a54a3d7bbff703b369b47ab3c7f:/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/CdmSectionPart.java diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/CdmSectionPart.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/CdmSectionPart.java index 53e294b55..0def76556 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/CdmSectionPart.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/CdmSectionPart.java @@ -1,4 +1,3 @@ -// $Id$ /** * Copyright (C) 2007 EDIT * European Distributed Institute of Taxonomy @@ -7,31 +6,44 @@ * 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.view.detail; +import java.util.EventObject; + import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.forms.SectionPart; -import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade; -import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException; +import eu.etaxonomy.cdm.facade.DerivedUnitFacade; +import eu.etaxonomy.cdm.facade.DerivedUnitFacadeNotSupportedException; import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; +import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.model.taxon.TaxonBase; +import eu.etaxonomy.cdm.model.taxon.TaxonRelationship; import eu.etaxonomy.taxeditor.model.IElementHasDetails; +import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.model.PolytomousKeyRelationship; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.store.StoreUtil; import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection; import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement; import eu.etaxonomy.taxeditor.ui.section.ITaxonBaseDetailSection; -import eu.etaxonomy.taxeditor.ui.section.key.GeographicalScopeDetailSection; import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailSection; import eu.etaxonomy.taxeditor.ui.section.key.ScopeRestrictionSection; import eu.etaxonomy.taxeditor.ui.section.key.TaxonomicScopeSection; +import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailSection; +import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection; +import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection; +import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection; +import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection; +import eu.etaxonomy.taxeditor.ui.section.occurrence.GeoScopeDetailSection; import eu.etaxonomy.taxeditor.ui.section.occurrence.IDerivedUnitFacadeDetailSection; +import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailSection; +import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalSourceDetailSection; +import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsSection; +import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonDetailSection; /** *

@@ -40,32 +52,32 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.IDerivedUnitFacadeDetailSect * * @author n.hoffmann * @created Feb 8, 2010 - * @version 1.0 */ -public class CdmSectionPart extends SectionPart implements - IPropertyChangeListener { +public class CdmSectionPart extends SectionPart + implements IPropertyChangeListener { + + public static String EXPANDED = "expanded"; + public static String COLLAPSED = "collapsed"; private final AbstractFormSection formSection; /** - *

- * Constructor for CdmSectionPart. - *

- * - * @param section - * a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection} - * object. - * @param - * a T object. + * Initial input */ + private Object rootInput; + public CdmSectionPart(AbstractFormSection section) { super(section); formSection = section; } - /** {@inheritDoc} */ @Override public boolean setFormInput(Object input) { + if (formSection.isDisposed()){ + return false; + } + + this.rootInput = input; //FIXME (CM): Need to fix this part of the design. //The design seems to be locked to the idea that only one // entity (either from the navigator or the editor) drives @@ -74,10 +86,11 @@ public class CdmSectionPart extends SectionPart implements if (input instanceof IElementHasDetails) { input = ((IElementHasDetails) input).getData(); } + if ((input instanceof TaxonBase) && (formSection instanceof ITaxonBaseDetailSection)) { ((ITaxonBaseDetailSection) formSection) - .setTaxonBase((TaxonBase) input); + .setTaxonBase((TaxonBase) input); return true; } else if (input.getClass().equals(DerivedUnit.class) @@ -87,40 +100,123 @@ public class CdmSectionPart extends SectionPart implements input = DerivedUnitFacade.NewInstance((DerivedUnit) input, PreferencesUtil.getDerivedUnitConfigurator()); } catch (DerivedUnitFacadeNotSupportedException e) { - StoreUtil.error(getClass(), e); + MessagingUtils.error(getClass(), e); } } else if (input instanceof PolytomousKeyRelationship) { input = ((PolytomousKeyRelationship) input).getDestination(); + if ((input instanceof PolytomousKeyNode) && + (formSection instanceof PolytomousKeyDetailSection || + formSection instanceof GeoScopeDetailSection || + formSection instanceof ScopeRestrictionSection || + formSection instanceof TaxonomicScopeSection)) { + input = ((PolytomousKeyNode)input).getKey(); + } } else if ((input instanceof PolytomousKeyNode) && (formSection instanceof PolytomousKeyDetailSection || - formSection instanceof GeographicalScopeDetailSection || + formSection instanceof GeoScopeDetailSection || formSection instanceof ScopeRestrictionSection || formSection instanceof TaxonomicScopeSection)) { input = ((PolytomousKeyNode)input).getKey(); - } - + } else if ((input instanceof TaxonRelationship) + && (formSection instanceof TaxonDetailSection)) { + ((TaxonDetailSection) formSection) + .setTaxon( ((TaxonRelationship)input).getFromTaxon()); + return true; + }else if ((input instanceof TaxonRelationship) + && (formSection instanceof NonViralNameDetailSection)) { + ((NonViralNameDetailSection) formSection) + .setTaxonBase( ((TaxonRelationship)input).getFromTaxon()); + return true; + }else if ((input instanceof TaxonRelationship) + && (formSection instanceof NomenclaturalSourceDetailSection)) { + ((NomenclaturalSourceDetailSection) formSection) + .setTaxonBase( ((TaxonRelationship)input).getFromTaxon()); + return true; + }else if ((input instanceof TaxonRelationship) + && (formSection instanceof NomenclaturalStatusSection)) { + ((NomenclaturalStatusSection) formSection) + .setTaxonBase( ((TaxonRelationship)input).getFromTaxon()); + return true; + }else if ((input instanceof TaxonRelationship) + && (formSection instanceof TypeDesignationSection)) { + ((TypeDesignationSection) formSection) + .setTaxonBase( ((TaxonRelationship)input).getFromTaxon()); +// .setEntity( ((TaxonRelationship)input).getFromTaxon().getName()); + return true; + }else if ((input instanceof TaxonRelationship) + && (formSection instanceof NameRelationshipDetailSection)) { + ((NameRelationshipDetailSection) formSection) + .setTaxonBase( ((TaxonRelationship)input).getFromTaxon()); + return true; + }else if ((input instanceof DerivedUnitFacade) + && (formSection instanceof RightsSection)){ + ((RightsSection)formSection).setEntity(((DerivedUnitFacade)input).innerDerivedUnit()); + return true; + }else if ((input instanceof DerivedUnitFacade) + && (formSection instanceof DeterminationDetailSection)){ + DerivedUnitFacade facade = ((DerivedUnitFacade)input); + SpecimenOrObservationBase sob = facade.innerDerivedUnit() != null? facade.innerDerivedUnit(): facade.innerFieldUnit(); + ((DeterminationDetailSection)formSection).setEntity(sob); + return true; + }else if ((input instanceof DerivedUnitFacade) + && (formSection instanceof SampleDesignationDetailSection)){ + ((SampleDesignationDetailSection)formSection).setEntity(((DerivedUnitFacade)input).innerDerivedUnit()); + return true; + } + //check whether this is needed +// }else if ((input instanceof TaxonBase) +// && (formSection instanceof TypeDesignationSection)){ +// ((TypeDesignationSection)formSection).setEntity(((TaxonBase)input).getName()); +// return true; +// } formSection.setEntity((T) input); + return true; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse - * .jface.util.PropertyChangeEvent) - */ - /** {@inheritDoc} */ + public boolean setFormInputWithoutUpdate(Object input) { + if (formSection.isDisposed()){ + return false; + } + + this.rootInput = input; + //FIXME (CM): Need to fix this part of the design. + //The design seems to be locked to the idea that only one + // entity (either from the navigator or the editor) drives + // the detail view. In the case of multiple inputs the only workaround + // is checking the type and extracting relevant objects. + if (input instanceof IElementHasDetails) { + input = ((IElementHasDetails) input).getData(); + } + + if ((input instanceof TaxonBase) + && (formSection instanceof ITaxonBaseDetailSection )) { + + //if (!((TaxonBase) input).getTitleCache().equals(((ITaxonBaseDetailSection) formSection).getTaxonBase().getTitleCache())) { + ((ITaxonBaseDetailSection) formSection) + .setTaxonBaseWithoutUpdate((TaxonBase) input); + + //} + + return true; + } + //actually only for Taxon Details... + return this.setFormInput( input); + } + @Override public void propertyChange(PropertyChangeEvent event) { if (event != null) { Object eventSource = event.getSource(); + if (eventSource instanceof EventObject){ + eventSource = ((EventObject)eventSource).getSource(); + } Control[] children = formSection.getLayoutComposite().getChildren(); boolean containsElement = false; for (Control control : children) { @@ -142,4 +238,9 @@ public class CdmSectionPart extends SectionPart implements } } -} + @Override + protected void expansionStateChanged(boolean expanded) { + super.expansionStateChanged(expanded); + PreferencesUtil.setStringValue(StoreUtil.getPrefKey(formSection.getClass(), rootInput.getClass().getCanonicalName()), expanded?EXPANDED:COLLAPSED); + } +} \ No newline at end of file