Project

General

Profile

Download (7.17 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.Team;
24
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
25
import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;
26
import eu.etaxonomy.cdm.strategy.merge.IMergable;
27
import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
28
import eu.etaxonomy.cdm.strategy.merge.MergeException;
29
import eu.etaxonomy.cdm.strategy.merge.MergeMode;
30
import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
31
import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
32
import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.AgentCreator;
33
import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.IdentifiableEntitySortProvider;
34
import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin;
35
import eu.etaxonomy.taxeditor.model.MessagingUtils;
36
import eu.etaxonomy.taxeditor.store.CdmStore;
37

    
38

    
39
/**
40
 * @author p.ciardelli
41
 * @created 25.06.2009
42
 * @version 1.0
43
 */
44
public class AgentEditorInput extends AbstractBulkEditorInput<TeamOrPersonBase> {
45

    
46
	private static final long serialVersionUID = 3387950621617078479L;
47

    
48
	public static final String ID = "bulkeditor.input.author";
49

    
50
	private static AgentEditorInput instance;
51

    
52
	private static final String PROPERTY_NOMENCLATURAL_TITLE = "Abbrev. Title";
53
	private static final String PROPERTY_FAMILY_NAME = "Family Name";
54
	private static final String PROPERTY_OTHER_NAME = "Other Name";
55
	private static final String PROPERTY_INITIALS = "Initials";
56
	private static final String PROPERTY_TEAM_HAS_MORE_MEMBERS = "et al.";
57

    
58
	public static String getID() {
59
		return ID;
60
	}
61

    
62
	@Override
63
	protected List<String> getPropertyKeys_internal() {
64
	    List<String> propertyKeysInternal = new ArrayList<>();
65
	    propertyKeysInternal.add(PROPERTY_NOMENCLATURAL_TITLE);
66
	    propertyKeysInternal.add(PROPERTY_FAMILY_NAME);
67
	    propertyKeysInternal.add(PROPERTY_OTHER_NAME);
68
	    propertyKeysInternal.add(PROPERTY_INITIALS);
69
	    propertyKeysInternal.add(PROPERTY_TEAM_HAS_MORE_MEMBERS);
70
	    return propertyKeysInternal;
71
	}
72

    
73
	@Override
74
	public Object getPropertyValue(TeamOrPersonBase cdmBase, String property) {
75
	    if(property.equals(PROPERTY_NOMENCLATURAL_TITLE)){
76
	        return cdmBase.getNomenclaturalTitle();
77
	    }
78
	    else if(property.equals(PROPERTY_FAMILY_NAME)
79
	            && cdmBase.isInstanceOf(Person.class)){
80
	        return HibernateProxyHelper.deproxy(cdmBase, Person.class).getFamilyName();
81
	    }
82
	    else if(property.equals(PROPERTY_OTHER_NAME)
83
	            && cdmBase.isInstanceOf(Person.class)){
84
	        return HibernateProxyHelper.deproxy(cdmBase, Person.class).getGivenName();
85
	    }
86
	    else if(property.equals(PROPERTY_INITIALS)
87
	            && cdmBase.isInstanceOf(Person.class)){
88
	        return HibernateProxyHelper.deproxy(cdmBase, Person.class).getInitials();
89
	    }
90
	    else if(property.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS)
91
	            && cdmBase.isInstanceOf(Team.class)){
92
	        return HibernateProxyHelper.deproxy(cdmBase, Team.class).isHasMoreMembers();
93
	    }
94
	    return super.getPropertyValue(cdmBase, property);
95
	}
96

    
97
	@Override
98
	public boolean isBooleanProperty(String property) {
99
	    if(property.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS)){
100
	        return true;
101
	    }
102
	    return super.isBooleanProperty(property);
103
	}
104

    
105
    @Override
106
    public String getName() {
107
		return BulkEditorInputType.AGENT.label;
108
	}
109

    
110

    
111
	public static AbstractBulkEditorInput getInstance() {
112
		if (instance == null) {
113
			instance = new AgentEditorInput();
114
		}
115
		return instance;
116
	}
117

    
118
	/** {@inheritDoc} */
119
	@Override
120
	public boolean isMergingEnabled() {
121
		return true;
122
	}
123

    
124

    
125
	/** {@inheritDoc} */
126
	@Override
127
	public boolean isConvertingEnabled() {
128
		return true;
129
	}
130

    
131
	/** {@inheritDoc} */
132
	@Override
133
    public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
134
		if (entity instanceof IMergable) {
135
			try {
136
				if(entity instanceof Person && mergeTarget instanceof Person) {
137
				    IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
138
				    strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
139
				    CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class);
140
				} else {
141
				    IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
142
				    CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class);
143
				}
144
			} catch (MergeException e) {
145
				MessagingUtils.errorDialog("Bulk Editor Merge Error",
146
						this,
147
						"Could not merge chosen objects of type " + entity.getClass().getName(),
148
						TaxeditorBulkeditorPlugin.PLUGIN_ID,
149
						e,
150
						true);
151
			}
152
		}
153
		return true;
154
	}
155

    
156
	@Override
157
	protected int getPageSize() {
158
	    return 200;
159
	}
160

    
161
    @Override
162
    protected long countEntities(IIdentifiableEntityServiceConfigurator configurator) {
163
        return CdmStore.getService(IAgentService.class).countByTitle(configurator);
164
    }
165

    
166
	/** {@inheritDoc} */
167
	@Override
168
	public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
169

    
170
		return CdmStore.getSearchManager().findTeamOrPersons(configurator);
171
	}
172

    
173
	public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException  {
174
			return CdmStore.getService(IAgentService.class).delete(entity) != null;
175

    
176
	}
177

    
178
	@Override
179
	public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
180
		List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
181

    
182
		sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
183

    
184
		return sortProviders;
185
	}
186

    
187
	@Override
188
	protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
189
		return new AgentCreator();
190
	}
191

    
192
	@Override
193
	public TeamOrPersonBase save(TeamOrPersonBase entity) {
194
	   return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
195

    
196
	}
197

    
198
	@Override
199
	public boolean delete(TeamOrPersonBase entity, DeleteConfiguratorBase config)
200
			throws ReferencedObjectUndeletableException {
201
	    if (entity.getUuid() != null){
202
	        return CdmStore.getService(IAgentService.class).delete(entity.getUuid()) != null;
203
	    }else{
204
	        return false;
205
	    }
206
	}
207

    
208
    @Override
209
    public void merge() {
210

    
211
    }
212

    
213
	@Override
214
	protected TeamOrPersonBase loadEntity(UUID entityUuid) {
215
		List<String> propertyPaths = Arrays.asList(new String[]{});
216
		return HibernateProxyHelper.deproxy(CdmStore.getService(IAgentService.class).load(entityUuid, propertyPaths), TeamOrPersonBase.class);
217
	}
218

    
219
}
(2-2/11)