/** * 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.io.console.internal.extension; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import org.eclipse.smarthome.core.items.Item; import org.eclipse.smarthome.core.items.ItemRegistry; import org.eclipse.smarthome.io.console.Console; import org.eclipse.smarthome.io.console.extensions.AbstractConsoleCommandExtension; /** * Console command extension to get item list * * @author Kai Kreuzer - Initial contribution and API * @author Markus Rathgeb - Create DS for command extension * @author Dennis Nobel - Changed service references to be injected via DS * @author Simon Kaufmann - Added commands to clear and remove items * */ public class ItemConsoleCommandExtension extends AbstractConsoleCommandExtension { private static final String SUBCMD_LIST = "list"; private static final String SUBCMD_CLEAR = "clear"; private static final String SUBCMD_REMOVE = "remove"; private ItemRegistry itemRegistry; public ItemConsoleCommandExtension() { super("items", "Access the item registry."); } @Override public List<String> getUsages() { return Arrays.asList(new String[] { buildCommandUsage(SUBCMD_LIST + " [<pattern>]", "lists names and types of all items (matching the pattern, if given)"), buildCommandUsage(SUBCMD_CLEAR, "removes all items"), buildCommandUsage(SUBCMD_REMOVE + " <itemName>", "removes the given item") }); } @Override public void execute(String[] args, Console console) { if (args.length > 0) { String subCommand = args[0]; switch (subCommand) { case SUBCMD_LIST: listItems(console, (args.length < 2) ? "*" : args[1]); break; case SUBCMD_CLEAR: removeItems(console, itemRegistry.getAll()); break; case SUBCMD_REMOVE: if (args.length > 1) { String name = args[1]; Item item = itemRegistry.get(name); removeItems(console, Collections.singleton(item)); } else { console.println("Specify the name of the item to remove: " + this.getCommand() + " " + SUBCMD_REMOVE + " <itemName>"); } break; default: console.println("Unknown command '" + subCommand + "'"); printUsage(console); break; } } else { printUsage(console); } } private void removeItems(Console console, Collection<Item> items) { int count = items.size(); for (Item item : items) { itemRegistry.remove(item.getName()); } console.println(count + " item(s) removed successfully."); } private void listItems(Console console, String pattern) { Collection<Item> items = this.itemRegistry.getItems(pattern); if (items.size() > 0) { for (Item item : items) { console.println(item.toString()); } } else { console.println("No item found for this pattern."); } } protected void setItemRegistry(ItemRegistry itemRegistry) { this.itemRegistry = itemRegistry; } protected void unsetItemRegistry(ItemRegistry itemRegistry) { this.itemRegistry = null; } }