2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.ui
.section
.name
;
12 import java
.util
.Collection
;
13 import java
.util
.Comparator
;
15 import org
.eclipse
.core
.runtime
.IStatus
;
16 import org
.eclipse
.jface
.action
.Action
;
17 import org
.eclipse
.jface
.action
.IAction
;
18 import org
.eclipse
.jface
.action
.ToolBarManager
;
19 import org
.eclipse
.jface
.resource
.ImageDescriptor
;
20 import org
.eclipse
.jface
.wizard
.WizardDialog
;
21 import org
.eclipse
.swt
.graphics
.ImageData
;
23 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
24 import eu
.etaxonomy
.cdm
.api
.service
.INameService
;
25 import eu
.etaxonomy
.cdm
.api
.service
.UpdateResult
;
26 import eu
.etaxonomy
.cdm
.api
.service
.name
.TypeDesignationComparator
;
27 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
28 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignation
;
29 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
30 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignation
;
31 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
32 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationBase
;
33 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
34 import eu
.etaxonomy
.taxeditor
.l10n
.Messages
;
35 import eu
.etaxonomy
.taxeditor
.model
.ImageResources
;
36 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
37 import eu
.etaxonomy
.taxeditor
.preference
.IPreferenceKeys
;
38 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
39 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
40 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
41 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
42 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICdmFormElement
;
43 import eu
.etaxonomy
.taxeditor
.ui
.section
.AbstractEntityCollectionSection
;
44 import eu
.etaxonomy
.taxeditor
.ui
.section
.ITaxonBaseDetailSection
;
45 import eu
.etaxonomy
.taxeditor
.ui
.section
.name
.type
.CloneTypeWizard
;
49 * @created May 17, 2010
51 public class TypeDesignationSection
extends AbstractEntityCollectionSection
<TaxonName
, TypeDesignationBase
> implements ITaxonBaseDetailSection
{
53 private TaxonBase taxonBase
;
55 public TypeDesignationSection(CdmFormFactory formFactory
, ConversationHolder conversation
,
56 ICdmFormElement parentElement
, int style
) {
57 super(formFactory
, conversation
, parentElement
, Messages
.TypeDesignationSection_TYPE_DESIGNATIONS
, style
);
61 protected void addAction(ToolBarManager toolBarManager
) {
62 if(!isSpecimenType() ||
63 getEntity().getTypeDesignations().isEmpty()
64 || getEntity().getTypeDesignations().stream().noneMatch(designation
->designation
instanceof SpecimenTypeDesignation
)){
67 Action addAction
= new Action(Messages
.TypeDesignationSection_CREATE_DUPLICATE
, IAction
.AS_PUSH_BUTTON
){
70 CloneTypeWizard wizard
= new CloneTypeWizard(getEntity());
71 WizardDialog dialog
= new WizardDialog(getShell(), wizard
);
73 if (dialog
.open() == IStatus
.OK
) {
74 SpecimenTypeDesignation baseTypeDesignation
= HibernateProxyHelper
.deproxy(wizard
.getBaseTypeDesignation());
75 UpdateResult result
= CdmStore
.getService(INameService
.class).cloneTypeDesignation(
76 wizard
.getTaxonName().getUuid(),
78 wizard
.getAccessionNumber(),
79 wizard
.getCollection().getUuid(),
80 wizard
.getTypeStatus());
82 MessagingUtils
.warningDialog(Messages
.TypeDesignationSection_DUPLICATE_FAILED
, this, result
.getExceptions().toString());
84 StoreUtil
.reflowParentScrolledForm(getLayoutComposite(), true);
85 internalUpdateSection(true);
89 addAction
.setImageDescriptor(new ImageDescriptor() {
92 public ImageData
getImageData() {
93 return ImageResources
.getImage(ImageResources
.COPY_ICON
).getImageData();
96 addAction
.setToolTipText(Messages
.TypeDesignationSection_CREATE_DUPLICATE
);
98 toolBarManager
.add(addAction
);
102 public void addElement(TypeDesignationBase element
) {
103 getEntity().addTypeDesignation(element
, PreferencesUtil
.getBooleanValue(IPreferenceKeys
.ADD_TYPES_TO_ALL_NAMES
));
108 public TypeDesignationBase
createNewElement() {
109 if(isSpecimenType()){
110 return SpecimenTypeDesignation
.NewInstance();
112 return NameTypeDesignation
.NewInstance();
117 public Collection
<TypeDesignationBase
> getCollection(TaxonName entity
) {
121 return entity
.getTypeDesignations();
125 public Comparator
<TypeDesignationBase
> getComparator() {
126 return new TypeDesignationComparator();
130 public String
getEmptyString() {
131 return Messages
.TypeDesignationSection_NO_TYPES_YET
;
135 protected String
getTooltipString() {
136 return Messages
.TypeDesignationSection_ADD_TYPE
;
140 public void removeElement(TypeDesignationBase element
) {
141 boolean removeTypeDesignationFromAllTypifiedNames
= PreferencesUtil
.getBooleanValue(IPreferenceKeys
.ADD_TYPES_TO_ALL_NAMES
);
142 TaxonName entity
= removeTypeDesignationFromAllTypifiedNames ?
null : getEntity();
143 CdmStore
.getService(INameService
.class).deleteTypeDesignation(entity
.getUuid(), element
.getUuid());
148 public void setTaxonBase(TaxonBase entity
) {
149 this.taxonBase
= entity
;
150 TaxonName name
= HibernateProxyHelper
.deproxy(entity
.getName());
154 private boolean isSpecimenType(){
155 Rank rank
= getEntity().getRank();
159 return rank
.isSpecies() || rank
.isInfraSpecific();
163 public TaxonBase
getTaxonBase() {
168 public TypeDesignationBase
addExisting() {
173 public boolean allowAddExisting() {