/** * Copyright (c) 1997, 2015 by ProSyst Software GmbH 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.core.handler; import java.util.Map; import org.eclipse.smarthome.automation.Condition; import org.eclipse.smarthome.automation.handler.BaseModuleHandler; import org.eclipse.smarthome.automation.handler.ConditionHandler; import org.eclipse.smarthome.core.events.Event; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This is the implementation of a event condition which checks if inputs matches configured values. * * @author Benedikt Niehues - Initial contribution and API * @author Kai Kreuzer - refactored and simplified customized module handling * */ public class GenericEventConditionHandler extends BaseModuleHandler<Condition> implements ConditionHandler { public final Logger logger = LoggerFactory.getLogger(GenericEventConditionHandler.class); public static final String MODULETYPE_ID = "core.GenericEventCondition"; private static final String TOPIC = "topic"; private static final String EVENTTYPE = "eventType"; private static final String SOURCE = "source"; private static final String PAYLOAD = "payload"; public GenericEventConditionHandler(Condition module) { super(module); } private boolean isConfiguredAndMatches(String keyParam, String value) { Object mo = module.getConfiguration().get(keyParam); String configValue = mo != null && mo instanceof String ? (String) mo : null; if (configValue != null) { if (keyParam.equals(PAYLOAD)) { // automatically adding wildcards only for payload matching configValue = configValue.startsWith("*") ? configValue : ".*" + configValue; configValue = configValue.endsWith("*") ? configValue : configValue + ".*"; } if (value != null) { return value.matches(configValue); } else { return false; } } else { return true; } } @Override public boolean isSatisfied(Map<String, Object> inputs) { Event event = inputs.get("event") != null ? (Event) inputs.get("event") : null; if (event != null) { return isConfiguredAndMatches(TOPIC, event.getTopic()) && isConfiguredAndMatches(SOURCE, event.getSource()) && isConfiguredAndMatches(PAYLOAD, event.getPayload()) && isConfiguredAndMatches(EVENTTYPE, event.getType()); } return false; } }