Project

General

Profile

Download (5.65 KB) Statistics
| Branch: | Tag: | Revision:
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.ArrayList;
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
	private static final String PROPERTY_NOMENCLATURAL_TITLE = "PROPERTY_NOMENCLATURAL_TITLE";
52

    
53
	public static String getID() {
54
		return ID;
55
	}
56

    
57
	@Override
58
	protected List<String> getPropertyKeys_internal() {
59
	    List<String> propertyKeysInternal = new ArrayList<>();
60
	    return propertyKeysInternal;
61
	}
62

    
63
	@Override
64
	public Object getPropertyValue(TeamOrPersonBase cdmBase, String property) {
65
	    if(property.equals(PROPERTY_NOMENCLATURAL_TITLE)){
66
	        return cdmBase.getNomenclaturalTitle();
67
	    }
68
	    return super.getPropertyValue(cdmBase, property);
69
	}
70

    
71
    @Override
72
    public String getName() {
73
		return BulkEditorInputType.AGENT.label;
74
	}
75

    
76

    
77
	public static AbstractBulkEditorInput getInstance() {
78
		if (instance == null) {
79
			instance = new AgentEditorInput();
80
		}
81
		return instance;
82
	}
83

    
84
	/** {@inheritDoc} */
85
	@Override
86
	public boolean isMergingEnabled() {
87
		return true;
88
	}
89

    
90

    
91
	/** {@inheritDoc} */
92
	@Override
93
	public boolean isConvertingEnabled() {
94
		return true;
95
	}
96

    
97
	/** {@inheritDoc} */
98
	@Override
99
    public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
100
		if (entity instanceof IMergable) {
101
			try {
102
				if(entity instanceof Person && mergeTarget instanceof Person) {
103
				    IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
104
				    strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
105
				    CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class);
106
				} else {
107
				    IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
108
				    CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class);
109
				}
110
			} catch (MergeException e) {
111
				MessagingUtils.errorDialog("Bulk Editor Merge Error",
112
						this,
113
						"Could not merge chosen objects of type " + entity.getClass().getName(),
114
						TaxeditorBulkeditorPlugin.PLUGIN_ID,
115
						e,
116
						true);
117
			}
118
		}
119
		return true;
120
	}
121

    
122
	@Override
123
	protected int getPageSize() {
124
	    return 200;
125
	}
126

    
127
    @Override
128
    protected long countEntities(IIdentifiableEntityServiceConfigurator configurator) {
129
        return CdmStore.getService(IAgentService.class).countByTitle(configurator);
130
    }
131

    
132
	/** {@inheritDoc} */
133
	@Override
134
	public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
135

    
136
		return CdmStore.getSearchManager().findTeamOrPersons(configurator);
137
	}
138

    
139
	public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException  {
140
			return CdmStore.getService(IAgentService.class).delete(entity) != null;
141

    
142
	}
143

    
144
	@Override
145
	public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
146
		List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
147

    
148
		sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
149

    
150
		return sortProviders;
151
	}
152

    
153
	@Override
154
	protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
155
		return new AgentCreator();
156
	}
157

    
158
	@Override
159
	public TeamOrPersonBase save(TeamOrPersonBase entity) {
160
	   return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
161

    
162
	}
163

    
164
	@Override
165
	public boolean delete(TeamOrPersonBase entity, DeleteConfiguratorBase config)
166
			throws ReferencedObjectUndeletableException {
167
	    if (entity.getUuid() != null){
168
	        return CdmStore.getService(IAgentService.class).delete(entity.getUuid()) != null;
169
	    }else{
170
	        return false;
171
	    }
172
	}
173

    
174
    @Override
175
    public void merge() {
176

    
177
    }
178

    
179
	@Override
180
	protected TeamOrPersonBase loadEntity(UUID entityUuid) {
181
		List<String> propertyPaths = Arrays.asList(new String[]{});
182
		return HibernateProxyHelper.deproxy(CdmStore.getService(IAgentService.class).load(entityUuid, propertyPaths), TeamOrPersonBase.class);
183
	}
184

    
185
}
(2-2/11)