more generic for export io classes
[cdmlib-apps.git] / cdm-pesi / src / main / java / eu / etaxonomy / cdm / io / pesi / out / PesiExportMapping.java
1 // $Id$
2 /**
3 * Copyright (C) 2009 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 package eu.etaxonomy.cdm.io.pesi.out;
11
12 import java.sql.PreparedStatement;
13 import java.sql.SQLException;
14 import java.util.ArrayList;
15 import java.util.List;
16
17 import org.apache.log4j.Logger;
18
19 import eu.etaxonomy.cdm.io.berlinModel.out.CollectionExportMapping;
20 import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper;
21 import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IndexCounter;
22 import eu.etaxonomy.cdm.io.common.mapping.CdmAttributeMapperBase;
23 import eu.etaxonomy.cdm.io.common.mapping.CdmIoMapping;
24 import eu.etaxonomy.cdm.io.common.DbExportStateBase;
25 import eu.etaxonomy.cdm.io.common.Source;
26 import eu.etaxonomy.cdm.model.common.CdmBase;
27
28 /**
29 * @author e.-m.lee
30 * @date 24.02.2010
31 *
32 */
33 public class PesiExportMapping extends CdmIoMapping {
34 private static final Logger logger = Logger.getLogger(PesiExportMapping.class);
35
36 private PreparedStatement preparedStatement;
37 private String dbTableName;
38 private List<PesiCollectionExportMapping> collectionMappingList = new ArrayList<PesiCollectionExportMapping>();
39
40
41 public PesiExportMapping(String tableName){
42 this.dbTableName = tableName;
43 }
44
45 public boolean initialize(PesiExportState state) throws SQLException{
46 PesiExportConfigurator bmeConfig = (PesiExportConfigurator)state.getConfig();
47 Source db = bmeConfig.getDestination();
48
49 try {
50 IndexCounter index;
51 String strPreparedStatement = prepareStatement();
52 logger.debug(strPreparedStatement);
53 this.preparedStatement = db.getConnection().prepareStatement(strPreparedStatement);
54 index = new IndexCounter(1);
55
56 for (CdmAttributeMapperBase mapper : this.mapperList){
57 if (mapper instanceof IDbExportMapper){
58 IDbExportMapper<DbExportStateBase<?>> dbMapper = (IDbExportMapper)mapper;
59 dbMapper.initialize(preparedStatement, index, state, dbTableName);
60 }else{
61 logger.warn("mapper is not of type " + IDbExportMapper.class.getSimpleName());
62 }
63 }
64 for (PesiCollectionExportMapping collectionMapping : this.collectionMappingList ){
65 collectionMapping.initialize(state);
66 }
67 return true;
68 } catch (SQLException e) {
69 logger.warn("SQL Exception");
70 throw e;
71 }
72 }
73
74
75 public boolean invoke(CdmBase cdmBase) throws SQLException{
76 try {
77 boolean result = true;
78 for (CdmAttributeMapperBase mapper : this.mapperList){
79 if (mapper instanceof IDbExportMapper){
80 IDbExportMapper<DbExportStateBase<?>> dbMapper = (IDbExportMapper<DbExportStateBase<?>>)mapper;
81 try {
82 result &= dbMapper.invoke(cdmBase);
83 } catch (Exception e) {
84 result = false;
85 logger.error("Error occurred in mapping.invoke");
86 e.printStackTrace();
87 continue;
88 }
89 }else{
90 logger.warn("mapper is not of type " + IDbExportMapper.class.getSimpleName());
91 }
92 }
93 int count = preparedStatement.executeUpdate();
94 if (logger.isDebugEnabled())logger.debug("Number of rows affected: " + count);
95 for (PesiCollectionExportMapping collectionMapping : this.collectionMappingList ){
96 result &= collectionMapping.invoke(cdmBase);
97 }
98 return result;
99 } catch(SQLException e){
100 e.printStackTrace();
101 logger.error(e.getMessage() + ": " + cdmBase.toString());
102 return false;
103 }
104 }
105
106
107 public void addCollectionMapping(PesiCollectionExportMapping collectionMapping){
108 this.collectionMappingList.add(collectionMapping);
109 }
110
111 protected String prepareStatement(){
112 String sqlInsert = "INSERT INTO " + getDbTableName() + " (";
113 String sqlValues = ") VALUES(";
114 String sqlEnd = ")";
115 String attributes = "";
116 String values = "";
117 for (String attribute : this.getDestinationAttributeList()){
118 attributes += "," + attribute;
119 values += ",?";
120 }
121 attributes = attributes.substring(1); //delete first ','
122 values = values.substring(1); //delete first ','
123 String result = sqlInsert + attributes + sqlValues + values + sqlEnd;
124 return result;
125 }
126
127 /**
128 * @return the pesiTableName
129 */
130 public String getDbTableName() {
131 return dbTableName;
132 }
133
134 /**
135 * @param pesiTableName the pesiTableName to set
136 */
137 public void setDbTableName(String dbTableName) {
138 this.dbTableName = dbTableName;
139 }
140
141 /**
142 * @return the preparedStatement
143 */
144 protected PreparedStatement getPreparedStatement() {
145 return preparedStatement;
146 }
147
148 /**
149 * @param preparedStatement the preparedStatement to set
150 */
151 protected void setPreparedStatement(PreparedStatement preparedStatement) {
152 this.preparedStatement = preparedStatement;
153 }
154
155 protected List<CdmAttributeMapperBase> getAttributeMapperList(){
156 List<CdmAttributeMapperBase> list = this.mapperList;
157 return list;
158 }
159
160
161 }