import java.io.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; class States { private String sxmiid; private String sname; public States() { } public States(String sxmiid,String sname) { this.sxmiid = sxmiid; this.sname = sname; } public String getSxmiid() { return sxmiid; } public void setSxmiid(String sxmiid) { this.sxmiid = sxmiid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("State id:" + getSxmiid()); sb.append(", "); sb.append("State name:" + getSname()); sb.append(". "); return sb.toString(); } } class Connexion { private String sxmiid; private String sname; public Connexion() { } public Connexion(String sxmiid,String sname) { this.sxmiid = sxmiid; this.sname = sname; } public String getSxmiid() { return sxmiid; } public void setSxmiid(String sxmiid) { this.sxmiid = sxmiid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Connexion id:" + getSxmiid()); sb.append(", "); sb.append("Connexion name:" + getSname()); sb.append(". "); return sb.toString(); } } class Events { private String exmiid; private String ename; private String esource; private String etarget; public Events(){ } public Events(String exmiid,String ename,String esource,String etarget) { this.exmiid = exmiid; this.ename = ename; this.esource = esource; this.etarget = etarget; } public String getExmiid() { return exmiid; } public void setExmiid(String exmiid) { this.exmiid = exmiid; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getEsource() { return esource; } public void setEsource(String esource) { this.esource = esource; } public String getEtarget() { return etarget; } public void setEtarget(String etarget) { this.etarget = etarget; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Event id:" + getExmiid()); sb.append(", "); sb.append("Event name:" + getEname()); sb.append(". "); return sb.toString(); } } public class XMIParser extends DefaultHandler { //List myEmpls; List myStates; List myEvents; List myConnexion; String file; private String tempVal; private States tempStates; private Events tempEvents; private Connexion tempConnexion; private int i=0; private int j=0; private int k=0; public XMIParser() { myStates = new ArrayList(); myEvents = new ArrayList(); myConnexion = new ArrayList(); } public void runParser() throws IOException { parseDocument(); printData(); //printFile(); } private void parseDocument() { //get a factory SAXParserFactory spf = SAXParserFactory.newInstance(); try { //get a new instance of parser SAXParser sp = spf.newSAXParser(); //parse the file and also register this class for call backs sp.parse("ok.xmi",this); } catch(SAXException se) { se.printStackTrace(); } catch(ParserConfigurationException pce) { pce.printStackTrace(); } catch (IOException ie) { ie.printStackTrace(); } } /** * Iterate through the list and print * the contents */ private void printData() { System.out.println("STATES\n"); for(ListIterator its = myStates.listIterator(); its.hasNext(); i++) System.out.println(i + ":" + its.next().toString()); System.out.println("\nEVENTS\n"); for(ListIterator it = myEvents.listIterator(); it.hasNext(); j++) System.out.println(j + ":" + it.next().toString()); System.out.println("\nCONNEXIONS\n"); for(ListIterator co = myConnexion.listIterator(); co.hasNext(); k++) System.out.println(k + ":" + co.next().toString()); } //Event Handlers public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { tempVal = ""; if(qName.equalsIgnoreCase("subvertex")) { tempStates = new States(); tempStates.setSxmiid(attributes.getValue("xmi:id")); tempStates.setSname(attributes.getValue("name")); } else if(qName.equalsIgnoreCase("transition")) { tempEvents = new Events(); tempEvents.setExmiid(attributes.getValue("xmi:id")); tempEvents.setEname(attributes.getValue("name")); } else if(qName.equalsIgnoreCase("connectionPoint")) { tempConnexion = new Connexion(); tempConnexion.setSxmiid(attributes.getValue("xmi:id")); tempConnexion.setSname(attributes.getValue("name")); } } public void characters(char[] ch, int start, int length) throws SAXException { tempVal = new String(ch,start,length); } public void endElement(String uri, String localName, String qName) throws SAXException { if(qName.equalsIgnoreCase("subvertex")) { myStates.add(tempStates); } else if (qName.equalsIgnoreCase("transition")) { myEvents.add(tempEvents); } else if(qName.equalsIgnoreCase("connectionPoint")) { myConnexion.add(tempConnexion);} } public static void main(String[] args)throws IOException{ XMIParser xp = new XMIParser(); xp.runParser(); } }