rmblworx.tools.timey.Countdown.java Source code

Java tutorial

Introduction

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

Source

package rmblworx.tools.timey;

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.vo.TimeDescriptor;

/*
 * Copyright 2014-2015 Christian Raue
 * MIT License http://opensource.org/licenses/mit-license.php
 */
/**
 * Ermglicht die Zeitmessung in Form eines Countdowns.
 *
 * @author mmatthies
 */
class Countdown implements ICountdown, ApplicationContextAware {
    /**
     * Spring-Kontext.
     */
    private ApplicationContext context;
    /**
     * Die genutzte Zeitmessimplementierung.
     */
    private ICountdownTimer countdownTimer;
    /**
     * Gibt die Mazahl fr die Zeiteinheit an.
     *
     * @see #timeUnit
     */
    private final int delayPerThread;
    /**
     * Gibt die Zeiteinheit an in welchem der Intervall die gemessene Zeit geliefert wird.
     */
    private final TimeUnit timeUnit;

    /**
     * Erweiterter Konstruktor. Ausschliesslich fr Testzwecke.
     * 
     * @param countdownTimer
     *            Referenz auf die CountdownTimer-Implementierung.
     * @param delay
     *            Ausfhrungsverzgerung des Zeitmessungs-Threads
     * @param unit
     *            Zeiteinheit fr die zuvor angegebene Ausfhrungsverzgerung
     */
    Countdown(final ICountdownTimer countdownTimer, final int delay, final TimeUnit unit) {
        this(delay, unit);
        this.countdownTimer = countdownTimer;
    }

    /**
     * Konstruktor welcher eine Instanz dieses Receiver erzeugt.
     *
     * @param delay
     *            Bestimmt den Intervall in welchem die vom Thread gemessene Zeit zurckgeliefert wird.
     * @param unit
     *            Maeinheit fr den Intervall.
     */
    public Countdown(final int delay, final TimeUnit unit) {
        this.delayPerThread = delay;
        this.timeUnit = unit;
    }

    /**
     * Instanziiert nach Bedarf die Timerimplementierung.
     */
    private void initCountdownTimer() {
        if (this.countdownTimer == null) {
            this.countdownTimer = (ICountdownTimer) this.context.getBean("simpleCountdown");
        }
    }

    @Override
    public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
        this.context = applicationContext;
    }

    @Override
    public Boolean setCountdownTime(final TimeDescriptor descriptor) {
        this.initCountdownTimer();
        if (descriptor == null) {
            throw new NullArgumentException();
        }
        return this.countdownTimer.setCountdownTime(descriptor);
    }

    @Override
    public TimeDescriptor startCountdown() {
        this.initCountdownTimer();
        return this.countdownTimer.startCountdown(this.delayPerThread, this.timeUnit);
    }

    @Override
    public Boolean stopCountdown() {
        this.initCountdownTimer();
        return this.countdownTimer.stopCountdown();
    }
}