/** * Copyright (c) 2010-2016 by the respective copyright holders. * * 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.openhab.binding.ecobee.messages; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.builder.ToStringBuilder; import org.codehaus.jackson.annotate.JsonProperty; /** * The function object is defined by its functionType and one or more additional properties. The property list is * variable depending on the type of function. * * <p> * Functions are used to perform more complex operations on a thermostat or user which are too complex with simple * property modifications. Functions are used to modify read-only objects where appropriate. * * <p> * Each function takes different parameters. * * @see <a href="https://www.ecobee.com/home/developer/api/documentation/v1/objects/Function.shtml">Function</a> * @author John Cocula * @since 1.7.0 */ public abstract class AbstractFunction extends AbstractMessagePart { // TODO needs to be in specific thermostat's local timezone (@watou) protected final static DateFormat ymd = new SimpleDateFormat("yyyy-MM-dd"); protected final static DateFormat hms = new SimpleDateFormat("HH:mm:ss"); private String type; private Map<String, Object> params; /** * Construct a function of given type with zero params. * * @param type * the function type name */ protected AbstractFunction(String type) { this.type = type; } protected final Map<String, Object> makeParams() { if (params == null) { params = new HashMap<String, Object>(); } return params; } /** * @return the function type name See the type name in the function documentation */ @JsonProperty("type") public String getType() { return this.type; } /** * @return a map of <code>key=value</code> pairs as the parameters to the function. See individual function * documentation for the properties. */ @JsonProperty("params") public Map<String, Object> getParams() { return this.params; } @Override public String toString() { final ToStringBuilder builder = createToStringBuilder(); builder.appendSuper(super.toString()); builder.append("type", this.type); builder.append("params", this.params); return builder.toString(); } }