Project

General

Profile

Download (4.59 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
    @SuppressWarnings("unused")
40
    private static final Logger logger = Logger.getLogger(EdaphobaseAuthorImport.class);
41

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

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

    
46

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

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

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

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

    
72

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

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

    
86

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

    
94
        String query = "SELECT DISTINCT t.tax_author_name "
95
                + " FROM tax_taxon t"
96
                + " WHERE TRIM(t.tax_author_name) <>'' AND t.tax_author_name IS NOT NULL";
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/8)