Project

General

Profile

« Previous | Next » 

Revision 252dab9b

Added by Andreas Müller over 8 years ago

Latest changes for Edaphobase import

View differences:

app-import/src/main/java/eu/etaxonomy/cdm/io/edaphobase/EdaphobaseTaxonImport.java
10 10
package eu.etaxonomy.cdm.io.edaphobase;
11 11

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

  
15 21
import org.apache.log4j.Logger;
22
import org.codehaus.plexus.util.StringUtils;
16 23
import org.springframework.stereotype.Component;
17 24

  
25
import eu.etaxonomy.cdm.io.common.IPartitionedIO;
26
import eu.etaxonomy.cdm.io.common.ImportHelper;
18 27
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
28
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
29
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
19 30
import eu.etaxonomy.cdm.model.common.CdmBase;
31
import eu.etaxonomy.cdm.model.name.Rank;
32
import eu.etaxonomy.cdm.model.name.ZoologicalName;
33
import eu.etaxonomy.cdm.model.reference.Reference;
34
import eu.etaxonomy.cdm.model.taxon.Synonym;
35
import eu.etaxonomy.cdm.model.taxon.Taxon;
36
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
20 37

  
21 38
/**
22 39
 * @author a.mueller
......
25 42
 */
26 43
@Component
27 44
public class EdaphobaseTaxonImport extends EdaphobaseImportBase {
28

  
29
    @SuppressWarnings("unused")
45
    private static final long serialVersionUID = -9138378836474086070L;
30 46
    private static final Logger logger = Logger.getLogger(EdaphobaseTaxonImport.class);
31 47

  
32 48
    private static final String tableName = "tax_taxon";
33 49

  
34 50
    private static final String pluralString = "taxa";
35 51

  
52
    private static final Object AUTHOR_NAMESPACE = "tax_author_name";
53

  
36 54
    /**
37 55
     * @param tableName
38 56
     * @param pluralString
......
41 59
        super(tableName, pluralString);
42 60
    }
43 61

  
62
    @Override
63
    protected String getIdQuery(EdaphobaseImportState state) {
64
        return "SELECT DISTINCT taxon_id FROM tax_taxon t "
65
                + " ORDER BY taxon_id";
66
    }
67

  
68
    @Override
69
    protected String getRecordQuery(EdaphobaseImportConfigurator config) {
70
        String result = " SELECT DISTINCT t.*, r.value as rankStr, pr.value as parentRankStr, ppr.value as grandParentRankStr, "
71
                    + " pt.name as parentName, ppt.name as grandParentName "
72
                + " FROM tax_taxon t "
73
                    + " LEFT JOIN tax_taxon pt ON t.parent_taxon_fk = pt.taxon_id "
74
                    + " LEFT JOIN tax_taxon ppt ON pt.parent_taxon_fk = ppt.taxon_id"
75
                    + " LEFT OUTER JOIN tax_rank_en r ON r.element_id = t.tax_rank_fk "
76
                    + " LEFT OUTER JOIN tax_rank_en pr ON pr.element_id = pt.tax_rank_fk "
77
                    + " LEFT OUTER JOIN tax_rank_en ppr ON pr.element_id = ppt.tax_rank_fk "
78
                + " WHERE t.taxon_id IN (@IDSET)";
79
        result = result.replace("@IDSET", IPartitionedIO.ID_LIST_TOKEN);
80
        return result;
81
    }
82

  
83
    @Override
84
    protected void doInvoke(EdaphobaseImportState state) {
85
        super.doInvoke(state);
86
    }
87

  
88

  
44 89
    @Override
45 90
    public boolean doPartition(ResultSetPartitioner partitioner, EdaphobaseImportState state) {
46
        // TODO Auto-generated method stub
47
        return false;
91
        ResultSet rs = partitioner.getResultSet();
92
        Set<TaxonBase> taxaToSave = new HashSet<>();
93
        try {
94
            while (rs.next()){
95
                Integer id = nullSafeInt(rs, "taxon_id");
96
                Integer year = nullSafeInt(rs, "tax_year");
97
                boolean isBrackets = rs.getBoolean("tax_brackets");
98
                String remark = rs.getString("remark");
99
                String nameStr = rs.getString("name");
100
                String authorName = rs.getString("tax_author_name");
101
                //parentTaxonFk
102
                //rankFk
103
                //document
104
                boolean isValid = rs.getBoolean("valid");
105
                boolean idDeleted = rs.getBoolean("deleted");
106
                String displayString = rs.getString("display_string");
107
                Integer version = nullSafeInt(rs, "versionfield");
108
                String pages = rs.getString("pages");
109
                String treeIndex = rs.getString("path_to_root");
110
//                Integer rankFk = nullSafeInt(rs, "tax_rank_fk");
111
                String nameAddition = rs.getString("name_addition");
112
                String officialRemark = rs.getString("official_remark");
113
                boolean isGroup = rs.getBoolean("taxonomic_group");
114
                String rankStr = rs.getString("rankStr");
115
                String parentRankStr = rs.getString("parentRankStr");
116
                String grandParentRankStr = rs.getString("grandParentRankStr");
117
                String parentNameStr = rs.getString("parentName");
118
                String grandParentNameStr = rs.getString("grandParentName");
119

  
120

  
121
                TaxonBase<?> taxonBase;
122
                Reference<?> sec = null; //TODO
123

  
124
                //Name etc.
125
                Rank rank = makeRank(state, rankStr);
126
                ZoologicalName name = ZoologicalName.NewInstance(rank);
127
                setNamePart(nameStr, rank, name);
128
                Rank parentRank = makeRank(state, parentRankStr);
129
                setNamePart(parentNameStr, parentRank, name);
130
                Rank parentParentRank = makeRank(state, grandParentRankStr);
131
                setNamePart(grandParentNameStr, parentParentRank, name);
132

  
133
                //Authors
134
                if (StringUtils.isNotBlank(authorName)){
135
                    TeamOrPersonBase<?> author = state.getRelatedObject(AUTHOR_NAMESPACE, authorName, TeamOrPersonBase.class);
136
                    if (author == null){
137
                        logger.warn("Author not found in state: "  + authorName);
138
                    }else{
139
                        if (isBrackets){
140
                            name.setBasionymAuthorship(author);
141
                            name.setOriginalPublicationYear(year);
142
                        }else{
143
                            name.setCombinationAuthorship(author);
144
                            name.setPublicationYear(year);
145
                        }
146
                    }
147
                }
148

  
149

  
150
                if (isValid){
151
                    taxonBase = Taxon.NewInstance(name, sec);
152
                }else{
153
                    taxonBase = Synonym.NewInstance(name, sec);
154
                }
155
                taxaToSave.add(taxonBase);
156

  
157
                //remarks
158
                doNotes(taxonBase, remark);
159

  
160
                //id
161
                ImportHelper.setOriginalSource(taxonBase, state.getTransactionalSourceReference(), id, TAXON_NAMESPACE);
162
                ImportHelper.setOriginalSource(name, state.getTransactionalSourceReference(), id, TAXON_NAMESPACE);
163

  
164
            }
165
        } catch (SQLException e) {
166
            // TODO Auto-generated catch block
167
            e.printStackTrace();
168
        }
169

  
170
        getTaxonService().saveOrUpdate(taxaToSave);
171
        return true;
48 172
    }
49 173

  
50
    /* (non-Javadoc)
51
     * @see eu.etaxonomy.cdm.io.common.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet, eu.etaxonomy.cdm.io.common.IPartitionedState)
52
     */
174

  
53 175
    @Override
54 176
    public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs,
55 177
            EdaphobaseImportState state) {
56
        // TODO Auto-generated method stub
57
        return null;
178
        Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
179
        Map<String, TeamOrPersonBase<?>> authorMap = new HashMap<>();
180
        Set<String> authorSet = new HashSet<>();
181
        try {
182
            while (rs.next()){
183
                String authorStr = rs.getString("tax_author_name");
184
                authorSet.add(authorStr);
185
            }
186
        } catch (SQLException e) {
187
            e.printStackTrace();
188
        }
189

  
190
        //Authors
191
        Set<UUID> uuidSet = new HashSet<>();
192
        for (String authorStr : authorSet){
193
            UUID uuid = state.getAuthorUuid(authorStr);
194
            uuidSet.add(uuid);
195
        }
196
        List<TeamOrPersonBase<?>> authors = (List)getAgentService().find(uuidSet);
197
        Map<UUID, TeamOrPersonBase<?>> authorUuidMap = new HashMap<>();
198
        for (TeamOrPersonBase<?> author : authors){
199
            authorUuidMap.put(author.getUuid(), author);
200
        }
201

  
202
        for (String authorStr : authorSet){
203
            UUID uuid = state.getAuthorUuid(authorStr);
204
            TeamOrPersonBase<?> author = authorUuidMap.get(uuid);
205
            authorMap.put(authorStr, author);
206
        }
207
        result.put(AUTHOR_NAMESPACE, authorMap);
208

  
209
        return result;
58 210
    }
59 211

  
60
    @Override
61
    protected String getRecordQuery(EdaphobaseImportConfigurator config) {
62
        // TODO Auto-generated method stub
63
        return null;
212
    private void setNamePart(String nameStr, Rank rank, ZoologicalName name) {
213
        if (rank != null){
214
            if (rank.isSupraGeneric() || rank.isGenus()){
215
                if (StringUtils.isBlank(name.getGenusOrUninomial())){
216
                    name.setGenusOrUninomial(nameStr);
217
                }
218
            }else if (rank.isInfraGeneric()){
219
                if (StringUtils.isBlank(name.getInfraGenericEpithet())){
220
                    name.setInfraGenericEpithet(nameStr);
221
                }
222
            }else if (rank.isSpeciesAggregate() || rank.isSpecies()){
223
                if (StringUtils.isBlank(name.getSpecificEpithet())){
224
                    name.setSpecificEpithet(nameStr);
225
                }
226
            }else if (rank.isInfraSpecific()){
227
                if (StringUtils.isBlank(name.getInfraSpecificEpithet())){
228
                    name.setInfraSpecificEpithet(nameStr);
229
                }
230
            }
231
        }
64 232
    }
65 233

  
66
    @Override
67
    protected String getIdQuery(EdaphobaseImportState state) {
68
        // TODO Auto-generated method stub
69
        return null;
234
    private Rank makeRank(EdaphobaseImportState state, String rankStr) {
235
        Rank rank = null;
236
        try {
237
            rank = state.getTransformer().getRankByKey(rankStr);
238
        } catch (UndefinedTransformerMethodException e) {
239
            e.printStackTrace();
240
        }
241
        return rank;
70 242
    }
71 243

  
72 244
    @Override

Also available in: Unified diff