use of org.eclipse.smarthome.core.items.ItemNotFoundException in project smarthome by eclipse.
the class VoiceConsoleCommandExtension method say.
private void say(String[] args, Console console) {
StringBuilder msg = new StringBuilder();
for (String word : args) {
if (word.startsWith("%") && word.endsWith("%") && word.length() > 2) {
String itemName = word.substring(1, word.length() - 1);
try {
Item item = this.itemRegistry.getItemByPattern(itemName);
msg.append(item.getState().toString());
} catch (ItemNotFoundException e) {
console.println("Error: Item '" + itemName + "' does not exist.");
} catch (ItemNotUniqueException e) {
console.print("Error: Multiple items match this pattern: ");
for (Item item : e.getMatchingItems()) {
console.print(item.getName() + " ");
}
}
} else {
msg.append(word);
}
msg.append(" ");
}
voiceManager.say(msg.toString());
}
use of org.eclipse.smarthome.core.items.ItemNotFoundException in project smarthome by eclipse.
the class ItemRegistryImpl method getItemByPattern.
@Override
public Item getItemByPattern(String name) throws ItemNotFoundException, ItemNotUniqueException {
Collection<Item> items = getItems(name);
if (items.isEmpty()) {
throw new ItemNotFoundException(name);
}
if (items.size() > 1) {
throw new ItemNotUniqueException(name, items);
}
Item item = items.iterator().next();
if (item == null) {
throw new ItemNotFoundException(name);
} else {
return item;
}
}
use of org.eclipse.smarthome.core.items.ItemNotFoundException in project smarthome by eclipse.
the class PersistenceManagerImpl method getAllItems.
/**
* Retrieves all items for which the persistence configuration applies to.
*
* @param config the persistence configuration entry
* @return all items that this configuration applies to
*/
Iterable<Item> getAllItems(SimpleItemConfiguration config) {
// first check, if we should return them all
for (Object itemCfg : config.getItems()) {
if (itemCfg instanceof SimpleAllConfig) {
return itemRegistry.getItems();
}
}
// otherwise, go through the detailed definitions
Set<Item> items = new HashSet<Item>();
for (Object itemCfg : config.getItems()) {
if (itemCfg instanceof SimpleItemConfig) {
SimpleItemConfig singleItemConfig = (SimpleItemConfig) itemCfg;
try {
Item item = itemRegistry.getItem(singleItemConfig.getItem());
items.add(item);
} catch (ItemNotFoundException e) {
logger.debug("Item '{}' does not exist.", singleItemConfig.getItem());
}
}
if (itemCfg instanceof SimpleGroupConfig) {
SimpleGroupConfig groupItemCfg = (SimpleGroupConfig) itemCfg;
String groupName = groupItemCfg.getGroup();
try {
Item gItem = itemRegistry.getItem(groupName);
if (gItem instanceof GroupItem) {
GroupItem groupItem = (GroupItem) gItem;
items.addAll(groupItem.getAllMembers());
}
} catch (ItemNotFoundException e) {
logger.debug("Item group '{}' does not exist.", groupName);
}
}
}
return items;
}
use of org.eclipse.smarthome.core.items.ItemNotFoundException in project smarthome by eclipse.
the class ItemUIRegistryImplTest method getWidget_UnknownPageId.
@Test
public void getWidget_UnknownPageId() throws ItemNotFoundException {
Sitemap sitemap = SitemapFactory.eINSTANCE.createSitemap();
when(registry.getItem("unknown")).thenThrow(new ItemNotFoundException("unknown"));
Widget w = uiRegistry.getWidget(sitemap, "unknown");
assertNull(w);
}
use of org.eclipse.smarthome.core.items.ItemNotFoundException in project smarthome by eclipse.
the class ItemUIRegistryImpl method getLabel.
@Override
public String getLabel(Widget w) {
String label = getLabelFromWidget(w);
String itemName = w.getItem();
if (StringUtils.isBlank(itemName)) {
return transform(label, null);
}
String labelMappedOption = null;
State state = null;
StateDescription stateDescription = null;
String formatPattern = getFormatPattern(label);
// (i.e. it contains at least a %)
try {
final Item item = getItem(itemName);
// There is a known issue in the implementation of the method getStateDescription() of class Item
// in the following case:
// - the item provider returns as expected a state description without pattern but with for
// example a min value because a min value is set in the item definition but no label with
// pattern is set.
// - the channel state description provider returns as expected a state description with a pattern
// In this case, the result is no display of value by UIs because no pattern is set in the
// returned StateDescription. What is expected is the display of a value using the pattern
// provided by the channel state description provider.
stateDescription = item.getStateDescription();
if (formatPattern == null && stateDescription != null && stateDescription.getPattern() != null) {
label = label + " [" + stateDescription.getPattern() + "]";
}
String updatedPattern = getFormatPattern(label);
if (updatedPattern != null) {
formatPattern = updatedPattern;
// a number is requested, PercentType must not be converted to DecimalType:
if (formatPattern.contains("%d") && !(item.getState() instanceof PercentType)) {
state = item.getStateAs(DecimalType.class);
} else {
state = item.getState();
}
}
} catch (ItemNotFoundException e) {
logger.error("Cannot retrieve item for widget {}", w.eClass().getInstanceTypeName());
}
if (formatPattern != null) {
if (formatPattern.isEmpty()) {
label = label.substring(0, label.indexOf("[")).trim();
} else {
if (state == null || state instanceof UnDefType) {
formatPattern = formatUndefined(formatPattern);
} else if (state instanceof Type) {
// if the channel contains options, we build a label with the mapped option value
if (stateDescription != null && stateDescription.getOptions() != null) {
for (StateOption option : stateDescription.getOptions()) {
if (option.getValue().equals(state.toString()) && option.getLabel() != null) {
State stateOption = new StringType(option.getLabel());
try {
String formatPatternOption = stateOption.format(formatPattern);
labelMappedOption = label.trim();
labelMappedOption = labelMappedOption.substring(0, labelMappedOption.indexOf("[") + 1) + formatPatternOption + "]";
} catch (IllegalArgumentException e) {
logger.debug("Mapping option value '{}' for item {} using format '{}' failed ({}); mapping is ignored", stateOption, itemName, formatPattern, e.getMessage());
labelMappedOption = null;
}
break;
}
}
}
if (state instanceof QuantityType) {
QuantityType<?> quantityState = (QuantityType<?>) state;
// sanity convert current state to the item state description unit in case it was updated in the
// meantime. The item state is still in the "original" unit while the state description will
// display the new unit:
Unit<?> patternUnit = UnitUtils.parseUnit(formatPattern);
if (patternUnit != null && !quantityState.getUnit().equals(patternUnit)) {
quantityState = quantityState.toUnit(patternUnit);
}
// The widget may define its own unit in the widget label. Convert to this unit:
quantityState = convertStateToWidgetUnit(quantityState, w);
state = quantityState;
}
// This also handles IllegalFormatConversionException, which is a subclass of IllegalArgument.
try {
formatPattern = fillFormatPattern(formatPattern, state);
} catch (IllegalArgumentException e) {
logger.warn("Exception while formatting value '{}' of item {} with format '{}': {}", state, itemName, formatPattern, e.getMessage());
formatPattern = new String("Err");
}
}
label = label.trim();
label = label.substring(0, label.indexOf("[") + 1) + formatPattern + "]";
}
}
return transform(label, labelMappedOption);
}
Aggregations