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
;
53 import eu
.etaxonomy
.taxeditor
.workbench
.part
.IE4SavablePart
;
57 * @created May 17, 2010
59 public class TypeDesignationSection
extends AbstractEntityCollectionSection
<TaxonName
, TypeDesignationBase
> implements ITaxonBaseDetailSection
{
61 private TaxonBase taxonBase
;
63 public TypeDesignationSection(CdmFormFactory formFactory
, ConversationHolder conversation
,
64 ICdmFormElement parentElement
, int style
) {
65 super(formFactory
, conversation
, parentElement
, Messages
.TypeDesignationSection_TYPE_DESIGNATIONS
, style
);
69 protected void addAction(ToolBarManager toolBarManager
) {
70 if(!isSpecimenType() ||
71 getEntity().getTypeDesignations().isEmpty()
72 || getEntity().getTypeDesignations().stream().noneMatch(designation
->designation
instanceof SpecimenTypeDesignation
)){
75 Action cloneAction
= new Action(Messages
.TypeDesignationSection_CREATE_DUPLICATE
, IAction
.AS_PUSH_BUTTON
){
78 DetailsPartE4 detailsView
= AbstractUtility
.getDetailsView(getFormFactory().getContext().get((EPartService
.class)));
80 && detailsView
.getSelectionProvidingPart().getObject() instanceof IE4SavablePart
81 && StoreUtil
.promptCheckIsDirty(((IE4SavablePart
)detailsView
.getSelectionProvidingPart().getObject()))){
84 CloneTypeWizard wizard
= new CloneTypeWizard(getEntity());
85 WizardDialog dialog
= new WizardDialog(getShell(), wizard
);
87 if (dialog
.open() == IStatus
.OK
) {
88 SpecimenTypeDesignation baseTypeDesignation
= HibernateProxyHelper
.deproxy(wizard
.getBaseTypeDesignation());
89 UpdateResult result
= CdmStore
.getService(INameService
.class).cloneTypeDesignation(
90 wizard
.getTaxonName().getUuid(),
92 wizard
.getAccessionNumber(),
93 wizard
.getCollection().getUuid(),
94 wizard
.getTypeStatus());
96 MessagingUtils
.warningDialog(Messages
.TypeDesignationSection_DUPLICATE_FAILED
, this, result
.getExceptions().toString());
98 StoreUtil
.reflowParentScrolledForm(getLayoutComposite(), true);
99 internalUpdateSection(false);
103 cloneAction
.setImageDescriptor(new ImageDescriptor() {
106 public ImageData
getImageData() {
107 return ImageResources
.getImage(ImageResources
.COPY_ICON
).getImageData();
110 cloneAction
.setToolTipText(Messages
.TypeDesignationSection_CREATE_DUPLICATE
);
112 toolBarManager
.add(cloneAction
);
116 public void addElement(TypeDesignationBase element
) {
117 getEntity().addTypeDesignation(element
, PreferencesUtil
.getBooleanValue(IPreferenceKeys
.ADD_TYPES_TO_ALL_NAMES
));
122 public TypeDesignationBase
createNewElement() {
123 if(isSpecimenType()){
124 return SpecimenTypeDesignation
.NewInstance();
126 return NameTypeDesignation
.NewInstance();
131 public Collection
<TypeDesignationBase
> getCollection(TaxonName entity
) {
135 return entity
.getTypeDesignations();
139 public Comparator
<TypeDesignationBase
> getComparator() {
140 return new TypeDesignationComparator();
144 public String
getEmptyString() {
145 return Messages
.TypeDesignationSection_NO_TYPES_YET
;
149 protected String
getTooltipString() {
150 return Messages
.TypeDesignationSection_ADD_TYPE
;
154 public void removeElement(TypeDesignationBase element
) {
155 boolean removeTypeDesignationFromAllTypifiedNames
= PreferencesUtil
.getBooleanValue(IPreferenceKeys
.ADD_TYPES_TO_ALL_NAMES
);
156 TaxonName entity
= removeTypeDesignationFromAllTypifiedNames ?
null : getEntity();
157 DetailsPartE4 detailsView
= AbstractUtility
.getDetailsView(getFormFactory().getContext().get((EPartService
.class)));
159 && detailsView
.getSelectionProvidingPart().getObject() instanceof ITaxonEditor
160 && detailsView
.getSelectionProvidingPart().getObject() instanceof IPostOperationEnabled
) {
161 DeleteTypeDesignationOperation operation
= new DeleteTypeDesignationOperation(
162 "Remove type designation",
163 IOperationHistory
.GLOBAL_UNDO_CONTEXT
,
166 (IPostOperationEnabled
) detailsView
.getSelectionProvidingPart().getObject(),
168 ((ITaxonEditor
) detailsView
.getSelectionProvidingPart().getObject()).addOperation(operation
);
171 entity
.removeTypeDesignation(element
);
177 public void setTaxonBase(TaxonBase entity
) {
178 this.taxonBase
= entity
;
179 TaxonName name
= HibernateProxyHelper
.deproxy(entity
.getName());
183 private boolean isSpecimenType(){
184 Rank rank
= getEntity().getRank();
188 return rank
.isSpecies() || rank
.isInfraSpecific();
192 public TaxonBase
getTaxonBase() {
197 public TypeDesignationBase
addExisting() {
202 public boolean allowAddExisting() {