package action; import java.awt.Component; import java.awt.HeadlessException; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.KeyStroke; import javax.swing.filechooser.FileNameExtensionFilter; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import MEPTL.commandes; import MEPTL.ecritureSujet; import MEPTL.meptl; import MEPTL.verificationFichierAnalyse_node_commandesSujet; import cXML.Run; import cXML.node; import evaluer.evaluation; import fenetres.evaluate; public class actNewFichierAnalyse extends AbstractAction{ /** * */ private static final long serialVersionUID = 1L; { putValue(Action.LARGE_ICON_KEY, new ImageIcon(evaluate.class.getResource("/resources/fichierODF.png"))); putValue( Action.NAME, "Génère un nouveau fichier d'analyse" ); putValue( Action.SMALL_ICON, new ImageIcon(evaluate.class.getResource("/resources/fichierODFmini.png")) ); putValue( Action.MNEMONIC_KEY, KeyEvent.VK_N ); putValue( Action.SHORT_DESCRIPTION, "Générer un nouveau fichier d'analyse (CTRL+N)" ); putValue( Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_DOWN_MASK) ); } @Override public void actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser(){ private static final long serialVersionUID = 1L; @Override protected JDialog createDialog( Component parent ) throws HeadlessException { JDialog dialog = super.createDialog( parent ); Image img = new ImageIcon(getClass().getResource("/evalwriter.png") ).getImage(); dialog.setIconImage(img); return dialog; } }; chooser.setDialogTitle("Choisir un fichier ODF"); chooser.setCurrentDirectory(new java.io.File(commandes.path)); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); FileNameExtensionFilter filter = new FileNameExtensionFilter("Format ODF", "odt"); chooser.setFileFilter(filter); chooser.setAcceptAllFileFilterUsed(true); if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { commandes.initialiseParametresSettingProprietes(); commandes.fichierAnalyseValide=true; commandes.path = chooser.getCurrentDirectory().getAbsolutePath(); commandes.PathFilenameAnalysis = chooser.getCurrentDirectory().getAbsolutePath(); String cheminVersFichier = chooser.getSelectedFile().getAbsolutePath(); commandes.nameSujet = chooser.getSelectedFile().getName(); Run b = null; try { b = new Run(cheminVersFichier); commandes.sujet = Run.XMLContent(b.getLectDossiers().getEC().getListeContentWriter().get(0)); //Supprime l'historique des modifications commandes.sujet.supprimeTousLesNodesEnfantWithThisName("text:tracked-changes"); commandes.sujet.supprimeTousLesNodesEnfantWithThisName("text:deletion"); commandes.sujet.supprimeTousLesNodesEnfantWithThisName("text:change-start"); commandes.sujet.supprimeTousLesNodesEnfantWithThisName("text:change-end"); commandes.sujet.supprimeTousLesNodesEnfantWithThisName("text:change"); commandes.sujet.supprimeTousLesNodesEnfantWithThisName("text:bookmark-start"); commandes.sujet.supprimeTousLesNodesEnfantWithThisName("text:bookmark-end"); commandes.sujet = meptl.LectureFichierEtudiantSousFormeDeNode(commandes.sujet,b,0); //Pour les sujets, il faut rechercher les nodes en doublons (par exemple : text:p, text:h, text:list-item) //L'information sera portée par l'attribut isDoublon="true" // Cela permet de recherche par le numéro du child. placeIsDoublonInStructure(commandes.sujet.retourneFirstEnfantsByName("structurepage")); placeIsDoublonInStylePage(commandes.sujet.retourneFirstEnfantsByName("style:page")); placeIsDoublonInStylePage(commandes.sujet.retourneFirstEnfantsByName("style:style")); placeIsDoublonInStylePage(commandes.sujet.retourneFirstEnfantsByName("frames")); commandes.sujet.getAttributs().put("analysis_filename","sujet.xml"); commandes.sujet = ecritureSujet.nodePourEcritureSujet(commandes.sujet,b,0); // chargemnt de la traduction evaluation.chargeTraduction(Run.translation()); // try { // Run.ecritureNodeEnXML(commandes.sujet , commandes.nameSujet+".xml",commandes.path,"Sujet"); // } catch (IOException e1) { // // TODO Auto-generated catch block // e1.printStackTrace(); // } new verificationFichierAnalyse_node_commandesSujet(); if(commandes.fichierAnalyseValide) { commandes.sujetSauvegarde = commandes.sujet.clone(); commandes.evaluationChargeEnMemoire = null; commandes.evaluationsBase=null; commandes.IndexEvaluationCharger=-1; commandes.NameEvaluationCharger = ""; commandes.analysis_filename = commandes.sujet.getAttributs().get("analysis_filename"); fenetres.create.getTree().setVisible(true); fenetres.create.constructionTree(); fenetres.create.getTextNodeSelect().afficheChargementFichierAnalyse(); }else { fenetres.create.getTextNodeSelect().setText("

Le fichier n'est pas valide

"); } } catch (ParserConfigurationException | SAXException | IOException | CloneNotSupportedException e1) { e1.printStackTrace(); } } else { fenetres.create.getTextNodeSelect().refreshAffichage(null); } commandes.ecritCode = true; } public static void placeIsDoublonInStructure(node nod) { Enumeration pages = Collections.enumeration(nod.getNodes()); while(pages.hasMoreElements()) { node nodLaPage = pages.nextElement(); Pattern p = Pattern.compile("^text:p$|^text:h$|^text:span$|^text:list$|^text:list-item$|^text:line-break$|^text:span$|^text:tab$|^text:s$"); //le node qui peuvent rechercher par le contenu textuel ArrayList listTextesInPage = new ArrayList(); for(int i = 0 ; i < nodLaPage.getNodes().size();i++) { Matcher m = p.matcher(nodLaPage.getNodes().get(i).getNomElt()); if(m.find()) { String content = nodLaPage.getNodes().get(i).retourneLesContenusEnfants(""); if(listTextesInPage.contains(content)) { nodLaPage.getNodes().get(i).getAttributs().put("isDoublon", "true"); }else { nodLaPage.getNodes().get(i).getAttributs().remove("isDoublon"); listTextesInPage.add(content); } if(nodLaPage.getNodes().get(i).getNodes().size()>0) { placeIsDoublon(nodLaPage.getNodes().get(i)); } } } } } public static void placeIsDoublonInStylePage(node nod) { Enumeration pages = Collections.enumeration(nod.getNodes()); while(pages.hasMoreElements()) { node nodLaPage = pages.nextElement(); Pattern p = Pattern.compile("^text:p$|^text:h$|^text:span$|^text:list$|^text:list-item$|^text:line-break$|^text:span$|^text:tab$|^text:s$"); //le node qui peuvent rechercher par le contenu textuel ArrayList listTextesInPage = new ArrayList(); for(int i = 0 ; i < nodLaPage.getNodes().size();i++) { Matcher m = p.matcher(nodLaPage.getNodes().get(i).getNomElt()); if(m.find()) { String content = nodLaPage.getNodes().get(i).retourneLesContenusEnfants(""); if(listTextesInPage.contains(content)) { nodLaPage.getNodes().get(i).getAttributs().put("isDoublon", "true"); }else { nodLaPage.getNodes().get(i).getAttributs().remove("isDoublon"); listTextesInPage.add(content); } } if(nodLaPage.getNodes().get(i).getNodes().size()>0) { placeIsDoublon(nodLaPage.getNodes().get(i)); } } } } /** * * @param nod */ private static void placeIsDoublon(node nod) { Pattern p = Pattern.compile("^text:p$|^text:h$|^text:list$|^text:list-item$|^text:line-break$|^text:span$|^text:tab$|^text:s$"); //le node qui peuvent rechercher par le contenu textuel ArrayList listTextesInPage = new ArrayList(); for(int i = 0 ; i < nod.getNodes().size();i++) { Matcher m = p.matcher(nod.getNodes().get(i).getNomElt()); if(m.find()) { String content = nod.getNodes().get(i).retourneLesContenusEnfants(""); if(listTextesInPage.contains(content)) { nod.getNodes().get(i).getAttributs().put("isDoublon", "true"); }else { nod.getNodes().get(i).getAttributs().remove("isDoublon"); listTextesInPage.add(content); } if(nod.getNodes().get(i).getNodes().size()>0) { placeIsDoublon(nod.getNodes().get(i)); } } } } }