Project

General

Profile

Download (8.55 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
 * @author p.ciardelli
40
 * @created 25.06.2009
41
 */
42
public class AgentEditorInput extends AbstractBulkEditorInput<TeamOrPersonBase> {
43

    
44
	public static final String ID = "bulkeditor.input.author";
45

    
46
	private static AgentEditorInput instance;
47

    
48
	private static final String PROPERTY_NOMENCLATURAL_TITLE = "Abbrev. Title Cache";
49
	private static final String PROPERTY_NOMENCLATURAL_TITLECACHE_PROTECTED = "Protect Abbrev. Title Cache";
50
	private static final String PROPERTY_FAMILY_NAME = "Family Name";
51
	private static final String PROPERTY_OTHER_NAME = "Other/Given Name";
52
	private static final String PROPERTY_INITIALS = "Initials";
53
	private static final String PROPERTY_TEAM_HAS_MORE_MEMBERS = "et al.";
54
	private static final String PROPERTY_COLLECTOR_TITLECACHE = "Collector Title Cache";
55
	private static final String PROPERTY_COLLECTOR_TITLECACHE_PROTECTED = "Protect Collector Title Cache";
56

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

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

    
75
	@Override
76
	public Object getPropertyValue(TeamOrPersonBase cdmBase, String property) {
77
	    if(property.equals(PROPERTY_NOMENCLATURAL_TITLE)){
78
	        return cdmBase.getNomenclaturalTitleCache();
79
	    }
80
	    else if(property.equals(PROPERTY_NOMENCLATURAL_TITLECACHE_PROTECTED) && cdmBase.isInstanceOf(Team.class)){
81
            return HibernateProxyHelper.deproxy(cdmBase, Team.class).isProtectedNomenclaturalTitleCache();
82
        }
83
	    else if(property.equals(PROPERTY_COLLECTOR_TITLECACHE)){
84
	        return HibernateProxyHelper.deproxy(cdmBase, TeamOrPersonBase.class).getCollectorTitleCache();
85
        }
86
	    else if(property.equals(PROPERTY_COLLECTOR_TITLECACHE_PROTECTED) && cdmBase.isInstanceOf(Team.class)){
87
            return HibernateProxyHelper.deproxy(cdmBase, Team.class).isProtectedCollectorTitleCache();
88
        }
89
	    else if(property.equals(PROPERTY_FAMILY_NAME)
90
	            && cdmBase.isInstanceOf(Person.class)){
91
	        return HibernateProxyHelper.deproxy(cdmBase, Person.class).getFamilyName();
92
	    }
93
	    else if(property.equals(PROPERTY_OTHER_NAME)
94
	            && cdmBase.isInstanceOf(Person.class)){
95
	        return HibernateProxyHelper.deproxy(cdmBase, Person.class).getGivenName();
96
	    }
97
	    else if(property.equals(PROPERTY_INITIALS)
98
	            && cdmBase.isInstanceOf(Person.class)){
99
	        return HibernateProxyHelper.deproxy(cdmBase, Person.class).getInitials();
100
	    }
101
	    else if(property.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS)
102
	            && cdmBase.isInstanceOf(Team.class)){
103
	        return HibernateProxyHelper.deproxy(cdmBase, Team.class).isHasMoreMembers();
104
	    }
105
	    return super.getPropertyValue(cdmBase, property);
106
	}
107

    
108
	@Override
109
	public boolean isBooleanProperty(String property) {
110
	    if(property.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS) || property.equals(PROPERTY_NOMENCLATURAL_TITLECACHE_PROTECTED)
111
	            || property.equals(PROPERTY_COLLECTOR_TITLECACHE_PROTECTED)){
112
	        return true;
113
	    }
114
	    return super.isBooleanProperty(property);
115
	}
116

    
117
	@Override
118
    public boolean isCacheProperty(String property) {
119
        if(property.equals(PROPERTY_NOMENCLATURAL_TITLECACHE_PROTECTED)
120
                || property.equals(PROPERTY_COLLECTOR_TITLECACHE_PROTECTED)){
121
            return true;
122
        }
123
        return super.isCacheProperty(property);
124
    }
125

    
126
    @Override
127
    public String getName() {
128
		return BulkEditorInputType.AGENT.label;
129
	}
130

    
131

    
132
	public static AbstractBulkEditorInput getInstance() {
133
		if (instance == null) {
134
			instance = new AgentEditorInput();
135
		}
136
		return instance;
137
	}
138

    
139
	@Override
140
	public boolean isMergingEnabled() {
141
		return true;
142
	}
143

    
144
	@Override
145
	public boolean isConvertingEnabled() {
146
		return true;
147
	}
148

    
149
	@Override
150
    public boolean merge(TeamOrPersonBase entity, TeamOrPersonBase mergeTarget) {
151
		if (entity instanceof IMergable) {
152
			try {
153
				if(entity instanceof Person && mergeTarget instanceof Person) {
154
				    IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class);
155
				    strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST);
156
				    CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class);
157
				} else {
158
				    IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class);
159
				    CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class);
160
				}
161
			} catch (MergeException e) {
162
				MessagingUtils.errorDialog("Bulk Editor Merge Error",
163
						this,
164
						"Could not merge chosen objects of type " + entity.getClass().getName(),
165
						TaxeditorBulkeditorPlugin.PLUGIN_ID,
166
						e,
167
						true);
168
			}
169
		}
170
		return true;
171
	}
172

    
173
	@Override
174
	protected int getPageSize() {
175
	    return 200;
176
	}
177

    
178
    @Override
179
    protected long countEntities(IIdentifiableEntityServiceConfigurator configurator) {
180
        return CdmStore.getService(IAgentService.class).countByTitle(configurator);
181
    }
182

    
183
	@Override
184
	public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
185

    
186
		return CdmStore.getSearchManager().findTeamOrPersons(configurator);
187
	}
188

    
189
	public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException  {
190
			return CdmStore.getService(IAgentService.class).delete(entity) != null;
191

    
192
	}
193

    
194
	@Override
195
	public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
196
		List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
197

    
198
		sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
199

    
200
		return sortProviders;
201
	}
202

    
203
	@Override
204
	protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
205
		return new AgentCreator();
206
	}
207

    
208
	@Override
209
	public TeamOrPersonBase save(TeamOrPersonBase entity) {
210
	   return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
211

    
212
	}
213

    
214
	@Override
215
	public boolean delete(TeamOrPersonBase entity, DeleteConfiguratorBase config)
216
			throws ReferencedObjectUndeletableException {
217
	    if (entity.getUuid() != null){
218
	        return CdmStore.getService(IAgentService.class).delete(entity.getUuid()) != null;
219
	    }else{
220
	        return false;
221
	    }
222
	}
223

    
224
    @Override
225
    public void merge() {
226

    
227
    }
228

    
229
	@Override
230
	protected TeamOrPersonBase loadEntity(UUID entityUuid) {
231
		List<String> propertyPaths = Arrays.asList(new String[]{});
232
		return HibernateProxyHelper.deproxy(CdmStore.getService(IAgentService.class).load(entityUuid, propertyPaths), TeamOrPersonBase.class);
233
	}
234

    
235
}
(2-2/11)