Skip to content
Snippets Groups Projects
Automa.java 4.84 KiB
Newer Older
Elisa Giglio's avatar
Elisa Giglio committed
import java.io.BufferedReader;
import java.io.FileReader;
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;
	
	
	public Automa() throws JSONException, IOException {
		this.jsonObject = new JSONObject(leggiFile("./automa.json"));
		this.statoInterruttore = "off";
		this.statoSuono = "off";
		this.statoAttuale = 0;
		riempiHashTable();
	}
	
	
	private void riempiHashTable() throws JSONException, IOException {
		this.deltaSensori = new Hashtable<String, Integer>();
		JSONObject jsObj = new JSONObject(leggiFile("./CONF/deltaSensoriMovimento.json"));
		Iterator<String> keys = jsObj.keys();
		while(keys.hasNext()) {
			String key = keys.next();
			int value = jsObj.getInt(key);
			deltaSensori.put(key, value);
		}
	}
	
	
	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 {
		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);
				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 {
		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);
				aggiornaInterruttoreESuono();
			}
		}
	}
	
	
	public synchronized void changeStatoInterruttore() throws JSONException {
		if(statoInterruttore.equals("on"))
			calcolaNuovoStatoMsgFromInterruttore("off");
		else 
			calcolaNuovoStatoMsgFromInterruttore("on");
	}
	
	public synchronized void aggiornaStatoSuono(String newStatoSuono) throws JSONException {
		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";
	}
}