moved taxonNode specific code to TaxonTreeService. Cleaned up the datasource classes
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / faunaEuropaea / FaunaEuropaeaImportBase.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
10 package eu.etaxonomy.cdm.io.faunaEuropaea;
11
12 import java.sql.ResultSet;
13 import java.sql.ResultSetMetaData;
14 import java.sql.SQLException;
15 import java.util.Collection;
16 import java.util.HashMap;
17 import java.util.Map;
18 import java.util.UUID;
19
20 import org.apache.log4j.Logger;
21 import org.springframework.transaction.TransactionStatus;
22
23 import eu.etaxonomy.cdm.common.CdmUtils;
24 import eu.etaxonomy.cdm.io.common.CdmImportBase;
25 import eu.etaxonomy.cdm.io.common.CdmIoBase;
26 import eu.etaxonomy.cdm.io.common.ICdmIO;
27 import eu.etaxonomy.cdm.io.common.ICdmImport;
28 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
29 import eu.etaxonomy.cdm.io.common.ImportHelper;
30 import eu.etaxonomy.cdm.io.common.MapWrapper;
31 import eu.etaxonomy.cdm.io.common.Source;
32 import eu.etaxonomy.cdm.model.common.Annotation;
33 import eu.etaxonomy.cdm.model.common.CdmBase;
34 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
35 import eu.etaxonomy.cdm.model.common.Language;
36 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
37 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
38 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
39
40 /**
41 * @author a.babadshanjan
42 * @created 11.05.2009
43 * @version 1.0
44 */
45 public abstract class FaunaEuropaeaImportBase extends CdmImportBase<FaunaEuropaeaImportConfigurator, FaunaEuropaeaImportState>
46 implements ICdmImport<FaunaEuropaeaImportConfigurator,FaunaEuropaeaImportState> {
47 private static final Logger logger = Logger.getLogger(FaunaEuropaeaImportBase.class);
48
49 // /* Max number of taxa to retrieve (for test purposes) */
50 // protected static final int maxTaxa = 1000;
51 // /* Max number of taxa to be saved with one service call */
52 // protected int limit = 20000; // TODO: Make configurable
53 // /* Interval for progress info message when retrieving taxa */
54 // protected static final int modCount = 10000;
55 // /* Highest taxon index in the FauEu database */
56 // protected int highestTaxonIndex = 0;
57
58 protected boolean resultSetHasColumn(ResultSet rs, String columnName){
59 try {
60 ResultSetMetaData metaData = rs.getMetaData();
61 for (int i = 0; i < metaData.getColumnCount(); i++){
62 if (metaData.getColumnName(i + 1).equalsIgnoreCase(columnName)){
63 return true;
64 }
65 }
66 return false;
67 } catch (SQLException e) {
68 logger.warn("Exception in resultSetHasColumn");
69 return false;
70 }
71 }
72
73 protected boolean checkSqlServerColumnExists(Source source, String tableName, String columnName){
74 String strQuery = "SELECT Count(t.id) as n " +
75 " FROM sysobjects AS t " +
76 " INNER JOIN syscolumns AS c ON t.id = c.id " +
77 " WHERE (t.xtype = 'U') AND " +
78 " (t.name = '" + tableName + "') AND " +
79 " (c.name = '" + columnName + "')";
80 ResultSet rs = source.getResultSet(strQuery) ;
81 int n;
82 try {
83 rs.next();
84 n = rs.getInt("n");
85 return n>0;
86 } catch (SQLException e) {
87 e.printStackTrace();
88 return false;
89 }
90
91 }
92
93 /**
94 * Returns a map that holds all values of a ResultSet. This is needed if a value needs to
95 * be accessed twice
96 * @param rs
97 * @return
98 * @throws SQLException
99 */
100 protected Map<String, Object> getValueMap(ResultSet rs) throws SQLException{
101 try{
102 Map<String, Object> valueMap = new HashMap<String, Object>();
103 int colCount = rs.getMetaData().getColumnCount();
104 for (int c = 0; c < colCount ; c++){
105 Object value = rs.getObject(c+1);
106 String label = rs.getMetaData().getColumnLabel(c+1).toLowerCase();
107 if (value != null && ! CdmUtils.Nz(value.toString()).trim().equals("")){
108 valueMap.put(label, value);
109 }
110 }
111 return valueMap;
112 }catch(SQLException e){
113 throw e;
114 }
115 }
116
117
118 /**
119 * @param state
120 * @param sourceRef
121 */
122 protected TaxonomicTree getTaxonomicTreeFor(FaunaEuropaeaImportState state, ReferenceBase<?> sourceRef) {
123
124 TaxonomicTree tree;
125 UUID treeUuid = state.getTreeUuid(sourceRef);
126 if (treeUuid == null){
127 if(logger.isInfoEnabled()) { logger.info(".. creating new taxonomic tree"); }
128
129 TransactionStatus txStatus = startTransaction();
130 tree = makeTreeMemSave(state, sourceRef);
131 commitTransaction(txStatus);
132
133 } else {
134 tree = getTaxonTreeService().getTaxonomicTreeByUuid(treeUuid);
135 }
136 return tree;
137 }
138
139 }