improve deduplication handling and saving in bulkeditor
[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.Arrays;
12 import java.util.List;
13 import java.util.UUID;
14
15 import eu.etaxonomy.cdm.api.service.IAgentService;
16 import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
17 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
18 import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
19 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
20 import eu.etaxonomy.cdm.model.agent.AgentBase;
21 import eu.etaxonomy.cdm.model.agent.Person;
22 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
23 import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;
24 import eu.etaxonomy.cdm.strategy.merge.IMergable;
25 import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
26 import eu.etaxonomy.cdm.strategy.merge.MergeException;
27 import eu.etaxonomy.cdm.strategy.merge.MergeMode;
28 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
29 import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
30 import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.AgentCreator;
31 import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.IdentifiableEntitySortProvider;
32 import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
33 import eu.etaxonomy.taxeditor.model.MessagingUtils;
34 import eu.etaxonomy.taxeditor.store.CdmStore;
35
36
37 /**
38 * @author p.ciardelli
39 * @created 25.06.2009
40 * @version 1.0
41 */
42 public class AgentEditorInput extends AbstractBulkEditorInput<TeamOrPersonBase> {
43
44 private static final long serialVersionUID = 3387950621617078479L;
45
46 public static final String ID = "bulkeditor.input.author";
47
48 private static AgentEditorInput instance;
49
50 public static String getID() {
51 return ID;
52 }
53
54 @Override
55 public String getName() {
56 return BulkEditorInputType.AGENT.label;
57 }
58
59
60 public static AbstractBulkEditorInput getInstance() {
61 if (instance == null) {
62 instance = new AgentEditorInput();
63 }
64 return instance;
65 }
66
67 /** {@inheritDoc} */
68 @Override
69 public boolean isMergingEnabled() {
70 return true;
71 }
72
73
74 /** {@inheritDoc} */
75 @Override
76 public boolean isConvertingEnabled() {
77 return true;
78 }
79
80 /** {@inheritDoc} */
81 @Override
82 public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
83 if (entity instanceof IMergable) {
84 try {
85 if(entity instanceof Person && mergeTarget instanceof Person) {
86 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
87 strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
88 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class);
89 } else {
90 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
91 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class);
92 }
93 } catch (MergeException e) {
94 MessagingUtils.errorDialog("Bulk Editor Merge Error",
95 this,
96 "Could not merge chosen objects of type " + entity.getClass().getName(),
97 TaxeditorBulkeditorPlugin.PLUGIN_ID,
98 e,
99 true);
100 }
101 }
102 return true;
103 }
104
105 /** {@inheritDoc} */
106 @Override
107 public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
108
109 return CdmStore.getSearchManager().findTeamOrPersons(configurator);
110 }
111
112 public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException {
113 return CdmStore.getService(IAgentService.class).delete(entity) != null;
114
115 }
116
117 @Override
118 public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
119 List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
120
121 sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
122
123 return sortProviders;
124 }
125
126 @Override
127 protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
128 return new AgentCreator();
129 }
130
131 @Override
132 public TeamOrPersonBase save(TeamOrPersonBase entity) {
133 return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
134
135 }
136
137 @Override
138 public boolean delete(TeamOrPersonBase entity, DeleteConfiguratorBase config)
139 throws ReferencedObjectUndeletableException {
140 if (entity.getUuid() != null){
141 return CdmStore.getService(IAgentService.class).delete(entity.getUuid()) != null;
142 }else{
143 return false;
144 }
145 }
146
147 @Override
148 public void merge() {
149
150 }
151
152 @Override
153 protected TeamOrPersonBase loadEntity(UUID entityUuid) {
154 List<String> propertyPaths = Arrays.asList(new String[]{});
155 return HibernateProxyHelper.deproxy(CdmStore.getService(IAgentService.class).load(entityUuid, propertyPaths), TeamOrPersonBase.class);
156 }
157
158 }