/**
* 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.script.defaultscope.internal;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.keyvalue.DefaultMapEntry;
import org.eclipse.smarthome.core.items.Item;
import org.eclipse.smarthome.core.items.ItemNotFoundException;
import org.eclipse.smarthome.core.items.ItemRegistry;
import org.eclipse.smarthome.core.types.State;
/**
* This is a helper class that can be added to script scopes. It provides easy access to the current item states.
*
* @author Kai Kreuzer - Initial contribution
*
*/
public class ItemRegistryDelegate implements Map<String, State> {
private ItemRegistry itemRegistry;
public ItemRegistryDelegate(ItemRegistry itemRegistry) {
this.itemRegistry = itemRegistry;
}
@Override
public int size() {
return itemRegistry.getAll().size();
}
@Override
public boolean isEmpty() {
return size() == 0;
}
@Override
public boolean containsKey(Object key) {
if (key instanceof String) {
try {
return itemRegistry.getItem((String) key) != null;
} catch (ItemNotFoundException e) {
return false;
}
} else {
return false;
}
}
@Override
public boolean containsValue(Object value) {
return false;
}
@Override
public State get(Object key) {
return itemRegistry.get((String) key).getState();
}
@Override
public State put(String key, State value) {
throw new UnsupportedOperationException();
}
@Override
public State remove(Object key) {
throw new UnsupportedOperationException();
}
@Override
public void putAll(Map<? extends String, ? extends State> m) {
throw new UnsupportedOperationException();
}
@Override
public void clear() {
throw new UnsupportedOperationException();
}
@Override
public Set<String> keySet() {
Set<String> keys = new HashSet<>();
for (Item item : itemRegistry.getAll()) {
keys.add(item.getName());
}
return keys;
}
@Override
public Collection<State> values() {
Set<State> values = new HashSet<>();
for (Item item : itemRegistry.getAll()) {
values.add(item.getState());
}
return values;
}
@SuppressWarnings("unchecked")
@Override
public Set<java.util.Map.Entry<String, State>> entrySet() {
Set<Map.Entry<String, State>> entries = new HashSet<Map.Entry<String, State>>();
for (Item item : itemRegistry.getAll()) {
entries.add(new DefaultMapEntry(item.getName(), item.getState()));
}
return entries;
}
}