Skip to content
Snippets Groups Projects
Automa.java 4.84 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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";
    	}
    }