View Javadoc

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.berlinModel.in.BerlinModelImportBase;
20  import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonImport;
21  import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;
22  import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbBooleanMapper;
23  import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbExtensionMapper;
24  import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbIntegerExtensionMapper;
25  import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbMarkerMapper;
26  import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;
27  import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbStringMapper;
28  import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;
29  import eu.etaxonomy.cdm.io.common.Source;
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   * @created 20.03.2008
39   * @version 1.0
40   */
41  @Component
42  public class BerlinModelTaxonExport extends BerlinModelExportBase<TaxonBase> {
43  	private static final Logger logger = Logger.getLogger(BerlinModelTaxonExport.class);
44  
45  	private static int modCount = 1000;
46  	private static final String dbTableName = "PTaxon";
47  	private static final String pluralString = "Taxa";
48  	private static final Class<? extends CdmBase> standardMethodParameter = TaxonBase.class;
49  
50  	public BerlinModelTaxonExport(){
51  		super();
52  	}
53  	
54  	/* (non-Javadoc)
55  	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
56  	 */
57  	@Override
58  	protected boolean doCheck(BerlinModelExportState state){
59  		boolean result = true;
60  		logger.warn("Checking for " + pluralString + " not yet implemented");
61  		//result &= checkArticlesWithoutJournal(bmiConfig);
62  		//result &= checkPartOfJournal(bmiConfig);
63  		
64  		return result;
65  	}
66  	
67  	private BerlinModelExportMapping getMapping(){
68  		String tableName = dbTableName;
69  		BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);
70  		mapping.addMapper(DbObjectMapper.NewInstance("name", "PTNameFk"));
71  		mapping.addMapper(DbObjectMapper.NewInstance("sec", "PTRefFk"));
72  		mapping.addMapper(MethodMapper.NewInstance("StatusFk", this));
73  		mapping.addMapper(MethodMapper.NewInstance("DoubtfulFlag", this) );
74  		mapping.addMapper(DbBooleanMapper.NewInstance("useNameCache", "UseNameCacheFlag", false));
75  		mapping.addMapper(DbStringMapper.NewFacultativeInstance("appendedPhrase", "NamePhrase"));
76  		
77  		//detail
78  		ExtensionType detailExtensionType = (ExtensionType)getTermService().find(BerlinModelTaxonImport.DETAIL_EXT_UUID);
79  		if (detailExtensionType != null){
80  			mapping.addMapper(DbExtensionMapper.NewInstance(detailExtensionType, "Detail"));
81  		}
82  		//idInSource
83  		ExtensionType idInSourceExtensionType = (ExtensionType)getTermService().find(BerlinModelImportBase.ID_IN_SOURCE_EXT_UUID);
84  		if (idInSourceExtensionType != null){
85  			mapping.addMapper(DbIntegerExtensionMapper.NewInstance(idInSourceExtensionType, "IdInSource"));
86  		}
87  //		//namePhrase
88  //		ExtensionType namePhraseExtensionType = (ExtensionType)getTermService().getTermByUuid(BerlinModelTaxonImport.APPENDED_TITLE_PHRASE);
89  //		if (namePhraseExtensionType != null){
90  //			mapping.addMapper(DbExtensionMapper.NewInstance(namePhraseExtensionType, "NamePhrase"));
91  //		}
92  //		//useNameCacheFlag
93  //		MarkerType useNameCacheMarkerType = (MarkerType)getTermService().getTermByUuid(BerlinModelTaxonImport.USE_NAME_CACHE);
94  //		if (useNameCacheMarkerType != null){
95  //			mapping.addMapper(DbMarkerMapper.NewInstance(useNameCacheMarkerType, "UseNameCacheFlag", false));
96  //		}
97  		//publisheFlag
98  		mapping.addMapper(DbMarkerMapper.NewInstance(MarkerType.PUBLISH(), "PublishFlag", true));
99  		
100 		//notes
101 		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
102 
103 		//TODO
104 //	    ,[RIdentifier]
105 //		,ProParte etc.
106 
107 		return mapping;
108 	}
109 	
110 	protected boolean 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 			BerlinModelExportMapping 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 			
131 			return success;
132 		}catch(SQLException e){
133 			e.printStackTrace();
134 			logger.error(e.getMessage());
135 			return false;
136 		}
137 	}
138 
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 	
164 	/* (non-Javadoc)
165 	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
166 	 */
167 	protected boolean isIgnore(BerlinModelExportState state){
168 		return ! state.getConfig().isDoTaxa();
169 	}
170 	
171 	//called by MethodMapper
172 	@SuppressWarnings("unused")
173 	private static Integer getStatusFk(TaxonBase<?> taxon){
174 		return BerlinModelTransformer.taxonBase2statusFk(taxon);
175 	}
176 	
177 	@SuppressWarnings("unused")
178 	private static String getDoubtfulFlag(TaxonBase<?> taxon){
179 		if (taxon.isDoubtful()){
180 			return "d";
181 		}else{
182 			return "a";
183 		}
184 	}
185 	
186 	/* (non-Javadoc)
187 	 * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()
188 	 */
189 	@Override
190 	public Class<? extends CdmBase> getStandardMethodParameter() {
191 		return standardMethodParameter;
192 	}
193 }