Project

General

Profile

Download (4.09 KB) Statistics
| Branch: | Revision:
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.SQLException;
13
import java.util.Collection;
14

    
15
import org.apache.log4j.Logger;
16

    
17
import eu.etaxonomy.cdm.io.common.DbExportStateBase;
18
import eu.etaxonomy.cdm.io.common.ImportHelper;
19
import eu.etaxonomy.cdm.io.common.mapping.CdmMapperBase;
20
import eu.etaxonomy.cdm.io.common.mapping.out.CollectionExportMapping;
21
import eu.etaxonomy.cdm.io.common.mapping.out.DbSequenceMapper;
22
import eu.etaxonomy.cdm.io.common.mapping.out.IDbExportMapper;
23
import eu.etaxonomy.cdm.io.common.mapping.out.IdMapper;
24
import eu.etaxonomy.cdm.model.common.CdmBase;
25

    
26
/**
27
 * @author e.-m.lee
28
 * @date 24.02.2010
29
 *
30
 */
31
public class PesiCollectionExportMapping extends PesiExportMapping {
32
	private static final Logger logger = Logger.getLogger(CollectionExportMapping.class);
33
	
34
	private IdMapper parentMapper;
35
	private DbSequenceMapper sequenceMapper;
36
	private String collectionAttributeName;
37
	
38
	public static PesiCollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper){
39
		return new PesiCollectionExportMapping(tableName, collectionAttributeName, parentMapper, null);
40
	}
41
	
42
	public static PesiCollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper, String seqenceAttribute){
43
		return NewInstance(tableName, collectionAttributeName, parentMapper, seqenceAttribute, 0);
44
	}
45
	
46
	public static PesiCollectionExportMapping NewInstance(String tableName, String collectionAttributeName, IdMapper parentMapper, String seqenceAttribute, int sequenceStart){
47
		DbSequenceMapper sequenceMapper = DbSequenceMapper.NewInstance(seqenceAttribute, sequenceStart);
48
		PesiCollectionExportMapping result = new PesiCollectionExportMapping(tableName, collectionAttributeName, parentMapper, sequenceMapper);
49
		return result;
50
	}
51

    
52
	
53
	private PesiCollectionExportMapping(String tableName, String collectionAttributeName, IdMapper parentMapper, DbSequenceMapper sequenceMapper){
54
		super(tableName);
55
		this.parentMapper = parentMapper;
56
		this.addMapper(parentMapper);
57
		this.sequenceMapper = sequenceMapper;
58
		this.addMapper(sequenceMapper);
59
		this.collectionAttributeName = collectionAttributeName;
60
	}
61

    
62
	
63
	@Override
64
	public boolean invoke(CdmBase parent) throws SQLException{
65
		try {
66
			boolean result = true;
67
			Collection<CdmBase> collection = getCollection(parent);
68
			if (this.sequenceMapper != null){
69
				this.sequenceMapper.reset();
70
			}
71
			for(CdmBase collectionObject : collection){
72
				if (collectionObject == null){
73
					logger.warn("Collection object was null");
74
					result = false;
75
					continue;
76
				}
77
				for (CdmMapperBase mapper : this.mapperList){
78
					if (mapper == this.parentMapper){
79
						parentMapper.invoke(parent);
80
					}else if (mapper == this.sequenceMapper){
81
						this.sequenceMapper.invoke(null);
82
					}else if (mapper instanceof IDbExportMapper){
83
						IDbExportMapper<DbExportStateBase<?, PesiTransformer>, PesiTransformer> dbMapper = (IDbExportMapper)mapper;
84
						try {
85
							result &= dbMapper.invoke(collectionObject);
86
						} catch (Exception e) {
87
							result = false;
88
							logger.error("Error occurred in mapping.invoke");
89
							e.printStackTrace();
90
							continue;
91
						}
92
					}else{
93
						logger.warn("mapper is not of type " + IDbExportMapper.class.getSimpleName());
94
					}
95
				}
96
				int count = getPreparedStatement().executeUpdate();
97
				if (logger.isDebugEnabled())logger.debug("Number of rows affected: " + count);
98
			}
99
			return result;
100
		} catch(SQLException e){
101
			e.printStackTrace();
102
			logger.error(e.getMessage() + ": " + parent.toString());
103
			return false;
104
		}
105
	}
106
	
107
	private Collection getCollection(CdmBase cdmBase){
108
		Object result = ImportHelper.getValue(cdmBase, collectionAttributeName, false, true);
109
		return (Collection)result;
110
	}
111
	
112
	
113
}
(2-2/12)