/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package eieruhr; import controller.EieruhrController; import java.awt.Dimension; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.System.Logger; import java.util.Observable; import java.util.Observer; import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.JComponent; import model.Model; import view.View; /** * Builder Class * @author Apollo */ public class Fassade extends JComponent implements PropertyChangeListener, Observer { Dimension preferredSize; Dimension minimumSize; private static Logger log; private static Model model; private static View view; private static EieruhrController controller; private CopyOnWriteArrayList listenerListe; private static int neu,alt; public Fassade() { minimumSize = new Dimension(100,50); preferredSize = new Dimension(200,100); model = new Model(); view = new View(); controller = new EieruhrController(view, model); controller.registerEvents(); registerEvents(); this.listenerListe = new CopyOnWriteArrayList(); alt = 0; } public void setZahl(int x) { model.setStartZahl(x); } public int getZahl() { return model.getZahl(); } public Dimension getPreferredSize() { return preferredSize; } public Dimension getMinimumSize() { return minimumSize; } public void isWarten(boolean warten) { if(warten) { model.isWarten(); } } public void isWeiterlaufen(boolean weiter){ if(weiter) { model.isWeiterlaufen(); } } public void starten() { model.start(); } public void setaktuelleZahl() { neu = model.getZahl(); this.firePropertyChange("aktuelle Zahl", alt, neu); alt = neu; } public void propertyChange(PropertyChangeEvent evt) { Object obj = evt.getNewValue(); if (obj instanceof Boolean) { // Reaktion auf die Nachricht: this.starten(); } } public synchronized void addEigenerListener(TimerListener horcher) { listenerListe.add(horcher); } public synchronized void removeEignerListener(TimerListener horcher) { listenerListe.remove(horcher); } public void fireTimerEvent(TimerEvent evt) { listenerListe.forEach(listener -> listener.timerabgelaufen(evt)); } public void registerEvents() { model.addObserver(this); } @Override public void update(Observable arg0, Object arg1) { if(model.getZahl() == 0) { fireTimerEvent(new TimerEvent(this)); } else { setaktuelleZahl(); } } }