a930d287d4f1251c9e8c74cf3a1f7daf7f07b033
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / name / TypeDesignationSection.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9
10 package eu.etaxonomy.taxeditor.ui.section.name;
11
12 import java.util.Collection;
13 import java.util.Comparator;
14
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;
22
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;
46
47 /**
48 * @author n.hoffmann
49 * @created May 17, 2010
50 */
51 public class TypeDesignationSection extends AbstractEntityCollectionSection<TaxonName, TypeDesignationBase> implements ITaxonBaseDetailSection {
52
53 private TaxonBase taxonBase;
54
55 public TypeDesignationSection(CdmFormFactory formFactory, ConversationHolder conversation,
56 ICdmFormElement parentElement, int style) {
57 super(formFactory, conversation, parentElement, Messages.TypeDesignationSection_TYPE_DESIGNATIONS, style);
58 }
59
60 @Override
61 protected void addAction(ToolBarManager toolBarManager) {
62 if(!isSpecimenType() ||
63 getEntity().getTypeDesignations().isEmpty()
64 || getEntity().getTypeDesignations().stream().noneMatch(designation->designation instanceof SpecimenTypeDesignation)){
65 return;
66 }
67 Action addAction = new Action(Messages.TypeDesignationSection_CREATE_DUPLICATE, IAction.AS_PUSH_BUTTON){
68 @Override
69 public void run() {
70 CloneTypeWizard wizard = new CloneTypeWizard(getEntity());
71 WizardDialog dialog = new WizardDialog(getShell(), wizard);
72
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(),
77 baseTypeDesignation,
78 wizard.getAccessionNumber(),
79 wizard.getCollection().getUuid(),
80 wizard.getTypeStatus());
81 if(!result.isOk()){
82 MessagingUtils.warningDialog(Messages.TypeDesignationSection_DUPLICATE_FAILED, this, result.getExceptions().toString());
83 }
84 StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true);
85 internalUpdateSection(true);
86 }
87 }
88 };
89 addAction.setImageDescriptor(new ImageDescriptor() {
90
91 @Override
92 public ImageData getImageData() {
93 return ImageResources.getImage(ImageResources.COPY_ICON).getImageData();
94 }
95 });
96 addAction.setToolTipText(Messages.TypeDesignationSection_CREATE_DUPLICATE);
97
98 toolBarManager.add(addAction);
99 }
100
101 @Override
102 public void addElement(TypeDesignationBase element) {
103 getEntity().addTypeDesignation(element, PreferencesUtil.getBooleanValue(IPreferenceKeys.ADD_TYPES_TO_ALL_NAMES));
104 updateToolbar();
105 }
106
107 @Override
108 public TypeDesignationBase createNewElement() {
109 if(isSpecimenType()){
110 return SpecimenTypeDesignation.NewInstance();
111 }else{
112 return NameTypeDesignation.NewInstance();
113 }
114 }
115
116 @Override
117 public Collection<TypeDesignationBase> getCollection(TaxonName entity) {
118 if (entity == null){
119 return null;
120 }
121 return entity.getTypeDesignations();
122 }
123
124 @Override
125 public Comparator<TypeDesignationBase> getComparator() {
126 return new TypeDesignationComparator();
127 }
128
129 @Override
130 public String getEmptyString() {
131 return Messages.TypeDesignationSection_NO_TYPES_YET;
132 }
133
134 @Override
135 protected String getTooltipString() {
136 return Messages.TypeDesignationSection_ADD_TYPE;
137 }
138
139 @Override
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());
144 updateToolbar();
145 }
146
147 @Override
148 public void setTaxonBase(TaxonBase entity) {
149 this.taxonBase = entity;
150 TaxonName name = HibernateProxyHelper.deproxy(entity.getName());
151 setEntity(name);
152 }
153
154 private boolean isSpecimenType(){
155 Rank rank = getEntity().getRank();
156 if(rank==null){
157 return false;
158 }
159 return rank.isSpecies() || rank.isInfraSpecific();
160 }
161
162 @Override
163 public TaxonBase getTaxonBase() {
164 return taxonBase;
165 }
166
167 @Override
168 public TypeDesignationBase addExisting() {
169 return null;
170 }
171
172 @Override
173 public boolean allowAddExisting() {
174 return false;
175 }
176 }