rmblworx.tools.timey.Alarm.java Source code

Java tutorial

Introduction

Here is the source code for rmblworx.tools.timey.Alarm.java

Source

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;
    /**
     * Mazahl fr den Ausfuehrungsintervall.
     */
    private final int delayPerThread;
    /**
     * Service zur Verwaltung der Alarmzeitpunkte in der Datenbank.
     */
    private final IAlarmService service;
    /**
     * Spring Anwendungskontext.
     */
    private ApplicationContext springContext;
    /**
     * Maeinheit fr den Ausfuehrungsintervall.
     */
    private final TimeUnit timeUnit;

    /**
     * Erweiterter Konstruktor.
     *
     * @param service
     *            Von dieser Klasse zu verwendende Serviceimplementierung
     * @param delay
     *            Mazahl fr den Erkennungsintervall
     * @param unit
     *            Einheit fr 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 fr 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);
    }
}