Project

General

Profile

Download (4.38 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.berlinModel.in.validation;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14

    
15
import org.apache.log4j.Logger;
16

    
17
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
18
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
19
import eu.etaxonomy.cdm.io.common.IOValidator;
20
import eu.etaxonomy.cdm.io.common.Source;
21

    
22
/**
23
 * @author a.mueller
24
 * @created 17.02.2010
25
 */
26
public class BerlinModelTaxonNameRelationImportValidator implements IOValidator<BerlinModelImportState> {
27
	private static final Logger logger = Logger.getLogger(BerlinModelTaxonNameRelationImportValidator.class);
28

    
29
	@Override
30
	public boolean validate(BerlinModelImportState state) {
31
		boolean result = true;
32
		BerlinModelImportConfigurator bmiConfig = state.getConfig();
33
		result &= checkUnrelatedHomotypicSynonyms(bmiConfig);
34

    
35
		return result;
36
	}
37

    
38

    
39

    
40
	private boolean checkUnrelatedHomotypicSynonyms(BerlinModelImportConfigurator bmiConfig){
41

    
42
		try {
43
			boolean result = true;
44
			Source source = bmiConfig.getSource();
45
			String strSQL = " SELECT Name.NameId AS NameId1, Name2.NameId AS NameId2, Name.FullNameCache AS NameCache1, Name2.FullNameCache AS NameCache2, dbo.NomStatus.NomStatus AS fromNomStatus, NomStatus_1.NomStatus AS toNomStatus " +
46
			" FROM RelPTaxon INNER JOIN " +
47
                      " Name ON RelPTaxon.PTNameFk1 = Name.NameId INNER JOIN " +
48
                      " Name AS Name2 ON RelPTaxon.PTNameFk2 = Name2.NameId LEFT OUTER JOIN " +
49
                      " NomStatus AS NomStatus_1 INNER JOIN " +
50
                      " NomStatusRel AS NomStatusRel_1 ON NomStatus_1.NomStatusId = NomStatusRel_1.NomStatusFk ON  " +
51
                      " Name2.NameId = NomStatusRel_1.NameFk LEFT OUTER JOIN " +
52
					  " NomStatus INNER JOIN " +
53
                      " NomStatusRel ON NomStatus.NomStatusId = NomStatusRel.NomStatusFk ON Name.NameId = NomStatusRel.NameFk " +
54
				" WHERE  RelPTaxon.RelQualifierFk = 7 AND " +
55
					" NomStatus.NomStatus <> 'nom. illeg.' AND NomStatus.NomStatus <> 'nom. inval.' AND " +
56
					  " NomStatus.NomStatus <> 'nom. altern.' AND NomStatus.NomStatus <> 'nom. nud.' AND " +
57
					  " NomStatus.NomStatus <> 'nom. rej.' AND NomStatus.NomStatus <> 'nom. rej. prop.' AND " +
58
                      " NomStatus.NomStatus <> 'nom. illeg. superfl.' AND " +
59
					" RelPTaxon.PTNameFk1 NOT IN " +
60
                         " (SELECT     NameFk1 " +
61
                         " FROM RelName " +
62
                         "   WHERE  RelNameQualifierFk = 1 OR RelNameQualifierFk = 3 " +
63
                       "  UNION " +
64
                         "  SELECT NameFk2 " +
65
                         "  FROM  RelName AS RelName2 " +
66
                         "  WHERE  RelNameQualifierFk = 1 OR RelNameQualifierFk = 3)";
67

    
68
			ResultSet rs = source.getResultSet(strSQL);
69
			boolean firstRow = true;
70
			int i = 0;
71
			while (rs.next()){
72
				i++;
73
				if (firstRow){
74
					System.out.println("==================================================================================================");
75
					String message = "There are names that have a homotypic relationship as taxa but no 'is basionym' or 'is replaced synonym' relationship or a status not requiring a basionym/repl.syn.";
76
					logger.warn(message);
77
					System.out.println(message);
78
					System.out.println("===================================================================================================");
79
				}
80

    
81
				int nameId1 = rs.getInt("NameId1");
82
				String nameCache1 = rs.getString("NameCache1");
83
				int nameId2 = rs.getInt("NameId2");
84
				String nameCache2 = rs.getString("NameCache2");
85
				String status1 = rs.getString("fromNomStatus");
86
				String status2 = rs.getString("toNomStatus");
87

    
88
				System.out.println(
89
						"NameId1:" + nameId1 + "\n  NameCache1: " + nameCache1 + "\n  status1: " + status1 +
90
						"\n  NameId2: " + nameId2 + "\n  NameCache2: " + nameCache2 + "\n  status2: " + status2) ;
91
				result = firstRow = false;
92

    
93
			}
94
			if (i > 0){
95
				System.out.println(" ");
96
			}
97

    
98
			return result;
99
		} catch (SQLException e) {
100
			e.printStackTrace();
101
			return false;
102
		}
103
	}
104

    
105

    
106
}
(14-14/19)