3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.cdm
.io
.pesi
.erms
;
13 import java
.sql
.ResultSet
;
14 import java
.sql
.SQLException
;
15 import java
.util
.HashMap
;
16 import java
.util
.HashSet
;
20 import org
.apache
.log4j
.Logger
;
21 import org
.springframework
.stereotype
.Component
;
23 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.DbImportMapping
;
24 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.DbImportNameTypeDesignationMapper
;
25 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.DbImportSynonymMapper
;
26 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.DbImportTaxIncludedInMapper
;
27 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.ICheckIgnoreMapper
;
28 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.IDbImportMapper
;
29 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
30 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
39 public class ErmsTaxonRelationImport
extends ErmsImportBase
<TaxonBase
<?
>> implements ICheckIgnoreMapper
{
40 @SuppressWarnings("unused")
41 private static final Logger logger
= Logger
.getLogger(ErmsTaxonRelationImport
.class);
43 private DbImportMapping
<ErmsImportState
, ErmsImportConfigurator
> mapping
;
45 private static final String pluralString
= "taxon relations";
46 private static final String dbTableName
= "tu";
48 private static final Class
<?
> cdmTargetClass
= TaxonBase
.class;
50 private ErmsImportState state
; //ERMS import will never run in more then one instance
52 public ErmsTaxonRelationImport(){
53 super(pluralString
, dbTableName
, cdmTargetClass
);
57 * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getMapping()
59 protected DbImportMapping
<ErmsImportState
, ErmsImportConfigurator
> getMapping() {
61 mapping
= new DbImportMapping
<ErmsImportState
, ErmsImportConfigurator
>();
63 mapping
.addMapper(DbImportTaxIncludedInMapper
.NewInstance("id", TAXON_NAMESPACE
, "parentId", TAXON_NAMESPACE
, "accParentId", TAXON_NAMESPACE
, null));//there is only one tree
64 mapping
.addMapper(DbImportSynonymMapper
.NewInstance("id", "tu_acctaxon", TAXON_NAMESPACE
, null, true));
65 mapping
.addMapper(DbImportNameTypeDesignationMapper
.NewInstance("id", "tu_typetaxon", ErmsTaxonImport
.NAME_NAMESPACE
, "tu_typedesignationstatus"));
66 // mapping.addMapper(DbNotYetImplementedMapper.NewInstance("tu_acctaxon"));
73 * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getRecordQuery(eu.etaxonomy.cdm.io.erms.ErmsImportConfigurator)
75 protected String
getRecordQuery(ErmsImportConfigurator config
) {
76 //TODO get automatic by second path mappers
77 String selectAttributes
= " myTaxon.id, myTaxon.tu_parent, myTaxon.tu_typetaxon, myTaxon.tu_typedesignation, " +
78 " myTaxon.tu_acctaxon, myTaxon.tu_status, parent.tu_status AS parentStatus, parent.id AS parentId, " +
79 " accParent.tu_status AS accParentStatus, accParent.id AS accParentId ";
80 String strRecordQuery
=
81 " SELECT " + selectAttributes
+
82 " FROM tu AS myTaxon LEFT OUTER JOIN " +
83 " tu AS accTaxon ON myTaxon.tu_acctaxon = accTaxon.id LEFT OUTER JOIN " +
84 " tu AS accParent RIGHT OUTER JOIN " +
85 " tu AS parent ON accParent.id = parent.tu_acctaxon ON myTaxon.tu_parent = parent.id " +
86 " WHERE ( myTaxon.id IN (" + ID_LIST_TOKEN
+ ") )";
87 return strRecordQuery
;
92 protected void doInvoke(ErmsImportState state
) {
94 super.doInvoke(state
);
98 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
100 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
104 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
107 Set
<String
> taxonIdSet
= new HashSet
<String
>();
108 Set
<String
> nameIdSet
= new HashSet
<String
>();
110 handleForeignKey(rs
, taxonIdSet
, "parentId");
111 handleForeignKey(rs
, taxonIdSet
, "accParentId");
112 handleForeignKey(rs
, taxonIdSet
, "tu_acctaxon");
113 handleForeignKey(rs
, taxonIdSet
, "id");
114 handleForeignKey(rs
, nameIdSet
, "tu_typetaxon");
115 handleForeignKey(rs
, nameIdSet
, "id");
119 nameSpace
= ErmsTaxonImport
.NAME_NAMESPACE
;
120 cdmClass
= TaxonNameBase
.class;
122 Map
<String
, TaxonNameBase
<?
,?
>> nameMap
= (Map
<String
, TaxonNameBase
<?
,?
>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
123 result
.put(nameSpace
, nameMap
);
127 nameSpace
= ErmsTaxonImport
.TAXON_NAMESPACE
;
128 cdmClass
= TaxonBase
.class;
130 Map
<String
, TaxonBase
<?
>> taxonMap
= (Map
<String
, TaxonBase
<?
>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
131 result
.put(nameSpace
, taxonMap
);
133 } catch (SQLException e
) {
134 throw new RuntimeException(e
);
141 * @see eu.etaxonomy.cdm.io.erms.ICheckIgnoreMapper#checkIgnoreMapper(eu.etaxonomy.cdm.io.common.mapping.IDbImportMapper, java.sql.ResultSet)
143 public boolean checkIgnoreMapper(IDbImportMapper mapper
, ResultSet rs
) throws SQLException
{
144 boolean result
= false;
145 if (mapper
instanceof DbImportTaxIncludedInMapper
){
147 // int tu_status = rs.getInt("tu_status");
148 // if (tu_status != 1){
152 int id
= rs
.getInt("id");
153 if (state
.getAcceptedTaxaKeys().contains(id
)){
158 }else if (mapper
instanceof DbImportSynonymMapper
){
160 // int tu_status = rs.getInt("tu_status");
161 // if (tu_status == 1){
165 // }t.tu_acctaxon <> t.id
167 int id
= rs
.getInt("id");
168 Object accTaxonId
= rs
.getObject("tu_acctaxon");
169 if (accTaxonId
== null){
172 int accId
= Integer
.valueOf(String
.valueOf(accTaxonId
));
175 }else if (mapper
instanceof DbImportNameTypeDesignationMapper
){
176 Object tu_typeTaxon
= rs
.getObject("tu_typetaxon");
177 if (tu_typeTaxon
== null){
185 * @see eu.etaxonomy.cdm.io.common.mapping.IMappingImport#createObject(java.sql.ResultSet, eu.etaxonomy.cdm.io.common.ImportStateBase)
187 public TaxonBase
<?
> createObject(ResultSet rs
, ErmsImportState state
) throws SQLException
{
195 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
198 protected boolean doCheck(ErmsImportState state
){
199 // IOValidator<ErmsImportState> validator = new ErmsTaxonImportValidator();
200 // return validator.validate(state);
206 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
208 protected boolean isIgnore(ErmsImportState state
){
209 return ! state
.getConfig().isDoRelTaxa();