fix #5692: adapt delete algorithm to annotatedLineEditor mechanisms
[taxeditor.git] / eu.etaxonomy.taxeditor.bulkeditor / src / main / java / eu / etaxonomy / taxeditor / bulkeditor / input / AgentEditorInput.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.bulkeditor.input;
11
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.TeamOrPersonBase;
24 import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;
25 import eu.etaxonomy.cdm.strategy.merge.IMergable;
26 import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
27 import eu.etaxonomy.cdm.strategy.merge.MergeException;
28 import eu.etaxonomy.cdm.strategy.merge.MergeMode;
29 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
30 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
31 import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.AgentCreator;
32 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.IdentifiableEntitySortProvider;
33 import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
34 import eu.etaxonomy.taxeditor.model.MessagingUtils;
35 import eu.etaxonomy.taxeditor.store.CdmStore;
36
37
38 /**
39 * @author p.ciardelli
40 * @created 25.06.2009
41 * @version 1.0
42 */
43 public class AgentEditorInput extends AbstractBulkEditorInput<TeamOrPersonBase> {
44
45 private static final long serialVersionUID = 3387950621617078479L;
46
47 public static final String ID = "bulkeditor.input.author";
48
49 private static AgentEditorInput instance;
50
51 public static String getID() {
52 return ID;
53 }
54
55
56 @Override
57 public String getName() {
58 return BulkEditorInputType.AGENT.label;
59 }
60
61
62 @Override
63 public String getToolTipText() {
64 return getName();
65 }
66
67 public static AbstractBulkEditorInput getInstance() {
68 if (instance == null) {
69 instance = new AgentEditorInput();
70 }
71 return instance;
72 }
73
74 /** {@inheritDoc} */
75 @Override
76 public boolean isMergingEnabled() {
77 return true;
78 }
79
80
81 /** {@inheritDoc} */
82 @Override
83 public boolean isConvertingEnabled() {
84 return true;
85 }
86
87 /** {@inheritDoc} */
88 @Override
89 public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
90 if (entity instanceof IMergable) {
91 try {
92 if(entity instanceof Person && mergeTarget instanceof Person) {
93 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
94 strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
95 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class);
96 } else {
97 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
98 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class);
99 }
100 } catch (MergeException e) {
101 MessagingUtils.errorDialog("Bulk Editor Merge Error",
102 this,
103 "Could not merge chosen objects of type " + entity.getClass().getName(),
104 TaxeditorBulkeditorPlugin.PLUGIN_ID,
105 e,
106 true);
107 }
108 }
109 return true;
110 }
111
112 /** {@inheritDoc} */
113 @Override
114 public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
115 return CdmStore.getSearchManager().findTeamOrPersons(configurator);
116 }
117
118 /** {@inheritDoc}
119 @Override
120 public AgentBase loadEntity(UUID uuid) {
121 List<String> propertyPaths = Arrays.asList(new String[]{});
122 return CdmStore.getService(IAgentService.class).load(uuid, propertyPaths);
123 }*/
124
125
126 public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException {
127 return CdmStore.getService(IAgentService.class).delete(entity) != null;
128
129 }
130
131 /** {@inheritDoc} */
132 public boolean save(AgentBase entity) {
133
134 return CdmStore.getService(IAgentService.class).saveOrUpdate(entity) != null;
135 }
136
137 @Override
138 public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
139 List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
140
141 sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
142
143 return sortProviders;
144 }
145
146
147 @Override
148 protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
149 return new AgentCreator();
150 }
151
152 @Override
153 public TeamOrPersonBase save(TeamOrPersonBase entity) {
154 return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
155
156 }
157
158 @Override
159 public boolean delete(TeamOrPersonBase entity, DeleteConfiguratorBase config)
160 throws ReferencedObjectUndeletableException {
161 return CdmStore.getService(IAgentService.class).delete(entity.getUuid()) != null;
162 }
163
164 /* (non-Javadoc)
165 * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge()
166 */
167 @Override
168 public void merge() {
169
170 }
171
172
173 @Override
174 protected TeamOrPersonBase loadEntity(UUID entityUuid) {
175 List<String> propertyPaths = Arrays.asList(new String[]{});
176 return HibernateProxyHelper.deproxy(CdmStore.getService(IAgentService.class).load(entityUuid, propertyPaths), TeamOrPersonBase.class);
177 }
178
179
180
181 }