/**
*
*/
package fr.nantes.univ.alma.human.impl;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Date;
import fr.nantes.univ.alma.common.remote.IAlarm;
import fr.nantes.univ.alma.common.remote.IHuman;
import fr.nantes.univ.alma.human.observer.Observable;
import fr.nantes.univ.alma.human.observer.Observer;
/**
* @author bmael
*
*/
public class Human implements IHuman, Observable {
private boolean sleeping = false;
private boolean zombie = false;
private boolean windOn;
private IAlarm alarm;
private Listen4RingThread ringListener;
private ArrayList<Observer> observers = new ArrayList<>();
public Human(IAlarm alarm) throws RemoteException{
this.alarm = alarm;
this.windOn = this.alarm.isWindOn();
}
@Override
public void windOn(Date d) throws RemoteException {
this.windOn = true;
this.alarm.windOn(d);
this.updateWindOnObserver();
}
@Override
public void windOff(boolean withAlarm) throws RemoteException {
this.windOn = false;
this.updateWindOnObserver();
if(withAlarm){
this.alarm.windOffAfterRing();
}
else{
this.alarm.windOffAfterWakeUp();
}
this.zombie = false;
this.updateZombieObserver();
}
@Override
public void wakeUp() throws RemoteException {
this.sleeping = false;
this.updateSleepObserver();
if(this.ringListener != null){
this.ringListener.stopListen();
}
this.zombie = false;
this.updateZombieObserver();
}
@Override
public void sleep() throws RemoteException {
this.sleeping = true;
this.updateSleepObserver();
this.ringListener = new Listen4RingThread(this.alarm, this);
this.ringListener.start();
}
@Override
public void zombie() throws RemoteException {
this.zombie = true;
this.updateZombieObserver();
}
@Override
public void getTime() throws RemoteException {
// TODO Auto-generated method stub
}
@Override
public boolean isSleeping() {
return this.sleeping;
}
@Override
public boolean isAlarmWindOn() {
return this.windOn;
}
@Override
public boolean isZombie() throws RemoteException {
return this.zombie;
}
@Override
public void addObserver(Observer obs) {
this.observers.add(obs);
}
@Override
public void updateSleepObserver() {
for(Observer obs : this.observers){
obs.updateSleep(this.sleeping);
}
}
@Override
public void updateWindOnObserver() {
for(Observer obs : this.observers){
obs.updateWindOn(this.windOn);
}
}
@Override
public void updateZombieObserver() {
for(Observer obs : this.observers){
obs.updateZombie(this.zombie);
}
}
@Override
public void delObserver() {
this.observers = new ArrayList<>();
}
}