Package hordes

Source Code of hordes.NewBean

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/


/*
    Set set;
    Iterator it;

    it = set.iterator();
    set = listeRegistre.entrySet();

    it = set.iterator();

    while(it.hasNext()){
      Map.Entry me = (Map.Entry)it.next();
      System.out.println(me.getKey() + " : " + me.getValue() );
    }
    System.out.println(nbRature + " ratures.");
*/

package hordes;

import java.beans.*;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import javax.swing.JOptionPane;

/**
* @author Shewbacca
*/
public class NewBean implements Serializable {




    /*
     *
     *     private void addResult(File f) {
        try{
            if (f != null) {
                BufferedReader buff = new BufferedReader(new FileReader(f));
                try {
                    String string = "", line;
                    while ((line = buff.readLine()) != null) {
                        string = string + line + "\n";
                    }


        int begin, end, value, nbRature = 0;
        String rech1, rech2, rech3, find, substring;
        Pattern p, p2, p3;
        Matcher m, m2;

        rech1 = "(Aucune rature n'a été faite)|(1 entrée a été raturée)|(\\d+ entrées ont été raturées)";
        rech2 = "\\d+";
        rech3 = "(il y a )|(il manque )";
        p = Pattern.compile(rech1);
        p2 = Pattern.compile(rech2);
        p3 = Pattern.compile(rech3);
        m = p.matcher(string);

        m.find();
        if (m.group().equals("Aucune rature n'a été faite")) {
            nbRature = 0;
        } else if (m.group().equals("1 entrée a été raturée")) {
            nbRature = 1;
        } else if (m.group().equals("entrées ont été raturées")) {
            m2 = p2.matcher(m.group());
            m2.find();
            nbRature = Integer.parseInt(m2.group());
        } else {
            System.out.println("Fichier non valide !");
        }

        m2 = p2.matcher(m.group());
        m2.find();
        nbRature = Integer.parseInt(m2.group());

        m.usePattern(p3);
        while(m.find()) {
            m.usePattern(p2);
            m.find();
            value = Integer.parseInt(m.group());

            m.usePattern(p3);
            m.find();
            begin = m.end();

            m.usePattern(Pattern.compile("( \\.)|( et )"));
            m.find();
            end = m.start();
            find = string.substring(begin, end);
        }





                } finally {
                    buff.close();
                }
            }
        } catch (IOException ioe) {
            System.out.println("Erreur --" + ioe.toString());
        }
    }
     */

    private PropertyChangeSupport propertySupport;

    protected Map<String, Integer> listeRegistre = new HashMap<String, Integer>();
    protected Map<String, Integer> listeBanque = new HashMap<String, Integer>();
    protected Map<String, Integer> listeResult = new HashMap<String, Integer>();

    protected String stringBanque;
    protected String stringRegistre;
    protected String stringResult;
   
    // public static final String PROP_STRINGBANQUE = "stringBanque";
    public static final String PROP_STRINGREGISTRE = "stringRegistre";


    public String analyse() throws LigneRegistreNonPrevue {
        String result;
        int nbRature;
        try {
                verif();
                reinitialise();
                analyseBanque();
                nbRature = analyseRegistre();
                result = compare(nbRature);
                return result;
        } catch (LigneRegistreNonPrevue ex) {
            throw new LigneRegistreNonPrevue(ex);
        }
    }

    private void verif() throws LigneRegistreNonPrevue  {
        int i = 0;
        String subStr;
        String[] strSplit;
        String[] casReferences =
            {"a produit",   // Atelier
             "a pris",      // Prise en banque ou vol réussit
             "a donné",     // Dépot en banque
             "a utilisé :", // Chantier construit
             "a récupéré"// Bannissement
             "a rapporté"// Apprivoiseur
             "a été découvert", // Don de plan avec Architectoire
             "a tenté de voler",    // Vol échoué
             "dans le potager"};    // Potager
        String cas = "((" + casReferences[0] + ")";
        for (int j = 1; j<casReferences.length; j++) {
            cas = cas + "|(" + casReferences[j] + ")";
            if (j == casReferences.length - 1) {
                cas = cas + ")";
            }
        }
        Pattern p, p2, p3;
        Matcher m, m2, m3;

        strSplit = stringRegistre.split("\n");
        p = Pattern.compile("\\[\\].*\n"); // Une ligne qui traite d'items
        p2 = Pattern.compile(cas);
        p3 = Pattern.compile("$", Pattern.MULTILINE);

        m = p.matcher(stringRegistre);
        while (m.find()) { // Pour chaque ligne qui parle d'item
            subStr = stringRegistre.substring(0, m.end());
            m3 = p3.matcher(subStr);
            i = -1;
            while (m3.find()) { i++; }

            m2 = p2.matcher(strSplit[i-1]);
            if (m2.find() == false) { // Mais que l'on ne trouve pas quelque chose que l'on connait
                subStr = stringRegistre.substring(0, m.end());

                String[] choices={ "Annuler", "Ignorer"};
                String message = "Découverte d'un cas non référencé :\n<html>\"<i>" + strSplit[i-1] + "</i>\"</html>\nLigne " + i + " du registre.";
                int retour = JOptionPane.showOptionDialog(null,
                                                          message,
                                                          "Attention !",
                                                          JOptionPane.OK_CANCEL_OPTION,
                                                          JOptionPane.WARNING_MESSAGE,
                                                          null,
                                                          choices,
                                                          null);
                try {
                    if( retour == JOptionPane.CLOSED_OPTION || (retour>=0 && retour<choices.length && choices[retour].equals("Annuler"))) {
                        throw new LigneRegistreNonPrevue(message);
                    }
                } catch (LigneRegistreNonPrevue ex) {
                    throw new LigneRegistreNonPrevue(ex);
    }
            }
        }
    }

   
    private void reinitialise() {
        listeRegistre.clear();
        listeBanque.clear();
    }

    private void analyseBanque() {
        int begin, end;
        String rech1, rech2, rech3, rech4, rech5, find;
        Pattern p, p2, p3, p4, p5;
        Matcher m, m2;

        rech1 = "js.HordeTip.showTip\\(this,'[ \t]*";
        rech2 = "[ \t]*<img src=&quot;";
        rech3 = "(broken.*[\n]+.*)?(<span class=\"count\">\\d+</span>)?([\n]+</a>[\n]+</li>)";
        rech4 = "<span class=\"count\">";
        rech5 = "broken";

        p = Pattern.compile(rech1);
        p2 = Pattern.compile(rech2);
        p3 = Pattern.compile(rech3);
        p4 = Pattern.compile(rech4);
        p5 = Pattern.compile(rech5);
        m = p.matcher(stringBanque);

        while(m.find()) {
            begin = m.end();
            m.usePattern(p2);
            m.find();
           
            end = m.start();
            find = stringBanque.substring(begin, end); // nom de l'item
           
            m.usePattern(p3);
            m.find();

            m2 = p5.matcher(m.group());
            if (m2.find()) { // On rajoute l'état "cassé(e)" si nécessaire
                find = find + " cassé(e)";
            }
            m2 = p4.matcher(m.group());
            if (m2.find()) {
                m2 = Pattern.compile("\\d+").matcher(m.group());
                m2.find();
                ajouteItem(find, Integer.parseInt(m2.group()), false);
            } else {
                ajouteItem(find, 1, false);
            }
            m.usePattern(p);
        }
    }

    private int analyseRegistre() {
        int begin, end, value, nbRature = 0;
        String rech1, rech2, rech3, find, substring;
        Pattern p, p2, p3;
        Matcher m, m2;


        // Prise et Vol en banque
        // [15:19] [X] TchOrT a pris [] Ration d'eau dans les coffres de la Banque !
        // [23:54] Quelqu'un a pris [] Explosifs bruts dans les coffres de la Banque mais il (ou elle) n'a pu être identifié(e).
        // [23:54] Ichigodu98 a tenté de voler [] Poignée de vis et écrous dans la Banque mais a été parfaitement incapable de faire preuve de discrétion !!
        rech1 = "(a pris \\[\\] )|(a tenté de voler \\[\\] )";
        rech2 = "( dans les coffres)|( dans la Banque)";
        p = Pattern.compile(rech1);
        p2 = Pattern.compile(rech2);
        m = p.matcher(stringRegistre);
        while(m.find()) {
            begin = m.end();
            m.usePattern(p2);
            m.find();
            end = m.start();

            find = stringRegistre.substring(begin, end);

            ajouteItem(find, -1, true);

            m.usePattern(p);
        }


        // ----------------------------------------------------
        // Dépot en banque ou Apprivoiseur
        // [15:19] [X] TchOrT a donné [] Ration d'eau à la ville.
        // [20:15] [X] Zaboro, le cabot malodorant de aker93 a rapporté [] Ferraille en ville !
        rech1 = "(a donné \\[\\] )|(a rapporté \\[\\] )";
        rech2 = "( à la ville)|( en ville)";
        p = Pattern.compile(rech1);
        p2 = Pattern.compile(rech2);
        m = p.matcher(stringRegistre);
        while(m.find()) {
            begin = m.end();
            m.usePattern(p2);
            m.find();
            end = m.start();

            find = stringRegistre.substring(begin, end);

            ajouteItem(find, +1, true);

            m.usePattern(p);
        }


        // ----------------------------------------------------
        // Dépot de plan en banque avec l'architectoire
        // [00:27] [X] "[] Plan de chantier (commun) " a été découvert grace à Architectoire. Cet objet a été déposé à la banque.
        rech1 = "(\\[\\d\\d:\\d\\d\\] \\[X\\] \"\\[\\] )";
        rech2 = "( \" a été découvert)";
        p = Pattern.compile(rech1);
        p2 = Pattern.compile(rech2);
        m = p.matcher(stringRegistre);
        while(m.find()) {
            begin = m.end();
            m.usePattern(p2);
            m.find();
            end = m.start();

            find = stringRegistre.substring(begin, end);

            ajouteItem(find, +1, true);

            m.usePattern(p);
        }


        // ----------------------------------------------------
        // Atelier
        // [13:58] [X] hermannvonsalza a produit [] Poignée de vis et écrous à l'Atelier (à partir de [] Appareil électronique en panne ).
        rech1 = "a produit \\[\\] ";
        rech2 = " à l'Atelier";
        p = Pattern.compile(rech1);
        m = p.matcher(stringRegistre);
        while(m.find()) {
            // Incrémentation
            begin = m.end();
            end = stringRegistre.indexOf(rech2, begin);
            find = stringRegistre.substring(begin, end);
            if (listeRegistre.containsKey(find) == false) {
                listeRegistre.put(find, 0);
            }
            listeRegistre.put(find, listeRegistre.get(find)+1);

            // Décrémentation
            begin = end + 29;
            find = stringRegistre.substring(begin, stringRegistre.indexOf(" ).", begin));

            ajouteItem(find, -1, true);
        }


        // ----------------------------------------------------
        // Chantier construit.
        // [17:42] [X] La construction de Atelier a utilisé : [] Planche tordue x10,[] Ferraille x8
        rech1 = "a utilisé :";
        rech2 = "\\[\\] ";
        rech3 = " x\\d+";
        p = Pattern.compile(rech1);
        p2 = Pattern.compile(rech2);
        p3 = Pattern.compile(rech3);
        m = p.matcher(stringRegistre);
        while(m.find()) { // On rencontre une ligne Construction
            substring = stringRegistre.substring(m.end(), stringRegistre.indexOf("\n", m.end()));
            m2 = p2.matcher(substring);
            while(m2.find()) {
                begin = m2.end(); // début du nom de l'item

                m2.usePattern(p3);
                m2.find();
                end = m2.start(); // fin du nom de l'item

                find = substring.substring(begin, end); // On chope le nom de l'item
                value = Integer.parseInt(substring.substring(end+2, m2.end())); // On récupère le nombre d'item en question
               
                ajouteItem(find, - value, true);

                m2.usePattern(p2);
            }
        }


        // ----------------------------------------------------
        // Bannissement
        // [16:47] La ville a récupéré [] Ration d'eau x1, [] Twinoïde 500mg x1 (bannissement de Cryman).
        rech1 = "a récupéré";
        rech2 = "\\[\\] ";
        rech3 = " x\\d+";
        p = Pattern.compile(rech1);
        p2 = Pattern.compile(rech2);
        p3 = Pattern.compile(rech3);
        m = p.matcher(stringRegistre);
        while(m.find()) { // On rencontre une ligne Construction
            substring = stringRegistre.substring(m.end(), stringRegistre.indexOf("\n", m.end()));
            m2 = p2.matcher(substring);
            while(m2.find()) {
                begin = m2.end(); // début du nom de l'item

                m2.usePattern(p3);
                m2.find();
                end = m2.start(); // fin du nom de l'item

                find = substring.substring(begin, end); // On chope le nom de l'item
                value = Integer.parseInt(substring.substring(end+2, m2.end())); // On récupère le nombre d'item en question

                ajouteItem(find, value, true);
               
                m2.usePattern(p2);
            }
        }


        // ----------------------------------------------------
        // Potager
        // [00:42] Plusieurs légumes ont poussé dans le potager : 4x [] Légume suspect et 0x [] Melon d'intestin .
        rech1 = "dans le potager : ";
        rech2 = "\\d+";
        rech3 = "x \\[\\] ";
        p = Pattern.compile(rech1);
        p2 = Pattern.compile(rech2);
        p3 = Pattern.compile(rech3);
        m = p.matcher(stringRegistre);
        while(m.find()) {
            for (int j=0; j<2; j++) {
                m.usePattern(p2);
                m.find();
                value = Integer.parseInt(m.group());

                m.usePattern(p3);
                m.find();
                begin = m.end();

                m.usePattern(Pattern.compile("( \\.)|( et )"));
                m.find();
                end = m.start();
                find = stringRegistre.substring(begin, end);

                ajouteItem(find, value, true);
            }
            m.usePattern(p);
        }

        // ----------------------------------------------------
        // Rature
        // [21:23] [X] Cette entrée du registre a été ratuarée : elle est maintenant totalement illisible ! Qu'a-t-on bien pu vouloir nous cacher...
        rech1 = "a été raturée";
        p = Pattern.compile(rech1);
        m = p.matcher(stringRegistre);
        while(m.find()) {
            begin = m.end();
            nbRature++;
        }
        return nbRature;
    }

    private String compare(int nbRature) {
        // Négatif = vol
        // positif = rature de don...
        listeResult = listeBanque;
        Set set= listeRegistre.entrySet();
        Iterator it = set.iterator();
        String result;

        if (nbRature == 0) {
            result = "Aucune rature n'a été faite.\n";
        } else if (nbRature == 1) {
            result = nbRature + " entrée a été raturée !\n";
        } else {
            result = nbRature + " entrées ont été raturées !\n";
        }

        while(it.hasNext()){
            Map.Entry me = (Map.Entry)it.next();
            if (listeResult.containsKey(me.getKey().toString())) {
                listeResult.put(me.getKey().toString(), listeResult.get(me.getKey().toString()) - (Integer)me.getValue());
            } else {
                listeResult.put(me.getKey().toString(), - (Integer)me.getValue());
            }
        }

        set = listeResult.entrySet();
        it = set.iterator();
       
        while(it.hasNext()){
            Map.Entry me = (Map.Entry)it.next();
            if ((Integer)me.getValue() > 0) {
                result = result + "\nIl y a " + (Integer)me.getValue() + " " + me.getKey().toString() + " en trop.";
            } else if ((Integer)me.getValue() < 0) {
                result = result + "\nIl manque " + (-(Integer)me.getValue()) + " " + me.getKey().toString() + " !";
            }
        }
        return result;
    }

    private void ajouteItem(String find, int value, boolean registre) {
        // Etant donné qu'une lampe se décharge toute seule à minuit,
        // on ne sauvegarde pas l'état (allumé ou éteint)
        String rech1 = "(Lampe de chevet)|(MagLite Pif'Gadget)|(Torche)";
        Pattern p = Pattern.compile(rech1);
        Matcher m = p.matcher(find);
        if (m.find()) {
            find = m.group();
        }

        if (registre) { // registre de banque
            if (listeRegistre.containsKey(find) == false) {
                listeRegistre.put(find, 0);
            }
            listeRegistre.put(find, listeRegistre.get(find)+value);
        } else { // code source de la banque (images)
            listeBanque.put(find, value);
        }
    }



    /**
     * Get the value of stringResult
     * @return the value of stringResult
     */
    public String getStringResult() {
        return stringResult;
    }

    /**
     * Set the value of stringResult
     * @param stringResult new value of stringResult
     */
    public void setStringResult(String stringResult) {
        this.stringResult = stringResult;
    }

    /**
     * Get the value of stringBanque
     * @return the value of stringBanque
     */
    public String getStringBanque() {
        return stringBanque;
    }
   
    /**
     * Get the value of stringRegistre
     * @return the value of stringRegistre
     */
    public String getStringRegistre() {
        return stringRegistre;
    }
   
    /**
     * Set the value of stringBanque
     * @param stringBanque new value of stringBanque
     */
    public void setStringBanque(String stringBanque) {
        String rech= "\\\\'", stringModif;
        Pattern p = Pattern.compile(rech);
        Matcher m = p.matcher(stringBanque);
        stringModif = m.replaceAll("\\'");
        // String oldStringBanque = this.stringBanque;
        this.stringBanque = stringModif;
        // propertySupport.firePropertyChange(PROP_STRINGBANQUE, oldStringBanque, stringBanque);
    }

    /**
     * Set the value of stringRegistre
     * @param stringRegistre new value of stringRegistre
     */
    public void setStringRegistre(String stringRegistre) {
        String rech= " icon ", stringModif;
        Pattern p = Pattern.compile(rech);
        Matcher m = p.matcher(stringRegistre);
        stringModif = m.replaceAll(" [] ");

        String oldStringRegistre = this.stringRegistre + " ";
        this.stringRegistre = stringModif;
        propertySupport.firePropertyChange(PROP_STRINGREGISTRE, oldStringRegistre, stringModif);
    }

    public NewBean() {
        propertySupport = new PropertyChangeSupport(this);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.removePropertyChangeListener(listener);
    }
}
TOP

Related Classes of hordes.NewBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.