2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.bulkeditor
.input
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Arrays
;
13 import java
.util
.List
;
14 import java
.util
.UUID
;
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
;
42 public class AgentEditorInput
extends AbstractBulkEditorInput
<TeamOrPersonBase
> {
44 public static final String ID
= "bulkeditor.input.author";
46 private static AgentEditorInput instance
;
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 Name";
51 private static final String PROPERTY_INITIALS
= "Initials";
52 private static final String PROPERTY_TEAM_HAS_MORE_MEMBERS
= "et al.";
54 public static String
getID() {
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
;
70 public Object
getPropertyValue(TeamOrPersonBase cdmBase
, String property
) {
71 if(property
.equals(PROPERTY_NOMENCLATURAL_TITLE
)){
72 return cdmBase
.getNomenclaturalTitle();
74 else if(property
.equals(PROPERTY_FAMILY_NAME
)
75 && cdmBase
.isInstanceOf(Person
.class)){
76 return HibernateProxyHelper
.deproxy(cdmBase
, Person
.class).getFamilyName();
78 else if(property
.equals(PROPERTY_OTHER_NAME
)
79 && cdmBase
.isInstanceOf(Person
.class)){
80 return HibernateProxyHelper
.deproxy(cdmBase
, Person
.class).getGivenName();
82 else if(property
.equals(PROPERTY_INITIALS
)
83 && cdmBase
.isInstanceOf(Person
.class)){
84 return HibernateProxyHelper
.deproxy(cdmBase
, Person
.class).getInitials();
86 else if(property
.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS
)
87 && cdmBase
.isInstanceOf(Team
.class)){
88 return HibernateProxyHelper
.deproxy(cdmBase
, Team
.class).isHasMoreMembers();
90 return super.getPropertyValue(cdmBase
, property
);
94 public boolean isBooleanProperty(String property
) {
95 if(property
.equals(PROPERTY_TEAM_HAS_MORE_MEMBERS
)){
98 return super.isBooleanProperty(property
);
102 public String
getName() {
103 return BulkEditorInputType
.AGENT
.label
;
107 public static AbstractBulkEditorInput
getInstance() {
108 if (instance
== null) {
109 instance
= new AgentEditorInput();
115 public boolean isMergingEnabled() {
120 public boolean isConvertingEnabled() {
125 public boolean merge(TeamOrPersonBase entity
, TeamOrPersonBase mergeTarget
) {
126 if (entity
instanceof IMergable
) {
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);
133 IMergeStrategy strategy
= DefaultMergeStrategy
.NewInstance(TeamOrPersonBase
.class);
134 CdmStore
.getCommonService().merge(mergeTarget
.getUuid(), entity
.getUuid(), TeamOrPersonBase
.class);
136 } catch (MergeException e
) {
137 MessagingUtils
.errorDialog("Bulk Editor Merge Error",
139 "Could not merge chosen objects of type " + entity
.getClass().getName(),
140 TaxeditorBulkeditorPlugin
.PLUGIN_ID
,
149 protected int getPageSize() {
154 protected long countEntities(IIdentifiableEntityServiceConfigurator configurator
) {
155 return CdmStore
.getService(IAgentService
.class).countByTitle(configurator
);
159 public List
<TeamOrPersonBase
> listEntities(IIdentifiableEntityServiceConfigurator configurator
) {
161 return CdmStore
.getSearchManager().findTeamOrPersons(configurator
);
164 public boolean delete(AgentBase entity
) throws ReferencedObjectUndeletableException
{
165 return CdmStore
.getService(IAgentService
.class).delete(entity
) != null;
170 public List
<IBulkEditorSortProvider
<TeamOrPersonBase
>> getSortProviders() {
171 List
<IBulkEditorSortProvider
<TeamOrPersonBase
>> sortProviders
= super.getSortProviders();
173 sortProviders
.add(0, new IdentifiableEntitySortProvider
<TeamOrPersonBase
>());
175 return sortProviders
;
179 protected IEntityCreator
<TeamOrPersonBase
> createEntityCreator() {
180 return new AgentCreator();
184 public TeamOrPersonBase
save(TeamOrPersonBase entity
) {
185 return (TeamOrPersonBase
) CdmStore
.getService(IAgentService
.class).merge(entity
, true).getMergedEntity();
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;
200 public void merge() {
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);