/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package GUI; import Classes.Ingredient; import Classes.Menu; import Classes.Recette; import Protocole.NetworkClient; import Protocole.PacketCom; import Protocole.VSMEAP; import java.io.FileOutputStream; import java.io.IOException; import java.util.LinkedList; import java.util.Map; import java.util.TreeMap; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import xml.MyDom; import xml.MyErrorHandler; import xml.MyHandler; /** * * @author Greenlamp */ public class Main extends javax.swing.JFrame { /** * Creates new form Main */ NetworkClient socket; Menu menu; LinkedList<String> listeIngredient; Main(NetworkClient sock) { initComponents(); this.socket = sock; menu = new Menu(); listeIngredient = new LinkedList<>(); remplirListe(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jButton1 = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jLabel8 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jButton1.setText("Récupérer le menu"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jLabel1.setText("Entrées correctes: "); jLabel2.setText("Plats corrects: "); jLabel3.setText("Desserts corrects: "); jLabel4.setText("0"); jLabel5.setText("0"); jLabel6.setText("0"); jLabel7.setText("Menu modifié: "); jLabel8.setText("Non"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jButton1) .addGroup(layout.createSequentialGroup() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel6)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel5) .addComponent(jLabel4))) .addGroup(layout.createSequentialGroup() .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel8))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(jLabel5)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(jLabel6)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(jLabel8)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-159)/2, (screenSize.height-163)/2, 159, 163); }// </editor-fold>//GEN-END:initComponents private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed PacketCom packet = new PacketCom(VSMEAP.DOWNMENU, "ALL"); socket.send(packet); try { PacketCom packetReponse = socket.receive(); traiterReponse(packetReponse); } catch (Exception ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_jButton1ActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Main(null).setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; // End of variables declaration//GEN-END:variables private void traiterReponse(PacketCom packetReponse) { String type = packetReponse.getType(); Object contenu = packetReponse.getObjet(); if(type.equals(VSMEAP.DOWNMENU_OUI)){ byte[] xml = (byte[]) contenu; try { FileOutputStream fos = new FileOutputStream("menu.xml"); fos.write(xml); fos.close(); } catch (Exception ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } parserXml("menu.xml"); verifierXml(); TransformationXML("menu.xml"); } } private void parserXml(String menuXml) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); SAXParser saxParser = factory.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); MyHandler handler = new MyHandler(menu); xmlReader.setContentHandler(handler); xmlReader.setErrorHandler(new MyErrorHandler()); xmlReader.parse(menuXml); } catch (ParserConfigurationException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (SAXException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); PacketCom packetCom = new PacketCom(VSMEAP.WRONGMENU, ex.getMessage()); socket.send(packetCom); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } private void verifierXml() { int nbEntree = menu.getListeEntrees().size(); int nbPlat = menu.getListePlats().size(); int nbDessert = menu.getListeDesserts().size(); int nbEntreeCorrect = 0; int nbPlatCorrect = 0; int nbDessertCorrect = 0; boolean regenerer = false; LinkedList<String> nomEntree = new LinkedList<>(); LinkedList<String> nomPlat = new LinkedList<>(); LinkedList<String> nomDessert = new LinkedList<>(); for(Recette recette : menu.getListeEntrees()){ for(Ingredient ingredient : recette.getListeIngredients()){ if(!listeIngredient.contains(ingredient.getNomIngredient())){ nomEntree.add(recette.getNomRecette()); break; } } } for(Recette recette : menu.getListePlats()){ for(Ingredient ingredient : recette.getListeIngredients()){ if(!listeIngredient.contains(ingredient.getNomIngredient())){ nomPlat.add(recette.getNomRecette()); break; } } } for(Recette recette : menu.getListeDesserts()){ for(Ingredient ingredient : recette.getListeIngredients()){ if(!listeIngredient.contains(ingredient.getNomIngredient())){ nomDessert.add(recette.getNomRecette()); break; } } } nbEntreeCorrect = nbEntree - nomEntree.size(); nbPlatCorrect = nbPlat - nomPlat.size(); nbDessertCorrect = nbDessert - nomDessert.size(); jLabel4.setText(String.valueOf(nbEntreeCorrect)); jLabel5.setText(String.valueOf(nbPlatCorrect)); jLabel6.setText(String.valueOf(nbDessertCorrect)); if(nbEntreeCorrect != nbEntree){ regenerer = true; for(String nom: nomEntree){ menu.delEntree(nom); System.out.println("Nom: " + nom); } }else if(nbPlatCorrect != nbPlat){ regenerer = true; for(String nom: nomPlat){ menu.delPlat(nom); System.out.println("Nom: " + nom); } }else if(nbDessertCorrect != nbDessert){ regenerer = true; for(String nom: nomDessert){ menu.delDessert(nom); System.out.println("Nom: " + nom); } } if(regenerer){ jLabel8.setText("OUI"); try { MyDom.serialize(menu); } catch (Exception ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } }else{ jLabel8.setText("NON"); } } private void remplirListe() { listeIngredient.add("Concombre"); listeIngredient.add("Fromage à tartiner"); listeIngredient.add("Piment d'espelette"); //listeIngredient.add("Ciboulette"); listeIngredient.add("Yaourt"); //listeIngredient.add("Gouse d'àail"); listeIngredient.add("Crackers"); listeIngredient.add("Saumon fumé"); listeIngredient.add("Jus de citron"); listeIngredient.add("Oeufs"); listeIngredient.add("Escalope"); listeIngredient.add("Patates"); listeIngredient.add("Crème fraîche"); listeIngredient.add("Poulet"); listeIngredient.add("Oignon"); listeIngredient.add("Courgette"); listeIngredient.add("Chou-Fleur"); listeIngredient.add("Beurre"); listeIngredient.add("Piment de Cayenne"); listeIngredient.add("Pomme"); listeIngredient.add("Chocolat noir"); listeIngredient.add("Oeuf"); listeIngredient.add("Sucre"); listeIngredient.add("Beurre"); listeIngredient.add("Farine"); listeIngredient.add("Sucre roux"); listeIngredient.add("Sucre vanillé"); listeIngredient.add("Mascarpone"); listeIngredient.add("Nutella"); listeIngredient.add("Poudre de cacao"); } private void TransformationXML(String menuxml) { TransformerFactory tFactory = TransformerFactory.newInstance(); try { Transformer transformer = tFactory.newTransformer(new StreamSource("menu.xsl")); transformer.transform(new StreamSource("menu.xml"), new StreamResult("menu.htm")); } catch (Exception ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } }