+// $Id$
+/**
+* Copyright (C) 2015 EDIT
+* 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.occurrence.association;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
+import eu.etaxonomy.cdm.api.service.INameService;
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionSection;
+
+/**
+ * @author pplitzner
+ * @date Oct 29, 2015
+ *
+ */
+public class DerivedUnitTypeDesignationSection extends AbstractEntityCollectionSection<DerivedUnitFacade, SpecimenTypeDesignation> {
+
+ private Collection<SpecimenTypeDesignation> typeDesignations;
+
+ public DerivedUnitTypeDesignationSection(CdmFormFactory formFactory,
+ ConversationHolder conversation, ICdmFormElement parentElement, int style) {
+ super(formFactory, conversation, parentElement, "Type Designations", style);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Collection<SpecimenTypeDesignation> getCollection(DerivedUnitFacade entity) {
+ typeDesignations = entity.innerDerivedUnit().getSpecimenTypeDesignations();
+ return typeDesignations;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public SpecimenTypeDesignation createNewElement() {
+ return SpecimenTypeDesignation.NewInstance();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void addElement(SpecimenTypeDesignation element) {
+ element.setTypeSpecimen(getEntity().innerDerivedUnit());
+ typeDesignations.add(element);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void removeElement(SpecimenTypeDesignation element) {
+ List<SpecimenTypeDesignation> toRemove = new ArrayList<SpecimenTypeDesignation>();
+ for (SpecimenTypeDesignation specimenTypeDesignation : typeDesignations) {
+ if(element.equals(specimenTypeDesignation)){
+ toRemove.add(specimenTypeDesignation);
+ }
+ }
+ for (SpecimenTypeDesignation specimenTypeDesignation : toRemove) {
+ specimenTypeDesignation.removeType();
+ Set<TaxonNameBase> names = specimenTypeDesignation.getTypifiedNames();
+ for (TaxonNameBase taxonNameBase : names) {
+ taxonNameBase.removeTypeDesignation(specimenTypeDesignation);
+ if(CdmStore.getCurrentSessionManager().isRemoting()){
+ CdmStore.getService(INameService.class).merge(taxonNameBase);
+ }
+ }
+ }
+ typeDesignations.removeAll(toRemove);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getEmptyString() {
+ return "No type designation yet.";
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected String getTooltipString() {
+ return "Add a type designation";
+ }
+
+
+}
\ No newline at end of file