Project

General

Profile

Download (6.31 KB) Statistics
| Branch: | Revision:
1
/**
2
* Copyright (C) 2007 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

    
10
package eu.etaxonomy.cdm.io.pesi.erms;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.HashMap;
15
import java.util.HashSet;
16
import java.util.Map;
17
import java.util.Set;
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.IOValidator;
24
import eu.etaxonomy.cdm.io.common.mapping.DbImportAnnotationMapper;
25
import eu.etaxonomy.cdm.io.common.mapping.DbImportCommonNameCreationMapper;
26
import eu.etaxonomy.cdm.io.common.mapping.DbImportMapping;
27
import eu.etaxonomy.cdm.io.common.mapping.DbImportObjectMapper;
28
import eu.etaxonomy.cdm.io.common.mapping.DbImportStringMapper;
29
import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;
30
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
31
import eu.etaxonomy.cdm.io.pesi.erms.validation.ErmsVernacularImportValidator;
32
import eu.etaxonomy.cdm.model.common.AnnotationType;
33
import eu.etaxonomy.cdm.model.common.CdmBase;
34
import eu.etaxonomy.cdm.model.common.Language;
35
import eu.etaxonomy.cdm.model.description.CommonTaxonName;
36
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
37

    
38
/**
39
 * @author a.mueller
40
 * @since 20.02.2010
41
 */
42
@Component
43
public class ErmsVernacularImport  extends ErmsImportBase<CommonTaxonName> {
44

    
45
    private static final long serialVersionUID = -5928250782824234181L;
46

    
47
	private static final Logger logger = Logger.getLogger(ErmsVernacularImport.class);
48

    
49
	private DbImportMapping<ErmsImportState, ErmsImportConfigurator> mapping;
50
//	private ErmsImportState state;   //import instance is never used more than once for Erms ; dirty
51

    
52
	private static final String pluralString = "vernaculars";
53
	private static final String dbTableName = "vernaculars";
54
	private static final Class<?> cdmTargetClass = CommonTaxonName.class;
55

    
56
	public ErmsVernacularImport(){
57
		super(pluralString, dbTableName, cdmTargetClass);
58
	}
59

    
60
	@Override
61
	protected String getRecordQuery(ErmsImportConfigurator config) {
62
		String strRecordQuery =
63
			" SELECT v.*, tu.tu_acctaxon, tu.id, l.*  " +
64
			" FROM vernaculars v INNER JOIN tu ON v.tu_id = tu.id "
65
			+ "   LEFT OUTER JOIN languages l ON l.LanID = v.lan_id " +
66
			" WHERE ( v.id IN (" + ID_LIST_TOKEN + ") )";
67
		return strRecordQuery;
68
	}
69

    
70
	@Override
71
	protected DbImportMapping<ErmsImportState, ErmsImportConfigurator> getMapping() {
72
		if (mapping == null){
73
			mapping = new DbImportMapping<ErmsImportState, ErmsImportConfigurator>();
74

    
75
			mapping.addMapper(DbImportCommonNameCreationMapper.NewInstance("id", VERNACULAR_NAMESPACE, "tu_id", ErmsImportBase.TAXON_NAMESPACE));
76

    
77
			mapping.addMapper(DbImportObjectMapper.NewInstance("lan_id", "language", LANGUAGE_NAMESPACE));
78
			mapping.addMapper(DbImportStringMapper.NewInstance("vername", "name"));
79
			mapping.addMapper(DbImportAnnotationMapper.NewInstance("note", AnnotationType.EDITORIAL(), Language.DEFAULT()));
80
		}
81
		return mapping;
82
	}
83

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

    
89
	@Override
90
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, ErmsImportState state) {
91
		String nameSpace;
92
		Class<?> cdmClass;
93
		Set<String> idSet;
94
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
95

    
96
		Map<String, Language> languageMap = new HashMap<>();
97
		try{
98
			Set<String> taxonIdSet = new HashSet<>();
99
//			Set<String> languageIdSet = new HashSet<>();
100
			while (rs.next()){
101
				handleForeignKey(rs, taxonIdSet, "tu_id");
102
				addLanguage(rs, languageMap, state);
103
			}
104

    
105
			//taxon map
106
			nameSpace = ErmsImportBase.TAXON_NAMESPACE;
107
			cdmClass = TaxonBase.class;
108
			idSet = taxonIdSet;
109
			@SuppressWarnings("unchecked")
110
            Map<String, TaxonBase<?>> taxonMap = (Map<String, TaxonBase<?>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
111
			result.put(nameSpace, taxonMap);
112

    
113
			//language map
114
			nameSpace = LANGUAGE_NAMESPACE;
115
			result.put(nameSpace, languageMap);
116

    
117
		} catch (SQLException e) {
118
			throw new RuntimeException(e);
119
		}
120
		return result;
121
	}
122

    
123
	/**
124
     * @param rs
125
     * @param languageMap
126
	 * @param state
127
	 * @throws SQLException
128
     */
129
    private void addLanguage(ResultSet rs, Map<String, Language> languageMap, ErmsImportState state) throws SQLException {
130
        IInputTransformer transformer = state.getTransformer();
131
        String id639_1 = rs.getString("639_1");
132
        String id639_2 = rs.getString("639_2");
133
        String id639_3 = rs.getString("639_3");
134
        String lanId = rs.getString("LanID");
135
        if (id639_1 != null && Language.getLanguageByIsoCode(id639_1)!= null){
136
            languageMap.put(lanId, Language.getLanguageByIsoCode(id639_1));
137
        }else if (id639_2 != null && Language.getLanguageByIsoCode(id639_2)!= null){
138
            languageMap.put(lanId, Language.getLanguageByIsoCode(id639_2));
139
        }else{
140
            Language language = null;
141
            try {
142
                language = transformer.getLanguageByKey(lanId);
143
                if (language == null || language.equals(Language.UNDETERMINED())){
144
                    UUID uuidLang = transformer.getLanguageUuid(lanId);
145
                    if (uuidLang != null){
146
                        language = getLanguage(state, uuidLang, rs.getString("LanName"), "LanName", "639_3");
147
                    }
148
                    if (language == null || language.equals(Language.UNDETERMINED() )){
149
                        logger.warn("Langauge undefined: " + lanId);
150
                    }
151
                }
152

    
153
            } catch (IllegalArgumentException e) {
154
                e.printStackTrace();
155
            } catch (UndefinedTransformerMethodException e) {
156
                e.printStackTrace();
157
            }
158
        }
159
    }
160

    
161
    @Override
162
	protected boolean doCheck(ErmsImportState state){
163
		IOValidator<ErmsImportState> validator = new ErmsVernacularImportValidator();
164
		return validator.validate(state);
165
	}
166

    
167
	@Override
168
	protected boolean isIgnore(ErmsImportState state){
169
		return ! state.getConfig().isDoVernaculars();
170
	}
171
}
(16-16/17)