Merge branch 'develop' into bulkEditorE4
[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 @Override
61 public String getToolTipText() {
62 return getName();
63 }
64
65 public static AbstractBulkEditorInput getInstance() {
66 if (instance == null) {
67 instance = new AgentEditorInput();
68 }
69 return instance;
70 }
71
72 /** {@inheritDoc} */
73 @Override
74 public boolean isMergingEnabled() {
75 return true;
76 }
77
78
79 /** {@inheritDoc} */
80 @Override
81 public boolean isConvertingEnabled() {
82 return true;
83 }
84
85 /** {@inheritDoc} */
86 @Override
87 public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
88 if (entity instanceof IMergable) {
89 try {
90 if(entity instanceof Person && mergeTarget instanceof Person) {
91 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
92 strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
93 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class);
94 } else {
95 IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
96 CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class);
97 }
98 } catch (MergeException e) {
99 MessagingUtils.errorDialog("Bulk Editor Merge Error",
100 this,
101 "Could not merge chosen objects of type " + entity.getClass().getName(),
102 TaxeditorBulkeditorPlugin.PLUGIN_ID,
103 e,
104 true);
105 }
106 }
107 return true;
108 }
109
110 /** {@inheritDoc} */
111 @Override
112 public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
113 return CdmStore.getSearchManager().findTeamOrPersons(configurator);
114 }
115
116 public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException {
117 return CdmStore.getService(IAgentService.class).delete(entity) != null;
118
119 }
120
121 @Override
122 public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
123 List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
124
125 sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
126
127 return sortProviders;
128 }
129
130 @Override
131 protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
132 return new AgentCreator();
133 }
134
135 @Override
136 public TeamOrPersonBase save(TeamOrPersonBase entity) {
137 return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
138
139 }
140
141 @Override
142 public boolean delete(TeamOrPersonBase entity, DeleteConfiguratorBase config)
143 throws ReferencedObjectUndeletableException {
144 if (entity.getUuid() != null){
145 return CdmStore.getService(IAgentService.class).delete(entity.getUuid()) != null;
146 }else{
147 return false;
148 }
149 }
150
151 @Override
152 public void merge() {
153
154 }
155
156 @Override
157 protected TeamOrPersonBase loadEntity(UUID entityUuid) {
158 List<String> propertyPaths = Arrays.asList(new String[]{});
159 return HibernateProxyHelper.deproxy(CdmStore.getService(IAgentService.class).load(entityUuid, propertyPaths), TeamOrPersonBase.class);
160 }
161
162 }