/** * openHAB, the open Home Automation Bus. * Copyright (C) 2010-2012, openHAB.org <admin@openhab.org> * * See the contributors.txt file in the distribution for a * full listing of individual contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see <http://www.gnu.org/licenses>. * * Additional permission under GNU GPL version 3 section 7 * * If you modify this Program, or any covered work, by linking or * combining it with Eclipse (or a modified version of that library), * containing parts covered by the terms of the Eclipse Public License * (EPL), the licensors of this Program grant you additional permission * to convey the resulting work. */ package org.openhab.domain.model; import org.openhab.domain.util.ILogger; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * This is a class to hold basic information about openHAB Item. * * @author Victor Belov * */ public class OpenHABItem { private String name; private OpenHABItemType type; private String state = ""; private String link; private ILogger mLogger; public OpenHABItem(Node startNode, ILogger logger) { if(logger == null) throw new IllegalArgumentException("logger is null"); mLogger = logger; if (startNode.hasChildNodes()) { NodeList childNodes = startNode.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i ++) { Node childNode = childNodes.item(i); if (childNode.getNodeName().equals("type")) { this.setType(childNode.getTextContent()); } else if (childNode.getNodeName().equals("name")) { this.setName(childNode.getTextContent()); } else if (childNode.getNodeName().equals("state")) { if (childNode.getTextContent().equals("Uninitialized")) { this.setState("0"); } else { this.setState(childNode.getTextContent()); } } else if (childNode.getNodeName().equals("link")) { this.setLink(childNode.getTextContent()); } } } } public String getName() { return name; } public void setName(String name) { this.name = name; } public OpenHABItemType getType() { return type; } public void setType(OpenHABItemType type) { this.type = type; } public void setType(String type) { for(int i = 0; i < OpenHABItemType.values().length; i++) { if(type.equals(OpenHABItemType.values()[i].Name)) { setType(OpenHABItemType.values()[i]); return; } } mLogger.w("OpenHABItem", "Unknown item type: '" + type + "'"); } public String getState() { return state; } public void setState(String state) { this.state = state; } public boolean getStateAsBoolean() { // If state is ON for switches return True if (state.equals("ON")) { return true; } // If decimal value and it is >0 return True try { int decimalValue = Integer.valueOf(state); if (decimalValue > 0) return true; } catch (NumberFormatException e) { return false; } // Else return False return false; } public Float getStateAsFloat() { return Float.parseFloat(state); } public float[] getStateAsHSV() { String[] stateSplit = state.split(","); if (stateSplit.length == 3) { // We need exactly 3 numbers to operate this float[] result = {Float.parseFloat(stateSplit[0]), Float.parseFloat(stateSplit[1])/100, Float.parseFloat(stateSplit[2])/100}; return result; } else { float[] result = {0, 0, 0}; return result; } } public String getLink() { return link; } public void setLink(String link) { this.link = link; } }