Package fmg.fmg8.statistik.startSetup

Source Code of fmg.fmg8.statistik.startSetup.Starter

/*
* Datei: SteuerFenster.java
* Autor(en):        Lukas K�nig
* Java-Version:     6.0
* Erstellt (vor): 19.12.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/

package fmg.fmg8.statistik.startSetup;

import fmg.fmg8.graphVis.SteuerFenster;
import fmg.fmg8.pfeilGUI.PfeilController;
import fmg.fmg8.sonstiges.SonstMeth;
import fmg.fmg8.statistik.Konstanten;
import fmg.fmg8.statistik.Parametersatz;
import fmg.fmg8.statistik.SinglePar;
import fmg.fmg8.statistik.TraceBetrachter;

import java.awt.Color;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Random;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
* Klasse zur Repr�sentation eines Steuerfensters.
*
* @author Lukas K�nig
*/
public class Starter extends JFrame implements
                               ListSelectionListener,
                               ActionListener,
                               MouseListener,
                               KeyListener {

    /**
     * Die Versions-ID.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Die Parameterliste.
     */
    private JList paramListe;
   
    /**
     * Parameter.
     */
    private Parametersatz pars;
   
    /**
     * Felder.
     */
    private JTextArea[] parFelder;
   
    /**
     * Ob die Felder fest sein sollen.
     */
    private JCheckBox[] checkBoxen;
   
    /**
     * Die ScrollPane des Parameter-Text-Objekts.
     */
    private JScrollPane scroll;
   
    /**
     * Textfelderpanel.
     */
    private Panel textFelder;
   
    /**
     * Sie Ausgabe.
     */
    private JTextArea ausgabe;
   
    /**
     * Der Konstruktor.
     *
     * @param parameter  Der Parametersatz f�r den Lauf.
     */
    public Starter(final Parametersatz parameter) {
        super("JoSchKa-Parameter-Generator");
        this.pars = parameter;
        this.reset();
    }
   
    /**
     * Setzt das Steuerfenster zur�ck.
     */
    public void reset() {
        this.setLocation(0, 0);
        this.setSize(800, 700);
        this.setzeSteuerelemente();
        this.setVisible(true);
        this.getContentPane().setVisible(true);
    }

    /**
     * Setzt die Parameter in die Parameterliste.
     *
     * @return  Die Anzahl der gesetzten Parameter.
     */
    private int setzeParameterListe() {
        ArrayList<SinglePar> liste = this.pars.getAllPars();
//        Collections.sort(liste, new AlphaSort());
        Component[] s = new Component[liste.size()];
       
        for (int i = 0; i < liste.size(); i++) {
            s[i] = liste.get(i);
        }
       
        this.paramListe.setListData(s);
       
        return s.length;
    }
   
    /**
     * Setzt alle Steuerelemente und Fenstereigenschaften.
     */
    private void setzeSteuerelemente() {
        ArrayList<SinglePar> liste = this.pars.getAllPars();
        this.getContentPane().setBackground(Color.white);
        this.getContentPane().setLayout(new GridLayout(2, 1));
        Panel p = new Panel();
        p.setLayout(new GridLayout(1, 1));
        this.paramListe = new JList(new DefaultListModel());
        this.paramListe.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JScrollPane scrollPane = new JScrollPane(this.paramListe);
        int size = this.setzeParameterListe();
        this.paramListe.addListSelectionListener(this);
        p.add(scrollPane);
        this.ausgabe = new JTextArea();
        this.ausgabe.setEditable(true);
        JScrollPane scrollPane2 = new JScrollPane(this.ausgabe);
        this.getContentPane().add(p);
        Panel buttons = new Panel();
        JButton generiere = new JButton("Generiere Parameter");
        JButton simStart = new JButton("Starte Sim (Cmd)...");
        JButton simStartGraph = new JButton("Starte Sim (Grafik)...");
        JButton traceStart = new JButton("Starte Tracebetrachter...");
        JButton pfeilStart = new JButton("Starte Pfeilmaster...");
        Panel pButtons = new Panel(new GridLayout(2, 1));
        pButtons.add(scrollPane2);
        this.textFelder = new Panel(new GridLayout(1, 2));
        buttons.add(generiere);
        buttons.add(simStart);
        buttons.add(simStartGraph);
        buttons.add(traceStart);
        buttons.add(pfeilStart);
        pButtons.add(buttons);
        this.textFelder.add(pButtons);
        this.parFelder = new JTextArea[size];
        this.checkBoxen = new JCheckBox[size];
        for (int i = 0; i < size; i++) {
            this.parFelder[i] = new JTextArea("" + liste.get(i).getStdValue());
            this.parFelder[i].setVisible(true);
            this.checkBoxen[i] = new JCheckBox("Fest");
            this.checkBoxen[i].setVisible(true);
            this.parFelder[i].setBackground(Color.yellow);
            this.parFelder[i].setCaretColor(Color.red);
            this.parFelder[i].setForeground(Color.black);
            this.parFelder[i].addMouseListener(this);
            this.parFelder[i].addKeyListener(this);
        }
        this.getContentPane().add(this.textFelder);

        this.paramListe.addMouseListener(this);
        generiere.addActionListener(this);
        simStart.addActionListener(this);
        traceStart.addActionListener(this);
        pfeilStart.addActionListener(this);
        simStartGraph.addActionListener(this);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    /**
     * Listenlistener.
     *
     * @param e  Das Event.
     */
    @Override
    public void valueChanged(final ListSelectionEvent e) {
        if (this.paramListe.getSelectedIndex() < 0) {
            return;
        }
       
        for (int i = 0; i < this.parFelder.length; i++) {
            this.textFelder.remove(this.parFelder[i]);
            this.textFelder.remove(this.checkBoxen[i]);
            this.parFelder[i].setVisible(false);
            this.checkBoxen[i].setVisible(false);
        }
        if (this.scroll != null) {
            this.textFelder.remove(this.scroll);
        }
        this.scroll = new JScrollPane(
                this.parFelder[this.paramListe.getSelectedIndex()]);
       
//        this.textFelder.add(
//                this.parFelder[this.paramListe.getSelectedIndex()]);
        this.textFelder.add(this.scroll);
        this.textFelder.add(
                this.checkBoxen[this.paramListe.getSelectedIndex()]);
        this.parFelder[this.paramListe.getSelectedIndex()].setVisible(true);
        this.checkBoxen[this.paramListe.getSelectedIndex()].setVisible(true);
    }

    /**
     * Erzeugt den Parameterarray als Textparameter (keine JoSchKa-Zus�tze).
     *
     * @return  Der Parameterarray.
     */
    private ArrayList<String> erzeugeParArray() {
        ArrayList<SinglePar> liste = this.pars.getAllPars();
        JoSchKa joschka = new JoSchKa();
        ArrayList<String> stzP
            = new ArrayList<String>(this.parFelder.length);
        ArrayList<String[]> werte
            = new ArrayList<String[]>(this.parFelder.length);
        String[] zwischWert;
        ArrayList<String> festePar = new ArrayList<String>();
        ArrayList<String[]> festeWerte = new ArrayList<String[]>();
       
        // Erzeuge Listen mit festen Werten und zu kombinierenden Werten.
        for (int i = 0; i < this.parFelder.length; i++) {
            String[] zwisch = this.parFelder[i].getText().split("\n");
            zwischWert = new String[zwisch.length];
            for (int j = 0; j < zwisch.length; j++) {
                zwischWert[j] = zwisch[j];
            }
           
            if (this.checkBoxen[i].isSelected()) {
                festePar.add(liste.get(i).getParNam());
                festeWerte.add(zwischWert);
            } else {
                stzP.add(liste.get(i).getParNam());
                werte.add(zwischWert);
            }
        }

        // Parameters�tze erzeugen.
        try {
            ArrayList<String> ausgaben
            = joschka.erzeuge(
                    this.pars,
                    stzP,
                    werte,
                    festePar,
                    festeWerte);
           
            this.paramListe.setBackground(Color.white);
           
            return ausgaben;
        } catch (Exception e) {
            this.paramListe.setBackground(Color.red);
            this.ausgabe.setText(e.getMessage());
           
            return new ArrayList<String>();
        }
    }
   
    /**
     * Generiert die Parameter.
     */
    private void generiere() {
        ArrayList<String> ausgaben;
        JoSchKa joschka;
       
        // Array erzeugen:
        ausgaben = this.erzeugeParArray();
        joschka = new JoSchKa();
       
        // Darstellung der Parameters�tze in GUI:
        this.ausgabe.setText("");
        if (ausgaben.size() <= 100) {
            for (String s : ausgaben) {
                this.ausgabe.setText(this.ausgabe.getText() + s + "\n");
            }
        }

        // JoSchKa-Ausgaben erzeugen:
        ausgaben = joschka.erzeugeJoSchKaStd(
                this.pars.getJoschkaUser() + "_" + this.pars.getJoschkaVerz(),
                "java " + this.pars.getJoschkaVMpar()
                    + " -jar " + this.pars.getJoschkaJAR(),
                ausgaben,
                this.pars);
       
        // JoSchKa-Verzeichnis erzeugen:
        String ergebnis = this.erzeugeJoSchKaVerz(ausgaben, this.pars);
        if (ergebnis == null) {
            // JoSchKa-Ausgaben speichern:
            SonstMeth.speichereTextAusArray(
                    this.pars.getStarterQuellPfad()
                        + File.separatorChar
                        + this.pars.getJoschkaVerz(),
                    "JoSchKa.txt",
                    ausgaben,
                    this.pars);
           
            this.ausgabe.setText(
                    this.ausgabe.getText()
                    + "\nGespeichert in "
                    + this.pars.getStarterQuellPfad()
                    + File.separatorChar
                    + this.pars.getJoschkaVerz()
                    + File.separatorChar
                    + "JoSchKa.txt");
        } else {
            this.ausgabe.setText(
                    "JoSchKa-Ausgaben nicht erzeugt."
                        + "\nFehler: " + ergebnis);
        }
    }
   
    /**
     * Erzeugt das JoSchKa-Verzeichnis und kopiert die notwendigen Dateien
     * hinein.
     *
     * @param ausgaben  Die Ausgabes�tze.
     * @param params    Der Parametersatz.
     *
     * @return  Ob die Aktion durchgef�hrt werden konnte. null bedeutet
     *          fehlerfrei - sonst wird ein String mit der Beschreibung
     *          des Fehlers zur�ckgegeben.
     */
    private String erzeugeJoSchKaVerz(
            final ArrayList<String> ausgaben,
            final Parametersatz params) {
        File quellVerz = new File(
                params.getStarterQuellPfad() + File.separatorChar);
        File zielVerz = new File(
                params.getStarterQuellPfad()
                    + File.separatorChar
                    + params.getJoschkaVerz());
        FileCopy kopieren = new FileCopy();
        File[] zwisch;
        boolean enthaelt = false;
       
        // Alte Dateien l�schen.
        this.deleteVerz(zielVerz);
        zielVerz.mkdir();

        // Automaten kopieren.
        zwisch = quellVerz.listFiles(new AutomatenFilter());
       
        for (File f : zwisch) {
            enthaelt = true;
            File f2 = new File(
                    zielVerz.getAbsolutePath()
                        + File.separatorChar
                        + f.getName());
            kopieren.copy(f, f2);
        }
       
        // Falls sich keine Automaten im Verzeichnis befinden.
        if (!enthaelt) {
            this.paramListe.setBackground(Color.red);
            this.deleteVerz(zielVerz);
            return "Keine Roboter in " + quellVerz.getAbsolutePath() + ".";
        }
       
        // Umgebungsdateien kopieren.
        for (String ausg : ausgaben) {
            Parametersatz paramsZwisch = new Parametersatz(ausg.split(" "));
            paramsZwisch.ergaenze();
            File umgebungQuell = new File(
                    quellVerz.getAbsolutePath()
                        + File.separatorChar
                        + paramsZwisch.getUmgebungDatname());
            File umgebungZiel = new File(
                    zielVerz.getAbsolutePath()
                        + File.separatorChar
                        + paramsZwisch.getUmgebungDatname());
            if (umgebungQuell.exists()) {
                kopieren.copy(umgebungQuell, umgebungZiel);
            } else {
                this.paramListe.setBackground(Color.red);
                this.deleteVerz(zielVerz);
                return "Umgebungsdatei nicht gefunden: "
                    + umgebungQuell.getAbsolutePath() + ".";
            }
        }
       
        return null;
        // JAR-Datei erzeugen und kopieren (noch nicht implementiert).
    }
   
    /**
     * L�scht ein flaches Verzeichnis mit allen Dateien.
     *
     * @param verz  Das Verzeichnis.
     */
    private void deleteVerz(final File verz) {
        if (verz == null) {
            return;
        }
       
        File[] zwisch = verz.listFiles();

        if (zwisch != null) {
            for (File f : zwisch) {
                f.delete();
            }
        }
       
        verz.delete();
    }
   
    private boolean contains(final String[] array, final String s) {
        for (String s2 : array) {
            if (s.equals(s2)) {
                return true;
            }
        }
       
        return false;
    }
   
    /**
     * Der Listener.
     *
     * @param arg0  Das Event.
     */
    @Override
    public void actionPerformed(final ActionEvent arg0) {
        LinkedList<Integer> markierte = new LinkedList<Integer>();
        String hervorString = this.pars.hervorString();
        String[] hervorPar = new String[2];
        int hervorNum = -1;

        for (int i = 0; i < this.paramListe.getModel().getSize(); i++) {
            if (((SinglePar) this.paramListe.getModel().getElementAt(i))
                    .isChanged()) {
                markierte.add(i);
            }
        }

        // Eintragen der weiteren hervorgehobenen Parameter:
        for (int i = 0; i < this.paramListe.getModel().getSize(); i++) {
            SinglePar sPar
                = (SinglePar) this.paramListe.getModel().getElementAt(i);
            if (sPar.isChanged() && !this.contains(
                    this.pars.getHervorPar(),
                    sPar.getParNam())) {
                hervorString += "," + sPar.getParNam();
            }
            if (sPar.getParNam().equalsIgnoreCase(Konstanten.HERVOR_PAR_ATT)) {
                hervorNum = i;
            }
        }
       
        if (hervorNum >= 0) {
            this.parFelder[hervorNum].setText(hervorString);
        } else {
            SonstMeth.log(
                    SonstMeth.LOG_WARNING,
                    "Hervorgehobene Parameter nicht gesetzt: " + hervorString,
                    this.pars);
        }

        hervorPar[0] = Konstanten.HERVOR_PAR_ATT;
        hervorPar[1] = hervorString;
        this.pars.neuePars(hervorPar);

        try {
            this.pars = new Parametersatz(
                    this.erzeugeParArray().get(0).split(" "));
            this.pars.ergaenze();

            this.setzeParameterListe();
           
            for (int i = 0; i < markierte.size(); i++) {
                this.setzeChanged(markierte.get(i));
            }
        } catch (Exception e2) {
            return;
        }

        this.generiere();
        String[] params = this.ausgabe.getText().split("\n")[0].split(" ");
        String[] paramsTrace;
        String filename;
       
        if (arg0.getActionCommand().equals("Generiere Parameter")) {
            params = null;
        } else if (arg0.getActionCommand().equals("Starte Sim (Cmd)...")) {
            Parametersatz parsNeu = new Parametersatz(params);
            parsNeu.ergaenze();
            parsNeu.setGraphisch(false);
            this.dispose();
            SteuerFenster.main(
                    parsNeu.parStrPlain().replace('\n', ' ').split(" "));
        } else if (arg0.getActionCommand().equals("Starte Sim (Grafik)...")) {
            Parametersatz parsNeu = new Parametersatz(params);
            parsNeu.ergaenze();
            parsNeu.setGraphisch(true);
            this.dispose();
            SteuerFenster.main(
                    parsNeu.parStrPlain().replace('\n', ' ').split(" "));
        } else if (
                arg0.getActionCommand().equals("Starte Tracebetrachter...")) {
            FileDialog dia = new FileDialog(
                    this,
                    "Tracedatei zum Betrachten ausw�hlen",
                    FileDialog.LOAD);
            dia.setFile("*.dat.gz");
            dia.setDirectory(this.pars.getStdPfad());
            dia.setVisible(true);
            if (dia.getFile() == null) {
                return;
            }
            filename = dia.getDirectory() + dia.getFile();
            filename = filename.substring(0, filename.length() - 3);
            paramsTrace = new String[params.length + 2];
            paramsTrace[0] = filename;
            paramsTrace[1] = "dummy";
            for (int i = 0; i < params.length; i++) {
                paramsTrace[i + 2] = params[i];
            }
           
            this.dispose();
            TraceBetrachter.main(paramsTrace);
        } else if (arg0.getActionCommand().equals("Starte Pfeilmaster...")) {
            this.dispose();
            PfeilController.main(params);
        }
    }

    /**
     * Listener.
     *
     * @param arg0  Event.
     */
    @Override
    public void mouseClicked(final MouseEvent arg0) {
        JTextArea aktText = null;
        String rnd = "";
        int gesNum = 1;
        String textV, textN, neuText = "";
        int carPos;
       
        if (arg0.getSource().getClass().equals(JList.class)) {
            if (arg0.getButton() == 3) {
                this.invertiereAlleKat();
            }
           
            return;
        }
       
        if (arg0.getButton() == 3 && arg0.getClickCount() >= 2) {
            for (int i = 0; i < this.parFelder.length; i++) {
                if (!this.parFelder[i].isVisible()
                        && !this.checkBoxen[i].isSelected()) {
                    gesNum *= this.parFelder[i].getText().split("\n").length;
                }
                if (this.parFelder[i].isVisible()) {
                    this.setzeAktChanged();
                    this.checkBoxen[i].setSelected(true);
                    aktText = this.parFelder[i];
                }
            }
           
            if (arg0.getClickCount() == 2) {
                try {
                    carPos = aktText.getCaretPosition();
                    textV = aktText.getText().substring(0, carPos);
                    textN = aktText.getText().split("\n")[0].substring(carPos);
   
                    if (textV.split("\n").length == 1) {
                        for (int i = 0; i < gesNum; i++) {
                            neuText +=
                                textV
                                + this.normZahl(i, gesNum - 1)
                                + textN
                                + "\n";
                        }
                       
                        aktText.setText(neuText);
                    }
                } catch (final Exception e) {
                    SonstMeth.log(
                            SonstMeth.LOG_OUTPUT,
                            "Nummerierung nicht erfolgreich.",
                            this.pars);
                }
            }
           
            if (arg0.getClickCount() >= 3) {
                    for (int i = 0; i < gesNum; i++) {
                        rnd += "" + (new Random()).nextLong() + "\n";
                    }
               
                aktText.setText(rnd);
            }
        }
    }

    /**
     * @param i    Der aktuelle Wert.
     * @param max  Der maximale Wert.
     *
     * @return  normZahl(3, 100) ==> 003
     */
    private String normZahl(final int i, final int max) {
        String strI = "" + i, strMax = "" + max;
        String nullen = "";

        for (int j = 0; j < strMax.length() - strI.length(); j++) {
            nullen += "0";
        }
       
        return nullen + i;
    }
   
    /**
     * Listener.
     *
     * @param arg0  Event.
     */
    @Override
    public void mouseEntered(final MouseEvent arg0) {
       
    }

    /**
     * Listener.
     *
     * @param arg0  Event.
     */
    @Override
    public void mouseExited(final MouseEvent arg0) {
       
    }

    /**
     * Listener.
     *
     * @param arg0  Event.
     */
    @Override
    public void mousePressed(final MouseEvent arg0) {
       
    }

    /**
     * Listener.
     *
     * @param arg0  Event.
     */
    @Override
    public void mouseReleased(final MouseEvent arg0) {
       
    }

    /**
     * @param e  Das Event.
     */
    @Override
    public void keyPressed(final KeyEvent e) {
       
    }

    /**
     * @param e  Das Event.
     */
    @Override
    public void keyReleased(final KeyEvent e) {

    }

    /**
     * Setzte den num-ten Listeneintrag auf "checked".
     *
     * @param num  Der zu markierende Eintrag.
     */
    private void setzeChanged(final int num) {
        if (num < 0) {
            return;
        }
       
        SinglePar p = (SinglePar) this.paramListe.getModel().getElementAt(num);
       
        p.setChanged();
        this.paramListe.repaint();
    }

    /**
     * Setzt, dass das aktuelle Element ver�ndert wurde.
     */
    private void setzeAktChanged() {
        this.setzeChanged(this.paramListe.getSelectedIndex());
    }

    /**
     * Setzt, dass alle Elemente die Kategorieanzeige umschalten.
     */
    private void invertiereAlleKat() {
        SinglePar p;
       
        for (int i = 0; i < this.paramListe.getModel().getSize(); i++) {
            p = (SinglePar) this.paramListe.getModel().getElementAt(i);
            p.setKategorieAnzeigen((p.isKategorieAnzeigen() + 1) % 4);
        }
       
        this.paramListe.repaint();
    }

    /**
     * @param e  Das Event.
     */
    @Override
    public void keyTyped(final KeyEvent e) {
        this.setzeAktChanged();
    }

    /**
     * GUI zur Erzeugung von Startkonfiguration, u.a. f�r JoSchKa.
     *
     * @param args  Nicht benutzt.
     */
    public static void main(final String[] args) {
       Parametersatz params = new Parametersatz(args);
       params.ergaenze();
       Starter josch = new Starter(params);
       josch.pars.getAllPars();
    }
}
TOP

Related Classes of fmg.fmg8.statistik.startSetup.Starter

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.