Project

General

Profile

Download (4.08 KB) Statistics
| Branch: | Revision:
1
/**
2
* Copyright (C) 2009 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.pesi.out;
10

    
11
import java.sql.SQLException;
12
import java.util.Collection;
13

    
14
import org.apache.log4j.Logger;
15

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

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

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

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