三、记录处理XML数据的变化
我们可以利用在SDO中定义的ChangeSummary机制来跟踪订购单的变化。为了实现我们的第二个目的,我们先来编辑一个这个XML的schema文件po_orginal.xsd。代码如下:
public static void printChangeSummary(ChangeSummary chngSum) { if (chngSum == null) { System.out.println("ChangeSummary is not in existence!"); return; } for (Iterator it = chngSum.getChangedDataObjects().iterator(); it.hasNext();) { DataObject changedObject = (DataObject) it.next(); System.out.println(); if (chngSum.isCreated(changedObject)) {//is the changed object newly created System.out.println("Created: " + changedObject); if (changedObject.getContainer()!=null){ System.out.println("\t--- to be contained in : " + changedObject.getContainer().getType().getName() + " ---"); }else{ System.out.println("\t--- created object has no container --- "); } printAnnotatedDataObject("newly created",changedObject, 2); } else if (chngSum.isDeleted(changedObject)) { System.out.println("Deleted: " + changedObject); if (chngSum.getOldContainer(changedObject) != null){ System.out.println("\t--- originally contained in : " + chngSum.getOldContainer(changedObject).getType().getName() + " ---"); }else{ System.out.println("\t--- deleted object has no container ---"); } // a potential bug in Tuscany SDO, this shows nothing in ProcessPO.java printAnnotatedDataObject("deleted",changedObject, 2); // drill down to deleted property System.out.println("\t--- deleted property information --- "); // a potential bug in Tuscany SDO, this section shows nothing in ReviewPO.java for (Iterator settingIt = chngSum.getOldValues(changedObject).iterator(); settingIt.hasNext();) { printDeletedProperty((ChangeSummary.Setting) settingIt.next()); } System.out.println("\t--- deleted property information --- "); } else if (chngSum.isModified(changedObject)) { System.out.println("Updated: " + changedObject); // print out the updated object printAnnotatedDataObject("after update", changedObject, 2); // drill down to changed property System.out.println("\t--- property update information --- "); for (Iterator settingIt = chngSum.getOldValues(changedObject).iterator(); settingIt.hasNext();) { ChangeSummary.Setting changeSetting = (ChangeSummary.Setting) settingIt.next(); printUpdatedProperty(changeSetting, changedObject,chngSum); } System.out.println("\t--- property update information --- "); } else System.out.println("Should never come here!"); } }
| 第1页: 处理XML数据的三个阶段 | 第2页: 使用SDO建立和保存XML |
| 第3页: 记录处理XML数据的变化 | 第4页: 通过一个不同的实体浏览数据的变化 |