/** * 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.internal.sample.json.handler; import java.util.Arrays; import java.util.List; import org.eclipse.smarthome.automation.handler.TriggerHandler; import org.eclipse.smarthome.io.console.Console; import org.eclipse.smarthome.io.console.extensions.AbstractConsoleCommandExtension; import org.eclipse.smarthome.io.console.extensions.ConsoleCommandExtension; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; /** * Text console commands to list and execute the created sample trigger handlers * * @author Ana Dimova - Initial Contribution * @author Kai Kreuzer - refactored and simplified customized module handling */ public class SampleHandlerFactoryCommands extends AbstractConsoleCommandExtension { private static final String CMD = "autotype"; private static final String DESC = "Automation Sample Handler Factory Management"; private static final String COMMAND_LIST = "listTrigger"; private static final String COMMAND_EXECUTE = "executeTrigger"; private List<TriggerHandler> currentTriggers; private SampleHandlerFactory sampleHandlerFactory; private ServiceRegistration<?> commandsServiceReg; /** * Constructs the SampleHandlerFactoryCommands * * @param sampleHandlerFactory HandlerFactory * @param bc bundleContext */ public SampleHandlerFactoryCommands(SampleHandlerFactory sampleHandlerFactory, BundleContext bc) { super(CMD, DESC); this.sampleHandlerFactory = sampleHandlerFactory; commandsServiceReg = bc.registerService(ConsoleCommandExtension.class.getName(), this, null); } @Override public void execute(String[] args, Console console) { String command = args[0]; String[] params = new String[args.length - 1];// extract the remaining arguments except the first one if (params.length > 0) { System.arraycopy(args, 1, params, 0, params.length); } if (COMMAND_LIST.equalsIgnoreCase(command) || "ls".equalsIgnoreCase(command)) { listTriggerHandlers(params, console); } else if (COMMAND_EXECUTE.equalsIgnoreCase(command) || "ex".equalsIgnoreCase(command)) { executeTriggerHandler(params, console); } } @Override public List<String> getUsages() { return Arrays.asList(new String[] { buildCommandUsage(COMMAND_LIST, "List all created TriggerHandler"), buildCommandUsage(COMMAND_EXECUTE, "Executes specific TriggerHandler by its index.") }); } /** * Dispose resources. */ public void stop() { commandsServiceReg.unregister(); } private void listTriggerHandlers(String[] params, Console console) { console.println("ID Rule Trigger"); console.println("-------------------------------------------------------------------------------------------"); currentTriggers = sampleHandlerFactory.getCreatedTriggerHandler(); if (currentTriggers.size() > 0) { for (int i = 0; i < currentTriggers.size(); i++) { SampleTriggerHandler triggerHandler = (SampleTriggerHandler) currentTriggers.get(i); console.print(Integer.toString(i + 1)); console.print(" "); console.print(triggerHandler.getRuleUID()); console.print(" "); console.println(triggerHandler.getTriggerID()); } } else { console.println("No created TriggerHandler. List is Empty"); } } private void executeTriggerHandler(String[] params, Console console) { if (params.length >= 1) { if (currentTriggers == null || currentTriggers.isEmpty()) { currentTriggers = sampleHandlerFactory.getCreatedTriggerHandler(); } int index = Integer.parseInt(params[0]); String param = null; if (currentTriggers.size() >= index) { SampleTriggerHandler triggerHandler = (SampleTriggerHandler) currentTriggers.get(index - 1); if (params.length >= 2) { param = params[1]; } triggerHandler.trigger(param); } } } }