ref #9359, ref #10072 adapt app-import to log4j2 and cleanup
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / berlinModel / out / BerlinModelTaxonExport.java
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.logging.log4j.LogManager;
15 import org.apache.logging.log4j.Logger;
16 import org.springframework.stereotype.Component;
17 import org.springframework.transaction.TransactionStatus;
18
19 import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;
20 import eu.etaxonomy.cdm.io.common.Source;
21 import eu.etaxonomy.cdm.io.common.mapping.out.CdmDbExportMapping;
22 import eu.etaxonomy.cdm.io.common.mapping.out.CreatedAndNotesMapper;
23 import eu.etaxonomy.cdm.io.common.mapping.out.DbBooleanMapper;
24 import eu.etaxonomy.cdm.io.common.mapping.out.DbExtensionMapper;
25 import eu.etaxonomy.cdm.io.common.mapping.out.DbIntegerExtensionMapper;
26 import eu.etaxonomy.cdm.io.common.mapping.out.DbMarkerMapper;
27 import eu.etaxonomy.cdm.io.common.mapping.out.DbObjectMapper;
28 import eu.etaxonomy.cdm.io.common.mapping.out.DbStringMapper;
29 import eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer;
30 import eu.etaxonomy.cdm.io.common.mapping.out.MethodMapper;
31 import eu.etaxonomy.cdm.model.common.CdmBase;
32 import eu.etaxonomy.cdm.model.common.ExtensionType;
33 import eu.etaxonomy.cdm.model.common.MarkerType;
34 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
35
36
37 /**
38 * @author a.mueller
39 * @since 20.03.2008
40 */
41 @Component
42 public class BerlinModelTaxonExport extends BerlinModelExportBase<TaxonBase> {
43
44 private static final long serialVersionUID = 145503113573711492L;
45 private static final Logger logger = LogManager.getLogger();
46
47 private static int modCount = 1000;
48 private static final String dbTableName = "PTaxon";
49 private static final String pluralString = "Taxa";
50 private static final Class<? extends CdmBase> standardMethodParameter = TaxonBase.class;
51
52 public BerlinModelTaxonExport(){
53 super();
54 }
55
56 @Override
57 protected boolean doCheck(BerlinModelExportState state){
58 boolean result = true;
59 logger.warn("Checking for " + pluralString + " not yet implemented");
60 //result &= checkArticlesWithoutJournal(bmiConfig);
61 //result &= checkPartOfJournal(bmiConfig);
62
63 return result;
64 }
65
66 private CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> getMapping(){
67 String tableName = dbTableName;
68 CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = new CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer>(tableName);
69 mapping.addMapper(DbObjectMapper.NewInstance("name", "PTNameFk"));
70 mapping.addMapper(DbObjectMapper.NewInstance("sec", "PTRefFk"));
71 mapping.addMapper(MethodMapper.NewInstance("StatusFk", this));
72 mapping.addMapper(MethodMapper.NewInstance("DoubtfulFlag", this) );
73 mapping.addMapper(DbBooleanMapper.NewInstance("useNameCache", "UseNameCacheFlag", false));
74 mapping.addMapper(DbStringMapper.NewFacultativeInstance("appendedPhrase", "NamePhrase"));
75
76 //detail
77 ExtensionType detailExtensionType = (ExtensionType)getTermService().find(BerlinModelTransformer.DETAIL_EXT_UUID);
78 if (detailExtensionType != null){
79 mapping.addMapper(DbExtensionMapper.NewInstance(detailExtensionType, "Detail"));
80 }
81 //idInSource
82 ExtensionType idInSourceExtensionType = (ExtensionType)getTermService().find(BerlinModelTransformer.ID_IN_SOURCE_EXT_UUID);
83 if (idInSourceExtensionType != null){
84 mapping.addMapper(DbIntegerExtensionMapper.NewInstance(idInSourceExtensionType, "IdInSource"));
85 }
86 // //namePhrase
87 // ExtensionType namePhraseExtensionType = (ExtensionType)getTermService().getTermByUuid(BerlinModelTaxonImport.APPENDED_TITLE_PHRASE);
88 // if (namePhraseExtensionType != null){
89 // mapping.addMapper(DbExtensionMapper.NewInstance(namePhraseExtensionType, "NamePhrase"));
90 // }
91 // //useNameCacheFlag
92 // MarkerType useNameCacheMarkerType = (MarkerType)getTermService().getTermByUuid(BerlinModelTaxonImport.USE_NAME_CACHE);
93 // if (useNameCacheMarkerType != null){
94 // mapping.addMapper(DbMarkerMapper.NewInstance(useNameCacheMarkerType, "UseNameCacheFlag", false));
95 // }
96 //publisheFlag
97 mapping.addMapper(DbMarkerMapper.NewInstance(MarkerType.PUBLISH(), "PublishFlag", true));
98
99 //notes
100 mapping.addMapper(CreatedAndNotesMapper.NewInstance());
101
102 //TODO
103 // ,[RIdentifier]
104 // ,ProParte etc.
105
106 return mapping;
107 }
108
109 @Override
110 protected void doInvoke(BerlinModelExportState state){
111 try{
112 logger.info("start make " + pluralString + " ...");
113 boolean success = true ;
114 doDelete(state);
115
116 TransactionStatus txStatus = startTransaction(true);
117
118 List<TaxonBase> list = getTaxonService().list(null,100000000, 0, null, null);
119
120 CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = getMapping();
121 mapping.initialize(state);
122
123 int count = 0;
124 for (TaxonBase<?> taxon : list){
125 doCount(count++, modCount, pluralString);
126 success &= mapping.invoke(taxon);
127 }
128 commitTransaction(txStatus);
129 logger.info("end make " + pluralString + " ..." + getSuccessString(success));
130 if (!success){
131 String message = "An undefined error occurred during Taxon export";
132 state.getResult().addError(message);
133 }
134 return;
135 }catch(SQLException e){
136 e.printStackTrace();
137 logger.error(e.getMessage());
138 state.getResult().addException(e);
139 return;
140 }
141 }
142
143 protected boolean doDelete(BerlinModelExportState state){
144 BerlinModelExportConfigurator bmeConfig = state.getConfig();
145
146 String sql;
147 Source destination = bmeConfig.getDestination();
148 //RelPTaxon
149 sql = "DELETE FROM RelPTaxon";
150 destination.setQuery(sql);
151 destination.update(sql);
152 //Fact
153 sql = "DELETE FROM Fact";
154 destination.setQuery(sql);
155 destination.update(sql);
156 //PTaxon
157 sql = "DELETE FROM PTaxon";
158 destination.setQuery(sql);
159 destination.update(sql);
160
161 return true;
162 }
163
164 @Override
165 protected boolean isIgnore(BerlinModelExportState state){
166 return ! state.getConfig().isDoTaxa();
167 }
168
169 //called by MethodMapper
170 @SuppressWarnings("unused")
171 private static Integer getStatusFk(TaxonBase<?> taxon){
172 return BerlinModelTransformer.taxonBase2statusFk(taxon);
173 }
174
175 @SuppressWarnings("unused")
176 private static String getDoubtfulFlag(TaxonBase<?> taxon){
177 if (taxon.isDoubtful()){
178 return "d";
179 }else{
180 return "a";
181 }
182 }
183
184 @Override
185 public Class<? extends CdmBase> getStandardMethodParameter() {
186 return standardMethodParameter;
187 }
188 }