Merge branch 'release/3.12.0'
[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 * @author p.ciardelli
36 * @created 25.06.2009
37 * @version 1.0
38 */
39 public class AgentEditorInput extends AbstractBulkEditorInput<TeamOrPersonBase> {
40
41 private static final long serialVersionUID = 3387950621617078479L;
42
43 public static final String ID = "bulkeditor.input.author";
44
45 private static AgentEditorInput instance;
46
47 public static String getID() {
48 return ID;
49 }
50
51
52 @Override
53 public String getName() {
54 return BulkEditorInputType.AGENT.label;
55 }
56
57
58 @Override
59 public String getToolTipText() {
60 return getName();
61 }
62
63 public static AbstractBulkEditorInput getInstance() {
64 if (instance == null) {
65 instance = new AgentEditorInput();
66 }
67 return instance;
68 }
69
70 /** {@inheritDoc} */
71 @Override
72 public boolean isMergingEnabled() {
73 return true;
74 }
75
76
77 /** {@inheritDoc} */
78 @Override
79 public boolean isConvertingEnabled() {
80 return true;
81 }
82
83 /** {@inheritDoc} */
84 @Override
85 public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
86 if (entity instanceof IMergable) {
87 try {
88 if(entity instanceof Person && mergeTarget instanceof Person) {
89 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
90 strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
91 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class);
92 } else {
93 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
94 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class);
95 }
96 } catch (MergeException e) {
97 MessagingUtils.errorDialog("Bulk Editor Merge Error",
98 this,
99 "Could not merge chosen objects of type " + entity.getClass().getName(),
100 TaxeditorBulkeditorPlugin.PLUGIN_ID,
101 e,
102 true);
103 }
104 }
105 return true;
106 }
107
108 /** {@inheritDoc} */
109 @Override
110 public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
111 return CdmStore.getSearchManager().findTeamOrPersons(configurator);
112 }
113
114 /** {@inheritDoc}
115 @Override
116 public AgentBase loadEntity(UUID uuid) {
117 List<String> propertyPaths = Arrays.asList(new String[]{});
118 return CdmStore.getService(IAgentService.class).load(uuid, propertyPaths);
119 }*/
120
121
122 public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException {
123 return CdmStore.getService(IAgentService.class).delete(entity) != null;
124
125 }
126
127 /** {@inheritDoc} */
128 public boolean save(AgentBase entity) {
129
130 return CdmStore.getService(IAgentService.class).saveOrUpdate(entity) != null;
131 }
132
133 @Override
134 public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
135 List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
136
137 sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
138
139 return sortProviders;
140 }
141
142
143 @Override
144 protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
145 return new AgentCreator();
146 }
147
148 @Override
149 public TeamOrPersonBase save(TeamOrPersonBase entity) {
150 if(CdmStore.getCurrentSessionManager().isRemoting()) {
151 return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
152 } else {
153 CdmStore.getService(IAgentService.class).saveOrUpdate(entity) ;
154 return entity;
155 }
156 }
157
158 @Override
159 public boolean delete(TeamOrPersonBase entity)
160 throws ReferencedObjectUndeletableException {
161 // TODO Auto-generated method stub
162 return false;
163 }
164
165 /* (non-Javadoc)
166 * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge()
167 */
168 @Override
169 public void merge() {
170
171 }
172
173
174 }