Project

General

Profile

Download (4.56 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.ArrayList;
15
import java.util.Collection;
16
import java.util.HashMap;
17
import java.util.List;
18
import java.util.Map;
19
import java.util.UUID;
20

    
21
import org.apache.log4j.Logger;
22
import org.springframework.stereotype.Component;
23

    
24
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
25
import eu.etaxonomy.cdm.model.agent.Person;
26
import eu.etaxonomy.cdm.model.agent.Team;
27
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
28
import eu.etaxonomy.cdm.model.common.CdmBase;
29

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

    
39
    private static final Logger logger = Logger.getLogger(EdaphobaseAuthorImport.class);
40

    
41
    private static final String tableName = "tax_taxon";
42

    
43
    private static final String pluralString = "authors";
44

    
45

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

    
54
    @Override
55
    protected String getIdQuery(EdaphobaseImportState state) {
56
      //not relevant here
57
        return null;
58
    }
59

    
60
    @Override
61
    protected String getRecordQuery(EdaphobaseImportConfigurator config) {
62
      //not relevant here
63
        return null;
64
    }
65

    
66
    @Override
67
    protected void doInvoke(EdaphobaseImportState state) {
68
        makeAuthors(state);
69
    }
70

    
71

    
72
    @Override
73
    public boolean doPartition(ResultSetPartitioner partitioner, EdaphobaseImportState state) {
74
        //not relevant here
75
        return true;
76
    }
77

    
78
    @Override
79
    public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs,
80
            EdaphobaseImportState state) {
81
        Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
82
        return result;
83
    }
84

    
85

    
86
    /**
87
     * @param state
88
     */
89
    private void makeAuthors(EdaphobaseImportState state) {
90
        Map<String, Person> personMap = new HashMap<>();
91
        Map<String, TeamOrPersonBase<?>> authorMap = new HashMap<>();
92

    
93
        String query = "SELECT DISTINCT t.tax_author_name "
94
                + " FROM tax_taxon t"
95
                + " WHERE TRIM(t.tax_author_name) <>'' AND t.tax_author_name IS NOT NULL";
96

    
97
        ResultSet rs = state.getConfig().getSource().getResultSet(query);
98
        try {
99
            while(rs.next()){
100
                List<Person> singlePersons = new ArrayList<>();
101
                String authorStr = rs.getString("tax_author_name");
102

    
103
                String[] splits = authorStr.split("\\s*&\\s*");
104
                for (String split : splits){
105
                    String[] commaSplits = split.split("\\s*,\\s*");
106
                    for (String commaSplit : commaSplits){
107
                        Person person = personMap.get(commaSplit);
108
                        if (person == null){
109
                            person = Person.NewTitledInstance(commaSplit);
110
                            personMap.put(commaSplit, person);
111
                        }
112
                        singlePersons.add(person);
113
                    }
114
                }
115
                if (singlePersons.size() > 1){
116
                    Team team = Team.NewInstance();
117
                    for (Person person: singlePersons){
118
                        team.addTeamMember(person);
119
                    }
120
                    authorMap.put(authorStr, team);
121
                }else{
122
                    authorMap.put(authorStr, singlePersons.get(0));
123
                }
124
            }
125
            Map<String, UUID> authorUuidMap = new HashMap<>();
126
            for (String key : authorMap.keySet() ){
127
                TeamOrPersonBase<?> author = authorMap.get(key);
128
                authorUuidMap.put(key, author.getUuid());
129
            }
130
            state.setAuthorMap(authorUuidMap);
131
            logger.info("Save " + authorMap.keySet().size() + " authors ...");
132
            getAgentService().saveOrUpdate((Collection)authorMap.values());
133

    
134
        } catch (SQLException e) {
135
            e.printStackTrace();
136
        }
137
    }
138

    
139

    
140
    @Override
141
    protected boolean doCheck(EdaphobaseImportState state) {
142
        return false;
143
    }
144

    
145
    @Override
146
    protected boolean isIgnore(EdaphobaseImportState state) {
147
        return ! state.getConfig().isDoTaxa();
148
    }
149

    
150
}
(1-1/10)