/**
* 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.omnilink.internal.model;
import java.util.Map;
import org.openhab.binding.omnilink.internal.OmniLinkBindingConfig;
import org.openhab.core.events.EventPublisher;
import org.openhab.core.items.Item;
import org.openhab.core.library.items.DimmerItem;
import org.openhab.core.library.items.NumberItem;
import org.openhab.core.library.items.StringItem;
import org.openhab.core.library.items.SwitchItem;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.PercentType;
import org.openhab.core.library.types.StringType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.digitaldan.jomnilinkII.MessageTypes.properties.AudioZoneProperties;
/**
* AudioZones are the outputs on a connected audio system
*
* @author Dan Cunningham
* @since 1.5.0
*/
public class AudioZone extends OmnilinkDevice {
private static final Logger logger = LoggerFactory.getLogger(AudioZone.class);
private AudioZoneProperties properties;
private Map<Integer, AudioSource> audioSources;
public AudioZone(AudioZoneProperties properties) {
this.properties = properties;
}
@Override
public AudioZoneProperties getProperties() {
return properties;
}
public void setProperties(AudioZoneProperties properties) {
this.properties = properties;
}
public Map<Integer, AudioSource> getAudioSources() {
return audioSources;
}
public void setAudioSource(Map<Integer, AudioSource> audioSources) {
this.audioSources = audioSources;
}
@Override
public void updateItem(Item item, OmniLinkBindingConfig config, EventPublisher publisher) {
int num = 0;
String str = "";
int source = new Integer(properties.getSource());
switch (config.getObjectType()) {
case AUDIOZONE_MUTE:
num = properties.isMute() ? 1 : 0;
break;
case AUDIOZONE_POWER:
num = properties.isOn() ? 1 : 0;
break;
case AUDIOZONE_SOURCE:
num = properties.getSource();
break;
case AUDIOZONE_VOLUME:
num = properties.getVolume();
break;
case AUDIOZONE_TEXT:
if (sourceValid(source)) {
str = audioSources.get(source).formatAudioText();
}
break;
case AUDIOZONE_TEXT_FIELD1:
if (sourceValid(source)) {
str = audioSources.get(source).getAudioText(0);
}
break;
case AUDIOZONE_TEXT_FIELD2:
if (sourceValid(source)) {
str = audioSources.get(source).getAudioText(1);
}
break;
case AUDIOZONE_TEXT_FIELD3:
if (sourceValid(source)) {
str = audioSources.get(source).getAudioText(2);
}
break;
case AUDIOZONE_KEY:
num = -1;
break;
default:
return;
}
if (item instanceof DimmerItem) {
logger.debug("updating percent type {}", num);
publisher.postUpdate(item.getName(), new PercentType(num));
} else if (item instanceof NumberItem) {
logger.debug("updating number type {}", num);
publisher.postUpdate(item.getName(), new DecimalType(num));
} else if (item instanceof SwitchItem) {
logger.debug("updating switch type {}", num > 0 ? OnOffType.ON : OnOffType.OFF);
publisher.postUpdate(item.getName(), num > 0 ? OnOffType.ON : OnOffType.OFF);
} else if (item instanceof StringItem) {
logger.debug("updating string type {}", str);
publisher.postUpdate(item.getName(), new StringType(str));
}
}
private boolean sourceValid(Integer source) {
return audioSources != null && audioSources.containsKey(source);
}
}