/** * Copyright (c) 2014-2017 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.eclipse.smarthome.core.items; import java.util.Collection; import org.eclipse.smarthome.core.common.registry.Registry; /** * The ItemRegistry is the central place, where items are kept in memory and their state * is permanently tracked. So any code that requires the current state of items should use * this service (instead of trying to keep their own local copy of the items). * * Items are registered by {@link ItemProvider}s, which can provision them from any source * they like and also dynamically remove or add items. * * @author Kai Kreuzer - Initial contribution and API * */ public interface ItemRegistry extends Registry<Item, String> { /** * This method retrieves a single item from the registry. * * @param name the item name * @return the uniquely identified item * @throws ItemNotFoundException if no item matches the input */ public Item getItem(String name) throws ItemNotFoundException; /** * This method retrieves a single item from the registry. * Search patterns and shortened versions are supported, if they uniquely identify an item * * @param name the item name, a part of the item name or a search pattern * @return the uniquely identified item * @throws ItemNotFoundException if no item matches the input * @throws ItemNotUniqueException if multiply items match the input */ public Item getItemByPattern(String name) throws ItemNotFoundException, ItemNotUniqueException; /** * This method retrieves all items that are currently available in the registry * * @return a collection of all available items */ public Collection<Item> getItems(); /** * This method retrieves all items with the given type * * @param type * - item type as defined by {@link ItemFactory}s * @return a collection of all items of the given type */ public Collection<Item> getItemsOfType(String type); /** * This method retrieves all items that match a given search pattern * * @return a collection of all items matching the search pattern */ public Collection<Item> getItems(String pattern); /** * Returns list of items which contains all of the given tags. * * @param tags * - array of tags to be present on the returned items. * @return list of items which contains all of the given tags. */ public Collection<Item> getItemsByTag(String... tags); /** * Returns list of items with a certain type containing all of the given tags. * * @param type * - item type as defined by {@link ItemFactory}s * @param tags * - array of tags to be present on the returned items. * @return list of items which contains all of the given tags. */ public Collection<Item> getItemsByTagAndType(String type, String... tags); /** * Returns list of items which contains all of the given tags. * * @param typeFilter * - subclass of {@link GenericItem} to filter the resulting list * for. * @param tags * - array of tags to be present on the returned items. * @return list of items which contains all of the given tags, which is * filtered by the given type filter. */ public <T extends GenericItem> Collection<T> getItemsByTag(Class<T> typeFilter, String... tags); /** * @see ManagedItemProvider#remove(String, boolean) */ public Item remove(String itemName, boolean recursive); }