import java.io.*; import java.sql.SQLException; import java.util.Hashtable; import java.util.Vector; import org.w3c.dom.*; import org.xml.sax.*; import javax.xml.parsers.*; public class parser { public PrintWriter out = null; public Hashtable conversionTable; public Vector referencesMemorizeKey; public Vector referencesMemorizeValue; public parser() { conversionTable = new Hashtable(); referencesMemorizeKey = new Vector(); referencesMemorizeValue = new Vector(); } //Rem changer Package par ModelElement public void parse(String _fichier) throws SAXException, ParserConfigurationException, IOException { // Charger le document FileInputStream _xml_input_file = new FileInputStream(_fichier); int mode = 1; parse(_xml_input_file, mode); mode ++; FileInputStream _xml_input_file2 = new FileInputStream(_fichier); parse(_xml_input_file2, mode); mode ++; FileInputStream _xml_input_file3 = new FileInputStream(_fichier); parse(_xml_input_file3, mode); mode = 7; FileInputStream _xml_input_file4 = new FileInputStream(_fichier); parse(_xml_input_file4, mode); } public PrintWriter createFichier(int mode, Element eltClass) { String filename; String comment; switch (mode){ case 1 : filename = "abstract.java"; comment = "//contains all the abstract classes"; break; case 2 : filename = "plain.java"; comment = "//contains all the plain classes"; break; case 3 : filename = "jdbc.java"; comment = "//contains the classes connected to the DB"; break; case 4 : filename = "Abs"+eltClass.getAttribute("name") + ".java"; comment = "//contains the abstract methods and attributes of "+ eltClass.getAttribute("name") ; break; case 5 : filename = eltClass.getAttribute("name") + ".java"; comment = "//contains the methods and attributes of "+ eltClass.getAttribute("name") ; break; case 6 : filename = eltClass.getAttribute("name") + "Persistent.java"; comment = "//contains the persistent methods and attributes of "+ eltClass.getAttribute("name") ; break; case 7 : filename = eltClass.getAttribute("name") + "table.sql"; comment = "-- The creation of table " + eltClass.getAttribute("name"); break; default : filename = ".error"; comment = "//errors"; break; } try { out = new PrintWriter( new FileOutputStream("./"+filename)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (mode != 7) { out.println("package SaveToJDBC;"); out.println("import java.util.Collection;"); out.println("import java.sql.*;"); out.println("import java.util.Vector;"); out.println(""); out.println(comment); } return out; } public void parse(InputStream _xml_input_file,int mode) throws SAXException, ParserConfigurationException, IOException { //création du fichier output Element bidon = null ; out = createFichier(0, bidon); //instancie le constructeur de parseurs DocumentBuilderFactory _factory = DocumentBuilderFactory.newInstance(); //ignore les commentaires dans les fichiers XML parsés _factory.setIgnoringComments(true); // crée un parseur DocumentBuilder _builder = _factory.newDocumentBuilder(); // Charge le document Document doc = _builder.parse(_xml_input_file); // Parse le document Element root = doc.getDocumentElement(); // Liste des enfants de la root NodeList classes = root.getChildNodes(); handleModel(classes, mode); out.flush(); out.close(); } public void handleAttribute(Element eltAttr, Element eltClass, int mode) { switch(mode){ case 1 : if(eltAttr.hasAttribute("association")) { out.println(" public abstract Collection get"+conversionTable.get(eltAttr.getAttribute("type"))+"();"); out.println(" public abstract void set"+conversionTable.get(eltAttr.getAttribute("type"))+"( Collection "+eltAttr.getAttribute("name")+" );"); out.println(""); } else { out.println(" public abstract "+ conversionTable.get(eltAttr.getAttribute("type"))+" get"+ eltAttr.getAttribute("name")+"();"); out.println(" public abstract void set"+ eltAttr.getAttribute("name") + "( "+conversionTable.get(eltAttr.getAttribute("type"))+ " " +eltAttr.getAttribute("name")+" );"); out.println(""); } break; case 2 : if(eltAttr.hasAttribute("association") && eltAttr.getAttribute("upperValue").equals("-1")) { out.println(" private Collection <"+conversionTable.get(eltAttr.getAttribute("type"))+"> " + eltAttr.getAttribute("name") + ";"); out.println(""); out.println(" public Collection <"+ conversionTable.get(eltAttr.getAttribute("type"))+"> get"+ eltAttr.getAttribute("name")+"()"); out.println(" {return " +eltAttr.getAttribute("name")+ ";}"); out.println(""); out.println(" public void set"+ eltAttr.getAttribute("name") + "( Collection <"+conversionTable.get(eltAttr.getAttribute("type"))+ "> " +eltAttr.getAttribute("name")+" )"); out.println(" {this." +eltAttr.getAttribute("name")+ " = "+ eltAttr.getAttribute("name") +";}"); out.println(""); } else { out.println(" private "+ conversionTable.get(eltAttr.getAttribute("type"))+" "+ eltAttr.getAttribute("name")+";"); out.println(""); out.println(" public "+ conversionTable.get(eltAttr.getAttribute("type"))+" get"+ eltAttr.getAttribute("name")+"()"); out.println(" {return " +eltAttr.getAttribute("name")+ ";}"); out.println(""); out.println(" public void set"+ eltAttr.getAttribute("name") + "( "+conversionTable.get(eltAttr.getAttribute("type"))+ " " +eltAttr.getAttribute("name")+" )"); out.println(" {this." +eltAttr.getAttribute("name")+ " = "+ eltAttr.getAttribute("name") +";}"); out.println(""); } break; case 3 : if(eltAttr.hasAttribute("association") && eltAttr.getAttribute("upperValue").equals("-1")) { out.println(" private Collection <"+conversionTable.get(eltAttr.getAttribute("type"))+"Persistent> " + eltAttr.getAttribute("name") + ";"); out.println(""); out.println(" public Collection <"+ conversionTable.get(eltAttr.getAttribute("type"))+"> get"+ eltAttr.getAttribute("name")+"() throws SQLException"); out.println(" {String sqlRequest = \"select "+conversionTable.get(eltAttr.getAttribute("type"))+".id from " +conversionTable.get(eltAttr.getAttribute("type")) + " where id"+ eltClass.getAttribute("name")+" =\" +this.id ; "); out.println(" ResultSet rs =QueryUnivDB.getQueryCollection(sqlRequest); "); out.println(" Vector retVector = new Vector();"); out.println(" while(rs.next()){"); out.println(" retVector.add(new "+conversionTable.get(eltAttr.getAttribute("type"))+"Persistent(rs.getString(1)));}"); out.println(" return retVector;"); out.println(" }"); out.println(""); out.println(" public void set"+ eltAttr.getAttribute("name") + "( Collection <"+conversionTable.get(eltAttr.getAttribute("type"))+ "Persistent> " +eltAttr.getAttribute("name")+" )"); out.println(" {for ("+conversionTable.get(eltAttr.getAttribute("type"))+"Persistent e :"+ eltAttr.getAttribute("name")+") {"); out.println(" String sqlRequest = \"update "+conversionTable.get(eltAttr.getAttribute("type"))+" set id"+ eltClass.getAttribute("name")+" =\" + this.id +\" where id= \"+e.getId() ;"); out.println(" QueryUnivDB.setQuery(sqlRequest);"); out.println(" }"); out.println(" this." +eltAttr.getAttribute("name")+ " = "+ eltAttr.getAttribute("name") +";"); out.println(" }"); out.println(""); } else { out.println(" private "+ conversionTable.get(eltAttr.getAttribute("type"))+" "+ eltAttr.getAttribute("name")+";"); out.println(""); out.println(" public "+ conversionTable.get(eltAttr.getAttribute("type"))+" get"+ eltAttr.getAttribute("name")+"()"); out.println(" {String sqlRequest = \"select "+eltAttr.getAttribute("name")+" from " + eltClass.getAttribute("name")+ " where id =\" +this.id ; "); out.println(" return ("+conversionTable.get(eltAttr.getAttribute("type")) +") QueryUnivDB.getQuery(sqlRequest); "); out.println(" }"); out.println(""); out.println(" public void set"+ eltAttr.getAttribute("name") + "( "+conversionTable.get(eltAttr.getAttribute("type"))+ " " +eltAttr.getAttribute("name")+" )"); out.println(" {String sqlRequest = \"update "+eltClass.getAttribute("name")+" set " + eltAttr.getAttribute("name")+ "='\"+"+ eltAttr.getAttribute("name") +"+\"' where id =\" +this.id ; "); out.println(" QueryUnivDB.setQuery(sqlRequest); "); out.println(" this." +eltAttr.getAttribute("name")+ " = "+ eltAttr.getAttribute("name") +";"); out.println(" }"); out.println(""); } break; case 7 : if(!(eltAttr.hasAttribute("association")&& eltAttr.getAttribute("upperValue").equals("-1"))) out.print(",\n\t" + eltAttr.getAttribute("name") + " " + conversionTable.get(eltAttr.getAttribute("type"))); break; case 8 : if(eltAttr.hasAttribute("association") && eltAttr.getAttribute("upperValue").equals("-1")) { referencesMemorizeKey.add(eltAttr.getAttribute("type")); referencesMemorizeValue.add(eltClass.getAttribute("name")); } break; case 9 : for(int i = 0; i