|
Lines 312-360
Link Here
|
| 312 |
for (int i = 0; i < list.getLength(); i++) { |
312 |
for (int i = 0; i < list.getLength(); i++) { |
| 313 |
Node child = list.item(i); |
313 |
Node child = list.item(i); |
| 314 |
try { |
314 |
try { |
| 315 |
boolean wasRead = false; |
|
|
| 316 |
if (child.getNodeName().endsWith(AbstractTaskListFactory.KEY_QUERY)) { |
315 |
if (child.getNodeName().endsWith(AbstractTaskListFactory.KEY_QUERY)) { |
| 317 |
for (AbstractTaskListFactory externalizer : externalizers) { |
316 |
readQuery(taskList, child); |
| 318 |
Set<String> queryTagNames = externalizer.getQueryElementNames(); |
|
|
| 319 |
if (queryTagNames != null && queryTagNames.contains(child.getNodeName())) { |
| 320 |
Element childElement = (Element) child; |
| 321 |
// TODO: move this stuff into externalizer |
| 322 |
String repositoryUrl = childElement.getAttribute(DelegatingTaskExternalizer.KEY_REPOSITORY_URL); |
| 323 |
String queryString = childElement.getAttribute(AbstractTaskListFactory.KEY_QUERY_STRING); |
| 324 |
if (queryString.length() == 0) { // fallback for legacy |
| 325 |
queryString = childElement.getAttribute(AbstractTaskListFactory.KEY_QUERY); |
| 326 |
} |
| 327 |
String label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_NAME); |
| 328 |
if (label.length() == 0) { // fallback for legacy |
| 329 |
label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_LABEL); |
| 330 |
} |
| 331 |
|
| 332 |
AbstractRepositoryQuery query = externalizer.createQuery(repositoryUrl, |
| 333 |
queryString, label, childElement); |
| 334 |
if (query != null) { |
| 335 |
wasRead = true; |
| 336 |
if (childElement.getAttribute(DelegatingTaskExternalizer.KEY_LAST_REFRESH) != null |
| 337 |
&& !childElement.getAttribute( |
| 338 |
DelegatingTaskExternalizer.KEY_LAST_REFRESH).equals("")) { |
| 339 |
query.setLastSynchronizedStamp(childElement.getAttribute(DelegatingTaskExternalizer.KEY_LAST_REFRESH)); |
| 340 |
} |
| 341 |
taskList.internalAddQuery(query); |
| 342 |
} |
| 343 |
NodeList queryChildren = child.getChildNodes(); |
| 344 |
for (int ii = 0; ii < queryChildren.getLength(); ii++) { |
| 345 |
Node queryNode = queryChildren.item(ii); |
| 346 |
try { |
| 347 |
delagatingExternalizer.readQueryHit((Element) queryNode, taskList, query); |
| 348 |
} catch (TaskExternalizationException e) { |
| 349 |
hasCaughtException = true; |
| 350 |
} |
| 351 |
} |
| 352 |
break; |
| 353 |
} |
| 354 |
} |
| 355 |
if (!wasRead) { |
| 356 |
orphanedQueryNodes.add(child); |
| 357 |
} |
| 358 |
} |
317 |
} |
| 359 |
} catch (Exception e) { |
318 |
} catch (Exception e) { |
| 360 |
handleException(inFile, child, e); |
319 |
handleException(inFile, child, e); |
|
Lines 379-384
Link Here
|
| 379 |
} |
338 |
} |
| 380 |
} |
339 |
} |
| 381 |
|
340 |
|
|
|
341 |
private void readQuery(TaskList taskList, Node child) { |
| 342 |
boolean wasRead = false; |
| 343 |
for (AbstractTaskListFactory externalizer : externalizers) { |
| 344 |
Set<String> queryTagNames = externalizer.getQueryElementNames(); |
| 345 |
if (queryTagNames != null && queryTagNames.contains(child.getNodeName())) { |
| 346 |
Element childElement = (Element) child; |
| 347 |
// TODO: move this stuff into externalizer |
| 348 |
String repositoryUrl = childElement.getAttribute(DelegatingTaskExternalizer.KEY_REPOSITORY_URL); |
| 349 |
String queryString = childElement.getAttribute(AbstractTaskListFactory.KEY_QUERY_STRING); |
| 350 |
if (queryString.length() == 0) { // fallback for legacy |
| 351 |
queryString = childElement.getAttribute(AbstractTaskListFactory.KEY_QUERY); |
| 352 |
} |
| 353 |
String label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_NAME); |
| 354 |
if (label.length() == 0) { // fallback for legacy |
| 355 |
label = childElement.getAttribute(DelegatingTaskExternalizer.KEY_LABEL); |
| 356 |
} |
| 357 |
|
| 358 |
AbstractRepositoryQuery query = externalizer.createQuery(repositoryUrl, |
| 359 |
queryString, label, childElement); |
| 360 |
if (query != null) { |
| 361 |
wasRead = true; |
| 362 |
if (childElement.getAttribute(DelegatingTaskExternalizer.KEY_LAST_REFRESH) != null |
| 363 |
&& !childElement.getAttribute( |
| 364 |
DelegatingTaskExternalizer.KEY_LAST_REFRESH).equals("")) { |
| 365 |
query.setLastSynchronizedStamp(childElement.getAttribute(DelegatingTaskExternalizer.KEY_LAST_REFRESH)); |
| 366 |
} |
| 367 |
taskList.internalAddQuery(query); |
| 368 |
} |
| 369 |
NodeList queryChildren = child.getChildNodes(); |
| 370 |
for (int ii = 0; ii < queryChildren.getLength(); ii++) { |
| 371 |
Node queryNode = queryChildren.item(ii); |
| 372 |
try { |
| 373 |
delagatingExternalizer.readQueryHit((Element) queryNode, taskList, query); |
| 374 |
} catch (TaskExternalizationException e) { |
| 375 |
hasCaughtException = true; |
| 376 |
} |
| 377 |
} |
| 378 |
break; |
| 379 |
} |
| 380 |
} |
| 381 |
if (!wasRead) { |
| 382 |
orphanedQueryNodes.add(child); |
| 383 |
} |
| 384 |
} |
| 385 |
|
| 382 |
/** |
386 |
/** |
| 383 |
* Opens the specified XML file and parses it into a DOM Document. |
387 |
* Opens the specified XML file and parses it into a DOM Document. |
| 384 |
* |
388 |
* |
|
Lines 407-413
Link Here
|
| 407 |
// Parse the content of the given file as an XML document |
411 |
// Parse the content of the given file as an XML document |
| 408 |
// and return a new DOM Document object. Also throws IOException |
412 |
// and return a new DOM Document object. Also throws IOException |
| 409 |
InputStream inputStream = null; |
413 |
InputStream inputStream = null; |
| 410 |
if (inputFile.getName().endsWith(ITasksUiConstants.DEFAULT_TASK_LIST_FILE)) { |
414 |
if (inputFile.getName().endsWith(ITasksUiConstants.FILE_EXTENSION)) { |
| 411 |
// is zipped context |
415 |
// is zipped context |
| 412 |
inputStream = new ZipInputStream(new FileInputStream(inputFile)); |
416 |
inputStream = new ZipInputStream(new FileInputStream(inputFile)); |
| 413 |
((ZipInputStream) inputStream).getNextEntry(); |
417 |
((ZipInputStream) inputStream).getNextEntry(); |
|
Lines 475-478
Link Here
|
| 475 |
public List<AbstractTaskListFactory> getExternalizers() { |
479 |
public List<AbstractTaskListFactory> getExternalizers() { |
| 476 |
return externalizers; |
480 |
return externalizers; |
| 477 |
} |
481 |
} |
|
|
482 |
|
| 483 |
public void writeQuery(AbstractRepositoryQuery query, File outFile) { |
| 484 |
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
| 485 |
DocumentBuilder db; |
| 486 |
Document doc = null; |
| 487 |
|
| 488 |
try { |
| 489 |
db = dbf.newDocumentBuilder(); |
| 490 |
doc = db.newDocument(); |
| 491 |
} catch (ParserConfigurationException e) { |
| 492 |
StatusHandler.log(e, "could not create document"); |
| 493 |
return; |
| 494 |
} |
| 495 |
|
| 496 |
Element root = doc.createElement(ELEMENT_TASK_LIST); |
| 497 |
root.setAttribute(ATTRIBUTE_VERSION, VALUE_VERSION); |
| 498 |
|
| 499 |
try { |
| 500 |
delagatingExternalizer.createQueryElement(query, doc, root); |
| 501 |
} catch (Throwable t) { |
| 502 |
StatusHandler.fail(t, "Did not externalize: " + query.getSummary(), true); |
| 503 |
} |
| 504 |
|
| 505 |
doc.appendChild(root); |
| 506 |
writeDOMtoFile(doc, outFile); |
| 507 |
return; |
| 508 |
} |
| 509 |
|
| 510 |
public void readQueries(TaskList taskList, File inFile) { |
| 511 |
try { |
| 512 |
if (!inFile.exists()) |
| 513 |
return; |
| 514 |
Document doc = openAsDOM(inFile); |
| 515 |
if (doc == null) { |
| 516 |
handleException(inFile, null, new TaskExternalizationException("TaskList was not well formed XML")); |
| 517 |
return; |
| 518 |
} |
| 519 |
Element root = doc.getDocumentElement(); |
| 520 |
readVersion = root.getAttribute(ATTRIBUTE_VERSION); |
| 521 |
|
| 522 |
if (!readVersion.equals(VALUE_VERSION_1_0_0)) { |
| 523 |
NodeList list = root.getChildNodes(); |
| 524 |
|
| 525 |
// read queries |
| 526 |
for (int i = 0; i < list.getLength(); i++) { |
| 527 |
Node child = list.item(i); |
| 528 |
try { |
| 529 |
if (child.getNodeName().endsWith(AbstractTaskListFactory.KEY_QUERY)) { |
| 530 |
readQuery(taskList, child); |
| 531 |
} |
| 532 |
} catch (Exception e) { |
| 533 |
handleException(inFile, child, e); |
| 534 |
} |
| 535 |
} |
| 536 |
} else { |
| 537 |
StatusHandler.log("version: " + readVersion + " not supported", this); |
| 538 |
} |
| 539 |
} catch (Exception e) { |
| 540 |
handleException(inFile, null, e); |
| 541 |
} |
| 542 |
|
| 543 |
if (!hasCaughtException) { |
| 544 |
// save new task list only if there were no exception! |
| 545 |
writeTaskList(taskList, inFile); |
| 546 |
} |
| 547 |
} |
| 478 |
} |
548 |
} |