Project

General

Profile

Download (5.21 KB) Statistics
| Branch: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

    
11
package eu.etaxonomy.cdm.io.pesi.faunaEuropaea;
12

    
13
import java.util.Collection;
14
import java.util.HashSet;
15
import java.util.List;
16
import java.util.Set;
17

    
18
import org.apache.log4j.Logger;
19
import org.springframework.stereotype.Component;
20
import org.springframework.transaction.TransactionStatus;
21

    
22
import eu.etaxonomy.cdm.io.common.CdmImportBase;
23
import eu.etaxonomy.cdm.io.common.ICdmImport;
24
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
25
import eu.etaxonomy.cdm.model.name.NameRelationship;
26
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
27
import eu.etaxonomy.cdm.model.taxon.Synonym;
28
import eu.etaxonomy.cdm.model.taxon.Taxon;
29
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
30

    
31
/**
32
 * This class creates heterotypic synonymy relationships to the accepted taxon for 
33
 * basionym synonyms. 
34
 * 
35
 * @author a.babadshanjan
36
 * @created 22.09.2009
37
 * @version 1.0
38
 */
39
@Component
40
public class FaunaEuropaeaHeterotypicSynonymImport extends CdmImportBase<FaunaEuropaeaImportConfigurator, FaunaEuropaeaImportState>
41
implements ICdmImport<FaunaEuropaeaImportConfigurator, FaunaEuropaeaImportState> {
42
	private static final Logger logger = Logger
43
			.getLogger(FaunaEuropaeaHeterotypicSynonymImport.class);
44

    
45
	/* (non-Javadoc)
46
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
47
	 */
48
	@Override
49
	protected boolean doCheck(FaunaEuropaeaImportState state) {
50
		logger.warn("Checking for heterotypic synonyms for basionyms not yet implemented");
51
		return false;
52
	}
53

    
54
	/* (non-Javadoc)
55
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doInvoke(eu.etaxonomy.cdm.io.common.IoStateBase)
56
	 */
57
	@Override
58
	protected void doInvoke(FaunaEuropaeaImportState state) {
59
		
60
		TransactionStatus txStatus = null;
61
		List<Synonym> synonymList = null;
62
		Set<Taxon> taxonSet = null;
63
		int i = 0;
64
		int start = 0;
65

    
66
		int limit = state.getConfig().getLimitSave();
67
		int nbrOfSynonyms = getTaxonService().count(Synonym.class);
68
		if (logger.isInfoEnabled()) {
69
			logger.info("Number of synonyms = " + nbrOfSynonyms);
70
		}
71
		if(state.getConfig().isDoHeterotypicSynonyms()){
72
		while (i < nbrOfSynonyms) {
73

    
74
			try {
75
				if ((i++ % limit) == 0) {
76

    
77
					start = (i == 1) ? 0 : i;
78
					if (logger.isInfoEnabled()) {
79
						logger.info("Retrieving synonyms starting from: " + start);
80
					}
81
					txStatus = startTransaction();
82
					synonymList = getTaxonService().list(Synonym.class, limit, start, null, null);
83
					taxonSet = new HashSet<Taxon>(limit);
84
				}
85

    
86
				if (((i % limit) == 0 && i != 1 ) || i == nbrOfSynonyms) { 
87

    
88
					HomotypicalGroup homotypicalGroup = null;
89
					Set<TaxonNameBase> basionyms = null;
90
					Set<NameRelationship> nameRelations = null;
91
					TaxonNameBase basionym = null;
92
					Set<TaxonBase> taxonBases = null;
93
					TaxonBase taxonBase = null;
94
					Taxon acceptedTaxon = null;
95
					TaxonNameBase synonymName = null;
96
					NameRelationship nameRelation = null;
97
					TaxonNameBase acceptedName = null;
98
					
99
					for (TaxonBase synonym : synonymList) {
100
						synonymName = synonym.getName();
101
						if (synonymName.isGroupsBasionym()) {
102
							nameRelations = synonymName.getNameRelations();
103
							if (nameRelations != null && nameRelations.iterator().hasNext()) {
104
								nameRelation = nameRelations.iterator().next();
105
								acceptedName = nameRelation.getToName();
106
								logger.debug("SynonymName: " + synonymName + " titleCache of synonym: "+synonym.getTitleCache() + " name of acceptedTaxon: " + acceptedName.getTitleCache());
107
								if (logger.isTraceEnabled()) {
108
									logger.trace("toName: " + acceptedName);
109
									logger.trace("fromName: " + nameRelation.getFromName());
110
								}
111
								taxonBases = acceptedName.getTaxa();
112
								if (taxonBases != null && taxonBases.iterator().hasNext()) {
113
									taxonBase = taxonBases.iterator().next();
114
									acceptedTaxon = taxonBase.deproxy(taxonBase, Taxon.class);
115
									Set <Synonym> synonyms = acceptedTaxon.getSynonyms();
116
									if (!synonyms.contains(synonym)){
117
									//TODO: Achtung!!!!! dies wird auch bei homotypischen Synonymen aufgerufen! Dadurch wird ein weiteres Synonym erzeugt
118
										acceptedTaxon.addHeterotypicSynonymName(synonymName);
119
										taxonSet.add(acceptedTaxon);
120
									}
121
								}
122
							}
123
						}
124
					}
125
						
126
					getTaxonService().save((Collection)taxonSet);
127
					taxonSet = null;
128
					synonymList = null;
129
					commitTransaction(txStatus);
130
					if(logger.isInfoEnabled()) { 
131
						logger.info("i = " + i + " - Transaction committed"); 
132
					}
133
				}
134

    
135
			} catch (Exception e) {
136
				logger.warn("An exception occurred when creating heterotypic synonym relationship # " + i );
137
				e.printStackTrace();
138
			}
139
		}
140
		}
141
		return;
142
	}
143

    
144
	/* (non-Javadoc)
145
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IoStateBase)
146
	 */
147
	@Override
148
	protected boolean isIgnore(FaunaEuropaeaImportState state) {
149
		return !(state.getConfig().isDoHeterotypicSynonymsForBasionyms());
150
	}
151
}
(6-6/20)