Project

General

Profile

Download (6.23 KB) Statistics
| Branch: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2015 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.edaphobase;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.HashMap;
15
import java.util.HashSet;
16
import java.util.Map;
17
import java.util.Set;
18

    
19
import org.apache.log4j.Logger;
20
import org.springframework.stereotype.Component;
21

    
22
import eu.etaxonomy.cdm.io.common.IPartitionedIO;
23
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
24
import eu.etaxonomy.cdm.model.common.CdmBase;
25
import eu.etaxonomy.cdm.model.reference.Reference;
26
import eu.etaxonomy.cdm.model.taxon.Synonym;
27
import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
28
import eu.etaxonomy.cdm.model.taxon.Taxon;
29
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
30

    
31
/**
32
 * @author a.mueller
33
 * @date 21.12.2015
34
 *
35
 */
36
@Component
37
public class EdaphobaseSynonymyImport extends EdaphobaseImportBase {
38
    private static final long serialVersionUID = 6641343927320994726L;
39

    
40
    private static final Logger logger = Logger.getLogger(EdaphobaseSynonymyImport.class);
41

    
42
    private static final String tableName = "tax_synonym";
43

    
44
    private static final String pluralString = "synonym relationships";
45

    
46

    
47
    /**
48
     * @param tableName
49
     * @param pluralString
50
     */
51
    public EdaphobaseSynonymyImport() {
52
        super(tableName, pluralString);
53
    }
54

    
55
    @Override
56
    protected String getIdQuery(EdaphobaseImportState state) {
57
        return "SELECT tax_synonym_id  "
58
                + " FROM tax_synonym "
59
                + " ORDER BY tax_synonym.a_taxon_fk_taxon_id ";
60
    }
61

    
62
    @Override
63
    protected String getRecordQuery(EdaphobaseImportConfigurator config) {
64
        String result = "SELECT sr.* "
65
                + " FROM tax_synonym sr"
66
                + " WHERE tax_synonym_id IN (@IDSET)";
67
        result = result.replace("@IDSET", IPartitionedIO.ID_LIST_TOKEN);
68
        return result;
69
    }
70

    
71

    
72
    @Override
73
    public boolean doPartition(ResultSetPartitioner partitioner, EdaphobaseImportState state) {
74
        ResultSet rs = partitioner.getResultSet();
75
        Map<String, TaxonBase> map = partitioner.getObjectMap(TAXON_NAMESPACE);
76
        Reference sourceReference = state.getTransactionalSourceReference();
77

    
78
        Set<TaxonBase> taxaToSave = new HashSet<>();
79
        try {
80
            while (rs.next()){
81
                int id = rs.getInt("tax_synonym_id");
82
                 //parentTaxonFk
83
//                boolean isValid = rs.getBoolean("valid");
84
                Integer synId = nullSafeInt(rs, "a_taxon_fk_taxon_id");
85
                Integer accId = nullSafeInt(rs, "b_taxon_fk_taxon_id");
86

    
87

    
88
                if (synId == null || accId == null){
89
                    logger.warn("Either a_taxon or b_taxon is NULL for tax_synonym " + id);
90
                }else{
91
                    TaxonBase<?> synonymCandidate = state.getRelatedObject(TAXON_NAMESPACE, String.valueOf(synId), TaxonBase.class);
92
                    if (synonymCandidate == null){
93
                        logger.warn("Synonym " + synId + " not found for synonymRelations (tax_synonym): " + id);
94
                    }else if (synonymCandidate.isInstanceOf(Taxon.class)){
95
                        String message = "Synonym ("+synId+") is not synonym but accepted (valid). Can't add synonym relationship for tax_synonym: "+id;
96
                        logger.warn(message);
97
                    }else{
98
                        Synonym synonym = CdmBase.deproxy(synonymCandidate, Synonym.class);
99
                        TaxonBase<?> accepted = state.getRelatedObject(TAXON_NAMESPACE, String.valueOf(accId), TaxonBase.class);
100
                        if (accepted == null){
101
                            logger.warn("Accepted(parent) taxon " + accId + " not found for tax_synonym " + id );
102
                        }else if(accepted.isInstanceOf(Synonym.class)){
103
                            String message = "Taxon ("+accId+") is not accepted but synonym. Can't add synonym relationship for tax_synonym: "+id;
104
                            logger.warn(message);
105
                        }else{
106
                            Taxon taxon = CdmBase.deproxy(accepted, Taxon.class);
107
                            taxon.addSynonym(synonym, SynonymRelationshipType.SYNONYM_OF());
108
                            taxaToSave.add(synonym);
109
                            taxaToSave.add(taxon);
110
                        }
111
                    }
112
                }
113

    
114
//              //id
115
//              String nameSpace = "tax_taxon";
116
//              ImportHelper.setOriginalSource(taxonBase, state.getTransactionalSourceReference(), id, nameSpace);
117
//              ImportHelper.setOriginalSource(name, state.getTransactionalSourceReference(), id, nameSpace);
118

    
119

    
120
            }
121
        } catch (SQLException e) {
122
            // TODO Auto-generated catch block
123
            e.printStackTrace();
124
        }
125

    
126
        getTaxonService().saveOrUpdate(taxaToSave);
127
        return true;
128
    }
129

    
130
    @Override
131
    public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs,
132
            EdaphobaseImportState state) {
133
        String nameSpace;
134
        Class<?> cdmClass;
135
        Set<String> idSet;
136
        Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
137

    
138
        try{
139
            Set<String> taxonIdSet = new HashSet<String>();
140
            while (rs.next()){
141
                handleForeignKey(rs, taxonIdSet, "a_taxon_fk_taxon_id");
142
                handleForeignKey(rs, taxonIdSet, "b_taxon_fk_taxon_id");
143
            }
144

    
145
            //name map
146
            nameSpace = TAXON_NAMESPACE;
147
            cdmClass = TaxonBase.class;
148
            idSet = taxonIdSet;
149
            Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
150
            result.put(nameSpace, taxonMap);
151

    
152
        } catch (SQLException e) {
153
            throw new RuntimeException(e);
154
        }
155

    
156
        return result;
157
    }
158

    
159

    
160
    @Override
161
    protected boolean doCheck(EdaphobaseImportState state) {
162
        return false;
163
    }
164

    
165
    @Override
166
    protected boolean isIgnore(EdaphobaseImportState state) {
167
        return ! state.getConfig().isDoSynonyms();
168
    }
169

    
170
}
(9-9/10)