package rmblworx.tools.timey; import java.util.List; import java.util.concurrent.TimeUnit; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import rmblworx.tools.timey.exception.NullArgumentException; import rmblworx.tools.timey.exception.ValueMinimumArgumentException; import rmblworx.tools.timey.persistence.service.IAlarmService; import rmblworx.tools.timey.vo.AlarmDescriptor; /* * Copyright 2014-2015 Christian Raue * MIT License http://opensource.org/licenses/mit-license.php */ /** * Diese Implementierung dient der Steuerung des Alarmsystems. * * @author mmatthies */ class Alarm implements IAlarm, ApplicationContextAware { /** * Referenz auf die verwendete Alarmimplementierung. */ private SimpleAlarm alarmdetector; /** * Maßzahl für den Ausfuehrungsintervall. */ private final int delayPerThread; /** * Service zur Verwaltung der Alarmzeitpunkte in der Datenbank. */ private final IAlarmService service; /** * Spring Anwendungskontext. */ private ApplicationContext springContext; /** * Maßeinheit für den Ausfuehrungsintervall. */ private final TimeUnit timeUnit; /** * Erweiterter Konstruktor. * * @param service * Von dieser Klasse zu verwendende Serviceimplementierung * @param delay * Maßzahl für den Erkennungsintervall * @param unit * Einheit für den Erkennungsintervall */ public Alarm(final IAlarmService service, final int delay, final TimeUnit unit) { if (service == null || unit == null) { throw new NullArgumentException(); } if (delay < 1) { throw new ValueMinimumArgumentException(); } this.delayPerThread = delay; this.timeUnit = unit; this.service = service; } @Override public List<AlarmDescriptor> getAllAlarms() { return this.service.getAll(); } /** * Initialisiert die Implementation für die Alarmerkennung. */ private void initAlarmdetection() { this.alarmdetector = (SimpleAlarm) this.springContext.getBean("simpleAlarm"); } @Override public Boolean isAlarmActivated(final AlarmDescriptor descriptor) { return this.service.isActivated(descriptor); } @Override public Boolean removeAlarm(final AlarmDescriptor descriptor) { return this.service.delete(descriptor); } @Override public Boolean setAlarm(final AlarmDescriptor descriptor) { return this.service.create(descriptor); } @Override public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException { this.springContext = applicationContext; this.startAlarmdetection(); } /** * Setzt den Zustand im übergebenen AlarmDescriptor. * * @param alarmDescriptor * zu aktualisierender AlarmDescriptor. * @param isActivated * im AlarmDescriptor zu setzender Aktivierungszustand. */ public void setStateInAlarmDescriptor(final AlarmDescriptor alarmDescriptor, final Boolean isActivated) { alarmDescriptor.setIsActive(isActivated); } @Override public Boolean setStateOfAlarm(final AlarmDescriptor descriptor, final Boolean isActivated) { return this.service.setState(descriptor, isActivated); } /** * Startet die Alarmerkennung. */ private void startAlarmdetection() { this.initAlarmdetection(); this.alarmdetector.startAlarmdetection(this.delayPerThread, this.timeUnit); } }