Save This Page
Home » openjdk-7 » net.sourceforge.wisim » controller » [javadoc | source]
    1   /*   ********************************************************************   **
    2   **   Copyright notice                                                       **
    3   **                                                                          **
    4   **   (c) 2003 WiSim Development Team					                              **
    5   **   http://wisim.sourceforge.net/   			                                  **
    6   **                                                                          **
    7   **   All rights reserved                                                    **
    8   **                                                                          **
    9   **   This script is part of the WiSim Business Game project. The WiSim      **
   10   **   project is free software; you can redistribute it and/or modify        **
   11   **   it under the terms of the GNU General Public License as published by   **
   12   **   the Free Software Foundation; either version 2 of the License, or      **
   13   **   (at your option) any later version.                                    **
   14   **                                                                          **
   15   **   The GNU General Public License can be found at                         **
   16   **   http://www.gnu.org/copyleft/gpl.html.                                  **
   17   **   A copy is found in the textfile GPL.txt and important notices to the   **
   18   **   license from the team is found in the textfile LICENSE.txt distributed **
   19   **   in these package.                                                      **
   20   **                                                                          **
   21   **   This copyright notice MUST APPEAR in all copies of the file!           **
   22   **   ********************************************************************   */
   23   
   24   /*
   25    * JPanelSimulationStart.java
   26    *
   27    * Created on 17. M?rz 2003, 14:55
   28    */
   29   
   30   package net.sourceforge.wisim.controller;
   31   import net.sourceforge.wisim.dao;
   32   import net.sourceforge.wisim.model;
   33   import javax.swing.tree;
   34   import javax.swing.plaf.metal;
   35   import java.util;
   36   import java.sql.Date;
   37   import javax.swing;
   38   import javax.swing.event;
   39   import java.text.DateFormat;
   40   
   41   /** In diesem Fenster kann der Benutzer die Simulation starten. Ereignisse (z.B.
   42    * eingehende Lieferungen, produzierte Hubs, versendete Hubs) werden angezeigt.
   43    * @author benjamin.pasero
   44    */
   45   public class JPanelSimulationStart extends javax.swing.JPanel {
   46       private WiSimDAO dao;
   47       private ActualTime actTime;
   48       private CoreTime coreTime;
   49       private UpdateSimulationsauswertung updateSimulationsauswertung;
   50       private UpdateLagerThread updateLagerThread;
   51       private int faktor;
   52       private Date actDate;
   53       private int hubBestand;
   54       private Vector artikelLagerElemente;
   55       private Hashtable stueckliste;
   56       private Collection vertraege;
   57       private GregorianCalendar actDateGC;
   58       private GregorianCalendar lieferDateGC;
   59       private GregorianCalendar gc;
   60       private DateFormat df;
   61       private boolean beendeNachEinerWoche;
   62       private boolean isActive;
   63       private int actDay;
   64       
   65       //Treepath der JTrees werden gespeichert
   66       private Set treepathsEinkauf;
   67       private Set treepathsVertrieb;
   68       private Set treepathsProduktion;
   69       
   70       // Simulation der Produktion
   71       private WiSimMainController wiSimMainController;
   72       private ProduktionsController runController;
   73       private ProduktionsSimulationThread[] threads;
   74       
   75       // Dauer einer Zeiteinheit f?r die gesamte Simulation
   76       public final static int TIMESTEP = 100;
   77       
   78       // IconNodes als Elemente der JTrees
   79       private IconNode rootNodeLieferungen;
   80       private IconNode rootNodeVertrieb;
   81       private IconNode rootNodeProduktion;
   82       private IconNode dateNode;
   83       private IconNode lieferantNode;
   84       private IconNode positionNode;
   85       private IconNode hubProduktionNode;
   86       private IconNode hubEinzelteilVerbrauch;
   87       private IconNode hubVertrieb;
   88       private IconNode hubVertriebPos;
   89       
   90       // Icons f?r einzelene Elemente der JTrees
   91       private ImageIcon rightIcon;
   92       private ImageIcon vanIcon;
   93       private ImageIcon boxIcon;
   94       private ImageIcon hubIcon;
   95       private ImageIcon boxOpenIcon;
   96       private ImageIcon errorIcon;
   97       
   98       //Logger
   99       private WiSimLogger wiSimLogger;
  100       
  101       /** Creates new form JPanelSimulationStart
  102        * @param wiSimMainController
  103        */
  104       public JPanelSimulationStart(WiSimMainController wiSimMainController) {
  105           this.wiSimMainController = wiSimMainController;
  106           wiSimLogger = wiSimMainController.getWiSimLogger();
  107           initDAO(wiSimMainController);
  108           actTime = new ActualTime();
  109           actDay = 0;
  110           this.wiSimMainController = wiSimMainController;
  111           faktor = 1;
  112           actDate = new Date(new GregorianCalendar(2003, 8, 1, 0, 0).getTimeInMillis());
  113           hubBestand = 0;
  114           artikelLagerElemente = new Vector();
  115           stueckliste = new Hashtable();
  116           vertraege = new Vector();
  117           
  118           actDateGC = new GregorianCalendar();
  119           lieferDateGC = new GregorianCalendar();
  120           gc = new GregorianCalendar();
  121           
  122           df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT, Locale.GERMANY);
  123           
  124           beendeNachEinerWoche = false;
  125           isActive = false;
  126           
  127           //Synchronisierte HashSets
  128           treepathsEinkauf = Collections.synchronizedSet(new HashSet());
  129           treepathsVertrieb = Collections.synchronizedSet(new HashSet());
  130           treepathsProduktion = Collections.synchronizedSet(new HashSet());
  131           
  132           //Icon Grafiken
  133           rightIcon = new ImageIcon(getClass().getResource("/icons/right.gif"));
  134           vanIcon = new ImageIcon(getClass().getResource("/icons/van.gif"));
  135           boxIcon = new ImageIcon(getClass().getResource("/icons/box.gif"));
  136           hubIcon = new ImageIcon(getClass().getResource("/icons/hub.gif"));
  137           boxOpenIcon = new ImageIcon(getClass().getResource("/icons/boxopen.gif"));
  138           errorIcon = new ImageIcon(getClass().getResource("/icons/error.gif"));
  139           
  140           // Initialisierung der IconNodes
  141           rootNodeLieferungen = new IconNode("");
  142           rootNodeVertrieb = new IconNode("");
  143           rootNodeProduktion = new IconNode("");
  144           rootNodeLieferungen.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
  145           rootNodeVertrieb.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
  146           rootNodeProduktion.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
  147           
  148           initComponents();
  149           initializeCollections();
  150           addJTreeListener();
  151       }
  152       
  153       private void initDAO(WiSimMainController wiSimMainController) {
  154           dao = wiSimMainController.getDAO();
  155       }
  156       
  157       /** This method is called from within the constructor to
  158        * initialize the form.
  159        * WARNING: Do NOT modify this code. The content of this method is
  160        * always regenerated by the Form Editor.
  161        */
  162       private void initComponents() {//GEN-BEGIN:initComponents
  163           jLabelSimulation = new javax.swing.JLabel();
  164           jButtonReset = new javax.swing.JButton();
  165           jTextFieldDatum = new javax.swing.JTextField();
  166           DateFormat justDate = DateFormat.getDateInstance(DateFormat.FULL, Locale.GERMANY);
  167           jTextFieldDatum.setText(justDate.format(actDate));
  168           jLabelDatum = new javax.swing.JLabel();
  169           jToggleButtonStartStop = new javax.swing.JToggleButton();
  170           jLabelSimStartStop = new javax.swing.JLabel();
  171           jTabbedPaneSimulationsverlauf = new javax.swing.JTabbedPane();
  172           jScrollPaneTreeHolderEinkauf = new javax.swing.JScrollPane();
  173           jTreeEinkauf = new javax.swing.JTree();
  174           jTreeEinkauf.setModel(null);
  175           jScrollPaneTreeHolderProduktion = new javax.swing.JScrollPane();
  176           jTreeProduktion = new javax.swing.JTree();
  177           jTreeProduktion.setModel(null);
  178           jScrollPaneTreeHolderVertrieb = new javax.swing.JScrollPane();
  179           jTreeVertrieb = new javax.swing.JTree();
  180           jTreeVertrieb.setModel(null);
  181           jPanelControll = new javax.swing.JPanel();
  182           jLabelZeitfaktor = new javax.swing.JLabel();
  183           jComboBoxZeitfaktor = new javax.swing.JComboBox();
  184           jCheckBoxEineWoche = new javax.swing.JCheckBox();
  185   
  186           setLayout(null);
  187   
  188           addAncestorListener(new javax.swing.event.AncestorListener() {
  189               public void ancestorMoved(javax.swing.event.AncestorEvent evt) {
  190               }
  191               public void ancestorAdded(javax.swing.event.AncestorEvent evt) {
  192                   formAncestorAdded(evt);
  193               }
  194               public void ancestorRemoved(javax.swing.event.AncestorEvent evt) {
  195                   formAncestorRemoved(evt);
  196               }
  197           });
  198   
  199           jLabelSimulation.setFont(new java.awt.Font("Dialog", 1, 24));
  200           jLabelSimulation.setText("Simulation");
  201           add(jLabelSimulation);
  202           jLabelSimulation.setBounds(350, 10, 130, 30);
  203   
  204           jButtonReset.setText("Reset");
  205           jButtonReset.addActionListener(new java.awt.event.ActionListener() {
  206               public void actionPerformed(java.awt.event.ActionEvent evt) {
  207                   jButtonResetActionPerformed(evt);
  208               }
  209           });
  210   
  211           add(jButtonReset);
  212           jButtonReset.setBounds(530, 90, 100, 30);
  213   
  214           jTextFieldDatum.setEditable(false);
  215           jTextFieldDatum.setFont(new java.awt.Font("Dialog", 0, 18));
  216           jTextFieldDatum.setHorizontalAlignment(javax.swing.JTextField.CENTER);
  217           add(jTextFieldDatum);
  218           jTextFieldDatum.setBounds(300, 50, 330, 30);
  219   
  220           jLabelDatum.setFont(new java.awt.Font("Dialog", 1, 18));
  221           jLabelDatum.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
  222           jLabelDatum.setText("Datum");
  223           add(jLabelDatum);
  224           jLabelDatum.setBounds(230, 50, 60, 30);
  225   
  226           jToggleButtonStartStop.setFont(new java.awt.Font("Dialog", 1, 24));
  227           jToggleButtonStartStop.setIcon(new javax.swing.ImageIcon(""));
  228           jToggleButtonStartStop.setText("Start");
  229           jToggleButtonStartStop.addActionListener(new java.awt.event.ActionListener() {
  230               public void actionPerformed(java.awt.event.ActionEvent evt) {
  231                   jToggleButtonStartStopActionPerformed(evt);
  232               }
  233           });
  234   
  235           add(jToggleButtonStartStop);
  236           jToggleButtonStartStop.setBounds(230, 90, 290, 30);
  237   
  238           jLabelSimStartStop.setFont(new java.awt.Font("Dialog", 1, 14));
  239           jLabelSimStartStop.setForeground(new java.awt.Color(0, 204, 51));
  240           jLabelSimStartStop.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
  241           add(jLabelSimStartStop);
  242           jLabelSimStartStop.setBounds(230, 120, 290, 30);
  243   
  244           jTabbedPaneSimulationsverlauf.setFont(new java.awt.Font("Dialog", 0, 14));
  245           jTreeEinkauf.setFont(new java.awt.Font("Arial", 0, 14));
  246           jScrollPaneTreeHolderEinkauf.setViewportView(jTreeEinkauf);
  247   
  248           jTabbedPaneSimulationsverlauf.addTab("                    Einkauf                    ", new javax.swing.ImageIcon(""), jScrollPaneTreeHolderEinkauf);
  249   
  250           jTreeProduktion.setFont(new java.awt.Font("Arial", 0, 14));
  251           jScrollPaneTreeHolderProduktion.setViewportView(jTreeProduktion);
  252   
  253           jTabbedPaneSimulationsverlauf.addTab("                    Produktion                    ", jScrollPaneTreeHolderProduktion);
  254   
  255           jTreeVertrieb.setFont(new java.awt.Font("Arial", 0, 14));
  256           jScrollPaneTreeHolderVertrieb.setViewportView(jTreeVertrieb);
  257   
  258           jTabbedPaneSimulationsverlauf.addTab("                       Vetrieb                          ", jScrollPaneTreeHolderVertrieb);
  259   
  260           add(jTabbedPaneSimulationsverlauf);
  261           jTabbedPaneSimulationsverlauf.setBounds(20, 150, 750, 360);
  262   
  263           jPanelControll.setLayout(null);
  264   
  265           jPanelControll.setBorder(new javax.swing.border.TitledBorder("Konfiguration"));
  266           jLabelZeitfaktor.setFont(new java.awt.Font("Dialog", 1, 14));
  267           jLabelZeitfaktor.setText("Zeitfaktor");
  268           jPanelControll.add(jLabelZeitfaktor);
  269           jLabelZeitfaktor.setBounds(20, 30, 80, 19);
  270   
  271           jComboBoxZeitfaktor.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1X", "1/2X", "1/4X", "1/8X", "1/16X" }));
  272           jComboBoxZeitfaktor.addActionListener(new java.awt.event.ActionListener() {
  273               public void actionPerformed(java.awt.event.ActionEvent evt) {
  274                   jComboBoxZeitfaktorActionPerformed(evt);
  275               }
  276           });
  277   
  278           jPanelControll.add(jComboBoxZeitfaktor);
  279           jComboBoxZeitfaktor.setBounds(100, 30, 70, 20);
  280   
  281           jCheckBoxEineWoche.setText("Beende nach 1 Woche");
  282           jCheckBoxEineWoche.addActionListener(new java.awt.event.ActionListener() {
  283               public void actionPerformed(java.awt.event.ActionEvent evt) {
  284                   jCheckBoxEineWocheActionPerformed(evt);
  285               }
  286           });
  287   
  288           jPanelControll.add(jCheckBoxEineWoche);
  289           jCheckBoxEineWoche.setBounds(20, 60, 160, 24);
  290   
  291           add(jPanelControll);
  292           jPanelControll.setBounds(20, 50, 190, 90);
  293   
  294       }//GEN-END:initComponents
  295       
  296       private void formAncestorRemoved(javax.swing.event.AncestorEvent evt) {//GEN-FIRST:event_formAncestorRemoved
  297           setIsActive(false);
  298       }//GEN-LAST:event_formAncestorRemoved
  299       
  300       private void formAncestorAdded(javax.swing.event.AncestorEvent evt) {//GEN-FIRST:event_formAncestorAdded
  301           setIsActive(true);
  302       }//GEN-LAST:event_formAncestorAdded
  303       
  304       private void jCheckBoxEineWocheActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxEineWocheActionPerformed
  305           if (jCheckBoxEineWoche.getSelectedObjects().length > 0) {
  306               beendeNachEinerWoche = true;
  307           } else {
  308               beendeNachEinerWoche = false;
  309           }
  310       }//GEN-LAST:event_jCheckBoxEineWocheActionPerformed
  311       
  312       private void jToggleButtonStartStopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButtonStartStopActionPerformed
  313           startStopSimulation();
  314       }//GEN-LAST:event_jToggleButtonStartStopActionPerformed
  315       
  316       private void jComboBoxZeitfaktorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxZeitfaktorActionPerformed
  317           faktor = jComboBoxZeitfaktor.getSelectedIndex()+1;
  318       }//GEN-LAST:event_jComboBoxZeitfaktorActionPerformed
  319       
  320       private void jButtonResetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonResetActionPerformed
  321           resetFields();
  322           
  323           int i = JOptionPane.showConfirmDialog(this, "Achtung! Es wird empfohlen die Datenbank auch zu resetten!", "Reset", JOptionPane.YES_NO_OPTION);
  324           
  325           if (i == 0) {
  326               JPanelOptions jPanelOptions = (JPanelOptions) wiSimMainController.getActions().get("Options");
  327               jPanelOptions.einlesenQueries();
  328               JOptionPane.showMessageDialog(this, "Die Datenbank wurde resettet!");
  329           }
  330       }//GEN-LAST:event_jButtonResetActionPerformed
  331       
  332       // Variables declaration - do not modify//GEN-BEGIN:variables
  333       private javax.swing.JButton jButtonReset;
  334       private javax.swing.JCheckBox jCheckBoxEineWoche;
  335       private javax.swing.JComboBox jComboBoxZeitfaktor;
  336       private javax.swing.JLabel jLabelDatum;
  337       private javax.swing.JLabel jLabelSimStartStop;
  338       private javax.swing.JLabel jLabelSimulation;
  339       private javax.swing.JLabel jLabelZeitfaktor;
  340       private javax.swing.JPanel jPanelControll;
  341       private javax.swing.JScrollPane jScrollPaneTreeHolderEinkauf;
  342       private javax.swing.JScrollPane jScrollPaneTreeHolderProduktion;
  343       private javax.swing.JScrollPane jScrollPaneTreeHolderVertrieb;
  344       private javax.swing.JTabbedPane jTabbedPaneSimulationsverlauf;
  345       private javax.swing.JTextField jTextFieldDatum;
  346       private javax.swing.JToggleButton jToggleButtonStartStop;
  347       private javax.swing.JTree jTreeEinkauf;
  348       private javax.swing.JTree jTreeProduktion;
  349       private javax.swing.JTree jTreeVertrieb;
  350       // End of variables declaration//GEN-END:variables
  351       
  352       /** Baut den JTree mit einer Liste aller Lieferungen auf. F?gt die gelieferten
  353        * Einzelteile au?erdem in die Datenbank.
  354        */
  355       public void refreshJTreeEinkauf() {
  356           actDay++;
  357           Collection etatListe = new Vector();
  358           Collection etatListeHeute = new Vector();
  359           
  360           //Liste aller Einzelteilauftr?ge
  361           try {
  362               etatListe = dao.getEinzelteilauftraege();
  363           } catch (WiSimDAOException e) {
  364               wiSimLogger.log("refreshJTreeEinkauf()", e);
  365           }
  366           
  367           actDateGC.setTimeInMillis(actDate.getTime());
  368           
  369           //Neuer Node im JTree
  370           dateNode = new IconNode(actDateGC.get(5) + "." + (actDateGC.get(2) + 1) + "." + actDateGC.get(1));
  371           dateNode.setIcon(rightIcon);
  372           
  373           Iterator etatListe_it = etatListe.iterator();
  374           while (etatListe_it.hasNext()) {
  375               Einzelteilauftrag etat = (Einzelteilauftrag) etatListe_it.next();
  376               
  377               Date lieferDate = etat.getLieferdatum();
  378               lieferDateGC.setTimeInMillis(lieferDate.getTime());
  379               
  380               //Der Einzelteilauftrag hat das selbe Datum wie das aktuelle Datum der Simulation
  381               if (actDateGC.get(5) == lieferDateGC.get(5) && actDateGC.get(2) == lieferDateGC.get(2)) {
  382                   Lieferant lt = new Lieferant();
  383                   try {
  384                       lt = dao.getLieferant(etat.getLieferantNr());
  385                   } catch (WiSimDAOException e) {
  386                       wiSimLogger.log("refreshJTreeEinkauf()", e);
  387                   }
  388                   
  389                   //Neuer Node im JTree
  390                   lieferantNode = new IconNode("Auftrags Nr.: " + etat.getNr() + "    Lieferant: " + lt.getFirma());
  391                   lieferantNode.setIcon(vanIcon);
  392                   
  393                   Collection etatPosis = new Vector();
  394                   try {
  395                       etatPosis = dao.getEinzelteilAuftragsPositionen(etat.getNr());
  396                   } catch (WiSimDAOException e) {
  397                       wiSimLogger.log("refreshJTreeEinkauf()", e);
  398                   }
  399                   
  400                   Iterator etatPosis_it = etatPosis.iterator();
  401                   int i = 1;
  402                   while (etatPosis_it.hasNext()) {
  403                       EinzelteilauftragPosition etatPos = (EinzelteilauftragPosition) etatPosis_it.next();
  404                       Einzelteil et = new Einzelteil();
  405                       try {
  406                           et = dao.getEinzelteil(etatPos.getEtNr());
  407                       } catch (WiSimDAOException e) {
  408                           wiSimLogger.log("refreshJTreeEinkauf()", e);
  409                       }
  410                       
  411                       boolean status = runController.einzelteilLieferung(et.getNr(), etatPos.getBestellmenge());
  412                       
  413                       //Neuer Node im JTree
  414                       if (status) {
  415                           positionNode = new IconNode("Position: " + i + "    Einzelteil: " + et.getName() + "    Menge: " + etatPos.getBestellmenge() + " wurde ins Lager geschafft!");
  416                           positionNode.setIcon(boxIcon);
  417                       } else {
  418                           positionNode = new IconNode("Position: " + i + "    Einzelteil: " + et.getName() + "    Menge: " + etatPos.getBestellmenge() + " ?berf?llt das Lager!");
  419                           positionNode.setIcon(errorIcon);
  420                       }
  421                       
  422                       lieferantNode.add(positionNode);
  423                       i++;
  424                   }
  425                   dateNode.add(lieferantNode);
  426               }
  427           }
  428           rootNodeLieferungen.add(dateNode);
  429           jTreeEinkauf.setModel(new DefaultTreeModel(rootNodeLieferungen));
  430           jTreeEinkauf.setCellRenderer(new IconNodeRenderer());
  431           
  432           try {
  433               Iterator tp_it = treepathsEinkauf.iterator();
  434               while (tp_it.hasNext()) {
  435                   TreePath tp = (TreePath) tp_it.next();
  436                   jTreeEinkauf.expandPath(tp);
  437               }
  438           } catch (ConcurrentModificationException c) {}
  439           
  440       }
  441       
  442       /** Baut den JTree mit einer Liste aller produzierten Hubs und verbrauchten Einzelteile auf. */
  443       public void refreshJTreeProduktion() {
  444           if (actDay != 1) {
  445               actDateGC.setTimeInMillis(actDate.getTime()-24*60*60*1000);
  446               
  447               //JTree Produktion Ereignisbaum wird aufgebaut
  448               //Neuer Node im JTree
  449               dateNode = new IconNode(actDateGC.get(5) + "." + (actDateGC.get(2) + 1) + "." + actDateGC.get(1));
  450               dateNode.setIcon(rightIcon);
  451               
  452               Vector artikelLagerElemente = new Vector();
  453               int hubBestandAktuell = 0;
  454               
  455               try {
  456                   artikelLagerElemente = dao.getArtikelLagerElement();
  457               } catch (WiSimDAOException e) {
  458                   wiSimLogger.log("refreshJTreeProduktion()", e);
  459               }
  460               
  461               Iterator artIt = artikelLagerElemente.iterator();
  462               while (artIt.hasNext()) {
  463                   EinzelteilLagerElement etElem = (EinzelteilLagerElement) artIt.next();
  464                   hubBestandAktuell = hubBestandAktuell + etElem.getBestand();
  465               }
  466               
  467               int hubBestandDifferenz = hubBestandAktuell - hubBestand;
  468               hubBestand = hubBestandAktuell;
  469               
  470               //Neuer Node im JTree
  471               hubProduktionNode = new IconNode("Heute wurden " + hubBestandDifferenz + " Hubs produziert!");
  472               hubProduktionNode.setIcon(hubIcon);
  473               
  474               //Neues Nodes im JTree
  475               if (hubBestandDifferenz > 0) {
  476                   Enumeration keys = stueckliste.keys();
  477                   while (keys.hasMoreElements()) {
  478                       String key = (String) keys.nextElement();
  479                       Einzelteil et = new Einzelteil();
  480                       
  481                       try {
  482                           et = dao.getEinzelteil(Integer.parseInt(key));
  483                       } catch (WiSimDAOException e) {
  484                           wiSimLogger.log("refreshJTreeProduktion()", e);
  485                       }
  486                       
  487                       hubEinzelteilVerbrauch = new IconNode("Einzelteil: " + et.getName() + "    Verbrauch: " + (Integer.parseInt((String) stueckliste.get(key)) * hubBestandDifferenz + " Stk."));
  488                       hubEinzelteilVerbrauch.setIcon(boxOpenIcon);
  489                       
  490                       hubProduktionNode.add(hubEinzelteilVerbrauch);
  491                   }
  492               }
  493               dateNode.add(hubProduktionNode);
  494               
  495               rootNodeProduktion.add(dateNode);
  496               jTreeProduktion.setModel(new DefaultTreeModel(rootNodeProduktion));
  497               jTreeProduktion.setCellRenderer(new IconNodeRenderer());
  498               
  499               try {
  500                   Iterator tp_it = treepathsProduktion.iterator();
  501                   while (tp_it.hasNext()) {
  502                       TreePath tp = (TreePath) tp_it.next();
  503                       jTreeProduktion.expandPath(tp);
  504                   }
  505               } catch (ConcurrentModificationException c) {}
  506           } else {
  507               rootNodeProduktion.add(new IconNode("Es wird produziert...", false, hubIcon));
  508               jTreeProduktion.setModel(new DefaultTreeModel(rootNodeProduktion));
  509               jTreeProduktion.setCellRenderer(new IconNodeRenderer());
  510           }
  511       }
  512       
  513       /** Baut den JTree mit einer Liste aller verkauften Hubs f?r einen Tag auf. Leert au?erdem
  514        * das Lager je nach Anzahl der verkauften Hubs
  515        */
  516       public void refreshJTreeVertrieb() {
  517           actDateGC.setTimeInMillis(actDate.getTime());
  518           
  519           //JTree Vertrieb Ereignisbaum wird aufgebaut
  520           //Neuer Node im JTree
  521           dateNode = new IconNode(actDateGC.get(5) + "." + (actDateGC.get(2) + 1) + "." + actDateGC.get(1));
  522           dateNode.setIcon(rightIcon);
  523           
  524           Iterator vertragIt = vertraege.iterator();
  525           while (vertragIt.hasNext()) {
  526               Vertrag vertrag = (Vertrag) vertragIt.next();
  527               Date lieferDate = vertrag.getLieferdatum();
  528               
  529               lieferDateGC.setTimeInMillis(lieferDate.getTime());
  530               
  531               //Der Vertrag hat das selbe Datum wie das aktuelle Datum der Simulation
  532               if (actDateGC.get(5) == lieferDateGC.get(5) && actDateGC.get(2) == lieferDateGC.get(2)) {
  533                   int menge = 0;
  534                   
  535                   try {
  536                       menge = dao.getVertragsPositionMenge(vertrag.getVertragsId(), 1);
  537                   } catch (WiSimDAOException e) {
  538                       wiSimLogger.log("refreshJTreeVertrieb()", e);
  539                   }
  540                   
  541                   //Lagermenge der Hubs wird verringert
  542                   boolean status = false;
  543                   try {
  544                       status = dao.setArtikelLagerBestand(1, -menge);
  545                   } catch (WiSimDAOWriteException e) {
  546                       wiSimLogger.log("refreshJTreeVertrieb()", e);
  547                   } catch (WiSimDAOException e) {
  548                       wiSimLogger.log("refreshJTreeVertrieb()", e);
  549                   }
  550                   
  551                   Kunde kunde = new Kunde();
  552                   
  553                   try {
  554                       kunde = dao.getKunde(vertrag.getKundenId());
  555                   } catch (WiSimDAOException e) {
  556                       wiSimLogger.log("refreshJTreeVertrieb()", e);
  557                   }
  558                   
  559                   //Neuer Node im JTree
  560                   hubVertrieb = new IconNode("Auftrags Nr.: " + vertrag.getVertragsId() + "    Kunde: " + kunde.getFirma() + " (" + kunde.getNachname() + " " + kunde.getVorname() + ")");
  561                   hubVertrieb.setIcon(vanIcon);
  562                   
  563                   //Neuer Node im JTree
  564                   if (status) {
  565                       hubVertriebPos = new IconNode("Artikel: Hub   Menge: " + menge + " Stk. wurden an den Kunden geliefert!");
  566                       hubVertriebPos.setIcon(hubIcon);
  567                       hubBestand = hubBestand - menge;
  568                   } else {
  569                       hubVertriebPos = new IconNode("Artikel: Hub   Menge: " + menge + " Stk. konnte nicht geliefert werden (Lager leer)!");
  570                       hubVertriebPos.setIcon(errorIcon);
  571                   }
  572                   hubVertrieb.add(hubVertriebPos);
  573                   dateNode.add(hubVertrieb);
  574               }
  575           }
  576           rootNodeVertrieb.add(dateNode);
  577           jTreeVertrieb.setModel(new DefaultTreeModel(rootNodeVertrieb));
  578           jTreeVertrieb.setCellRenderer(new IconNodeRenderer());
  579           
  580           try {
  581               Iterator tp_it = treepathsVertrieb.iterator();
  582               while (tp_it.hasNext()) {
  583                   TreePath tp = (TreePath) tp_it.next();
  584                   jTreeVertrieb.expandPath(tp);
  585               }
  586           } catch (ConcurrentModificationException c) {}
  587       }
  588       
  589       /** Erneuert die Datumsanzeige.
  590        * @param actDate
  591        */
  592       public void refreshTextFieldDate(java.util.Date actDate) {
  593           this.actDate.setTime(actDate.getTime());
  594           GregorianCalendar actDateGC = new GregorianCalendar();
  595           actDateGC.setTimeInMillis(actDate.getTime());
  596           jTextFieldDatum.setText(df.format(actDate));
  597       }
  598       
  599       /** Setzt das actDate
  600        * @param actDate
  601        */
  602       public void setActDate(Date actDate) {
  603           this.actDate = actDate;
  604       }
  605       
  606       /** L?scht die JTrees und setzt das Datumsfeld zur?ck. */
  607       public void resetFields() {
  608           actDate = new Date(new GregorianCalendar(2003, 8, 1, 0, 0).getTimeInMillis());
  609           actDay = 0;
  610           jTextFieldDatum.setText("");
  611           jTreeEinkauf.setModel(null);
  612           jTreeVertrieb.setModel(null);
  613           jTreeProduktion.setModel(null);
  614           jLabelSimStartStop.setText("");
  615           rootNodeLieferungen = new IconNode("");
  616           rootNodeVertrieb = new IconNode("");
  617           rootNodeProduktion = new IconNode("");
  618           rootNodeLieferungen.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
  619           rootNodeVertrieb.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
  620           rootNodeProduktion.setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
  621           treepathsEinkauf.clear();
  622           treepathsProduktion.clear();
  623           treepathsVertrieb.clear();
  624           resetDateFields();
  625       }
  626       
  627       private void startStopSimulation() {
  628           int anzahlArbeitsplaetze = -1;
  629           
  630           if (jToggleButtonStartStop.isSelected()) {
  631               resetFields();
  632               jComboBoxZeitfaktor.setEnabled(false);
  633               jButtonReset.setEnabled(false);
  634               jCheckBoxEineWoche.setEnabled(false);
  635               actTime = new ActualTime();
  636               coreTime = new CoreTime(actTime, faktor, TIMESTEP);
  637               gc.setTime(actDate);
  638               updateSimulationsauswertung =
  639               new UpdateSimulationsauswertung(
  640               actTime,
  641               wiSimMainController,
  642               beendeNachEinerWoche);
  643               updateLagerThread = new UpdateLagerThread(wiSimMainController);
  644               
  645               coreTime.start();
  646               updateSimulationsauswertung.start();
  647               updateLagerThread.start();
  648               
  649               // Simulation der Produktion
  650               try {
  651                   anzahlArbeitsplaetze = dao.getAnzahlArbeitspl?tze();
  652               }
  653               catch (WiSimDAOException e) {
  654                   wiSimLogger.log("startStopSimulation()", e);
  655               }
  656               
  657               runController = new ProduktionsController(wiSimMainController);
  658               try {
  659                   threads = new ProduktionsSimulationThread[anzahlArbeitsplaetze+1];
  660                   for (int i = 1; i <= anzahlArbeitsplaetze; i++) {
  661                       
  662                       threads[i] =
  663                       new ProduktionsSimulationThread(
  664                       dao.getArbeitsplatz(i),
  665                       runController,
  666                       wiSimMainController,
  667                       faktor,
  668                       TIMESTEP);
  669                       threads[i].start();
  670                       
  671                   }
  672               }
  673               catch (WiSimDAOException e) {
  674                   wiSimLogger.log("startStopSimulation()", e);
  675               }
  676               
  677               // Ende Simulation der Produktion
  678               
  679               jToggleButtonStartStop.setText("Ende");
  680               
  681               jLabelSimStartStop.setForeground(new java.awt.Color(51, 153, 51));
  682               jLabelSimStartStop.setText("Simulation wurde gestartet!");
  683           }
  684           else {
  685               coreTime.interrupt();
  686               updateSimulationsauswertung.interrupt();
  687               updateLagerThread.interrupt();
  688               
  689               try {
  690                   anzahlArbeitsplaetze = dao.getAnzahlArbeitspl?tze();
  691               }
  692               catch (WiSimDAOException e) {
  693                   wiSimLogger.log("startStopSimulation()", e);
  694               }
  695               
  696               // Simulation der Produktion
  697               for (int i = 1; i <= anzahlArbeitsplaetze; i++) {
  698                   threads[i].interrupt();
  699               }
  700               
  701               // Ende Simulation der Produktion
  702               enableControll();
  703               jToggleButtonStartStop.setText("Start");
  704               jLabelSimStartStop.setForeground(java.awt.Color.red);
  705               jLabelSimStartStop.setText("Simulation wurde beendet!");
  706           }
  707       }
  708       
  709       /** Schaltet die Kontrollfelder der Simulation wieder frei */
  710       public void enableControll() {
  711           jComboBoxZeitfaktor.setEnabled(true);
  712           jButtonReset.setEnabled(true);
  713           jCheckBoxEineWoche.setEnabled(true);
  714       }
  715       
  716       /** Setzt das Datum des Men?s zur?ck */
  717       public void resetDateFields() {
  718           JPanelSimulationStart jPanelSimulationStart = (JPanelSimulationStart) wiSimMainController.getActions().get("SimulationStart");
  719           jPanelSimulationStart.resetTextFieldDate();
  720           wiSimMainController.resetTextFieldDate();
  721       }
  722       
  723       /** Setzt das Datumsfeld dieses Panes zur?ck */
  724       public void resetTextFieldDate() {
  725           actDate = new Date(new GregorianCalendar(2003, 8, 1, 0, 0).getTimeInMillis());
  726           DateFormat justDate = DateFormat.getDateInstance(DateFormat.FULL, Locale.GERMANY);
  727           jTextFieldDatum.setText(justDate.format(actDate));
  728       }
  729       
  730       /** Setzt den Button zum Starten und Stoppen der Simulation in den Start-Zustand */
  731       public void startStopButtonDoClick() {
  732           jToggleButtonStartStop.setFocusPainted(false);
  733           jToggleButtonStartStop.setSelected(false);
  734           jToggleButtonStartStop.setText("Start");
  735           jLabelSimStartStop.setForeground(java.awt.Color.red);
  736           jLabelSimStartStop.setText("Simulation wurde beendet!");
  737       }
  738       
  739       /** Setzt die Variable isActive auf TRUE oder FALSE
  740        * @param isActive
  741        */
  742       public void setIsActive(boolean isActive) {
  743           this.isActive = isActive;
  744       }
  745       
  746       /** Befindet sich der Benutzer auf diesem Pane, so ist "isActive" = TRUE.
  747        *  Verl?sst der Benutzer das Pane, so ist "isActive" = FALSE.
  748        *  Wichtig ist diese Variable f?r die Simulation: Es wird nur das Pane
  749        *  aktualisiert, auf dem sich der Benutzer gerade befindet!
  750        * @return boolean
  751        */
  752       public boolean getIsActive() {
  753           return isActive;
  754       }
  755       
  756       /**
  757        * Datenbankinfos f?r die Simulation
  758        */
  759       public void initializeCollections() {
  760           try {
  761               artikelLagerElemente = dao.getArtikelLagerElement();
  762               stueckliste = dao.getStueckliste(1);
  763               vertraege = dao.getVertraege();
  764           } catch (WiSimDAOException e) {
  765               wiSimLogger.log("JPanelSimulationStart()", e);
  766           }
  767           
  768           Iterator artIt = artikelLagerElemente.iterator();
  769           while (artIt.hasNext()) {
  770               EinzelteilLagerElement etElem = (EinzelteilLagerElement) artIt.next();
  771               hubBestand = hubBestand + etElem.getBestand();
  772           }
  773       }
  774       
  775       /**
  776        * Expansion Listeners f?r die JTrees: Expandierte Nodes werden gespeichert
  777        * und gehen nach setModel(newModel) nicht verloren!
  778        */
  779       public void addJTreeListener() {
  780           jTreeEinkauf.addTreeExpansionListener(
  781           new javax.swing.event.TreeExpansionListener() {
  782               public void treeExpanded(TreeExpansionEvent e) {
  783                   treepathsEinkauf.add(e.getPath());
  784               }
  785               
  786               public void treeCollapsed(TreeExpansionEvent e) {
  787                   treepathsEinkauf.remove(e.getPath());
  788                   Iterator tp_it = treepathsEinkauf.iterator();
  789                   while (tp_it.hasNext()) {
  790                       TreePath tp = (TreePath) tp_it.next();
  791                       if (e.getPath().isDescendant(tp)) {
  792                           treepathsEinkauf.remove(tp);
  793                       }
  794                   }
  795               }
  796           }
  797           );
  798           
  799           jTreeProduktion.addTreeExpansionListener(
  800           new javax.swing.event.TreeExpansionListener() {
  801               public void treeExpanded(TreeExpansionEvent e) {
  802                   treepathsProduktion.add(e.getPath());
  803               }
  804               
  805               public void treeCollapsed(TreeExpansionEvent e) {
  806                   treepathsProduktion.remove(e.getPath());
  807                   Iterator tp_it = treepathsProduktion.iterator();
  808                   while (tp_it.hasNext()) {
  809                       TreePath tp = (TreePath) tp_it.next();
  810                       if (e.getPath().isDescendant(tp)) {
  811                           treepathsProduktion.remove(tp);
  812                       }
  813                   }
  814               }
  815           }
  816           );
  817           
  818           jTreeVertrieb.addTreeExpansionListener(
  819           new javax.swing.event.TreeExpansionListener() {
  820               public void treeExpanded(TreeExpansionEvent e) {
  821                   treepathsVertrieb.add(e.getPath());
  822               }
  823               
  824               public void treeCollapsed(TreeExpansionEvent e) {
  825                   treepathsVertrieb.remove(e.getPath());
  826                   Iterator tp_it = treepathsVertrieb.iterator();
  827                   while (tp_it.hasNext()) {
  828                       TreePath tp = (TreePath) tp_it.next();
  829                       if (e.getPath().isDescendant(tp)) {
  830                           treepathsVertrieb.remove(tp);
  831                       }
  832                   }
  833               }
  834           }
  835           );
  836       }
  837   }

Save This Page
Home » openjdk-7 » net.sourceforge.wisim » controller » [javadoc | source]