View Javadoc

1   /*
2    * AbstractControladorTemperatura.java
3    *
4    * Created on 28 de Março de 2007, 16:42
5    *
6    * To change this template, choose Tools | Template Manager
7    * and open the template in the editor.
8    */
9   
10  package tempcontroller.base;
11  
12  import java.util.HashSet;
13  import java.util.Iterator;
14  import java.util.Set;
15  
16  /**
17   * Classe abstrata de um controlador de temperatura. Controla
18   * em especial o estado do controlador.
19   */
20  public abstract class AbstractControladorTemperatura 
21          implements IControladorTemperatura {
22      
23      /**
24       * Estado atual do controlador.
25       */
26      private IControladorTemperatura.Estado estado = 
27              IControladorTemperatura.Estado.SEM_ALVO;
28  
29      /**
30       * Conjunto de ouvintes de eventos deste controlador
31       * de temperatura.
32       */
33      private final Set<IOuvinteMudancaTemperatura> ouvintes = 
34              new HashSet<IOuvinteMudancaTemperatura>();
35      
36      /**
37       * Temperatura alvo.
38       */
39      private double temperaturaAlvo;
40      
41      /**
42       * Obtém o estado do controlador.
43       * @return O estado do controlador.
44       */
45      public IControladorTemperatura.Estado getEstado() {
46          return estado;
47      }
48  
49      /**
50       * Adiciona um ouvinte ao controlador de temperatura.
51       * @param ouvinte Um ouvinte dos eventos do controlador de 
52       * temperatura.
53       */
54      public void addIOuvinteMundancaTemperatura(
55              final IOuvinteMudancaTemperatura ouvinte) {
56          ouvintes.add(ouvinte);
57      }
58  
59      /**
60       * Remove um ouvinte dos eventos do controlador.
61       * @param ouvinte Ouvinte que não quer mais receber eventos
62       * do controlador.
63       */
64      public void removeOuvinteMudancaTemperatura(
65              final IOuvinteMudancaTemperatura ouvinte) {
66          ouvintes.remove(ouvinte);
67      }
68      
69      /**
70       * Notifica a todos os ouvintes o evento de mudança de temperatura.
71       */
72      protected void fireMudancaTemperatura() {
73          Iterator<IOuvinteMudancaTemperatura> it = ouvintes.iterator();
74          while (it.hasNext()) {
75              IOuvinteMudancaTemperatura ouvinte = it.next();
76              ouvinte.novaTemperatura(getTemperatura());
77          }
78      }
79  
80      /**
81       * Notifica a todos os ouvintes o evento de temperatira alvo
82       * alcancada.
83       */
84      protected void fireTemperaturaAlvoAlcancada() {
85          Iterator<IOuvinteMudancaTemperatura> it = ouvintes.iterator();
86          while (it.hasNext()) {
87              IOuvinteMudancaTemperatura ouvinte = it.next();
88              ouvinte.temperaturaAlvoAlcancada(getTemperatura());
89          }
90      }
91      
92      /**
93       * Define uma nova temparatura alvo.
94       * @param temperatura Nova temperatura alvo.
95       */
96      public void setTemperaturaAlvo(final double temperatura) {
97          temperaturaAlvo = temperatura;
98      }
99  
100     /**
101      * Obtém a temperatura alvo deste controlador.
102      * @return Temperatura alvo deste controlador.
103      */
104     public double getTemperaturaAlvo() {
105         return temperaturaAlvo;
106     }
107     
108     /**
109      * Libera os recursos alocados por este controlador.
110      * Por ser uma classe abstrata, não faz nada.
111      */
112     public void dispose() {
113         // nao faz nada por padrão. Subclasses
114         // podem ou não implementar este método.
115     }
116 
117     /**
118      * Cancela a busca por uma temperatura alvo.
119      */
120     public void cancelaTemperaturaAlvo() {
121         estado = IControladorTemperatura.Estado.SEM_ALVO;
122         cancelaTemperaturaAlvoImpl();
123     }
124 
125     /**
126      * Cancela a busca por uma temperatura alvo.
127      * Chamado pela implementação desta classe do método
128      * 'cancelaTemperaturaAlvo'.
129      */
130     protected abstract void cancelaTemperaturaAlvoImpl();
131 }