Project

General

Profile

Download (5.04 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
 * @since 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
                authorStr = authorStr.replace(" et ", " & ");
102

    
103
                boolean isEtAl = false;
104
                String noEtAlAuthorStr = authorStr;
105
                if (authorStr.endsWith(" & al.")){
106
                    isEtAl = true;
107
                    noEtAlAuthorStr = authorStr.substring(0, authorStr.length()-6).trim();
108
                }
109

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

    
143
        } catch (SQLException e) {
144
            e.printStackTrace();
145
        }
146
    }
147

    
148

    
149
    @Override
150
    protected boolean doCheck(EdaphobaseImportState state) {
151
        return true;
152
    }
153

    
154
    @Override
155
    protected boolean isIgnore(EdaphobaseImportState state) {
156
        return ! state.getConfig().isDoTaxa();
157
    }
158

    
159
}
(1-1/12)