Project

General

Profile

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

    
11
package eu.etaxonomy.cdm.io.berlinModel.in.validation;
12

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

    
16
import org.apache.log4j.Logger;
17

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

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

    
30
	@Override
31
	public boolean validate(BerlinModelImportState state) {
32
		boolean result = true;
33
		BerlinModelImportConfigurator bmiConfig = state.getConfig();
34
		result &= checkUnrelatedHomotypicSynonyms(bmiConfig);
35
		
36
		return result;
37
	}
38
	
39
	
40
	
41
	private boolean checkUnrelatedHomotypicSynonyms(BerlinModelImportConfigurator bmiConfig){
42
	
43
		try {
44
			boolean result = true;
45
			Source source = bmiConfig.getSource();
46
			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 " +
47
			" FROM RelPTaxon INNER JOIN " + 
48
                      " Name ON RelPTaxon.PTNameFk1 = Name.NameId INNER JOIN " + 
49
                      " Name AS Name2 ON RelPTaxon.PTNameFk2 = Name2.NameId LEFT OUTER JOIN " + 
50
                      " NomStatus AS NomStatus_1 INNER JOIN " + 
51
                      " NomStatusRel AS NomStatusRel_1 ON NomStatus_1.NomStatusId = NomStatusRel_1.NomStatusFk ON  " + 
52
                      " Name2.NameId = NomStatusRel_1.NameFk LEFT OUTER JOIN " + 
53
					  " NomStatus INNER JOIN " + 
54
                      " NomStatusRel ON NomStatus.NomStatusId = NomStatusRel.NomStatusFk ON Name.NameId = NomStatusRel.NameFk " + 
55
				" WHERE  RelPTaxon.RelQualifierFk = 7 AND " +
56
					" NomStatus.NomStatus <> 'nom. illeg.' AND NomStatus.NomStatus <> 'nom. inval.' AND " + 
57
					  " NomStatus.NomStatus <> 'nom. altern.' AND NomStatus.NomStatus <> 'nom. nud.' AND " +
58
					  " NomStatus.NomStatus <> 'nom. rej.' AND NomStatus.NomStatus <> 'nom. rej. prop.' 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
					logger.warn("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
					System.out.println("===================================================================================================");
77
				}
78
				
79
				int nameId1 = rs.getInt("NameId1");
80
				String nameCache1 = rs.getString("NameCache1");
81
				int nameId2 = rs.getInt("NameId2");
82
				String nameCache2 = rs.getString("NameCache2");
83
				String status1 = rs.getString("fromNomStatus");
84
				String status2 = rs.getString("toNomStatus");
85
				
86
				System.out.println(
87
						"NameId1:" + nameId1 + "\n  NameCache1: " + nameCache1 + "\n  status1: " + status1 +  
88
						"\n  NameId2: " + nameId2 + "\n  NameCache2: " + nameCache2 + "\n  status2: " + status2) ;
89
				result = firstRow = false;
90
				
91
			}
92
			if (i > 0){
93
				System.out.println(" ");
94
			}
95
			
96
			return result;
97
		} catch (SQLException e) {
98
			e.printStackTrace();
99
			return false;
100
		}
101
	}
102

    
103

    
104
}
(14-14/19)