package com.plectix.simulator.xmlmap.rulecompression; import java.util.LinkedHashSet; import java.util.Set; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXHandler extends DefaultHandler { private Set<RuleTag> quantitativeRules; private Set<RuleTag> qualitativeRules; private Set<Association> quantitativeAssociations; private Set<Association> qualitativeAssociations; private enum CompressionType{ NONE, QUANTITATIVE, QUALITATIVE } private CompressionType compressionType = CompressionType.NONE; private boolean isMap; @Override public void startDocument() throws SAXException { quantitativeRules = new LinkedHashSet<RuleTag>(); qualitativeRules = new LinkedHashSet<RuleTag>(); quantitativeAssociations = new LinkedHashSet<Association>(); qualitativeAssociations = new LinkedHashSet<Association>(); } private boolean checkCompression(String qName, Attributes attributes, String strCompression, CompressionType compressionType){ if ("RuleSet".equals(qName)) { if (attributes.getValue("Name").equals(strCompression)){ this.compressionType = compressionType; return true; } } return false; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if(checkCompression(qName, attributes, "Quantitative compression", CompressionType.QUANTITATIVE)) return; if(checkCompression(qName, attributes, "Qualitative compression", CompressionType.QUALITATIVE)) return; switch (compressionType) { case QUANTITATIVE: fillingSets(qName, attributes, quantitativeRules, quantitativeAssociations); break; case QUALITATIVE: fillingSets(qName, attributes, qualitativeRules, qualitativeAssociations); break; } } private void fillingSets(String qName, Attributes attributes, Set<RuleTag> rules, Set<Association> associations){ if ("Rule".equals(qName)){// && attributes.getValue("Data").equals("Cannot be applied")) { rules.add(new RuleTag(Integer.parseInt(attributes .getValue("Id")), attributes.getValue("Data"), attributes.getValue("Name"))); return; } if ("Map".equals(qName)) { if (attributes.getValue("FromSet").equals("Original")) { isMap = true; return; } } if (isMap) { if ("Association".equals(qName)) { associations.add(new Association(attributes .getValue("FromRule"), attributes .getValue("ToRule"))); return; } } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("RuleSet".equals(qName)) { //isQuantitative = false; compressionType = CompressionType.NONE; } if ("Map".equals(qName)) { isMap = false; } } @Override public void endDocument() throws SAXException { } public Set<RuleTag> getQuantitativeRules() { return quantitativeRules; } public Set<Association> getQuantitativeAssociations() { return quantitativeAssociations; } public Set<RuleTag> getQualitativeRules() { return qualitativeRules; } public Set<Association> getQualitativeAssociations() { return qualitativeAssociations; } }