package rmblworx.tools.timey;
import java.util.List;
import rmblworx.tools.timey.vo.AlarmDescriptor;
/*
* Copyright 2014-2015 Christian Raue
* MIT License http://opensource.org/licenses/mit-license.php
*/
/**
* Erzeugt die konkreten Kommandoimplementierungen und setzt deren Empfängerimplementierungen.
*
* @author mmatthies
*/
class AlarmClient {
/**
* Speichert die Empfänger-Instanz.
*/
private final IAlarm fReceiver;
/**
* Konstruktor.
*
* @param receiver
* Referenz auf die Empfänger-Instanz.
*/
public AlarmClient(final IAlarm receiver) {
this.fReceiver = receiver;
}
/**
* @param descriptor
* zu löschender Alarmzeitpunkt
* @return true wenn erfolgreich sonst false oder {@code null} wenn Alarmzeitpunkt nicht vorhanden
*/
public Boolean initAlarmDeleteAlarm(final AlarmDescriptor descriptor) {
final AlarmDeleteAlarmCommand cmd = new AlarmDeleteAlarmCommand(this.fReceiver, descriptor);
final Invoker<Boolean> invoker = new Invoker<>(cmd);
return invoker.execute();
}
/**
* @param descriptor
* Referenz auf das Zeitobjekt
* @return true oder false oder {@code null} wenn Alarmzeitpunkt nicht vorhanden
*/
public Boolean initAlarmGetStateOfAlarmCommand(final AlarmDescriptor descriptor) {
final AlarmGetStateOfAlarmCommand cmd = new AlarmGetStateOfAlarmCommand(this.fReceiver, descriptor);
final Invoker<Boolean> invoker = new Invoker<>();
invoker.storeCommand(cmd);
return invoker.execute();
}
/**
* Initiiert das Kommando. Ermöglicht das Setzen des Aktivierungszustandes in einem AlarmDescriptor.
*
* @param descriptor
* Referenz auf das Alarmobjekt.
* @param isActivated
* Gibt an, ob der Alarm aktiv oder inaktiv geschaltet werden soll.
* @return bearbeitetes AlarmDescriptor-Objekt.
*/
public AlarmDescriptor initAlarmSetStateInAlarmDescriptorCommand(final AlarmDescriptor descriptor,
final Boolean isActivated) {
final AlarmSetStateInAlarmDescriptorCommand cmd = new AlarmSetStateInAlarmDescriptorCommand(
(Alarm) this.fReceiver, descriptor, isActivated);
final Invoker<Void> invoker = new Invoker<>();
invoker.storeCommand(cmd);
invoker.execute();
return descriptor;
}
/**
* Initiiert das Kommando. Ermöglicht die Zustandsänderung eines Alarms.
*
* @param descriptor
* Referenz auf das Alarmobjekt.
* @param isActivated
* Gibt an, ob der Alarm aktiv oder inaktiv geschaltet werden soll.
* @return true wenn erfolgreich sonst false oder null wenn Alarmzeitpunkt nicht vorhanden
*/
public Boolean initAlarmSetStateOfAlarmCommand(final AlarmDescriptor descriptor, final Boolean isActivated) {
final AlarmSetStateOfAlarmCommand cmd = new AlarmSetStateOfAlarmCommand(this.fReceiver, descriptor, isActivated);
final Invoker<Boolean> invoker = new Invoker<>();
invoker.storeCommand(cmd);
final Boolean result = invoker.execute();
this.initAlarmSetStateInAlarmDescriptorCommand(descriptor, isActivated);
return result;
}
/**
* Initiiert das Kommando. Ermöglicht die Abfrage aller Alarmzeitpunkte.
*
* @return unveränderliche Liste mit den bekannten Alarmzeitpunkten oder leere Liste
*/
public List<AlarmDescriptor> initGetAllAlarms() {
final AlarmGetAllAlarmsCommand cmd = new AlarmGetAllAlarmsCommand(this.fReceiver);
final Invoker<List<AlarmDescriptor>> invoker = new Invoker<>();
invoker.storeCommand(cmd);
return invoker.execute();
}
/**
* Initiiert das Kommando zum Setzen eines Alarmzeitpunktes.
*
* @param alarmDescriptor
* Wertobjekt zur Beschreibung des Alarmzeitpunktes.
* @return true wenn erfolgreich sonst false oder null wenn Alarmzeitpunkt bereits vorhanden
*/
public Boolean initSetAlarmCommand(final AlarmDescriptor alarmDescriptor) {
final AlarmSetTimeCommand cmd = new AlarmSetTimeCommand(this.fReceiver, alarmDescriptor);
final Invoker<Boolean> invoker = new Invoker<>();
invoker.storeCommand(cmd);
return invoker.execute();
}
}