Project

General

Profile

Download (7 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";
49
	private static final String PROPERTY_FAMILY_NAME = "Family Name";
50
	private static final String PROPERTY_OTHER_NAME = "Other/Given Name";
51
	private static final String PROPERTY_INITIALS = "Initials";
52
	private static final String PROPERTY_TEAM_HAS_MORE_MEMBERS = "et al.";
53

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

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

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

    
93
	@Override
94
	public boolean isBooleanProperty(String property) {
95
	    if(property.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS)){
96
	        return true;
97
	    }
98
	    return super.isBooleanProperty(property);
99
	}
100

    
101
    @Override
102
    public String getName() {
103
		return BulkEditorInputType.AGENT.label;
104
	}
105

    
106

    
107
	public static AbstractBulkEditorInput getInstance() {
108
		if (instance == null) {
109
			instance = new AgentEditorInput();
110
		}
111
		return instance;
112
	}
113

    
114
	@Override
115
	public boolean isMergingEnabled() {
116
		return true;
117
	}
118

    
119
	@Override
120
	public boolean isConvertingEnabled() {
121
		return true;
122
	}
123

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

    
148
	@Override
149
	protected int getPageSize() {
150
	    return 200;
151
	}
152

    
153
    @Override
154
    protected long countEntities(IIdentifiableEntityServiceConfigurator configurator) {
155
        return CdmStore.getService(IAgentService.class).countByTitle(configurator);
156
    }
157

    
158
	@Override
159
	public List<TeamOrPersonBase> listEntities(IIdentifiableEntityServiceConfigurator configurator) {
160

    
161
		return CdmStore.getSearchManager().findTeamOrPersons(configurator);
162
	}
163

    
164
	public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException  {
165
			return CdmStore.getService(IAgentService.class).delete(entity) != null;
166

    
167
	}
168

    
169
	@Override
170
	public List<IBulkEditorSortProvider<TeamOrPersonBase>> getSortProviders() {
171
		List<IBulkEditorSortProvider<TeamOrPersonBase>> sortProviders = super.getSortProviders();
172

    
173
		sortProviders.add(0, new IdentifiableEntitySortProvider<TeamOrPersonBase>());
174

    
175
		return sortProviders;
176
	}
177

    
178
	@Override
179
	protected IEntityCreator<TeamOrPersonBase> createEntityCreator() {
180
		return new AgentCreator();
181
	}
182

    
183
	@Override
184
	public TeamOrPersonBase save(TeamOrPersonBase entity) {
185
	   return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity();
186

    
187
	}
188

    
189
	@Override
190
	public boolean delete(TeamOrPersonBase entity, DeleteConfiguratorBase config)
191
			throws ReferencedObjectUndeletableException {
192
	    if (entity.getUuid() != null){
193
	        return CdmStore.getService(IAgentService.class).delete(entity.getUuid()) != null;
194
	    }else{
195
	        return false;
196
	    }
197
	}
198

    
199
    @Override
200
    public void merge() {
201

    
202
    }
203

    
204
	@Override
205
	protected TeamOrPersonBase loadEntity(UUID entityUuid) {
206
		List<String> propertyPaths = Arrays.asList(new String[]{});
207
		return HibernateProxyHelper.deproxy(CdmStore.getService(IAgentService.class).load(entityUuid, propertyPaths), TeamOrPersonBase.class);
208
	}
209

    
210
}
(2-2/11)