/** * Copyright (c) 2017 Kai Kreuzer and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.automation.module.timer.handler; import java.util.Calendar; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.eclipse.smarthome.automation.Condition; import org.eclipse.smarthome.automation.handler.BaseModuleHandler; import org.eclipse.smarthome.automation.handler.ConditionHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This is a ConditionHandler implementation, which checks the current day of the week against a specified list. * * @author Kai Kreuzer - Initial Contribution * */ public class DayOfWeekConditionHandler extends BaseModuleHandler<Condition> implements ConditionHandler { private final Logger logger = LoggerFactory.getLogger(DayOfWeekConditionHandler.class); public static final String MODULE_TYPE_ID = "timer.DayOfWeekCondition"; public static final String MODULE_CONTEXT_NAME = "MODULE"; private static final String CFG_DAYS = "days"; private final Set<Integer> days; @SuppressWarnings("unchecked") public DayOfWeekConditionHandler(Condition module) { super(module); try { days = new HashSet<>(); for (String day : (Iterable<String>) module.getConfiguration().get(CFG_DAYS)) { switch (day.toUpperCase()) { case "SUN": days.add(Calendar.SUNDAY); break; case "MON": days.add(Calendar.MONDAY); break; case "TUE": days.add(Calendar.TUESDAY); break; case "WED": days.add(Calendar.WEDNESDAY); break; case "THU": days.add(Calendar.THURSDAY); break; case "FRI": days.add(Calendar.FRIDAY); break; case "SAT": days.add(Calendar.SATURDAY); break; default: logger.warn("Ignoring illegal weekday '{}'", day); break; } } } catch (RuntimeException e) { throw new IllegalArgumentException("'days' parameter must be an array of strings."); } } @Override public boolean isSatisfied(Map<String, Object> context) { int dow = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); return days.contains(dow); } }