Project

General

Profile

Download (6.27 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.validation;
11

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

    
15
import org.apache.log4j.Logger;
16

    
17

    
18
import eu.etaxonomy.cdm.io.common.IOValidator;
19
import eu.etaxonomy.cdm.io.common.Source;
20
import eu.etaxonomy.cdm.io.pesi.erms.ErmsImportConfigurator;
21
import eu.etaxonomy.cdm.io.pesi.erms.ErmsImportState;
22

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

    
31
	public boolean validate(ErmsImportState state){
32
		boolean result = true;
33
		ErmsImportConfigurator config = state.getConfig();
34
		logger.info("Checking for Taxa not yet fully implemented");
35
//		result &= checkParentTaxonStatus(config);
36
		result &= checkAccParentTaxonStatus(config);
37
		result &= checkSynonymsAcceptedTaxonStatus(config);
38
		return result;
39
	}
40
	
41
	private boolean checkAccParentTaxonStatus(ErmsImportConfigurator bmiConfig){
42
		try {
43
			boolean result = true;
44
			Source source = bmiConfig.getSource();
45
			String strSQL = 
46
				" SELECT    myTaxon.id AS childId, childStatus.status_name AS childStatus, myTaxon.tu_status, " +
47
                      " myTaxon.tu_displayname AS childDisplayName, parent.id AS parentId, parent.tu_status AS parentStatusId, parentStatus.status_name AS parentStatus, " + 
48
                      " parent.tu_displayname as parentName, parentAcc.id AS parentAccId, parentAccStatus.status_name AS parentAccStatus, parentAcc.tu_displayname AS parentAccName, " + 
49
                      " parentAcc.tu_status AS Expr1 " +
50
                " FROM status AS parentAccStatus INNER JOIN " +
51
                      " tu AS parentAcc ON parentAccStatus.status_id = parentAcc.tu_status RIGHT OUTER JOIN " +
52
                      " tu AS parent ON parentAcc.id = parent.tu_acctaxon RIGHT OUTER JOIN " +
53
                      " tu AS myTaxon ON parent.id = myTaxon.tu_parent LEFT OUTER JOIN " + 
54
                      " status AS parentStatus ON parent.tu_status = parentStatus.status_id LEFT OUTER JOIN " +
55
                      " status AS childStatus ON myTaxon.tu_status = childStatus.status_id " +
56
                 " WHERE     (myTaxon.tu_status = 1) AND (parent.tu_status <> 1) " + 
57
                 " ORDER BY parentStatusId";
58
			ResultSet rs = source.getResultSet(strSQL);
59
			boolean firstRow = true;
60
			int i = 0;
61
			while (rs.next()){
62
				i++;
63
				if (firstRow){
64
					System.out.println("========================================================");
65
					logger.warn("There are accepted taxa that have an unaccepted parent and also the parents accepted taxon (tu_acctaxon) is not accepted. ");
66
					System.out.println("========================================================");
67
				}
68
				int childId = rs.getInt("childId");
69
				String childName = rs.getString("childDisplayName");
70
				
71
				int parentId = rs.getInt("parentId");
72
				String parentName = rs.getString("parentName");
73
				String parentStatus = rs.getString("parentStatus");
74
				
75
				int accParentId = rs.getInt("parentAccId");
76
				String accParentName = rs.getString("parentAccName");
77
				String accParentStatus = rs.getString("parentAccStatus");
78
				
79
				System.out.println(
80
						"ChildId:" + childId + "\n    childName: " + childName + 
81
						"\n  ParentId: " + parentId + "\n    parentName: " + parentName + "\n    parentStatus: " + parentStatus + 
82
						"\n  ParentAccId: " + accParentId +  "\n    accParentName: " + accParentName + "\n   accParentStatus: " + accParentStatus );
83
				result = firstRow = false;
84
			}
85
			if (i > 0){
86
				System.out.println(" ");
87
			}
88
			
89
			return result;
90
		} catch (SQLException e) {
91
			e.printStackTrace();
92
			return false;
93
		}
94
	}
95
	
96
	private boolean checkSynonymsAcceptedTaxonStatus(ErmsImportConfigurator bmiConfig){
97
		try {
98
			boolean result = true;
99
			Source source = bmiConfig.getSource();
100
			String strSQL = 
101
				" SELECT    myTaxon.id AS synonymId, myTaxon.tu_displayname AS synonymName, synonymStatus.status_name AS synonymStatus, " + 
102
					" accTaxon.id AS acceptedId, accTaxon.tu_displayname AS acceptedName, acceptedStatus.status_name AS acceptedStatus " +
103
				" FROM tu AS myTaxon INNER JOIN " +
104
                    " tu AS accTaxon ON myTaxon.tu_acctaxon = accTaxon.id INNER JOIN " + 
105
                    " status AS synonymStatus ON myTaxon.tu_status = synonymStatus.status_id INNER JOIN " +
106
                    " status AS acceptedStatus ON accTaxon.tu_status = acceptedStatus.status_id " +
107
                " WHERE (myTaxon.tu_status <> 1) AND (accTaxon.tu_status <> 1) " +
108
                " ORDER BY myTaxon.tu_status, accTaxon.tu_status ";
109
			ResultSet rs = source.getResultSet(strSQL);
110
			boolean firstRow = true;
111
			int i = 0;
112
			while (rs.next()){
113
				i++;
114
				if (firstRow){
115
					System.out.println("========================================================");
116
					logger.warn("There are accepted synonyms that have an unaccepted taxon that has no status 'accepted'. ");
117
					System.out.println("========================================================");
118
				}
119
				int synonymId = rs.getInt("synonymId");
120
				String synonymName = rs.getString("synonymName");
121
				String synonymStatus = rs.getString("synonymStatus");
122
				
123
				int acceptedId = rs.getInt("acceptedId");
124
				String acceptedName = rs.getString("acceptedName");
125
				String acceptedStatus = rs.getString("acceptedStatus");
126
				
127
				System.out.println(
128
						"SynonymId:" + synonymId + "\n    synonymName: " + synonymName + "\n    synonymStatus: " + synonymStatus + 
129
						"\n  AcceptedId: " + acceptedId + "\n    acceptedName: " + acceptedName + "\n    acceptedStatus: " + acceptedStatus  
130
//					+   "\n parentAccId: " + acceptedId +  "\n  accParentName: " + accParentName + "\n accParentStatus: " + accParentStatus 
131
						);
132
				result = firstRow = false;
133
			}
134
			if (i > 0){
135
				System.out.println(" ");
136
			}
137
			
138
			return result;
139
		} catch (SQLException e) {
140
			e.printStackTrace();
141
			return false;
142
		}
143
	}
144
	
145

    
146

    
147
}
(11-11/13)