Merge branch 'release/5.19.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.bulkeditor / src / main / java / eu / etaxonomy / taxeditor / bulkeditor / input / AgentEditorInput.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 package eu.etaxonomy.taxeditor.bulkeditor.input;
10
11 import java.util.ArrayList;
12 import java.util.Arrays;
13 import java.util.List;
14 import java.util.UUID;
15
16 import eu.etaxonomy.cdm.api.service.IAgentService;
17 import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
18 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
19 import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
20 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
21 import eu.etaxonomy.cdm.model.agent.AgentBase;
22 import eu.etaxonomy.cdm.model.agent.Person;
23 import eu.etaxonomy.cdm.model.agent.Team;
24 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
25 import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;
26 import eu.etaxonomy.cdm.strategy.merge.IMergable;
27 import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
28 import eu.etaxonomy.cdm.strategy.merge.MergeException;
29 import eu.etaxonomy.cdm.strategy.merge.MergeMode;
30 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
31 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
32 import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.AgentCreator;
33 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.IdentifiableEntitySortProvider;
34 import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
35 import eu.etaxonomy.taxeditor.model.MessagingUtils;
36 import eu.etaxonomy.taxeditor.store.CdmStore;
37
38 /**
39 * @author p.ciardelli
40 * @created 25.06.2009
41 */
42 public class AgentEditorInput extends AbstractBulkEditorInput<TeamOrPersonBase> {
43
44 public static final String ID = "bulkeditor.input.author";
45
46 private static AgentEditorInput instance;
47
48 private static final String PROPERTY_NOMENCLATURAL_TITLE = "Abbrev. Title";
49 private static final String PROPERTY_FAMILY_NAME = "Family Name";
50 private static final String PROPERTY_OTHER_NAME = "Other Name";
51 private static final String PROPERTY_INITIALS = "Initials";
52 private static final String PROPERTY_TEAM_HAS_MORE_MEMBERS = "et al.";
53
54 public static String getID() {
55 return ID;
56 }
57
58 @Override
59 protected List<String> getPropertyKeys_internal() {
60 List<String> propertyKeysInternal = new ArrayList<>();
61 propertyKeysInternal.add(PROPERTY_NOMENCLATURAL_TITLE);
62 propertyKeysInternal.add(PROPERTY_FAMILY_NAME);
63 propertyKeysInternal.add(PROPERTY_OTHER_NAME);
64 propertyKeysInternal.add(PROPERTY_INITIALS);
65 propertyKeysInternal.add(PROPERTY_TEAM_HAS_MORE_MEMBERS);
66 return propertyKeysInternal;
67 }
68
69 @Override
70 public Object getPropertyValue(TeamOrPersonBase cdmBase, String property) {
71 if(property.equals(PROPERTY_NOMENCLATURAL_TITLE)){
72 return cdmBase.getNomenclaturalTitle();
73 }
74 else if(property.equals(PROPERTY_FAMILY_NAME)
75 && cdmBase.isInstanceOf(Person.class)){
76 return HibernateProxyHelper.deproxy(cdmBase, Person.class).getFamilyName();
77 }
78 else if(property.equals(PROPERTY_OTHER_NAME)
79 && cdmBase.isInstanceOf(Person.class)){
80 return HibernateProxyHelper.deproxy(cdmBase, Person.class).getGivenName();
81 }
82 else if(property.equals(PROPERTY_INITIALS)
83 && cdmBase.isInstanceOf(Person.class)){
84 return HibernateProxyHelper.deproxy(cdmBase, Person.class).getInitials();
85 }
86 else if(property.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS)
87 && cdmBase.isInstanceOf(Team.class)){
88 return HibernateProxyHelper.deproxy(cdmBase, Team.class).isHasMoreMembers();
89 }
90 return super.getPropertyValue(cdmBase, property);
91 }
92
93 @Override
94 public boolean isBooleanProperty(String property) {
95 if(property.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS)){
96 return true;
97 }
98 return super.isBooleanProperty(property);
99 }
100
101 @Override
102 public String getName() {
103 return BulkEditorInputType.AGENT.label;
104 }
105
106
107 public static AbstractBulkEditorInput getInstance() {
108 if (instance == null) {
109 instance = new AgentEditorInput();
110 }
111 return instance;
112 }
113
114 @Override
115 public boolean isMergingEnabled() {
116 return true;
117 }
118
119 @Override
120 public boolean isConvertingEnabled() {
121 return true;
122 }
123
124 @Override
125 public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
126 if (entity instanceof IMergable) {
127 try {
128 if(entity instanceof Person && mergeTarget instanceof Person) {
129 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
130 strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
131 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class);
132 } else {
133 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
134 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class);
135 }
136 } catch (MergeException e) {
137 MessagingUtils.errorDialog("Bulk Editor Merge Error",
138 this,
139 "Could not merge chosen objects of type " + entity.getClass().getName(),
140 TaxeditorBulkeditorPlugin.PLUGIN_ID,
141 e,
142 true);
143 }
144 }
145 return true;
146 }
147
148 @Override
149 protected int getPageSize() {
150 return 200;
151 }
152
153 @Override
154 protected long countEntities(IIdentifiableEntityServiceConfigurator configurator) {
155 return CdmStore.getService(IAgentService.class).countByTitle(configurator);
156 }
157
158 @Override
159 public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
160
161 return CdmStore.getSearchManager().findTeamOrPersons(configurator);
162 }
163
164 public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException {
165 return CdmStore.getService(IAgentService.class).delete(entity) != null;
166
167 }
168
169 @Override
170 public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
171 List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
172
173 sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
174
175 return sortProviders;
176 }
177
178 @Override
179 protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
180 return new AgentCreator();
181 }
182
183 @Override
184 public TeamOrPersonBase save(TeamOrPersonBase entity) {
185 return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
186
187 }
188
189 @Override
190 public boolean delete(TeamOrPersonBase entity, DeleteConfiguratorBase config)
191 throws ReferencedObjectUndeletableException {
192 if (entity.getUuid() != null){
193 return CdmStore.getService(IAgentService.class).delete(entity.getUuid()) != null;
194 }else{
195 return false;
196 }
197 }
198
199 @Override
200 public void merge() {
201
202 }
203
204 @Override
205 protected TeamOrPersonBase loadEntity(UUID entityUuid) {
206 List<String> propertyPaths = Arrays.asList(new String[]{});
207 return HibernateProxyHelper.deproxy(CdmStore.getService(IAgentService.class).load(entityUuid, propertyPaths), TeamOrPersonBase.class);
208 }
209
210 }