Newer
Older
import java.io.IOException;
import java.util.Hashtable;
import java.util.Iterator;
import org.json.JSONException;
import org.json.JSONObject;
public class Automa {
private JSONObject jsonObject; //tabella che descrive l'automa
private Hashtable<String,Integer> deltaSensori; // ad ogni sensore di movimento e' associato il valore di delta
private int statoAttuale;
private String statoInterruttore;
private String statoSuono;
private static final String FILE_AUTOMA = "../automa.json";
public static final String FILE_STATO = "../stato.json";
private static final String FILE_DELTA_SENSORI = "../CONF/deltaSensoriMovimento.json";
public Automa() throws JSONException, IOException {
this.jsonObject = new JSONObject(Helper.leggiFile(FILE_AUTOMA));
setStati(false);
private synchronized void setStati(boolean write) throws JSONException, IOException {
JSONObject statoJson = new JSONObject(Helper.leggiFile(FILE_STATO));
if(write) {
// devo aggiornare lo stato nel FILE_STATO
Helper.scriviFile(statoJson.put("stato",this.statoAttuale), FILE_STATO);
}
else {
// devo capire in quale stato mi trovo e impostare di conseguenza lo statoInterruttore e lo statoSuono
this.statoAttuale = statoJson.getInt("stato");
aggiornaInterruttoreESuono();
}
}
private void riempiHashTable() throws JSONException, IOException {
this.deltaSensori = new Hashtable<String, Integer>();
JSONObject jsObj = new JSONObject(Helper.leggiFile(FILE_DELTA_SENSORI));
Iterator<String> keys = jsObj.keys();
while(keys.hasNext()) {
String key = keys.next();
int value = jsObj.getInt(key);
deltaSensori.put(key, value);
}
}
// private synchronized void scriviFile(JSONObject json, String path) throws IOException {
// BufferedWriter b = new BufferedWriter(new FileWriter(path));
// b.write(json.toString());
// b.close();
// }
// private String leggiFile(String path) throws IOException {
// String line;
// String answer = "";
// FileReader fileReader = new FileReader(path);
// BufferedReader bufferedReader = new BufferedReader(fileReader);
// while((line = bufferedReader.readLine()) != null) {
// answer += line;
// }
// bufferedReader.close();
// return answer;
// }
public int getDelta(String nomeSensore) {
return deltaSensori.get(nomeSensore);
}
// SERVIRA FORSE PER LA PERSISTENZA
// private synchronized void calcolaStato(String newStatoInterruttore, String newStatoSuono) throws JSONException {
// Iterator<String> keys = jsonObject.keys();
// while(keys.hasNext()) {
// String key = keys.next();
// JSONObject riga = jsonObject.getJSONObject(key);
// if(riga.getString("out0").equals(newStatoInterruttore) && riga.getString("out1").equals(newStatoSuono)) {
// this.statoAttuale = riga.getInt("stato");
// this.statoInterruttore = newStatoInterruttore;
// this.statoSuono = newStatoSuono;
// }
// }
// }
// e' cambiato lo stato dell'interruttore, per cui cerco nel file json in quale nuovo stato devo andare
private synchronized void calcolaNuovoStatoMsgFromInterruttore(String newStatoInterruttore) throws JSONException, IOException {
Iterator<String> keys = jsonObject.keys();
while(keys.hasNext()) {
String key = keys.next();
JSONObject riga = jsonObject.getJSONObject(key);
if(riga.getInt("stato")==statoAttuale) {
this.statoAttuale = riga.getInt("cmd"+newStatoInterruttore);
setStati(true); //scrivo nel file il nuovo stato in cui mi trovo
aggiornaInterruttoreESuono();
}
}
}
//in base allo stato attuale dell'antifurto, calcolo lo stato dell'interruttore e del suono
private synchronized void aggiornaInterruttoreESuono() throws JSONException {
Iterator<String> keys = jsonObject.keys();
while(keys.hasNext()) {
String key = keys.next();
JSONObject riga = jsonObject.getJSONObject(key);
if(riga.getInt("stato")==statoAttuale) {
this.statoInterruttore = riga.getString("out0");
this.statoSuono = riga.getString("out1");
}
}
}
// e' cambiato lo stato del suono, per cui cerco nel file json in quale nuovo stato devo andare
private synchronized void calcolaNuovoStatoMsgFromSuono(String newStatoSuono) throws JSONException, IOException {
String jsonKey = "";
if(newStatoSuono.equals("on"))
jsonKey = "eventValMaggioreSoglia";
else
jsonKey = "eventValMinoreSoglia";
Iterator<String> keys = jsonObject.keys();
while(keys.hasNext()) {
String key = keys.next();
JSONObject riga = jsonObject.getJSONObject(key);
if(riga.getInt("stato")==statoAttuale) {
this.statoAttuale = riga.getInt(jsonKey);
setStati(true); //scrivo nel file il nuovo stato in cui mi trovo
public synchronized void changeStatoInterruttore() throws JSONException, IOException {
if(statoInterruttore.equals("on"))
calcolaNuovoStatoMsgFromInterruttore("off");
else
calcolaNuovoStatoMsgFromInterruttore("on");
}
public synchronized void aggiornaStatoSuono(String newStatoSuono) throws JSONException, IOException {
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
calcolaNuovoStatoMsgFromSuono(newStatoSuono);
}
public synchronized String getStatoAutoma() {
return "{\"stato\":"+statoAttuale+",\"interruttore\":\""+statoInterruttore+"\",\"allarme\":\""+statoSuono+"\"}";
}
public synchronized String getStatoInterruttore() {
return statoInterruttore;
}
public synchronized String getStatoSuono() {
return statoSuono;
}
// Ritorna true se l'antifurto e' attivo
public synchronized boolean antifurtoAttivo() {
if(statoInterruttore.equals("on"))
return true;
return false;
}
// Ritorna true se l'antifurto sta suonando
public synchronized boolean allarme() {
if(statoSuono.equals("on"))
return true;
return false;
}
// con input la stringa "0" restituisce "off"
// con input la stringa "1" restituisce "on"
public String converter(int num) {
if(num==0)
return "off";
return "on";
}
}