Project

General

Profile

Download (4.55 KB) Statistics
| Branch: | Revision:
1
/**
2
* Copyright (C) 2015 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.io.edaphobase;
10

    
11
import java.sql.ResultSet;
12
import java.sql.SQLException;
13
import java.util.ArrayList;
14
import java.util.Collection;
15
import java.util.HashMap;
16
import java.util.List;
17
import java.util.Map;
18
import java.util.UUID;
19

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

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

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

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

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

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

    
44

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

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

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

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

    
70

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

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

    
84

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

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

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

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

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

    
138

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

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

    
149
}
(1-1/11)