/** * Cauta in toate fisierele din folderul cu XSD (Config.exec_schemas) si incarca analizatoarele * disponibile. */ private void loadAnalyzers() { // Lista cu analizatoarele disponibile aList = new ArrayList<Analyzer>(); // Deschide directorul xml_schema. File directory = new File(Config.exec_schemas); // Ia fisierele din directorul xml_schema. File[] files = directory.listFiles(); // Parseaza fiecare fisier. for (File file2 : files) { if (file2.isFile()) { String file; file = file2.getAbsolutePath(); Analyzer a = this.getAnalyzer(file); if (a != null) { aList.add(a); } } } // Verifica daca exista analizatoare. if (aList.size() == 0) { ErrorMessage.show("Nu exista analizatoare disponibile!"); } }
/** * Parseaza fisierul primit ca parametru. * * @param file Calea absoluta a fisierului de parsat. * @return mixed Daca in fisier a fost gasit un analizator atunci returneaza Analyzer, altfel * returneaza null. */ private Analyzer getAnalyzer(final String file) { Document dom = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); try { // Ia din factory o noua instanta de document builder. DocumentBuilder db = dbf.newDocumentBuilder(); // Parseaza pentru a obtine o reprezentare DOM a fisierului. dom = db.parse(file); } catch (Exception e) { ErrorMessage.show("Exceptie la parsarea fisierelor XSD:" + e.getMessage()); } Map<String, String> dt = new TreeMap<String, String>(); // Ia toate tagurile simpleType. Match simpleType = $(dom).namespace("xs", "http://www.w3.org/2001/XMLSchema").xpath("//xs:simpleType"); for (int i = 0; i < simpleType.size(); i++) { // Ia nume si valoare daca acestea exista. String name = simpleType.get(i).getAttribute("name"); String value = $(simpleType.content(i)) .namespace("xs", "http://www.w3.org/2001/XMLSchema") .xpath("//xs:pattern") .attr("value"); // Verifica daca exista name si value. if (name != null && value != null) { dt.put(name, value); } } // Avem nevoie de un analizator de un anumit tip. if (dt.get("execType") != null && dt.get("execType").compareTo(this.type) == 0) { return new Analyzer(dt.get("execName"), dt.get("execDescription"), this.type); } return null; }