Project

General

Profile

Download (6.64 KB) Statistics
| Branch: | 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.cdm.io.berlinModel.out;
10

    
11
import java.sql.SQLException;
12
import java.util.List;
13

    
14
import org.apache.log4j.Logger;
15
import org.springframework.stereotype.Component;
16
import org.springframework.transaction.TransactionStatus;
17

    
18
import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;
19
import eu.etaxonomy.cdm.io.common.Source;
20
import eu.etaxonomy.cdm.io.common.mapping.out.CdmDbExportMapping;
21
import eu.etaxonomy.cdm.io.common.mapping.out.CreatedAndNotesMapper;
22
import eu.etaxonomy.cdm.io.common.mapping.out.DbBooleanMapper;
23
import eu.etaxonomy.cdm.io.common.mapping.out.DbExtensionMapper;
24
import eu.etaxonomy.cdm.io.common.mapping.out.DbIntegerExtensionMapper;
25
import eu.etaxonomy.cdm.io.common.mapping.out.DbMarkerMapper;
26
import eu.etaxonomy.cdm.io.common.mapping.out.DbObjectMapper;
27
import eu.etaxonomy.cdm.io.common.mapping.out.DbStringMapper;
28
import eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer;
29
import eu.etaxonomy.cdm.io.common.mapping.out.MethodMapper;
30
import eu.etaxonomy.cdm.model.common.CdmBase;
31
import eu.etaxonomy.cdm.model.common.ExtensionType;
32
import eu.etaxonomy.cdm.model.common.MarkerType;
33
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
34

    
35

    
36
/**
37
 * @author a.mueller
38
 * @since 20.03.2008
39
 */
40
@Component
41
public class BerlinModelTaxonExport extends BerlinModelExportBase<TaxonBase> {
42

    
43
    private static final long serialVersionUID = 145503113573711492L;
44
    private static final Logger logger = Logger.getLogger(BerlinModelTaxonExport.class);
45

    
46
	private static int modCount = 1000;
47
	private static final String dbTableName = "PTaxon";
48
	private static final String pluralString = "Taxa";
49
	private static final Class<? extends CdmBase> standardMethodParameter = TaxonBase.class;
50

    
51
	public BerlinModelTaxonExport(){
52
		super();
53
	}
54

    
55
	@Override
56
	protected boolean doCheck(BerlinModelExportState state){
57
		boolean result = true;
58
		logger.warn("Checking for " + pluralString + " not yet implemented");
59
		//result &= checkArticlesWithoutJournal(bmiConfig);
60
		//result &= checkPartOfJournal(bmiConfig);
61

    
62
		return result;
63
	}
64

    
65
	private CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> getMapping(){
66
		String tableName = dbTableName;
67
		CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = new CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer>(tableName);
68
		mapping.addMapper(DbObjectMapper.NewInstance("name", "PTNameFk"));
69
		mapping.addMapper(DbObjectMapper.NewInstance("sec", "PTRefFk"));
70
		mapping.addMapper(MethodMapper.NewInstance("StatusFk", this));
71
		mapping.addMapper(MethodMapper.NewInstance("DoubtfulFlag", this) );
72
		mapping.addMapper(DbBooleanMapper.NewInstance("useNameCache", "UseNameCacheFlag", false));
73
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("appendedPhrase", "NamePhrase"));
74

    
75
		//detail
76
		ExtensionType detailExtensionType = (ExtensionType)getTermService().find(BerlinModelTransformer.DETAIL_EXT_UUID);
77
		if (detailExtensionType != null){
78
			mapping.addMapper(DbExtensionMapper.NewInstance(detailExtensionType, "Detail"));
79
		}
80
		//idInSource
81
		ExtensionType idInSourceExtensionType = (ExtensionType)getTermService().find(BerlinModelTransformer.ID_IN_SOURCE_EXT_UUID);
82
		if (idInSourceExtensionType != null){
83
			mapping.addMapper(DbIntegerExtensionMapper.NewInstance(idInSourceExtensionType, "IdInSource"));
84
		}
85
//		//namePhrase
86
//		ExtensionType namePhraseExtensionType = (ExtensionType)getTermService().getTermByUuid(BerlinModelTaxonImport.APPENDED_TITLE_PHRASE);
87
//		if (namePhraseExtensionType != null){
88
//			mapping.addMapper(DbExtensionMapper.NewInstance(namePhraseExtensionType, "NamePhrase"));
89
//		}
90
//		//useNameCacheFlag
91
//		MarkerType useNameCacheMarkerType = (MarkerType)getTermService().getTermByUuid(BerlinModelTaxonImport.USE_NAME_CACHE);
92
//		if (useNameCacheMarkerType != null){
93
//			mapping.addMapper(DbMarkerMapper.NewInstance(useNameCacheMarkerType, "UseNameCacheFlag", false));
94
//		}
95
		//publisheFlag
96
		mapping.addMapper(DbMarkerMapper.NewInstance(MarkerType.PUBLISH(), "PublishFlag", true));
97

    
98
		//notes
99
		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
100

    
101
		//TODO
102
//	    ,[RIdentifier]
103
//		,ProParte etc.
104

    
105
		return mapping;
106
	}
107

    
108
	@Override
109
    protected void doInvoke(BerlinModelExportState state){
110
		try{
111
			logger.info("start make " + pluralString + " ...");
112
			boolean success = true ;
113
			doDelete(state);
114

    
115
			TransactionStatus txStatus = startTransaction(true);
116

    
117
			List<TaxonBase> list = getTaxonService().list(null,100000000, 0, null, null);
118

    
119
			CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = getMapping();
120
			mapping.initialize(state);
121

    
122
			int count = 0;
123
			for (TaxonBase<?> taxon : list){
124
				doCount(count++, modCount, pluralString);
125
				success &= mapping.invoke(taxon);
126
			}
127
			commitTransaction(txStatus);
128
			logger.info("end make " + pluralString + " ..." + getSuccessString(success));
129
			if (!success){
130
			    String message = "An undefined error occurred during Taxon export";
131
			    state.getResult().addError(message);
132
			}
133
			return;
134
		}catch(SQLException e){
135
			e.printStackTrace();
136
			logger.error(e.getMessage());
137
			state.getResult().addException(e);
138
			return;
139
		}
140
	}
141

    
142
	protected boolean doDelete(BerlinModelExportState state){
143
		BerlinModelExportConfigurator bmeConfig = state.getConfig();
144

    
145
		String sql;
146
		Source destination =  bmeConfig.getDestination();
147
		//RelPTaxon
148
		sql = "DELETE FROM RelPTaxon";
149
		destination.setQuery(sql);
150
		destination.update(sql);
151
		//Fact
152
		sql = "DELETE FROM Fact";
153
		destination.setQuery(sql);
154
		destination.update(sql);
155
		//PTaxon
156
		sql = "DELETE FROM PTaxon";
157
		destination.setQuery(sql);
158
		destination.update(sql);
159

    
160
		return true;
161
	}
162

    
163
	@Override
164
    protected boolean isIgnore(BerlinModelExportState state){
165
		return ! state.getConfig().isDoTaxa();
166
	}
167

    
168
	//called by MethodMapper
169
	@SuppressWarnings("unused")
170
	private static Integer getStatusFk(TaxonBase<?> taxon){
171
		return BerlinModelTransformer.taxonBase2statusFk(taxon);
172
	}
173

    
174
	@SuppressWarnings("unused")
175
	private static String getDoubtfulFlag(TaxonBase<?> taxon){
176
		if (taxon.isDoubtful()){
177
			return "d";
178
		}else{
179
			return "a";
180
		}
181
	}
182

    
183
	@Override
184
	public Class<? extends CdmBase> getStandardMethodParameter() {
185
		return standardMethodParameter;
186
	}
187
}
(10-10/12)