Project

General

Profile

Download (5.5 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.bulkeditor.input;
2

    
3
import java.util.ArrayList;
4
import java.util.Arrays;
5
import java.util.List;
6
import java.util.UUID;
7

    
8
import eu.etaxonomy.cdm.api.service.INameService;
9
import eu.etaxonomy.cdm.api.service.ITaxonService;
10
import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
11
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
12
import eu.etaxonomy.cdm.api.service.config.SynonymDeletionConfigurator;
13
import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
14
import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
15
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
16
import eu.etaxonomy.cdm.model.name.HybridRelationship;
17
import eu.etaxonomy.cdm.model.name.TaxonName;
18
import eu.etaxonomy.cdm.model.taxon.Synonym;
19
import eu.etaxonomy.cdm.model.taxon.Taxon;
20
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
21
import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
22
import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;
23
import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.TaxonCreator;
24
import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.IdentifiableEntitySortProvider;
25
import eu.etaxonomy.taxeditor.store.CdmStore;
26

    
27
public class TaxonEditorInput extends AbstractBulkEditorInput<TaxonBase>{
28

    
29
	private static TaxonEditorInput instance;
30
	/** Constant <code>ID="bulkeditor.input.taxon"</code> */
31
	public static final String ID = "bulkeditor.input.taxon";
32

    
33
	private List<TaxonName> saveNameCandidates = new ArrayList<>();
34

    
35

    
36
	/**
37
	 * <p>Getter for the field <code>instance</code>.</p>
38
	 *
39
	 * @return a {@link eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput} object.
40
	 */
41
	public static AbstractBulkEditorInput getInstance() {
42
		if (instance == null) {
43
			instance = new TaxonEditorInput();
44
		}
45

    
46
		return instance;
47
	}
48

    
49
    @Override
50
	public String getName() {
51
		return BulkEditorInputType.TAXON.label;
52
	}
53

    
54
	/**
55
	 * <p>getID</p>
56
	 *
57
	 * @return a {@link java.lang.Object} object.
58
	 */
59
	public static Object getID() {
60
		return ID;
61
	}
62

    
63
	@Override
64
    public List<IBulkEditorSortProvider<TaxonBase>> getSortProviders() {
65
        List<IBulkEditorSortProvider<TaxonBase>> sortProviders = super.getSortProviders();
66

    
67
        sortProviders.add(0, new IdentifiableEntitySortProvider<TaxonBase>());
68

    
69
        return sortProviders;
70
    }
71

    
72
	/* (non-Javadoc)
73
	 * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled()
74
	 */
75
	/** {@inheritDoc} */
76
	@Override
77
	public boolean isMergingEnabled() {
78
		return false;
79
	}
80
	@Override
81
	public TaxonBase save(TaxonBase entity) {
82
	    return CdmStore.getService(ITaxonService.class).merge(entity, true).getMergedEntity();
83
	}
84

    
85

    
86

    
87
	/** {@inheritDoc} */
88
	@Override
89
	public List listEntities(IIdentifiableEntityServiceConfigurator configurator) {
90
//		IFindTaxaAndNamesConfigurator<TaxonBase> newConfig = new FindTaxaAndNamesConfiguratorImpl<>();
91
//		newConfig.setTitleSearchString(configurator.getTitleSearchStringSqlized());
92
//		newConfig.setMatchMode(MatchMode.ANYWHERE);
93

    
94
		List<TaxonBase> taxa =  CdmStore.getSearchManager().findTaxa(configurator);
95
		List<TaxonBase> taxaCopy = new ArrayList<TaxonBase>();
96
		for (TaxonBase taxon:taxa){
97

    
98
			if (taxon instanceof Taxon){
99
				taxaCopy.add(HibernateProxyHelper.deproxy(taxon, Taxon.class));
100
			}else{
101
				taxaCopy.add(HibernateProxyHelper.deproxy(taxon, Synonym.class));
102
			}
103
		}
104
		return taxaCopy;
105
	}
106

    
107

    
108
	@Override
109
	protected TaxonBase loadEntity(UUID entityUuid) {
110
		List<String> propertyPaths = Arrays.asList(new String[]{});
111
		return CdmStore.getService(ITaxonService.class).load(entityUuid, propertyPaths);
112
	}
113

    
114

    
115

    
116
	/** {@inheritDoc}
117
	 * @throws ReferencedObjectUndeletableException */
118
	@Override
119
    public boolean delete(TaxonBase entity, DeleteConfiguratorBase config) {
120
		if (entity instanceof Taxon){
121
			TaxonDeletionConfigurator taxonConfig = null;
122
			if (config instanceof TaxonDeletionConfigurator){
123
				taxonConfig = (TaxonDeletionConfigurator)config;
124
			}else{
125

    
126
			}
127

    
128
			return CdmStore.getService(ITaxonService.class).deleteTaxon(entity.getUuid(), taxonConfig, null) != null;
129
		} else{
130
			SynonymDeletionConfigurator synConfig = null;
131
			if (config instanceof SynonymDeletionConfigurator){
132
				synConfig = (SynonymDeletionConfigurator)config;
133
			}else{
134

    
135
			}
136

    
137
			return CdmStore.getService(ITaxonService.class).deleteSynonym(entity.getUuid(), synConfig) != null;
138
		}
139
	}
140
	@Override
141
	protected IEntityCreator<TaxonBase> createEntityCreator() {
142
		return new TaxonCreator();
143
	}
144

    
145

    
146
    /* (non-Javadoc)
147
     * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge()
148
     */
149
    @Override
150
    public void merge() {
151

    
152
    }
153

    
154
    @Override
155
    public void addSaveCandidate(TaxonBase taxonBase){
156
       if (!taxonBase.getName().getHybridChildRelations().isEmpty()){
157
           for (HybridRelationship rel: taxonBase.getName().getHybridChildRelations()){
158
               if (!rel.getParentName().isPersited()){
159
                   this.saveNameCandidates.add(rel.getParentName());
160
               }
161
               if (!rel.getHybridName().isPersited()){
162
                   this.saveNameCandidates.add(rel.getHybridName());
163
               }
164
           }
165
       }
166

    
167
       super.addSaveCandidate(taxonBase);
168
   }
169

    
170
    @Override
171
    public void saveModel(boolean resetMerge){
172
        CdmStore.getService(INameService.class).save(this.saveNameCandidates);
173
        super.saveModel(resetMerge);
174
    }
175

    
176
}
(10-10/11)