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 }