#5160 Use new merge method with ids as arguments
[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.List;
13
14 import eu.etaxonomy.cdm.api.service.IAgentService;
15 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
16 import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
17 import eu.etaxonomy.cdm.model.agent.AgentBase;
18 import eu.etaxonomy.cdm.model.agent.Person;
19 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
20 import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;
21 import eu.etaxonomy.cdm.strategy.merge.IMergable;
22 import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
23 import eu.etaxonomy.cdm.strategy.merge.MergeException;
24 import eu.etaxonomy.cdm.strategy.merge.MergeMode;
25 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
26 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
27 import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.AgentCreator;
28 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.IdentifiableEntitySortProvider;
29 import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
30 import eu.etaxonomy.taxeditor.model.MessagingUtils;
31 import eu.etaxonomy.taxeditor.store.CdmStore;
32
33
34 /**
35 * <p>AgentEditorInput class.</p>
36 *
37 * @author p.ciardelli
38 * @created 25.06.2009
39 * @version 1.0
40 */
41 public class AgentEditorInput extends AbstractBulkEditorInput<TeamOrPersonBase> {
42
43 /**
44 *
45 */
46 private static final long serialVersionUID = 3387950621617078479L;
47
48 /** Constant <code>ID="bulkeditor.input.author"</code> */
49 public static final String ID = "bulkeditor.input.author";
50
51 private static AgentEditorInput instance;
52
53 /**
54 * <p>getID</p>
55 *
56 * @return the iD
57 */
58 public static String getID() {
59 return ID;
60 }
61
62 /* (non-Javadoc)
63 * @see org.eclipse.ui.IEditorInput#getName()
64 */
65 /**
66 * <p>getName</p>
67 *
68 * @return a {@link java.lang.String} object.
69 */
70 @Override
71 public String getName() {
72 return BulkEditorInputType.AGENT.label;
73 }
74
75 /* (non-Javadoc)
76 * @see org.eclipse.ui.IEditorInput#getToolTipText()
77 */
78 /**
79 * <p>getToolTipText</p>
80 *
81 * @return a {@link java.lang.String} object.
82 */
83 @Override
84 public String getToolTipText() {
85 return getName();
86 }
87
88 /**
89 * <p>Getter for the field <code>instance</code>.</p>
90 *
91 * @return a {@link eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput} object.
92 */
93 public static AbstractBulkEditorInput getInstance() {
94 if (instance == null) {
95 instance = new AgentEditorInput();
96 }
97 return instance;
98 }
99
100 /* (non-Javadoc)
101 * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled()
102 */
103 /** {@inheritDoc} */
104 @Override
105 public boolean isMergingEnabled() {
106 return true;
107 }
108
109 /* (non-Javadoc)
110 * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled()
111 */
112 /** {@inheritDoc} */
113 @Override
114 public boolean isConvertingEnabled() {
115 return true;
116 }
117
118 /** {@inheritDoc} */
119 @Override
120 public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
121 if (entity instanceof IMergable) {
122 try {
123 if(entity instanceof Person) {
124 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
125 strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
126 CdmStore.getCommonService().merge(mergeTarget.getId(), entity.getId(), Person.class);
127 } else {
128 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
129 CdmStore.getCommonService().merge(mergeTarget.getId(), entity.getId(), TeamOrPersonBase.class);
130 }
131
132 } catch (MergeException e) {
133 MessagingUtils.errorDialog("Bulk Editor Merge Error",
134 this,
135 "Could not merge chosen objects of type " + entity.getClass().getName(),
136 TaxeditorBulkeditorPlugin.PLUGIN_ID,
137 e,
138 true);
139 }
140 }
141 return true;
142 }
143
144 /** {@inheritDoc} */
145 @Override
146 public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
147 return CdmStore.getSearchManager().findTeamOrPersons(configurator);
148 }
149
150 /** {@inheritDoc}
151 @Override
152 public AgentBase loadEntity(UUID uuid) {
153 List<String> propertyPaths = Arrays.asList(new String[]{});
154 return CdmStore.getService(IAgentService.class).load(uuid, propertyPaths);
155 }*/
156
157
158 public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException {
159
160 return CdmStore.getService(IAgentService.class).delete(entity) != null;
161
162 }
163
164 // /** {@inheritDoc} */
165 // public boolean save(AgentBase entity) {
166 //
167 // return CdmStore.getService(IAgentService.class).saveOrUpdate(entity) != null;
168 // }
169
170 /* (non-Javadoc)
171 * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#getSortProviders()
172 */
173 @Override
174 public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
175 List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
176
177 sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
178
179 return sortProviders;
180 }
181
182 /* (non-Javadoc)
183 * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#createEntityCreator()
184 */
185 @Override
186 protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
187 return new AgentCreator();
188 }
189
190 @Override
191 public boolean save(TeamOrPersonBase entity) {
192 if(CdmStore.getCurrentSessionManager().isRemoting()) {
193 return CdmStore.getService(IAgentService.class).merge(entity) != null;
194 } else {
195 return CdmStore.getService(IAgentService.class).saveOrUpdate(entity) != null;
196 }
197 }
198
199 @Override
200 public boolean delete(TeamOrPersonBase entity)
201 throws ReferencedObjectUndeletableException {
202 // TODO Auto-generated method stub
203 return false;
204 }
205
206 /* (non-Javadoc)
207 * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge()
208 */
209 @Override
210 public void merge() {
211
212 }
213
214
215 }