Project

General

Profile

« Previous | Next » 

Revision 0575453b

Added by Andreas Müller almost 6 years ago

improve BM orphaned taxon validation

View differences:

app-import/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/validation/BerlinModelTaxonRelationImportValidator.java
1 1
/**
2 2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy 
3
* European Distributed Institute of Taxonomy
4 4
* http://www.e-taxonomy.eu
5
* 
5
*
6 6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7 7
* See LICENSE.TXT at the top of this package for the full license terms.
8 8
*/
......
38 38
		result &= checkTaxaWithNoRelations(state);
39 39
		return result;
40 40
	}
41
	
42
	
41

  
42

  
43 43
	private boolean checkInActivatedStatus(BerlinModelImportState state){
44 44
		try {
45 45
			boolean result = true;
46 46
			BerlinModelImportConfigurator config = state.getConfig();
47 47
			Source source = state.getConfig().getSource();
48
			String strSQL = 
48
			String strSQL =
49 49
				" SELECT RelPTaxon.RelPTaxonId, RelPTaxon.RelQualifierFk, FromName.FullNameCache AS FromName, RelPTaxon.PTNameFk1 AS FromNameID, "  +
50
		    			" Status.Status AS FromStatus, ToName.FullNameCache AS ToName, RelPTaxon.PTNameFk2 AS ToNameId, ToStatus.Status AS ToStatus, FromTaxon.DoubtfulFlag AS doubtfulFrom, ToTaxon.DoubtfulFlag AS doubtfulTo" + 
51
    			" FROM PTaxon AS FromTaxon " + 
52
    				" INNER JOIN RelPTaxon ON FromTaxon.PTNameFk = RelPTaxon.PTNameFk1 AND FromTaxon.PTRefFk = RelPTaxon.PTRefFk1 " + 
53
    				" INNER JOIN PTaxon AS ToTaxon ON RelPTaxon.PTNameFk2 = ToTaxon.PTNameFk AND RelPTaxon.PTRefFk2 = ToTaxon.PTRefFk " + 
54
    				" INNER JOIN Name AS ToName ON ToTaxon.PTNameFk = ToName.NameId " + 
55
    				" INNER JOIN Name AS FromName ON FromTaxon.PTNameFk = FromName.NameId " + 
56
    				" INNER JOIN Status ON FromTaxon.StatusFk = Status.StatusId AND FromTaxon.StatusFk = Status.StatusId " + 
50
		    			" Status.Status AS FromStatus, ToName.FullNameCache AS ToName, RelPTaxon.PTNameFk2 AS ToNameId, ToStatus.Status AS ToStatus, FromTaxon.DoubtfulFlag AS doubtfulFrom, ToTaxon.DoubtfulFlag AS doubtfulTo" +
51
    			" FROM PTaxon AS FromTaxon " +
52
    				" INNER JOIN RelPTaxon ON FromTaxon.PTNameFk = RelPTaxon.PTNameFk1 AND FromTaxon.PTRefFk = RelPTaxon.PTRefFk1 " +
53
    				" INNER JOIN PTaxon AS ToTaxon ON RelPTaxon.PTNameFk2 = ToTaxon.PTNameFk AND RelPTaxon.PTRefFk2 = ToTaxon.PTRefFk " +
54
    				" INNER JOIN Name AS ToName ON ToTaxon.PTNameFk = ToName.NameId " +
55
    				" INNER JOIN Name AS FromName ON FromTaxon.PTNameFk = FromName.NameId " +
56
    				" INNER JOIN Status ON FromTaxon.StatusFk = Status.StatusId AND FromTaxon.StatusFk = Status.StatusId " +
57 57
    				" INNER JOIN Status AS ToStatus ON ToTaxon.StatusFk = ToStatus.StatusId AND ToTaxon.StatusFk = ToStatus.StatusId " +
58 58
				" WHERE (RelPTaxon.RelQualifierFk = - 99) ";
59
			
59

  
60 60
			if (StringUtils.isNotBlank(config.getRelTaxaIdQuery())){
61 61
				strSQL += String.format(" AND (RelPTaxon.RelPTaxonId IN " +
62
                        " ( %s ) )" , config.getRelTaxaIdQuery()) ; 
62
                        " ( %s ) )" , config.getRelTaxaIdQuery()) ;
63 63
			}
64
			
64

  
65 65
//			System.out.println(strSQL);
66 66
			ResultSet rs = source.getResultSet(strSQL);
67 67
			boolean firstRow = true;
......
73 73
					System.out.println("There are TaxonRelationships with status 'inactivated'(-99)!");
74 74
					System.out.println("========================================================");
75 75
				}
76
				
76

  
77 77
				int relPTaxonId = rs.getInt("RelPTaxonId");
78 78
				String fromName = rs.getString("FromName");
79 79
				int fromNameID = rs.getInt("FromNameID");
80 80
				String fromStatus = rs.getString("FromStatus");
81
				
81

  
82 82
				String toName = rs.getString("ToName");
83 83
				int toNameId = rs.getInt("ToNameId");
84 84
				String toStatus = rs.getString("ToStatus");
85 85
				String doubtfulFrom = String.valueOf(rs.getObject("doubtfulFrom"));
86 86
				String doubtfulTo = String.valueOf(rs.getObject("doubtfulTo"));
87
				
88
				
89
				System.out.println("RelPTaxonId:" + relPTaxonId + 
90
						"\n  FromName: " + fromName + "\n  FromNameID: " + fromNameID + "\n  FromStatus: " + fromStatus + "\n  FromDoubtful: " + doubtfulFrom + 
87

  
88

  
89
				System.out.println("RelPTaxonId:" + relPTaxonId +
90
						"\n  FromName: " + fromName + "\n  FromNameID: " + fromNameID + "\n  FromStatus: " + fromStatus + "\n  FromDoubtful: " + doubtfulFrom +
91 91
						"\n  ToName: " + toName + "\n  ToNameId: " + toNameId + "\n  ToStatus: " + toStatus + "\n  ToDoubtful: " + doubtfulTo );
92 92
				result = firstRow = false;
93 93
			}
94 94
			if (i > 0){
95 95
				System.out.println(" ");
96 96
			}
97
			
97

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

  
105 105
	/**
106 106
	 * @param state
107 107
	 * @return
......
111 111
		try {
112 112
			BerlinModelImportConfigurator config = state.getConfig();
113 113
			Source source = config.getSource();
114
			String strQuery = 
115
				"SELECT count(*) AS n FROM RelPTaxon " + 
114
			String strQuery =
115
				"SELECT count(*) AS n FROM RelPTaxon " +
116 116
				" WHERE (Notes IS NOT NULL) AND (RTRIM(LTRIM(Notes)) <> '') ";
117
			
117

  
118 118
			if (StringUtils.isNotBlank(config.getRelTaxaIdQuery())){
119 119
				strQuery += String.format(" AND (RelPTaxon.RelPTaxonId IN " +
120
                        " ( %s ) ) " , config.getRelTaxaIdQuery()) ; 
120
                        " ( %s ) ) " , config.getRelTaxaIdQuery()) ;
121 121
			}
122
			
122

  
123 123
			ResultSet rs = source.getResultSet(strQuery);
124 124
			rs.next();
125 125
			int n;
......
129 129
				System.out.println("There are " + n + " RelPTaxa with a note. Notes for RelPTaxa are not imported!");
130 130
				System.out.println("========================================================");
131 131
				success = false;
132
				
132

  
133 133
			}
134 134
		} catch (SQLException e) {
135 135
			e.printStackTrace();
136 136
		}
137 137
		return success;
138 138
	}
139
	
139

  
140 140
	/**
141 141
	 * @param state
142 142
	 * @return
......
145 145
		boolean success = true;
146 146
		try {
147 147
			BerlinModelImportConfigurator config = state.getConfig();
148
			
148

  
149 149
			Source source = config.getSource();
150
			String strQuery = 
150
			String strQuery =
151 151
				"SELECT RelPTaxon.RelPTaxonId, RelPTQualifier, PTaxon.RIdentifier, Name.FullNameCache fromName, PTaxon.PTRefFk, Name.NameId as fromNameId, AcceptedName.FullNameCache acceptedName" +
152 152
				" FROM RelPTaxon INNER JOIN PTaxon ON RelPTaxon.PTNameFk1 = PTaxon.PTNameFk AND RelPTaxon.PTRefFk1 = PTaxon.PTRefFk " +
153 153
					" INNER JOIN RelPTQualifier ON RelPTaxon.RelQualifierFk = RelPTQualifier.RelPTQualifierId " +
154 154
					" LEFT OUTER JOIN Name ON PTaxon.PTNameFk = Name.NameId " +
155 155
					" LEFT OUTER JOIN Name AS AcceptedName ON RelPTaxon.PTNameFk2 = AcceptedName.NameId " +
156 156
				" WHERE (PTaxon.StatusFk = 1) AND (RelPTaxon.RelQualifierFk IN (2, 4, 5, 6, 7)) ";
157
			
157

  
158 158
			if (StringUtils.isNotBlank(config.getRelTaxaIdQuery())){
159 159
				strQuery += String.format(" AND (RelPTaxon.RelPTaxonId IN " +
160
                        " ( %s ) )" , config.getRelTaxaIdQuery()) ; 
160
                        " ( %s ) )" , config.getRelTaxaIdQuery()) ;
161 161
			}
162
			
162

  
163 163
			ResultSet rs = source.getResultSet(strQuery);
164 164
			boolean firstRow = true;
165 165
			while (rs.next()){
......
176 176
				int fromRefFk = rs.getInt("PTRefFk");
177 177
				int fromNameId = rs.getInt("fromNameId");
178 178
				String toName = rs.getString("acceptedName");
179
				
180
				System.out.println("RelPTaxonId:" + relPTaxonId + 
181
						"\n TaxonRIdentifier: " + fromIdentifier + "\n name: " + fromName + "\n nameId: " + fromNameId + "\n RefFk: " + fromRefFk + "\n RelType: " + relType  
179

  
180
				System.out.println("RelPTaxonId:" + relPTaxonId +
181
						"\n TaxonRIdentifier: " + fromIdentifier + "\n name: " + fromName + "\n nameId: " + fromNameId + "\n RefFk: " + fromRefFk + "\n RelType: " + relType
182 182
						+ "\n acceptedName: " + toName //+ "\n  ToNameId: " + toNameId + "\n  ToStatus: " + toStatus + "\n  ToDoubtful: " + doubtfulTo )
183 183
						);
184 184
				success = (firstRow = false);
......
188 188
		}
189 189
		return success;
190 190
	}
191
	
192
	
191

  
192

  
193 193
	/**
194 194
	 * @param state
195 195
	 * @return
......
198 198
		boolean success = true;
199 199
		try {
200 200
			BerlinModelImportConfigurator config = state.getConfig();
201
			
201

  
202 202
			Source source = config.getSource();
203
			String strQuery = 
203
			String strQuery =
204 204
				"SELECT RelPTaxon.RelPTaxonId, RelPTQualifier, PTaxon.RIdentifier,PTaxon.StatusFk as fromStatus, Name.FullNameCache fromName, PTaxon.PTRefFk, Name.NameId as fromNameId, AcceptedName.FullNameCache acceptedName" +
205 205
				" FROM RelPTaxon INNER JOIN PTaxon ON RelPTaxon.PTNameFk1 = PTaxon.PTNameFk AND RelPTaxon.PTRefFk1 = PTaxon.PTRefFk " +
206 206
					" INNER JOIN RelPTQualifier ON RelPTaxon.RelQualifierFk = RelPTQualifier.RelPTQualifierId " +
207 207
					" LEFT OUTER JOIN Name ON PTaxon.PTNameFk = Name.NameId " +
208 208
					" LEFT OUTER JOIN Name AS AcceptedName ON RelPTaxon.PTNameFk2 = AcceptedName.NameId " +
209 209
				" WHERE (PTaxon.StatusFk IN (2,3,4)) AND (RelPTaxon.RelQualifierFk NOT IN (2, 4, 5, 6, 7, 101, 102, 103, 104, -99)) ";
210
			
210

  
211 211
			if (StringUtils.isNotBlank(config.getRelTaxaIdQuery())){
212 212
				strQuery += String.format(" AND (RelPTaxon.RelPTaxonId IN " +
213
                        " ( %s ) )" , config.getRelTaxaIdQuery()) ; 
213
                        " ( %s ) )" , config.getRelTaxaIdQuery()) ;
214 214
			}
215
			
215

  
216 216
			ResultSet rs = source.getResultSet(strQuery);
217 217
			boolean firstRow = true;
218 218
			while (rs.next()){
......
231 231
				int fromRefFk = rs.getInt("PTRefFk");
232 232
				int fromNameId = rs.getInt("fromNameId");
233 233
				String toName = rs.getString("acceptedName");
234
				
235
				System.out.println("RelPTaxonId:" + relPTaxonId + 
236
						"\n TaxonRIdentifier: " + fromIdentifier + "\n name: " + fromName + "\n nameId: " + fromNameId + "\n RefFk: " + fromRefFk + "\n RelType: " + relType  
234

  
235
				System.out.println("RelPTaxonId:" + relPTaxonId +
236
						"\n TaxonRIdentifier: " + fromIdentifier + "\n name: " + fromName + "\n nameId: " + fromNameId + "\n RefFk: " + fromRefFk + "\n RelType: " + relType
237 237
						+ "\n toName: " + toName //+ "\n  ToNameId: " + toNameId + "\n  ToStatus: " + toStatus + "\n  ToDoubtful: " + doubtfulTo )
238 238
						);
239 239
				success = (firstRow = false);
......
243 243
		}
244 244
		return success;
245 245
	}
246
	
246

  
247 247
	/**
248 248
	 * @param state
249 249
	 * @return
......
252 252
		boolean success = true;
253 253
		try {
254 254
			BerlinModelImportConfigurator config = state.getConfig();
255
			
255

  
256 256
			Source source = config.getSource();
257
			String strQuery = 
258
				" SELECT pt.PTRefFk AS secRefFk, dbo.Reference.RefCache AS secRef, dbo.Name.FullNameCache, Name.NameId, Status.Status " +
257
	        String strSelect = " SELECT pt.PTRefFk AS secRefFk, r.RefCache AS secRef, n.FullNameCache, n.NameId, st.Status ";
258
	        String strCount = " SELECT count(*) as n ";
259
	        String strQueryBase =
259 260
				" FROM PTaxon AS pt LEFT OUTER JOIN " +
260
                      	" Status ON pt.StatusFk = Status.StatusId LEFT OUTER JOIN " + 
261
				        " Reference ON pt.PTRefFk = dbo.Reference.RefId LEFT OUTER JOIN " + 
262
				        " Name ON pt.PTNameFk = dbo.Name.NameId LEFT OUTER JOIN " +
263
				        " RelPTaxon ON pt.PTNameFk = dbo.RelPTaxon.PTNameFk2 AND pt.PTRefFk = dbo.RelPTaxon.PTRefFk2 LEFT OUTER JOIN " +
264
				        " RelPTaxon AS RelPTaxon_1 ON pt.PTNameFk = RelPTaxon_1.PTNameFk1 AND pt.PTRefFk = RelPTaxon_1.PTRefFk1 " + 
265
				" WHERE (RelPTaxon_1.RelQualifierFk IS NULL) AND (dbo.RelPTaxon.RelQualifierFk IS NULL) AND pt.statusFK <> 6 " + 
266
				" ORDER BY Reference.RefCache, pt.PTRefFk, Name.FullNameCache, statusFK";
261
                      	" Status st ON pt.StatusFk = st.StatusId LEFT OUTER JOIN " +
262
				        " Reference r ON pt.PTRefFk = r.RefId LEFT OUTER JOIN " +
263
				        " Name n ON pt.PTNameFk = n.NameId LEFT OUTER JOIN " +
264
				        " RelPTaxon rel1 ON pt.PTNameFk = rel1.PTNameFk2 AND pt.PTRefFk = rel1.PTRefFk2 LEFT OUTER JOIN " +
265
				        " RelPTaxon AS rel2 ON pt.PTNameFk = rel2.PTNameFk1 AND pt.PTRefFk = rel2.PTRefFk1 " +
266
				" WHERE (rel2.RelQualifierFk IS NULL) AND (rel1.RelQualifierFk IS NULL) AND pt.statusFK <> 6 ";
267
			String strOrderBy =	" ORDER BY r.RefCache, pt.PTRefFk, n.FullNameCache, pt.statusFK ";
268
			if (state.getConfig().isEuroMed()){
269
			    strQueryBase += " AND pt.RIdentifier IN (SELECT RIdentifier FROM v_cdm_exp_taxaAll) AND (pt.IsExcludedMarker = 0 OR  pt.IsExcludedMarker IS NULL) " ;
270
			}
267 271

  
268 272
			//project filter
269 273
//			if (StringUtils.isNotBlank(config.getRelTaxaIdQuery())){
270 274
//				strQuery += String.format(" AND (RelPTaxon.RelPTaxonId IN " +
271
//                        " ( %s ) )" , config.getRelTaxaIdQuery()) ; 
275
//                        " ( %s ) )" , config.getRelTaxaIdQuery()) ;
272 276
//			}
273
			
274
			ResultSet rs = source.getResultSet(strQuery);
275
			boolean firstRow = true;
277

  
278
			ResultSet rs = source.getResultSet(strCount + strQueryBase);
279
			rs.next();
280
			int n = rs.getInt("n");
281
            if (n > 0){
282
                System.out.println("=======================================================================");
283
                System.out.println("There are "+n+" taxa without any taxon relationship and not being orphaned!");
284
                System.out.println("=======================================================================");
285
            }
286

  
287
			rs = source.getResultSet(strSelect + strQueryBase + strOrderBy);
276 288
			while (rs.next()){
277
				if (firstRow){
278
					System.out.println("=====================================================================");
279
					System.out.println("There are taxa without any taxon relationship and not being orphaned!");
280
					System.out.println("=====================================================================");
281
				}
282 289

  
283
				int secRefFk = rs.getInt("secRefFk");
290
			    int secRefFk = rs.getInt("secRefFk");
284 291
				String secRef = rs.getString("secRef");
285 292
				String nameCache = rs.getString("FullNameCache");
286 293
				int nameId = rs.getInt("NameId");
287 294
				String status = rs.getString("Status");
288
				
289
				System.out.println("SecRef:" + secRefFk + 
290
						"\n secRef: " + secRef + "\n name: " + nameCache + "\n nameId: " + nameId 
291
						+ "\n status: " + status 
295

  
296
				System.out.println("SecRef:" + secRefFk +
297
						"\n secRef: " + secRef + "\n name: " + nameCache + "\n nameId: " + nameId
298
						+ "\n status: " + status
292 299
					);
293
				success = (firstRow = false);
294 300
			}
301
			success = (n == 0);
295 302
		} catch (SQLException e) {
296 303
			e.printStackTrace();
304
			success = false;
297 305
		}
298 306
		return success;
299 307
	}
300
	
308

  
301 309

  
302 310

  
303 311
}

Also available in: Unified diff