All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bidib.wizard.mvc.main.model.MacroUtils Maven / Gradle / Ivy

There is a newer version: 2.0.0-M1
Show newest version
package org.bidib.wizard.mvc.main.model;

import java.util.Arrays;
import java.util.Calendar;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MacroUtils {
    private static final Logger LOGGER = LoggerFactory.getLogger(MacroUtils.class);

    public static final byte[] MACRO_START_OFF = new byte[] { (byte) 0x3F, (byte) 0xBF, (byte) 0x7F, (byte) 0xFF };

    /**
     * Apply the start clk data from the device to the macro
     * 
     * @param startClk
     *            the start clk data
     * @param macro
     *            the macro instance
     */
    public static void applyMacroStartClk(byte[] startClk, Macro macro) {

        if (startClk != null && !Arrays.equals(MACRO_START_OFF, startClk)) {
            int hour = startClk[1] & 0x1F;
            int minute = startClk[0] & 0x3F;
            int day = startClk[2] & 0x7;
            Calendar time = Calendar.getInstance();
            TimeStartCondition startCondition = new TimeStartCondition();

            if (hour == 25) {
                startCondition.setRepeatTime(MacroRepeatTime.WORKING_HOURLY);
                time.set(Calendar.HOUR_OF_DAY, 0);
            }
            else if (hour == 24) {
                startCondition.setRepeatTime(MacroRepeatTime.HOURLY);
                time.set(Calendar.HOUR_OF_DAY, 0);
            }
            else {
                time.set(Calendar.HOUR_OF_DAY, hour);
            }
            if (minute == 60) {
                startCondition.setRepeatTime(MacroRepeatTime.MINUTELY);
                time.set(Calendar.MINUTE, 0);
            }
            else if (minute == 61) {
                startCondition.setRepeatTime(MacroRepeatTime.HALF_HOURLY);
                time.set(Calendar.MINUTE, 0);
            }
            else if (minute == 62) {
                startCondition.setRepeatTime(MacroRepeatTime.QUARTER_HOURLY);
                time.set(Calendar.MINUTE, 0);
            }
            else {
                time.set(Calendar.MINUTE, minute);
            }
            // day handling
            if (day == 7) {
                // every day
                startCondition.setRepeatDay(MacroRepeatDay.ALL);
            }
            else {
                int d = (day + 2) % 7;
                if (d == 0) {
                    d = 7;
                }
                startCondition.setRepeatDay(MacroRepeatDay.values()[d]);
            }
            time.set(Calendar.SECOND, 0);
            startCondition.setTime(time);
            macro.addStartCondition(startCondition);
        }
        else {
            LOGGER.info("No startClk available or macro has no start time.");
        }
    }

    public static void applyMacroStartClk(int day, int hour, int minute, Macro macro) {

        Calendar time = Calendar.getInstance();
        TimeStartCondition startCondition = new TimeStartCondition();

        if (hour == 25) {
            startCondition.setRepeatTime(MacroRepeatTime.WORKING_HOURLY);
            time.set(Calendar.HOUR_OF_DAY, 0);
        }
        else if (hour == 24) {
            startCondition.setRepeatTime(MacroRepeatTime.HOURLY);
            time.set(Calendar.HOUR_OF_DAY, 0);
        }
        else {
            time.set(Calendar.HOUR_OF_DAY, hour);
        }
        if (minute == 60) {
            startCondition.setRepeatTime(MacroRepeatTime.MINUTELY);
            time.set(Calendar.MINUTE, 0);
        }
        else if (minute == 61) {
            startCondition.setRepeatTime(MacroRepeatTime.HALF_HOURLY);
            time.set(Calendar.MINUTE, 0);
        }
        else if (minute == 62) {
            startCondition.setRepeatTime(MacroRepeatTime.QUARTER_HOURLY);
            time.set(Calendar.MINUTE, 0);
        }
        else {
            time.set(Calendar.MINUTE, minute);
        }
        // day handling
        if (day == 7) {
            // every day
            startCondition.setRepeatDay(MacroRepeatDay.ALL);
        }
        else {
            int d = (day + 2) % 7;
            if (d == 0) {
                d = 7;
            }
            startCondition.setRepeatDay(MacroRepeatDay.values()[d]);
        }
        time.set(Calendar.SECOND, 0);
        startCondition.setTime(time);
        macro.addStartCondition(startCondition);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy