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
.INameService
;
17 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonService
;
18 import eu
.etaxonomy
.cdm
.api
.service
.config
.DeleteConfiguratorBase
;
19 import eu
.etaxonomy
.cdm
.api
.service
.config
.IIdentifiableEntityServiceConfigurator
;
20 import eu
.etaxonomy
.cdm
.api
.service
.config
.SynonymDeletionConfigurator
;
21 import eu
.etaxonomy
.cdm
.api
.service
.config
.TaxonDeletionConfigurator
;
22 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
23 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationship
;
24 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
25 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
26 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
27 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
28 import eu
.etaxonomy
.taxeditor
.annotatedlineeditor
.IEntityCreator
;
29 import eu
.etaxonomy
.taxeditor
.bulkeditor
.IBulkEditorSortProvider
;
30 import eu
.etaxonomy
.taxeditor
.bulkeditor
.input
.entitycreator
.TaxonCreator
;
31 import eu
.etaxonomy
.taxeditor
.bulkeditor
.input
.sortprovider
.IdentifiableEntitySortProvider
;
32 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
34 public class TaxonEditorInput
extends AbstractBulkEditorInput
<TaxonBase
>{
36 private static TaxonEditorInput instance
;
38 public static final String ID
= "bulkeditor.input.taxon";
40 private static final String PROPERTY_PUBLISH
= "Publish";
42 private List
<TaxonName
> saveNameCandidates
= new ArrayList
<>();
44 public static AbstractBulkEditorInput
getInstance() {
45 if (instance
== null) {
46 instance
= new TaxonEditorInput();
53 protected List
<String
> getPropertyKeys_internal() {
54 List
<String
> propertyKeysInternal
= new ArrayList
<>();
55 propertyKeysInternal
.add(PROPERTY_PUBLISH
);
56 return propertyKeysInternal
;
60 public Object
getPropertyValue(TaxonBase cdmBase
, String property
) {
61 if(property
.equals(PROPERTY_PUBLISH
)){
62 return cdmBase
.isPublish();
64 return super.getPropertyValue(cdmBase
, property
);
68 public boolean isBooleanProperty(String property
) {
69 if(property
.equals(PROPERTY_PUBLISH
)){
72 return super.isBooleanProperty(property
);
76 public String
getName() {
77 return BulkEditorInputType
.TAXON
.label
;
80 public static Object
getID() {
85 public List
<IBulkEditorSortProvider
<TaxonBase
>> getSortProviders() {
86 List
<IBulkEditorSortProvider
<TaxonBase
>> sortProviders
= super.getSortProviders();
88 sortProviders
.add(0, new IdentifiableEntitySortProvider
<TaxonBase
>());
94 public boolean isMergingEnabled() {
98 public TaxonBase
save(TaxonBase entity
) {
99 return CdmStore
.getService(ITaxonService
.class).merge(entity
, true).getMergedEntity();
103 protected long countEntities(IIdentifiableEntityServiceConfigurator configurator
) {
104 return CdmStore
.getService(ITaxonService
.class).countByTitle(configurator
);
108 public List
listEntities(IIdentifiableEntityServiceConfigurator configurator
) {
109 // IFindTaxaAndNamesConfigurator<TaxonBase> newConfig = new FindTaxaAndNamesConfiguratorImpl<>();
110 // newConfig.setTitleSearchString(configurator.getTitleSearchStringSqlized());
111 // newConfig.setMatchMode(MatchMode.ANYWHERE);
112 List
<String
> propertyPaths
= getPropertyPaths();
113 configurator
.setPropertyPaths(propertyPaths
);
114 List
<TaxonBase
> taxa
= CdmStore
.getSearchManager().findTaxa(configurator
);
115 List
<TaxonBase
> taxaCopy
= new ArrayList
<TaxonBase
>();
116 for (TaxonBase taxon
:taxa
){
118 if (taxon
instanceof Taxon
){
119 taxaCopy
.add(HibernateProxyHelper
.deproxy(taxon
, Taxon
.class));
121 taxaCopy
.add(HibernateProxyHelper
.deproxy(taxon
, Synonym
.class));
128 protected TaxonBase
loadEntity(UUID entityUuid
) {
129 List
<String
> propertyPaths
= Arrays
.asList(new String
[]{});
130 return CdmStore
.getService(ITaxonService
.class).load(entityUuid
, propertyPaths
);
134 public boolean delete(TaxonBase entity
, DeleteConfiguratorBase config
) {
135 if (entity
instanceof Taxon
){
136 TaxonDeletionConfigurator taxonConfig
= null;
137 if (config
instanceof TaxonDeletionConfigurator
){
138 taxonConfig
= (TaxonDeletionConfigurator
)config
;
143 return CdmStore
.getService(ITaxonService
.class).deleteTaxon(entity
.getUuid(), taxonConfig
, null) != null;
145 SynonymDeletionConfigurator synConfig
= null;
146 if (config
instanceof SynonymDeletionConfigurator
){
147 synConfig
= (SynonymDeletionConfigurator
)config
;
152 return CdmStore
.getService(ITaxonService
.class).deleteSynonym(entity
.getUuid(), synConfig
) != null;
157 protected IEntityCreator
<TaxonBase
> createEntityCreator() {
158 return new TaxonCreator();
162 public void merge() {
167 public void addSaveCandidate(TaxonBase taxonBase
){
168 if (!taxonBase
.getName().getHybridChildRelations().isEmpty()){
169 for (HybridRelationship rel
: taxonBase
.getName().getHybridChildRelations()){
170 if (!rel
.getParentName().isPersited()){
171 this.saveNameCandidates
.add(rel
.getParentName());
173 if (!rel
.getHybridName().isPersited()){
174 this.saveNameCandidates
.add(rel
.getHybridName());
179 super.addSaveCandidate(taxonBase
);
183 public void saveModel(boolean resetMerge
){
184 CdmStore
.getService(INameService
.class).save(this.saveNameCandidates
);
185 super.saveModel(resetMerge
);
188 private List
<String
> getPropertyPaths(){
189 List
<String
> taxonBasePropertyPaths
= Arrays
.asList(new String
[] {
190 "descriptions.descriptionElements.*",
191 "typeDesignations"});
193 return taxonBasePropertyPaths
;