Revision 5208
Added by daigle almost 15 years ago
src/edu/ucsb/nceas/metacat/MetaCatServlet.java | ||
---|---|---|
92 | 92 |
import edu.ucsb.nceas.metacat.shared.BaseException; |
93 | 93 |
import edu.ucsb.nceas.metacat.shared.HandlerException; |
94 | 94 |
import edu.ucsb.nceas.metacat.shared.MetacatUtilException; |
95 |
import edu.ucsb.nceas.metacat.spatial.SpatialFeatureSchema; |
|
95 | 96 |
import edu.ucsb.nceas.metacat.spatial.SpatialHarvester; |
96 | 97 |
import edu.ucsb.nceas.metacat.spatial.SpatialQuery; |
97 | 98 |
import edu.ucsb.nceas.metacat.util.AuthUtil; |
... | ... | |
413 | 414 |
* If spatial option is turned on and set to regenerate the spatial |
414 | 415 |
* cache on restart, trigger the harvester regeneratation method |
415 | 416 |
*/ |
416 |
if (PropertyService.getProperty("spatial.runSpatialOption").equals("true") |
|
417 |
&& PropertyService.getProperty("spatial.regenerateCacheOnRestart").equals("true")) { |
|
417 |
if (PropertyService.getProperty("spatial.runSpatialOption").equals("true")) {
|
|
418 |
// && PropertyService.getProperty("spatial.regenerateCacheOnRestart").equals("true")) {
|
|
418 | 419 |
|
419 | 420 |
// Begin timer |
420 | 421 |
long before = System.currentTimeMillis(); |
421 | 422 |
|
422 |
// regenerate the entire spatial cache |
|
423 |
// may be expensive with many documents |
|
424 |
SpatialHarvester sh = new SpatialHarvester(); |
|
425 |
sh.regenerate(); |
|
426 |
sh.destroy(); |
|
423 |
// if either the point or polygon shape files do not exist, then regenerate the entire spatial cache |
|
424 |
// this may be expensive with many documents |
|
425 |
if( FileUtil.getFileStatus(SpatialFeatureSchema.pointShpUri) == FileUtil.DOES_NOT_EXIST) { |
|
426 |
SpatialHarvester sh = new SpatialHarvester(); |
|
427 |
sh.regenerate(); |
|
428 |
sh.destroy(); |
|
429 |
} |
|
427 | 430 |
|
428 | 431 |
// After running the first time, we want to to set |
429 | 432 |
// regenerateCacheOnRestart to false |
430 | 433 |
// so that it does not regenerate the cache every time tomcat is |
431 | 434 |
// restarted |
432 |
PropertyService.setProperty("spatial.regenerateCacheOnRestart", "false"); |
|
435 |
// PropertyService.setProperty("spatial.regenerateCacheOnRestart", "false");
|
|
433 | 436 |
|
434 | 437 |
// End timer |
435 | 438 |
long after = System.currentTimeMillis(); |
... | ... | |
2397 | 2400 |
serialNumber = dbConn.getCheckOutSerialNumber(); |
2398 | 2401 |
|
2399 | 2402 |
// write the document to the database and disk |
2400 |
try { |
|
2401 |
String accNumber = docid[0]; |
|
2402 |
logMetacat.debug("MetaCatServlet.handleInsertOrUpdateAction - " + doAction + " " |
|
2403 |
+ accNumber + "..."); |
|
2404 |
if (accNumber.equals("")) { |
|
2405 |
accNumber = null; |
|
2406 |
} |
|
2407 |
|
|
2403 |
String accNumber = docid[0]; |
|
2404 |
logMetacat.debug("MetaCatServlet.handleInsertOrUpdateAction - " + doAction + " " |
|
2405 |
+ accNumber + "..."); |
|
2406 |
if (accNumber == null || accNumber.equals("")) { |
|
2407 |
logMetacat.warn("MetaCatServlet.handleInsertOrUpdateAction - writing with null acnumber"); |
|
2408 | 2408 |
newdocid = documentWrapper.write(dbConn, doctext[0], pub, dtd, |
2409 |
doAction, accNumber, user, groups); |
|
2410 |
|
|
2411 |
EventLog.getInstance().log(request.getRemoteAddr(), |
|
2412 |
user, accNumber, action[0]); |
|
2413 |
} catch (NullPointerException npe) { |
|
2414 |
// MCD this seems a bit dubious, since many things can throw npe |
|
2415 |
logMetacat.warn("MetaCatServlet.handleInsertOrUpdateAction - writing with null acnumber"); |
|
2416 |
newdocid = documentWrapper.write(dbConn, doctext[0], pub, dtd, |
|
2417 | 2409 |
doAction, null, user, groups); |
2418 | 2410 |
EventLog.getInstance().log(request.getRemoteAddr(), |
2419 | 2411 |
user, "", action[0]); |
2420 |
} |
|
2412 |
} else |
|
2413 |
newdocid = documentWrapper.write(dbConn, doctext[0], pub, dtd, |
|
2414 |
doAction, accNumber, user, groups); |
|
2415 |
|
|
2416 |
EventLog.getInstance().log(request.getRemoteAddr(), |
|
2417 |
user, accNumber, action[0]); |
|
2421 | 2418 |
} finally { |
2422 | 2419 |
// Return db connection |
2423 | 2420 |
DBConnectionPool.returnDBConnection(dbConn, serialNumber); |
... | ... | |
2436 | 2433 |
output += "<error>"; |
2437 | 2434 |
output += npe.getMessage(); |
2438 | 2435 |
output += "</error>"; |
2439 |
logMetacat.warn("MetaCatServlet.handleInsertOrUpdateAction - Error in writing eml document to the database" + npe.getMessage());
|
|
2436 |
logMetacat.warn("MetaCatServlet.handleInsertOrUpdateAction - Null pointer error when writing eml document to the database: " + npe.getMessage());
|
|
2440 | 2437 |
npe.printStackTrace(); |
2441 | 2438 |
} |
2442 | 2439 |
} catch (Exception e) { |
... | ... | |
2445 | 2442 |
output += "<error>"; |
2446 | 2443 |
output += e.getMessage(); |
2447 | 2444 |
output += "</error>"; |
2448 |
logMetacat.warn("MetaCatServlet.handleInsertOrUpdateAction - Error in writing eml document to the database" + e.getMessage());
|
|
2445 |
logMetacat.warn("MetaCatServlet.handleInsertOrUpdateAction - General error when writing eml document to the database: " + e.getMessage());
|
|
2449 | 2446 |
e.printStackTrace(); |
2450 | 2447 |
} |
2451 | 2448 |
|
src/edu/ucsb/nceas/metacat/DBSAXNode.java | ||
---|---|---|
124 | 124 |
writeDTDNodeToDB(DocumentImpl.SYSTEMID, systemId, docid); |
125 | 125 |
} |
126 | 126 |
} |
127 |
|
|
127 |
|
|
128 | 128 |
/** creates SQL code and inserts new node into DB connection */ |
129 | 129 |
public long writeChildNodeToDB(String nodetype, String nodename, |
130 | 130 |
String data, String docid) |
131 |
throws SAXException { |
|
132 |
String limitedData = null; |
|
133 |
int leftover = 0; |
|
134 |
if (data != null) { |
|
135 |
leftover = data.length(); |
|
136 |
} |
|
137 |
int offset = 0; |
|
138 |
boolean moredata = true; |
|
139 |
long endNodeId = -1; |
|
140 |
|
|
141 |
// This loop deals with the case where there are more characters |
|
142 |
// than can fit in a single database text field (limit is |
|
143 |
// MAXDATACHARS). If the text to be inserted exceeds MAXDATACHARS, |
|
144 |
// write a series of nodes that are MAXDATACHARS long, and then the |
|
145 |
// final node contains the remainder |
|
146 |
while (moredata) { |
|
147 |
if (leftover > DBSAXHandler.MAXDATACHARS) { |
|
148 |
limitedData = data.substring(offset, DBSAXHandler.MAXDATACHARS); |
|
149 |
leftover -= DBSAXHandler.MAXDATACHARS; |
|
150 |
offset += DBSAXHandler.MAXDATACHARS; |
|
151 |
} else { |
|
152 |
limitedData = data; |
|
153 |
moredata = false; |
|
154 |
} |
|
155 |
endNodeId = writeChildNodeToDBDataLimited(nodetype, nodename, |
|
156 |
limitedData, docid); |
|
157 |
} |
|
158 |
|
|
159 |
return endNodeId; |
|
160 |
} |
|
161 |
|
|
162 |
/** creates SQL code and inserts new node into DB connection */ |
|
163 |
public long writeChildNodeToDBDataLimited(String nodetype, String nodename, |
|
164 |
String data, String docid) |
|
131 | 165 |
throws SAXException |
132 | 166 |
{ |
133 | 167 |
long nid = -1; |
... | ... | |
144 | 178 |
|
145 | 179 |
// Increase DBConnection usage count |
146 | 180 |
connection.increaseUsageCount(1); |
147 |
logMetacat.info("INSERTING DOCNAME: " + nodename);
|
|
181 |
logMetacat.debug("DBSAXNode.writeChildNodeToDBDataLimited - inserting doc name: " + nodename);
|
|
148 | 182 |
} else { |
149 | 183 |
if(data != null && !data.trim().equals("") |
150 | 184 |
&& !data.trim().equals("NaN") && !data.trim().equalsIgnoreCase("Infinity")){ |
... | ... | |
184 | 218 |
pstmt.setString(3, null); |
185 | 219 |
} |
186 | 220 |
pstmt.setString(4, docid); |
187 |
if (nodetype == "DOCUMENT") { |
|
188 |
// moved it to separate method updateRootNodeID |
|
189 |
//pstmt.setLong(4, nid); |
|
190 |
} else { |
|
221 |
if (nodetype != "DOCUMENT") { |
|
191 | 222 |
if (nodetype == "ELEMENT") { |
192 | 223 |
pstmt.setLong(5, getRootNodeID()); |
193 | 224 |
pstmt.setLong(6, getParentID()); |
... | ... | |
201 | 232 |
} |
202 | 233 |
} |
203 | 234 |
// Do the insertion |
204 |
logMetacat.debug("SQL insert: " + pstmt.toString()); |
|
235 |
logMetacat.debug("DBSAXNode.writeChildNodeToDBDataLimited - SQL insert: " + pstmt.toString());
|
|
205 | 236 |
pstmt.execute(); |
206 | 237 |
pstmt.close(); |
207 | 238 |
|
208 | 239 |
// get the generated unique id afterward |
209 | 240 |
nid = DatabaseService.getDBAdapter().getUniqueID(connection.getConnections(), "xml_nodes"); |
210 |
//should incease connection usage!!!!!! |
|
241 |
//should increase connection usage!!!!!!
|
|
211 | 242 |
|
212 | 243 |
|
213 | 244 |
if (nodetype.equals("DOCUMENT")) { |
... | ... | |
225 | 256 |
|
226 | 257 |
} |
227 | 258 |
|
228 |
} catch (SQLException e) { |
|
229 |
logMetacat.error("Error in DBSaxNode.writeChildNodeToDB"); |
|
230 |
logMetacat.error("Error inserting node: (" + nodetype + ", " + |
|
231 |
nodename + ", " + |
|
232 |
data + ")" ); |
|
233 |
logMetacat.error(e.getMessage()); |
|
234 |
e.printStackTrace(System.err); |
|
235 |
throw new SAXException(e.getMessage()); |
|
259 |
} catch (SQLException sqle) { |
|
260 |
logMetacat.error("DBSAXNode.writeChildNodeToDBDataLimited - SQL error inserting node: " + |
|
261 |
"(" + nodetype + ", " + nodename + ", " + data + ") : " + sqle.getMessage()); |
|
262 |
sqle.printStackTrace(System.err); |
|
263 |
throw new SAXException(sqle.getMessage()); |
|
236 | 264 |
} |
237 | 265 |
return nid; |
238 | 266 |
} |
... | ... | |
297 | 325 |
{ |
298 | 326 |
|
299 | 327 |
PreparedStatement pstmt; |
300 |
logMetacat.info("Insert dtd into db: "+nodename +" "+data); |
|
328 |
logMetacat.info("DBSAXNode.writeDTDNodeToDB - Insert dtd into db: "+nodename +" "+data);
|
|
301 | 329 |
if(data != null && !data.trim().equals("")){ |
302 | 330 |
try{ |
303 | 331 |
double numberData = Double.parseDouble(data); |
src/edu/ucsb/nceas/metacat/util/DocumentUtil.java | ||
---|---|---|
65 | 65 |
try { |
66 | 66 |
separator = PropertyService.getProperty("document.accNumSeparator").charAt(0); |
67 | 67 |
} catch (PropertyNotFoundException pnfe) { |
68 |
logMetacat.error("Could not retrieve account number separator. " |
|
68 |
logMetacat.error("DocumentUtil() - Could not retrieve account number separator. "
|
|
69 | 69 |
+ "Separator set to '.' : " + pnfe.getMessage()); |
70 | 70 |
} |
71 | 71 |
} |
... | ... | |
82 | 82 |
int count = 0; //keep track how many & was found |
83 | 83 |
Vector list = new Vector();// keep index number for & |
84 | 84 |
if (url == null) { |
85 |
logMetacat.info("url is null and null will be returned");
|
|
85 |
logMetacat.debug("DocumentUtil.getDocIdWithRevFromOnlineURL - url is null and null will be returned");
|
|
86 | 86 |
return docid; |
87 | 87 |
} |
88 | 88 |
// the first element in list is 0 |
... | ... | |
95 | 95 |
// get substring beween two & |
96 | 96 |
String str = url.substring( |
97 | 97 |
((Integer) list.elementAt(count - 1)).intValue(), i); |
98 |
logMetacat.info("substring between two & is: " + str);
|
|
98 |
logMetacat.debug("DocumentUtil.getDocIdWithRevFromOnlineURL - substring between two & is: " + str);
|
|
99 | 99 |
//if the subString contains docid, we got it |
100 | 100 |
if (str.indexOf(DOCID) != -1) { |
101 | 101 |
//get index of '=" |
... | ... | |
110 | 110 |
// and |
111 | 111 |
// the end of string |
112 | 112 |
if (!find) { |
113 |
logMetacat.info("Checking the last substring");
|
|
113 |
logMetacat.debug("DocumentUtil.getDocIdWithRevFromOnlineURL - Checking the last substring");
|
|
114 | 114 |
String str = url.substring(((Integer) list.elementAt(count)) |
115 | 115 |
.intValue() + 1, url.length()); |
116 |
logMetacat.info("Last substring is: " + str);
|
|
116 |
logMetacat.debug("DocumentUtil.getDocIdWithRevFromOnlineURL - Last substring is: " + str);
|
|
117 | 117 |
if (str.indexOf(DOCID) != -1) { |
118 | 118 |
//get index of '=" |
119 | 119 |
int start = getIndexForGivenChar(str, '=') + 1; |
... | ... | |
122 | 122 |
find = true; |
123 | 123 |
}//if |
124 | 124 |
}//if |
125 |
logMetacat.info("The docid from online url is:" + docid);
|
|
125 |
logMetacat.debug("DocumentUtil.getDocIdWithRevFromOnlineURL - The docid from online url is:" + docid);
|
|
126 | 126 |
return docid.trim(); |
127 | 127 |
} |
128 | 128 |
|
... | ... | |
145 | 145 |
int end = identifier.length(); |
146 | 146 |
accessionNumber = identifier.substring(start, end); |
147 | 147 |
} |
148 |
logMetacat.warn("The accession number from url is " + |
|
148 |
logMetacat.warn("DocumentUtil.getAccessionNumberFromEcogridIdentifier - The accession number from url is " +
|
|
149 | 149 |
accessionNumber); |
150 | 150 |
return accessionNumber; |
151 | 151 |
} |
... | ... | |
155 | 155 |
int index = -1; |
156 | 156 |
// make sure str is not null |
157 | 157 |
if (str == null) { |
158 |
logMetacat.info(
|
|
158 |
logMetacat.debug("DocumentUtil.getIndexForGivenChar - " +
|
|
159 | 159 |
"The given str is null and -1 will be returned"); |
160 | 160 |
return index; |
161 | 161 |
} |
... | ... | |
167 | 167 |
break; |
168 | 168 |
}//if |
169 | 169 |
}//for |
170 |
logMetacat.info("the index for char " + character + " is: "
|
|
171 |
+ index);
|
|
170 |
logMetacat.info("DocumentUtil.getIndexForGivenChar - the index for char " +
|
|
171 |
character + " is: " + index);
|
|
172 | 172 |
return index; |
173 | 173 |
} |
174 | 174 |
|
... | ... | |
184 | 184 |
{ |
185 | 185 |
String docId = null; |
186 | 186 |
if (str == null) { |
187 |
logMetacat.info(
|
|
188 |
"The given str is null and null will be returned" |
|
187 |
logMetacat.debug(
|
|
188 |
"DocumentUtil.getDocIdFromString - The given str is null and null will be returned"
|
|
189 | 189 |
+ " in getDocIdfromString"); |
190 | 190 |
return docId; |
191 | 191 |
} //make sure docid is not null |
... | ... | |
305 | 305 |
if (accessionNumber == null) { return docid; } |
306 | 306 |
int indexOfLastSeperator = accessionNumber.lastIndexOf(separator); |
307 | 307 |
docid = accessionNumber.substring(0, indexOfLastSeperator); |
308 |
logMetacat.info("after parsing accessionnumber, docid is "
|
|
308 |
logMetacat.debug("DocumentUtil.getDocIdFromAccessionNumber - after parsing accession number, docid is "
|
|
309 | 309 |
+ docid); |
310 | 310 |
return docid; |
311 | 311 |
} |
... | ... | |
324 | 324 |
accessionNumber = accessionNumber.substring(0, indexOfLastSeperator); |
325 | 325 |
indexOfLastSeperator = accessionNumber.lastIndexOf(separator); |
326 | 326 |
docid = accessionNumber.substring(0, indexOfLastSeperator) + version; |
327 |
logMetacat.info("after parsing accessionnumber, docid is "
|
|
327 |
logMetacat.debug("DocumentUtil.getInlineDataIdWithoutRev - after parsing accessionnumber, docid is "
|
|
328 | 328 |
+ docid); |
329 | 329 |
|
330 | 330 |
return docid; |
... | ... | |
349 | 349 |
if (docid == null) { |
350 | 350 |
docid = getDocIdFromAccessionNumber(str); |
351 | 351 |
} |
352 |
logMetacat.info("The docid get from smart docid getor is "
|
|
352 |
logMetacat.debug("DocumentUtil.getSmartDocId - The docid get from smart docid getor is "
|
|
353 | 353 |
+ docid); |
354 | 354 |
return docid; |
355 | 355 |
} |
... | ... | |
369 | 369 |
rev = accessionNumber.substring(indexOfLastSeperator + 1, |
370 | 370 |
accessionNumber.length()); |
371 | 371 |
revNumber = Integer.parseInt(rev); |
372 |
logMetacat.info("after parsing accessionnumber, rev is "
|
|
372 |
logMetacat.debug("DocumentUtil.getRevisionFromAccessionNumber - after parsing accessionnumber, rev is "
|
|
373 | 373 |
+ revNumber); |
374 | 374 |
return revNumber; |
375 | 375 |
} |
... | ... | |
398 | 398 |
} |
399 | 399 |
} |
400 | 400 |
|
401 |
logMetacat.info("Docid without rev from inlinedata id: "
|
|
401 |
logMetacat.debug("DocumentUtil.getDocIdWithoutRevFromInlineDataID - Docid without rev from inlinedata id: "
|
|
402 | 402 |
+ docidWithoutRev); |
403 | 403 |
return docidWithoutRev; |
404 | 404 |
|
src/edu/ucsb/nceas/metacat/DBSAXHandler.java | ||
---|---|---|
115 | 115 |
|
116 | 116 |
// protected Stack textBufferStack = new Stack(); |
117 | 117 |
|
118 |
protected static final int MAXDATACHARS = 4000;
|
|
118 |
public static final int MAXDATACHARS = 4000;
|
|
119 | 119 |
|
120 | 120 |
//protected static final int MAXDATACHARS = 50; |
121 | 121 |
|
... | ... | |
223 | 223 |
/** SAX Handler that receives notification of beginning of the document */ |
224 | 224 |
public void startDocument() throws SAXException |
225 | 225 |
{ |
226 |
logMetacat.info("start Document");
|
|
226 |
logMetacat.debug("DBSaxHandler.startDocument - starting document");
|
|
227 | 227 |
|
228 | 228 |
// Create the document node representation as root |
229 | 229 |
rootNode = new DBSAXNode(connection, this.docid); |
... | ... | |
234 | 234 |
|
235 | 235 |
/** SAX Handler that receives notification of end of the document */ |
236 | 236 |
public void endDocument() throws SAXException { |
237 |
logMetacat.info("end Document");
|
|
237 |
logMetacat.debug("DBSaxHandler.endDocument - ending document");
|
|
238 | 238 |
// Starting new thread for writing XML Index. |
239 | 239 |
// It calls the run method of the thread. |
240 | 240 |
|
... | ... | |
253 | 253 |
} |
254 | 254 |
} |
255 | 255 |
} catch (Exception e) { |
256 |
logMetacat.error("Failed to write triples into relation table" |
|
256 |
logMetacat.error("DBSaxHandler.endDocument - Failed to write triples into relation table"
|
|
257 | 257 |
+ e.getMessage()); |
258 | 258 |
throw new SAXException("Failed to write triples into relation table " |
259 | 259 |
+ e.getMessage()); |
... | ... | |
274 | 274 |
public void startPrefixMapping(String prefix, String uri) |
275 | 275 |
throws SAXException |
276 | 276 |
{ |
277 |
logMetacat.info("NAMESPACE");
|
|
277 |
logMetacat.debug("DBSaxHandler.startPrefixMapping - Starting namespace");
|
|
278 | 278 |
|
279 | 279 |
namespaces.put(prefix, uri); |
280 | 280 |
} |
... | ... | |
286 | 286 |
// for element <eml:eml...> qname is "eml:eml", local name is "eml" |
287 | 287 |
// for element <acl....> both qname and local name is "eml" |
288 | 288 |
// uri is namespace |
289 |
logMetacat.info("Start ELEMENT(qName) " + qName);
|
|
290 |
logMetacat.info("Start ELEMENT(localName) " + localName);
|
|
291 |
logMetacat.info("Start ELEMENT(uri) " + uri);
|
|
289 |
logMetacat.debug("DBSaxHandler.startElement - Start ELEMENT(qName) " + qName);
|
|
290 |
logMetacat.debug("DBSaxHandler.startElement - Start ELEMENT(localName) " + localName);
|
|
291 |
logMetacat.debug("DBSaxHandler.startElement - Start ELEMENT(uri) " + uri);
|
|
292 | 292 |
|
293 | 293 |
DBSAXNode parentNode = null; |
294 | 294 |
DBSAXNode currentNode = null; |
... | ... | |
328 | 328 |
} else { |
329 | 329 |
doctype = docname; |
330 | 330 |
} |
331 |
logMetacat.info("DOCNAME-a: " + docname);
|
|
332 |
logMetacat.info("DOCTYPE-a: " + doctype);
|
|
331 |
logMetacat.debug("DBSaxHandler.startElement - DOCNAME-a: " + docname);
|
|
332 |
logMetacat.debug("DBSaxHandler.startElement - DOCTYPE-a: " + doctype);
|
|
333 | 333 |
} else if (doctype == null) { |
334 | 334 |
// because docname is not null and it is declared in dtd |
335 | 335 |
// so could not be in schema, no namespace |
336 | 336 |
doctype = docname; |
337 |
logMetacat.info("DOCTYPE-b: " + doctype);
|
|
337 |
logMetacat.debug("DBSaxHandler.startElement - DOCTYPE-b: " + doctype);
|
|
338 | 338 |
} |
339 | 339 |
|
340 | 340 |
rootNode.writeNodename(docname); |
... | ... | |
467 | 467 |
/** SAX Handler that is called for each XML text node */ |
468 | 468 |
public void characters(char[] cbuf, int start, int len) throws SAXException |
469 | 469 |
{ |
470 |
logMetacat.info("CHARACTERS");
|
|
470 |
logMetacat.debug("DBSaxHandler.characters - starting characters");
|
|
471 | 471 |
// buffer all text nodes for same element. This is for if text was split |
472 | 472 |
// into different nodes |
473 | 473 |
textBuffer.append(new String(cbuf, start, len)); |
... | ... | |
476 | 476 |
// if text buffer .size is greater than max, write it to db. |
477 | 477 |
// so we can save memory |
478 | 478 |
if (textBuffer.length() > MAXDATACHARS) { |
479 |
logMetacat.info("Write text into DB in charaters"
|
|
479 |
logMetacat.debug("DBSaxHandler.characters - Write text into DB in charaters"
|
|
480 | 480 |
+ " when text buffer size is greater than maxmum number"); |
481 | 481 |
DBSAXNode currentNode = (DBSAXNode) nodeStack.peek(); |
482 | 482 |
endNodeId = writeTextForDBSAXNode(endNodeId, textBuffer, |
... | ... | |
496 | 496 |
// When validation is turned "on", white spaces are reported here |
497 | 497 |
// When validation is turned "off" white spaces are not reported here, |
498 | 498 |
// but through characters() callback |
499 |
logMetacat.info("IGNORABLEWHITESPACE");
|
|
499 |
logMetacat.debug("DBSaxHandler.ignorableWhitespace - in ignorableWhitespace");
|
|
500 | 500 |
|
501 | 501 |
DBSAXNode currentNode = (DBSAXNode) nodeStack.peek(); |
502 |
String data = null; |
|
503 |
int leftover = len; |
|
504 |
int offset = start; |
|
505 |
boolean moredata = true; |
|
506 | 502 |
|
507 |
// This loop deals with the case where there are more characters |
|
508 |
// than can fit in a single database text field (limit is |
|
509 |
// MAXDATACHARS). If the text to be inserted exceeds MAXDATACHARS, |
|
510 |
// write a series of nodes that are MAXDATACHARS long, and then the |
|
511 |
// final node contains the remainder |
|
512 |
while (moredata) { |
|
513 |
if (leftover > MAXDATACHARS) { |
|
514 |
data = new String(cbuf, offset, MAXDATACHARS); |
|
515 |
leftover -= MAXDATACHARS; |
|
516 |
offset += MAXDATACHARS; |
|
517 |
} else { |
|
518 |
data = new String(cbuf, offset, leftover); |
|
519 |
moredata = false; |
|
520 |
} |
|
521 |
|
|
522 | 503 |
// Write the content of the node to the database |
523 |
endNodeId = currentNode.writeChildNodeToDB("TEXT", null, data,
|
|
504 |
endNodeId = currentNode.writeChildNodeToDB("TEXT", null, new String(cbuf, start, len),
|
|
524 | 505 |
docid); |
525 |
} |
|
526 | 506 |
} |
527 | 507 |
|
528 | 508 |
/** |
... | ... | |
532 | 512 |
public void processingInstruction(String target, String data) |
533 | 513 |
throws SAXException |
534 | 514 |
{ |
535 |
logMetacat.info("PI");
|
|
515 |
logMetacat.debug("DBSaxHandler.processingInstruction - in processing instructions");
|
|
536 | 516 |
DBSAXNode currentNode = (DBSAXNode) nodeStack.peek(); |
537 | 517 |
endNodeId = currentNode.writeChildNodeToDB("PI", target, data, docid); |
538 | 518 |
} |
... | ... | |
541 | 521 |
public void endElement(String uri, String localName, String qName) |
542 | 522 |
throws SAXException |
543 | 523 |
{ |
544 |
logMetacat.info("End ELEMENT " + qName);
|
|
524 |
logMetacat.debug("DBSaxHandler.endElement - End element " + qName);
|
|
545 | 525 |
|
546 | 526 |
// write buffered text nodes into db (so no splited) |
547 | 527 |
DBSAXNode currentNode = (DBSAXNode) nodeStack.peek(); |
... | ... | |
550 | 530 |
// into the buffer, write the buffer to data base. The reason we put |
551 | 531 |
// write database here is for xerces some time split text node |
552 | 532 |
if (hitTextNode) { |
553 |
logMetacat.info("Write text into DB in End Element");
|
|
533 |
logMetacat.debug("DBSaxHandler.endElement - Write text into DB in End Element");
|
|
554 | 534 |
endNodeId = writeTextForDBSAXNode(endNodeId, textBuffer, |
555 | 535 |
currentNode); |
556 | 536 |
|
... | ... | |
608 | 588 |
// we don't put the dtd node into node stack |
609 | 589 |
DBSAXNode dtdNode = new DBSAXNode(connection, name, publicId, systemId, |
610 | 590 |
currentNode, currentNode.getRootNodeID(), docid); |
611 |
logMetacat.info("Start DTD");
|
|
612 |
logMetacat.info("Setting processingDTD to true");
|
|
613 |
logMetacat.info("DOCNAME: " + docname);
|
|
614 |
logMetacat.info("DOCTYPE: " + doctype);
|
|
615 |
logMetacat.info(" SYSID: " + systemid);
|
|
591 |
logMetacat.debug("DBSaxHandler.startDTD - Start DTD");
|
|
592 |
logMetacat.debug("DBSaxHandler.startDTD - Setting processingDTD to true");
|
|
593 |
logMetacat.debug("DBSaxHandler.startDTD - DOCNAME: " + docname);
|
|
594 |
logMetacat.debug("DBSaxHandler.startDTD - DOCTYPE: " + doctype);
|
|
595 |
logMetacat.debug("DBSaxHandler.startDTD - SYSID: " + systemid);
|
|
616 | 596 |
} |
617 | 597 |
|
618 | 598 |
/** |
... | ... | |
622 | 602 |
{ |
623 | 603 |
|
624 | 604 |
processingDTD = false; |
625 |
logMetacat.info("Setting processingDTD to false");
|
|
626 |
logMetacat.info("end DTD");
|
|
605 |
logMetacat.debug("DBSaxHandler.endDTD - Setting processingDTD to false");
|
|
606 |
logMetacat.debug("DBSaxHandler.endDTD - end DTD");
|
|
627 | 607 |
} |
628 | 608 |
|
629 | 609 |
/** |
... | ... | |
631 | 611 |
*/ |
632 | 612 |
public void comment(char[] ch, int start, int length) throws SAXException |
633 | 613 |
{ |
634 |
logMetacat.info("COMMENT");
|
|
614 |
logMetacat.debug("DBSaxHandler.comment - starting comment");
|
|
635 | 615 |
if (!processingDTD) { |
636 | 616 |
DBSAXNode currentNode = (DBSAXNode) nodeStack.peek(); |
637 | 617 |
endNodeId = currentNode.writeChildNodeToDB("COMMENT", null, |
... | ... | |
644 | 624 |
*/ |
645 | 625 |
public void startCDATA() throws SAXException |
646 | 626 |
{ |
647 |
logMetacat.info("start CDATA");
|
|
627 |
logMetacat.debug("DBSaxHandler.startCDATA - starting CDATA");
|
|
648 | 628 |
} |
649 | 629 |
|
650 | 630 |
/** |
... | ... | |
652 | 632 |
*/ |
653 | 633 |
public void endCDATA() throws SAXException |
654 | 634 |
{ |
655 |
logMetacat.info("end CDATA");
|
|
635 |
logMetacat.debug("DBSaxHandler.endCDATA - end CDATA");
|
|
656 | 636 |
} |
657 | 637 |
|
658 | 638 |
/** |
... | ... | |
660 | 640 |
*/ |
661 | 641 |
public void startEntity(String name) throws SAXException |
662 | 642 |
{ |
663 |
logMetacat.info("start ENTITY: " + name);
|
|
643 |
logMetacat.debug("DBSaxHandler.startEntity - starting entity: " + name);
|
|
664 | 644 |
//System.out.println("start ENTITY: " + name); |
665 | 645 |
if (name.equals("[dtd]")) { |
666 | 646 |
processingDTD = true; |
... | ... | |
672 | 652 |
*/ |
673 | 653 |
public void endEntity(String name) throws SAXException |
674 | 654 |
{ |
675 |
logMetacat.info("end ENTITY: " + name);
|
|
655 |
logMetacat.debug("DBSaxHandler.endEntity - ending entity: " + name);
|
|
676 | 656 |
//System.out.println("end ENTITY: " + name); |
677 | 657 |
if (name.equals("[dtd]")) { |
678 | 658 |
processingDTD = false; |
... | ... | |
686 | 666 |
throws org.xml.sax.SAXException |
687 | 667 |
{ |
688 | 668 |
//System.out.println("ELEMENTDECL: " + name + " " + model); |
689 |
logMetacat.info("ELEMENTDECL: " + name + " " + model);
|
|
669 |
logMetacat.debug("DBSaxHandler.elementDecl - element declaration: " + name + " " + model);
|
|
690 | 670 |
} |
691 | 671 |
|
692 | 672 |
/** |
... | ... | |
699 | 679 |
//System.out.println("ATTRIBUTEDECL: " + eName + " " |
700 | 680 |
// + aName + " " + type + " " + valueDefault + " " |
701 | 681 |
// + value); |
702 |
logMetacat.info("ATTRIBUTEDECL: " + eName + " " + aName + " "
|
|
682 |
logMetacat.debug("DBSaxHandler.attributeDecl - attribute declaration: " + eName + " " + aName + " "
|
|
703 | 683 |
+ type + " " + valueDefault + " " + value); |
704 | 684 |
} |
705 | 685 |
|
... | ... | |
710 | 690 |
throws org.xml.sax.SAXException |
711 | 691 |
{ |
712 | 692 |
//System.out.println("INTERNENTITYDECL: " + name + " " + value); |
713 |
logMetacat.info("INTERNENTITYDECL: " + name + " " + value);
|
|
693 |
logMetacat.debug("DBSaxHandler.internalEntityDecl - internal entity declaration: " + name + " " + value);
|
|
714 | 694 |
} |
715 | 695 |
|
716 | 696 |
/** |
... | ... | |
721 | 701 |
{ |
722 | 702 |
//System.out.println("EXTERNENTITYDECL: " + name + " " + publicId |
723 | 703 |
// + " " + systemId); |
724 |
logMetacat.info("EXTERNENTITYDECL: " + name + " " + publicId
|
|
704 |
logMetacat.debug("DBSaxHandler.externalEntityDecl - external entity declaration: " + name + " " + publicId
|
|
725 | 705 |
+ " " + systemId); |
726 | 706 |
// it processes other external entity, not the DTD; |
727 | 707 |
// it doesn't signal for the DTD here |
... | ... | |
737 | 717 |
*/ |
738 | 718 |
public void fatalError(SAXParseException exception) throws SAXException |
739 | 719 |
{ |
740 |
logMetacat.fatal("FATALERROR: " + exception.getMessage());
|
|
720 |
logMetacat.fatal("DBSaxHandler.fatalError - " + exception.getMessage());
|
|
741 | 721 |
throw (new SAXException("Fatal processing error.", exception)); |
742 | 722 |
} |
743 | 723 |
|
... | ... | |
746 | 726 |
*/ |
747 | 727 |
public void error(SAXParseException exception) throws SAXException |
748 | 728 |
{ |
749 |
logMetacat.error("ERROR: " + exception.getMessage());
|
|
729 |
logMetacat.error("DBSaxHandler.error - " + exception.getMessage());
|
|
750 | 730 |
throw (new SAXException("Error in processing EML.", exception)); |
751 | 731 |
} |
752 | 732 |
|
... | ... | |
755 | 735 |
*/ |
756 | 736 |
public void warning(SAXParseException exception) throws SAXException |
757 | 737 |
{ |
758 |
logMetacat.warn("WARNING: " + exception.getMessage());
|
|
738 |
logMetacat.warn("DBSaxHandler.warning - " + exception.getMessage());
|
|
759 | 739 |
throw (new SAXException("Warning.", exception)); |
760 | 740 |
} |
761 | 741 |
|
... | ... | |
806 | 786 |
// Check parameter |
807 | 787 |
if (strBuffer == null || node == null) { return nodeId; } |
808 | 788 |
boolean moredata = true; |
809 |
String data = null; |
|
810 | 789 |
|
811 | 790 |
String normalizedData = strBuffer.toString(); |
812 |
logMetacat.debug("Before normalize in write process === "+normalizedData);
|
|
791 |
logMetacat.debug("DBSAXHandler.writeTextForDBSAXNode - Before normalize in write process: " + normalizedData);
|
|
813 | 792 |
String afterNormalize = MetacatUtil.normalize(normalizedData); |
814 |
logMetacat.debug("After normalize in write process === "+afterNormalize);
|
|
793 |
logMetacat.debug("DBSAXHandler.writeTextForDBSAXNode - After normalize in write process: " + afterNormalize);
|
|
815 | 794 |
strBuffer = new StringBuffer(afterNormalize);; |
816 | 795 |
|
817 | 796 |
int bufferSize = strBuffer.length(); |
... | ... | |
819 | 798 |
|
820 | 799 |
// if there are some cotent in buffer, write it |
821 | 800 |
if (bufferSize > 0) { |
822 |
logMetacat.info("Write text into DB"); |
|
823 |
// This loop deals with the case where there are more characters |
|
824 |
// than can fit in a single database text field (limit is |
|
825 |
// MAXDATACHARS). If the text to be inserted exceeds MAXDATACHARS, |
|
826 |
// write a series of nodes that are MAXDATACHARS long, and then the |
|
827 |
// final node contains the remainder |
|
828 |
while (moredata) { |
|
829 |
bufferSize = strBuffer.length(); |
|
830 |
if (bufferSize > MAXDATACHARS) { |
|
831 |
data = strBuffer.substring(start, MAXDATACHARS); |
|
832 |
// cut the stringbuffer part that already written into db |
|
833 |
strBuffer = strBuffer.delete(start, MAXDATACHARS); |
|
834 |
} else { |
|
835 |
data = strBuffer.substring(start, bufferSize); |
|
836 |
moredata = false; |
|
837 |
} |
|
801 |
logMetacat.debug("DBSAXHandler.writeTextForDBSAXNode - Write text into DB"); |
|
838 | 802 |
|
839 | 803 |
// Write the content of the node to the database |
840 |
nodeId = node.writeChildNodeToDB("TEXT", null, data, docid); |
|
841 |
}//while |
|
804 |
nodeId = node.writeChildNodeToDB("TEXT", null, new String(strBuffer), docid); |
|
842 | 805 |
}//if |
843 | 806 |
return nodeId; |
844 | 807 |
} |
src/edu/ucsb/nceas/metacat/Eml200SAXHandler.java | ||
---|---|---|
28 | 28 |
package edu.ucsb.nceas.metacat; |
29 | 29 |
|
30 | 30 |
import java.io.BufferedReader; |
31 |
import java.io.BufferedWriter; |
|
32 | 31 |
import java.io.File; |
33 | 32 |
import java.io.FileReader; |
34 | 33 |
import java.io.FileWriter; |
... | ... | |
387 | 386 |
// Bind the values to the query |
388 | 387 |
pstmt.setString(1, docid); |
389 | 388 |
pstmt.setString(2, TOPLEVEL); |
389 |
logMetacat.debug("Eml200SAXHandler.getTopAccessSubTreeFromDB - executing SQL: " + pstmt.toString()); |
|
390 | 390 |
pstmt.execute(); |
391 | 391 |
|
392 | 392 |
// Get result set |
... | ... | |
573 | 573 |
// for element <eml:eml...> qname is "eml:eml", local name is "eml" |
574 | 574 |
// for element <acl....> both qname and local name is "eml" |
575 | 575 |
// uri is namesapce |
576 |
logMetacat.info("Start ELEMENT(qName) " + qName);
|
|
577 |
logMetacat.info("Start ELEMENT(localName) " + localName);
|
|
578 |
logMetacat.info("Start ELEMENT(uri) " + uri);
|
|
576 |
logMetacat.debug("Start ELEMENT(qName) " + qName);
|
|
577 |
logMetacat.debug("Start ELEMENT(localName) " + localName);
|
|
578 |
logMetacat.debug("Start ELEMENT(uri) " + uri);
|
|
579 | 579 |
|
580 | 580 |
DBSAXNode parentNode = null; |
581 | 581 |
DBSAXNode currentNode = null; |
... | ... | |
744 | 744 |
//the revision |
745 | 745 |
if (!super.getIsRevisionDoc()) |
746 | 746 |
{ |
747 |
|
|
747 |
logMetacat.debug("EML200SaxHandler.startElement - creating new DocumentImple for " + docid); |
|
748 | 748 |
currentDocument = new DocumentImpl(connection, rootNode |
749 | 749 |
.getNodeID(), docname, doctype, docid, revision, |
750 | 750 |
action, user, this.pub, catalogid, this.serverCode, |
... | ... | |
753 | 753 |
|
754 | 754 |
|
755 | 755 |
} catch (Exception ane) { |
756 |
throw (new SAXException( |
|
757 |
"Error in EMLSaxHandler.startElement " + action, |
|
758 |
ane)); |
|
756 |
throw (new SAXException("EML200SaxHandler.startElement - error with action " + |
|
757 |
action + " : " + ane.getMessage())); |
|
759 | 758 |
} |
760 | 759 |
|
761 | 760 |
} |
... | ... | |
1619 | 1618 |
logMetacat.info("IGNORABLEWHITESPACE"); |
1620 | 1619 |
if (!handleInlineData) { |
1621 | 1620 |
DBSAXNode currentNode = (DBSAXNode) nodeStack.peek(); |
1622 |
String data = null; |
|
1623 |
int leftover = len; |
|
1624 |
int offset = start; |
|
1625 |
boolean moredata = true; |
|
1621 |
String data = new String(cbuf, start, len); |
|
1626 | 1622 |
|
1627 |
// This loop deals with the case where there are more characters |
|
1628 |
// than can fit in a single database text field (limit is |
|
1629 |
// MAXDATACHARS). If the text to be inserted exceeds MAXDATACHARS, |
|
1630 |
// write a series of nodes that are MAXDATACHARS long, and then the |
|
1631 |
// final node contains the remainder |
|
1632 |
while (moredata) { |
|
1633 |
if (leftover > MAXDATACHARS) { |
|
1634 |
data = new String(cbuf, offset, MAXDATACHARS); |
|
1635 |
leftover -= MAXDATACHARS; |
|
1636 |
offset += MAXDATACHARS; |
|
1637 |
} else { |
|
1638 |
data = new String(cbuf, offset, leftover); |
|
1639 |
moredata = false; |
|
1640 |
} |
|
1641 |
|
|
1642 |
//compare whitespace if need |
|
1643 |
/*if (startCriticalSubTree) { |
|
1644 |
compareWhiteSpace(currentUnChangedableSubtreeNodeStack, |
|
1645 |
data, PERMISSIONERROR); |
|
1646 |
}//if*/ |
|
1647 |
|
|
1648 | 1623 |
//compare whitespace in access top module |
1649 | 1624 |
if (processTopLeverAccess && needCheckingAccessModule) { |
1650 | 1625 |
/*compareWhiteSpace(currentUnchangableAccessModuleNodeStack, |
... | ... | |
1661 | 1636 |
} |
1662 | 1637 |
endNodeId = currentNode.writeChildNodeToDB("TEXT", null, data, |
1663 | 1638 |
docid); |
1664 |
} |
|
1665 | 1639 |
} else { |
1666 | 1640 |
//This is inline data write to file directly |
1667 | 1641 |
StringBuffer inlineWhiteSpace = new StringBuffer(new String(cbuf, |
... | ... | |
2327 | 2301 |
logMetacat.info("Start node id is: " + startNodeId); |
2328 | 2302 |
pstmt.setLong(6, endNodeId); |
2329 | 2303 |
logMetacat.info("End node id is: " + endNodeId); |
2330 |
logMetacat.debug("running sql: " + pstmt.toString());
|
|
2304 |
logMetacat.debug("Eml200SAXHandler.writeAccessSubTreeIntoDB - executing SQL: " + pstmt.toString());
|
|
2331 | 2305 |
pstmt.execute(); |
2332 | 2306 |
pstmt.close(); |
2333 | 2307 |
}//try |
... | ... | |
2589 | 2563 |
//bind variable |
2590 | 2564 |
pStmt.setString(1, docid); |
2591 | 2565 |
//execute query |
2566 |
logMetacat.debug("Eml200SAXHandler.deleteRelations - executing SQL: " + pStmt.toString()); |
|
2592 | 2567 |
pStmt.execute(); |
2593 | 2568 |
pStmt.close(); |
2594 | 2569 |
}//try |
... | ... | |
2625 | 2600 |
pStmt.setString(4, RELATION); |
2626 | 2601 |
pStmt.setString(5, dataId); |
2627 | 2602 |
//execute query |
2603 |
logMetacat.debug("Eml200SAXHandler.writeOnlineDataFileIdIntoRelationTable - executing SQL: " + pStmt.toString()); |
|
2628 | 2604 |
pStmt.execute(); |
2629 | 2605 |
pStmt.close(); |
2630 | 2606 |
}//try |
src/edu/ucsb/nceas/metacat/Eml210SAXHandler.java | ||
---|---|---|
431 | 431 |
} |
432 | 432 |
|
433 | 433 |
if (revList.size() > 0) { |
434 |
throw (new SAXException("Doc ID " + docid + " was deleted and cannot be updated.")); |
|
434 |
throw (new SAXException("EML210SaxHandler.startElement - Doc ID " + docid + " was deleted and cannot be updated."));
|
|
435 | 435 |
} else { |
436 |
throw (new SAXException("Doc ID " + docid + " was not found and cannot be updated.")); |
|
436 |
throw (new SAXException("EML210SaxHandler.startElement - Doc ID " + docid + " was not found and cannot be updated."));
|
|
437 | 437 |
} |
438 | 438 |
} catch (Exception e) { |
439 |
throw (new SAXException("Error in EMLSaxHandler.startElement "
|
|
440 |
+ action, e));
|
|
439 |
throw (new SAXException("EML210SaxHandler.startElement - error with action " +
|
|
440 |
action + " : " + e.getMessage()));
|
|
441 | 441 |
} |
442 | 442 |
} |
443 | 443 |
|
... | ... | |
1139 | 1139 |
logMetacat.debug("IGNORABLEWHITESPACE"); |
1140 | 1140 |
if (!handleInlineData) { |
1141 | 1141 |
DBSAXNode currentNode = (DBSAXNode) nodeStack.peek(); |
1142 |
String data = null; |
|
1143 |
int leftover = len; |
|
1144 |
int offset = start; |
|
1145 |
boolean moredata = true; |
|
1146 |
|
|
1147 |
// This loop deals with the case where there are more characters |
|
1148 |
// than can fit in a single database text field (limit is |
|
1149 |
// MAXDATACHARS). If the text to be inserted exceeds MAXDATACHARS, |
|
1150 |
// write a series of nodes that are MAXDATACHARS long, and then the |
|
1151 |
// final node contains the remainder |
|
1152 |
while (moredata) { |
|
1153 |
if (leftover > MAXDATACHARS) { |
|
1154 |
data = new String(cbuf, offset, MAXDATACHARS); |
|
1155 |
leftover -= MAXDATACHARS; |
|
1156 |
offset += MAXDATACHARS; |
|
1157 |
} else { |
|
1158 |
data = new String(cbuf, offset, leftover); |
|
1159 |
moredata = false; |
|
1160 |
} |
|
1161 |
|
|
1142 |
String data = new String(cbuf, start, len); |
|
1162 | 1143 |
// compare whitespace in access top module |
1163 | 1144 |
if (processTopLevelAccess && needToCheckAccessModule) { |
1164 | 1145 |
compareWhiteSpace(currentUnchangeableAccessModuleNodeStack, data, |
... | ... | |
1174 | 1155 |
|
1175 | 1156 |
} |
1176 | 1157 |
endNodeId = currentNode.writeChildNodeToDB("TEXT", null, data, docid); |
1177 |
} |
|
1178 | 1158 |
} else { |
1179 | 1159 |
// This is inline data write to file directly |
1180 | 1160 |
StringBuffer inlineWhiteSpace = new StringBuffer(new String(cbuf, start, len)); |
Also available in: Unified diff
Move the chunking of large test element data to centralized location in DBSAXNode.writeChildNodeToDB(). Beff up logging