/** * * Copyright (c) 2009-2016 Freedomotic team http://freedomotic.com * * This file is part of Freedomotic * * 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 2, 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 * Freedomotic; see the file COPYING. If not, see * <http://www.gnu.org/licenses/>. */ package com.freedomotic.things.impl; import com.freedomotic.model.ds.Config; import com.freedomotic.model.object.Behavior; import com.freedomotic.model.object.RangedIntBehavior; import com.freedomotic.behaviors.RangedIntBehaviorLogic; import com.freedomotic.reactions.Command; /** * * @author Mauro Cicolella * * This class represents a 'Fridge' thing template extending an ElectricDevice * Behaviors: fridge-temperature freezer-temperature * */ public class Fridge extends ElectricDevice { private RangedIntBehaviorLogic fridgeTemperature; private RangedIntBehaviorLogic freezerTemperature; protected final static String BEHAVIOR_FRIDGE_TEMPERATURE = "fridge-temperature"; protected final static String BEHAVIOR_FREEZER_TEMPERATURE = "freezer-temperature"; @Override public void init() { //linking this property with the behavior defined in the XML fridgeTemperature = new RangedIntBehaviorLogic((RangedIntBehavior) getPojo().getBehavior(BEHAVIOR_FRIDGE_TEMPERATURE)); freezerTemperature = new RangedIntBehaviorLogic((RangedIntBehavior) getPojo().getBehavior(BEHAVIOR_FREEZER_TEMPERATURE)); fridgeTemperature.addListener(new RangedIntBehaviorLogic.Listener() { @Override public void onLowerBoundValue(Config params, boolean fireCommand) { executeSetFridgeTemperature(fridgeTemperature.getMin(), params); } @Override public void onUpperBoundValue(Config params, boolean fireCommand) { executeSetFridgeTemperature(fridgeTemperature.getMax(), params); } @Override public void onRangeValue(int rangeValue, Config params, boolean fireCommand) { executeSetFridgeTemperature(rangeValue, params); } }); freezerTemperature.addListener(new RangedIntBehaviorLogic.Listener() { @Override public void onLowerBoundValue(Config params, boolean fireCommand) { executeSetFreezerTemperature(freezerTemperature.getMin(), params); } @Override public void onUpperBoundValue(Config params, boolean fireCommand) { executeSetFreezerTemperature(freezerTemperature.getMax(), params); } @Override public void onRangeValue(int rangeValue, Config params, boolean fireCommand) { executeSetFreezerTemperature(rangeValue, params); } }); //register new behaviors to the superclass to make it visible to it registerBehavior(fridgeTemperature); registerBehavior(freezerTemperature); super.init(); } public void executeSetFridgeTemperature(int rangeValue, Config params) { boolean executed = executeCommand("set fridge temperature", params); //executes the developer level command associated with 'set brightness' action if (executed) { setFridgeTemperature(rangeValue); } } public void executeSetFreezerTemperature(int rangeValue, Config params) { boolean executed = executeCommand("set freezer temperature", params); //executes the developer level command associated with 'set brightness' action if (executed) { setFreezerTemperature(rangeValue); } } private void setFridgeTemperature(int value) { fridgeTemperature.setValue(value); setChanged(true); } private void setFreezerTemperature(int value) { freezerTemperature.setValue(value); setChanged(true); } @Override protected void createCommands() { super.createCommands(); Command increaseFridgeTemp = new Command(); increaseFridgeTemp.setName("Increase " + getPojo().getName() + " fridge-temperature"); increaseFridgeTemp.setDescription("increases " + getPojo().getName() + " fridge-temperature of one step"); increaseFridgeTemp.setReceiver("app.events.sensors.behavior.request.objects"); increaseFridgeTemp.setProperty("object", getPojo().getName()); increaseFridgeTemp.setProperty("behavior", BEHAVIOR_FRIDGE_TEMPERATURE); increaseFridgeTemp.setProperty("value", Behavior.VALUE_NEXT); Command decreaseFridgeTemp = new Command(); decreaseFridgeTemp.setName("Decrease " + getPojo().getName() + " fridge-temperature"); decreaseFridgeTemp.setDescription("decreases " + getPojo().getName() + " fridge-temperature of one step"); decreaseFridgeTemp.setReceiver("app.events.sensors.behavior.request.objects"); decreaseFridgeTemp.setProperty("object", getPojo().getName()); decreaseFridgeTemp.setProperty("behavior", BEHAVIOR_FRIDGE_TEMPERATURE); decreaseFridgeTemp.setProperty("value", Behavior.VALUE_PREVIOUS); Command increaseFreezerTemp = new Command(); increaseFreezerTemp.setName("Increase " + getPojo().getName() + " freezer-temperature"); increaseFreezerTemp.setDescription("increases " + getPojo().getName() + " freezer-temperature of one step"); increaseFreezerTemp.setReceiver("app.events.sensors.behavior.request.objects"); increaseFreezerTemp.setProperty("object", getPojo().getName()); increaseFreezerTemp.setProperty("behavior", BEHAVIOR_FREEZER_TEMPERATURE); increaseFreezerTemp.setProperty("value", Behavior.VALUE_NEXT); Command decreaseFreezerTemp = new Command(); decreaseFreezerTemp.setName("Decrease " + getPojo().getName() + " freezer-temperature"); decreaseFreezerTemp.setDescription("decreases " + getPojo().getName() + " freezer-temperature of one step"); decreaseFreezerTemp.setReceiver("app.events.sensors.behavior.request.objects"); decreaseFreezerTemp.setProperty("object", getPojo().getName()); decreaseFreezerTemp.setProperty("behavior", BEHAVIOR_FREEZER_TEMPERATURE); decreaseFreezerTemp.setProperty("value", Behavior.VALUE_PREVIOUS); commandRepository.create(increaseFridgeTemp); commandRepository.create(decreaseFridgeTemp); commandRepository.create(increaseFreezerTemp); commandRepository.create(decreaseFreezerTemp); } @Override protected void createTriggers() { super.createTriggers(); } }