Parsing Troux KMV XML File in Java
This is an example code to parse a KMV file used by Troux. You can use this example to also parse a regular XML file. You will need to download the DocTypeChanger.jar file for this example.
try {
//deleteData(); --Component and relationship comparison results are not removed from the results table
List<String> excludeItems=loadExcludedItems(); //nodes named in the exclude table are not to be compared to the Troux respository
File file = new File(this.PATH);
FileInputStream fileSt=new FileInputStream(file);
//Troux Architect file is badly formed from an XML point of view; use DoctypeChanger to make is accessible
DoctypeChangerStream changer = new DoctypeChangerStream(fileSt);
changer.setGenerator(
new DoctypeGenerator() {
public Doctype generate(Doctype old) {
return null;
}
}
);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(changer);
doc.getDocumentElement().normalize();
NodeList nodeLst = doc.getElementsByTagName("object");
//nodeLst contains all the Troux Architect Model components for comparison with the repository
//process each, and then process relationships
int length=nodeLst.getLength(); //# of Troux components to process
for (int s = 0; s <length; s ) {
Node fstNode = nodeLst.item(s);
Node valueSet=fstNode.getFirstChild().getNextSibling();
NamedNodeMap valueSetMap=valueSet.getAttributes();
Node linktitle=valueSetMap.getNamedItem("xlink:title");
if(doesContain(excludeItems,linktitle.getNodeValue()))
{
//item is excluded and nothing happens to it
}
else
{
NamedNodeMap nodeMap=fstNode.getAttributes();
Node id=nodeMap.getNamedItem("id");
String metaModelComponentName=""; //will be populated from the database
String metaModelComponentDescription="";//will be populated from the database
//CHECKING IF GUID IS IN COMPONENTS (look for the UUID in the database
List<Item> items=componentExistInMetaverse(id.getNodeValue());
boolean deletedFlag=false;
//DELETED NODES (the TA file has marked the component for deletion at the next commit)
Node deleted=nodeMap.getNamedItem("deleted");
if(deleted!=null)
{
if(deleted.getNodeValue().equalsIgnoreCase("true"))
{
deletedFlag=true;
}
}
//WILL NEED TO EXCLUDE XLINKS IN DATABASE
//****PRINTING OUT VALUESET ATTRIBUTES NAME AND DESCRIPTION
//valueset, child list and each nextsibling
NodeList childListValueSet=valueSet.getChildNodes();
for(int x=0;x<childListValueSet.getLength();x )
{
Node childNode=childListValueSet.item(x);
Node nextChildNode=childNode.getNextSibling();
while(nextChildNode!=null)
{
if(nextChildNode.getNodeValue()!=null&&!nextChildNode.getNodeValue().trim().equals("")){
if(nextChildNode.getParentNode().getAttributes().getNamedItem("name").toString().trim().equalsIgnoreCase("name=\"description\""))
{
metaModelComponentDescription=nextChildNode.getNodeValue();
}
if(nextChildNode.getParentNode().getAttributes().getNamedItem("name").toString().trim().equalsIgnoreCase("name=\"name\""))
{
metaModelComponentName=nextChildNode.getNodeValue();
}
}
nextChildNode=nextChildNode.getFirstChild();
}
}//end internal for loop
if(items==null||items.size()<1)
{
insertComponent(linktitle.getNodeValue(),deletedFlag,"","",metaModelComponentName,metaModelComponentDescription,false,id.getNodeValue().substring(6,id.getNodeValue().length()),(Date)timestamp,this.USERLOGIN,null,"",this.PATH);
}
for(Item item:items)
{
insertComponent(linktitle.getNodeValue(),deletedFlag,item.getMetaVerseName(),item.getMetaVerseDescription(),metaModelComponentName,metaModelComponentDescription,item.getContains(),id.getNodeValue().substring(6,id.getNodeValue().length()),(Date)timestamp,this.USERLOGIN,item.getBluePrint(),item.getBluePrintName(),this.PATH);
}
}//end else statement
}//end object for loop
nodeLst = doc.getElementsByTagName("relationship");
length=nodeLst.getLength();
for (int s = 0; s <length; s ) {
Node fstNode = nodeLst.item(s);
Node valueSet=fstNode.getFirstChild().getNextSibling();
Node origin=fstNode.getFirstChild().getNextSibling().getNextSibling().getNextSibling();
Node target=fstNode.getFirstChild().getNextSibling().getNextSibling().getNextSibling().getNextSibling().getNextSibling();
NamedNodeMap valueSetMap=valueSet.getAttributes();
Node linktitle=valueSetMap.getNamedItem("xlink:title");
if(doesContain(excludeItems,linktitle.getNodeValue()))
{
//item is excluded and nothing happens to it
}
else
{
NamedNodeMap nodeMap=fstNode.getAttributes();
Node id=nodeMap.getNamedItem("id");
//CHECKING IF GUID IS IN COMPONENTS
boolean deletedFlag=false;
//DELETED NODES
Node deleted=nodeMap.getNamedItem("deleted");
if(deleted!=null)
{
if(deleted.getNodeValue().equalsIgnoreCase("true"))
{
deletedFlag=true;
}
}
//WILL NEED TO EXCLUDE XLINKS IN DATABASE
//****PRINTING OUT VALUESET ATTRIBUTES NAME AND DESCRIPTION
//valueset, child list and each nextsibling
NodeList childListValueSet=valueSet.getChildNodes();
for(int x=0;x<childListValueSet.getLength();x )
{
Node childNode=childListValueSet.item(x);
Node nextChildNode=childNode.getNextSibling();
while(nextChildNode!=null)
{
if(nextChildNode.getNodeValue()!=null&&!nextChildNode.getNodeValue().trim().equals("")){
}
nextChildNode=nextChildNode.getFirstChild();
}
}
NamedNodeMap originMap=origin.getAttributes();
String originTitle="";
if(originMap.getNamedItem("xlink:title")!=null)
{originTitle=originMap.getNamedItem("xlink:title").getNodeValue();}
NamedNodeMap targetMap=target.getAttributes();
String targetTitle="";
if(targetMap.getNamedItem("xlink:title")!=null)
{targetTitle=targetMap.getNamedItem("xlink:title").getNodeValue();}
String originGuid=originMap.getNamedItem("xlink:href").getNodeValue();
String targetGuid=targetMap.getNamedItem("xlink:href").getNodeValue();
List<Item> items=RelationComponentExistInMetaverse(id.getNodeValue());
if(items==null||items.size()<1)
{
insertRelationship(deletedFlag,linktitle.getNodeValue(),originTitle,targetTitle,"","","",false,id.getNodeValue().substring(6,id.getNodeValue().length()),(Date)timestamp,this.USERLOGIN,originGuid.substring(7,originGuid.length()),targetGuid.substring(7,targetGuid.length()),null,"",this.PATH,"","");
}
for(Item item:items)
{
insertRelationship(deletedFlag,linktitle.getNodeValue(),originTitle,targetTitle,item.getMetaVerseName(),item.getOrigin(),item.getTarget(),item.getContains(),id.getNodeValue().substring(6,id.getNodeValue().length()),(Date)timestamp,this.USERLOGIN,originGuid.substring(7,originGuid.length()),targetGuid.substring(7,targetGuid.length()),item.getBluePrint(),item.getBluePrintName(),this.PATH,item.getTargetGuid(),item.getOriginGuid());
}
}//end else statement
}//end relationship for loop
if((new ReportHandler()).getSuccessFlag())
{
System.out.println("Completed without errors. See Components and Relationships table for the analysis.");
}
else
{
System.out.println("SYSTEM FAILED!!! SEE STACK TRACE: ERROR CODE=1");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("SYSTEM FAILED!!! SEE STACK TRACE: ERROR CODE=1");
}

0 comments:
Post a Comment