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
.commands
.operations
.IOperationHistory
;
16 import org
.eclipse
.core
.runtime
.IStatus
;
17 import org
.eclipse
.e4
.ui
.workbench
.modeling
.EPartService
;
18 import org
.eclipse
.jface
.action
.Action
;
19 import org
.eclipse
.jface
.action
.IAction
;
20 import org
.eclipse
.jface
.action
.ToolBarManager
;
21 import org
.eclipse
.jface
.resource
.ImageDescriptor
;
22 import org
.eclipse
.jface
.wizard
.WizardDialog
;
23 import org
.eclipse
.swt
.graphics
.ImageData
;
25 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
26 import eu
.etaxonomy
.cdm
.api
.service
.INameService
;
27 import eu
.etaxonomy
.cdm
.api
.service
.UpdateResult
;
28 import eu
.etaxonomy
.cdm
.api
.service
.name
.TypeDesignationComparator
;
29 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
30 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignation
;
31 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
32 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignation
;
33 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
34 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationBase
;
35 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
36 import eu
.etaxonomy
.taxeditor
.editor
.ITaxonEditor
;
37 import eu
.etaxonomy
.taxeditor
.l10n
.Messages
;
38 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
39 import eu
.etaxonomy
.taxeditor
.model
.ImageResources
;
40 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
41 import eu
.etaxonomy
.taxeditor
.operation
.IPostOperationEnabled
;
42 import eu
.etaxonomy
.taxeditor
.preference
.IPreferenceKeys
;
43 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
44 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
45 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
46 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
47 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICdmFormElement
;
48 import eu
.etaxonomy
.taxeditor
.ui
.section
.AbstractEntityCollectionSection
;
49 import eu
.etaxonomy
.taxeditor
.ui
.section
.ITaxonBaseDetailSection
;
50 import eu
.etaxonomy
.taxeditor
.ui
.section
.name
.operation
.DeleteTypeDesignationOperation
;
51 import eu
.etaxonomy
.taxeditor
.ui
.section
.name
.type
.CloneTypeWizard
;
52 import eu
.etaxonomy
.taxeditor
.view
.e4
.details
.DetailsPartE4
;
56 * @created May 17, 2010
58 public class TypeDesignationSection
extends AbstractEntityCollectionSection
<TaxonName
, TypeDesignationBase
> implements ITaxonBaseDetailSection
{
60 private TaxonBase taxonBase
;
62 public TypeDesignationSection(CdmFormFactory formFactory
, ConversationHolder conversation
,
63 ICdmFormElement parentElement
, int style
) {
64 super(formFactory
, conversation
, parentElement
, Messages
.TypeDesignationSection_TYPE_DESIGNATIONS
, style
);
68 protected void addAction(ToolBarManager toolBarManager
) {
69 if(!isSpecimenType() ||
70 getEntity().getTypeDesignations().isEmpty()
71 || getEntity().getTypeDesignations().stream().noneMatch(designation
->designation
instanceof SpecimenTypeDesignation
)){
74 Action addAction
= new Action(Messages
.TypeDesignationSection_CREATE_DUPLICATE
, IAction
.AS_PUSH_BUTTON
){
77 CloneTypeWizard wizard
= new CloneTypeWizard(getEntity());
78 WizardDialog dialog
= new WizardDialog(getShell(), wizard
);
80 if (dialog
.open() == IStatus
.OK
) {
81 SpecimenTypeDesignation baseTypeDesignation
= HibernateProxyHelper
.deproxy(wizard
.getBaseTypeDesignation());
82 UpdateResult result
= CdmStore
.getService(INameService
.class).cloneTypeDesignation(
83 wizard
.getTaxonName().getUuid(),
85 wizard
.getAccessionNumber(),
86 wizard
.getCollection().getUuid(),
87 wizard
.getTypeStatus());
89 MessagingUtils
.warningDialog(Messages
.TypeDesignationSection_DUPLICATE_FAILED
, this, result
.getExceptions().toString());
91 StoreUtil
.reflowParentScrolledForm(getLayoutComposite(), true);
92 internalUpdateSection(true);
96 addAction
.setImageDescriptor(new ImageDescriptor() {
99 public ImageData
getImageData() {
100 return ImageResources
.getImage(ImageResources
.COPY_ICON
).getImageData();
103 addAction
.setToolTipText(Messages
.TypeDesignationSection_CREATE_DUPLICATE
);
105 toolBarManager
.add(addAction
);
109 public void addElement(TypeDesignationBase element
) {
110 getEntity().addTypeDesignation(element
, PreferencesUtil
.getBooleanValue(IPreferenceKeys
.ADD_TYPES_TO_ALL_NAMES
));
115 public TypeDesignationBase
createNewElement() {
116 if(isSpecimenType()){
117 return SpecimenTypeDesignation
.NewInstance();
119 return NameTypeDesignation
.NewInstance();
124 public Collection
<TypeDesignationBase
> getCollection(TaxonName entity
) {
128 return entity
.getTypeDesignations();
132 public Comparator
<TypeDesignationBase
> getComparator() {
133 return new TypeDesignationComparator();
137 public String
getEmptyString() {
138 return Messages
.TypeDesignationSection_NO_TYPES_YET
;
142 protected String
getTooltipString() {
143 return Messages
.TypeDesignationSection_ADD_TYPE
;
147 public void removeElement(TypeDesignationBase element
) {
148 boolean removeTypeDesignationFromAllTypifiedNames
= PreferencesUtil
.getBooleanValue(IPreferenceKeys
.ADD_TYPES_TO_ALL_NAMES
);
149 TaxonName entity
= removeTypeDesignationFromAllTypifiedNames ?
null : getEntity();
150 DetailsPartE4 detailsView
= AbstractUtility
.getDetailsView(getFormFactory().getContext().get((EPartService
.class)));
152 && detailsView
.getSelectionProvidingPart().getObject() instanceof ITaxonEditor
153 && detailsView
.getSelectionProvidingPart().getObject() instanceof IPostOperationEnabled
) {
154 DeleteTypeDesignationOperation operation
= new DeleteTypeDesignationOperation(
155 "Remove type designation",
156 IOperationHistory
.GLOBAL_UNDO_CONTEXT
,
159 (IPostOperationEnabled
) detailsView
.getSelectionProvidingPart().getObject(),
161 ((ITaxonEditor
) detailsView
.getSelectionProvidingPart().getObject()).addOperation(operation
);
164 entity
.removeTypeDesignation(element
);
170 public void setTaxonBase(TaxonBase entity
) {
171 this.taxonBase
= entity
;
172 TaxonName name
= HibernateProxyHelper
.deproxy(entity
.getName());
176 private boolean isSpecimenType(){
177 Rank rank
= getEntity().getRank();
181 return rank
.isSpecies() || rank
.isInfraSpecific();
185 public TaxonBase
getTaxonBase() {
190 public TypeDesignationBase
addExisting() {
195 public boolean allowAddExisting() {