1
2
3
4
5
6
7
8
9
10
11 package eu.etaxonomy.cdm.io.common.mapping;
12
13 import java.sql.ResultSet;
14 import java.sql.SQLException;
15
16 import org.apache.log4j.Logger;
17
18 import eu.etaxonomy.cdm.io.common.DbImportStateBase;
19 import eu.etaxonomy.cdm.model.common.CdmBase;
20 import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
21 import eu.etaxonomy.cdm.model.common.IOriginalSource;
22 import eu.etaxonomy.cdm.model.common.ISourceable;
23 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
24 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
25 import eu.etaxonomy.cdm.model.common.VersionableEntity;
26 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
27 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
28
29
30
31
32
33
34
35 public abstract class DbImportObjectCreationMapperBase<CREATE extends VersionableEntity, STATE extends DbImportStateBase<?,?>> extends DbImportMultiAttributeMapperBase<CREATE, STATE> {
36 private static final Logger logger = Logger.getLogger(DbImportObjectCreationMapperBase.class);
37
38
39 /
40 protected String dbIdAttribute;
41
42 protected String objectToCreateNamespace;
43
44
45 /
46
47
48
49 protected DbImportObjectCreationMapperBase(String dbIdAttribute, String objectToCreateNamespace) {
50 super();
51
52 this.dbIdAttribute = dbIdAttribute;
53 this.objectToCreateNamespace = objectToCreateNamespace;
54 }
55
56 /
57
58
59
60
61 public void initialize(STATE state, Class<? extends CdmBase> destinationClass) {
62 super.initialize(state, destinationClass);
63
64 logger.warn("DbImportObjectCreationMapperBase still needs 'citation' implemented for OriginalSource");
65 }
66
67
68
69
70
71 public CREATE invoke(ResultSet rs, CREATE noObject) throws SQLException {
72 CREATE result = createObject(rs);
73 result = doInvoke(rs, result);
74 addOriginalSource(rs, result);
75 return result;
76 }
77
78
79
80
81
82
83 protected abstract CREATE doInvoke(ResultSet rs, CREATE createdObject) throws SQLException;
84
85
86
87
88
89
90
91
92
93 protected abstract CREATE createObject(ResultSet rs) throws SQLException;
94
95
96
97
98
99 public void addOriginalSource(ResultSet rs, CREATE cdmBase) throws SQLException {
100 if (cdmBase instanceof ISourceable ){
101 IOriginalSource source;
102 ISourceable sourceable = (ISourceable)cdmBase;
103 Object id = rs.getObject(dbIdAttribute);
104 String strId = String.valueOf(id);
105 String idNamespace = this.objectToCreateNamespace;
106
107 ReferenceBase citation = null;
108
109 String microCitation = null;
110 if (cdmBase instanceof IdentifiableEntity){
111 source = IdentifiableSource.NewInstance(strId, idNamespace, citation, microCitation);
112 }else if (cdmBase instanceof DescriptionElementBase){
113 source = DescriptionElementSource.NewInstance(strId, idNamespace, citation, microCitation);
114 }else{
115 logger.warn("ISourceable not beeing identifiable entities or description element base are not yet supported. CdmBase is of type " + cdmBase.getClass().getSimpleName() + ". Original source not added.");
116 return;
117 }
118 sourceable.addSource(source);
119 }
120 }
121
122
123
124
125
126
127
128
129 protected IInputTransformer getTransformer(){
130 return getState().getConfig().getTransformer();
131 }
132
133 }