From 3ab2f8f30624121975715bad689538ef96069283 Mon Sep 17 00:00:00 2001 From: Chris Jackson Date: Thu, 6 Sep 2018 18:36:35 +0100 Subject: [PATCH] Add machine readable console argument definition Signed-off-by: Chris Jackson --- .../ember/EmberConsoleAbstractCommand.java | 4 +- .../ember/EmberConsoleMmoHashCommand.java | 17 ++- .../ember/EmberConsoleNcpChildrenCommand.java | 6 + .../EmberConsoleNcpConfigurationCommand.java | 6 + .../ember/EmberConsoleNcpCountersCommand.java | 6 + .../ember/EmberConsoleNcpScanCommand.java | 7 + .../ember/EmberConsoleNcpStateCommand.java | 6 + .../ember/EmberConsoleNcpValueCommand.java | 6 + .../ember/EmberConsoleNcpVersionCommand.java | 6 + .../EmberConsoleSecurityStateCommand.java | 6 + .../EmberConsoleTransientKeyCommand.java | 6 + .../TelegesisConsoleAbstractCommand.java | 6 +- .../TelegesisConsoleSecurityStateCommand.java | 5 + .../console/ZigBeeConsoleAbstractCommand.java | 57 ++++++++ .../zigbee/console/ZigBeeConsoleArgument.java | 125 ++++++++++++++++++ .../console/ZigBeeConsoleArgumentBuilder.java | 79 +++++++++++ .../console/ZigBeeConsoleArgumentType.java | 23 ++++ .../ZigBeeConsoleAttributeReadCommand.java | 5 + ...igBeeConsoleAttributeSupportedCommand.java | 5 + .../ZigBeeConsoleAttributeWriteCommand.java | 5 + .../console/ZigBeeConsoleBindCommand.java | 20 ++- .../ZigBeeConsoleBindingTableCommand.java | 5 + .../zigbee/console/ZigBeeConsoleCommand.java | 8 ++ ...ZigBeeConsoleCommandsSupportedCommand.java | 4 + .../ZigBeeConsoleDescribeEndpointCommand.java | 5 + .../ZigBeeConsoleDescribeNodeCommand.java | 5 + ...ZigBeeConsoleDeviceInformationCommand.java | 5 + .../ZigBeeConsoleInstallKeyCommand.java | 5 + .../console/ZigBeeConsoleLinkKeyCommand.java | 16 ++- .../ZigBeeConsoleNetworkBackupCommand.java | 5 + .../ZigBeeConsoleNetworkDiscoveryCommand.java | 5 + .../ZigBeeConsoleNetworkJoinCommand.java | 5 + .../ZigBeeConsoleNetworkLeaveCommand.java | 5 + .../ZigBeeConsoleNetworkStartCommand.java | 5 + .../console/ZigBeeConsoleNodeListCommand.java | 5 + .../ZigBeeConsoleOtaUpgradeCommand.java | 5 + .../ZigBeeConsoleReportingConfigCommand.java | 5 + ...igBeeConsoleReportingSubscribeCommand.java | 7 + ...BeeConsoleReportingUnsubscribeCommand.java | 5 + .../console/ZigBeeConsoleUnbindCommand.java | 5 + .../console/ZigBeeConsoleBindCommandTest.java | 24 ++++ .../ZigBeeConsoleLinkKeyCommandTest.java | 24 ++++ 42 files changed, 542 insertions(+), 22 deletions(-) create mode 100644 com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgument.java create mode 100644 com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgumentBuilder.java create mode 100644 com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgumentType.java create mode 100644 com.zsmartsystems.zigbee.console/src/test/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindCommandTest.java create mode 100644 com.zsmartsystems.zigbee.console/src/test/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleLinkKeyCommandTest.java diff --git a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleAbstractCommand.java b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleAbstractCommand.java index ad6d06740..d90aad69c 100644 --- a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleAbstractCommand.java +++ b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleAbstractCommand.java @@ -8,7 +8,7 @@ package com.zsmartsystems.zigbee.console.ember; import com.zsmartsystems.zigbee.ZigBeeNetworkManager; -import com.zsmartsystems.zigbee.console.ZigBeeConsoleCommand; +import com.zsmartsystems.zigbee.console.ZigBeeConsoleAbstractCommand; import com.zsmartsystems.zigbee.dongle.ember.EmberNcp; import com.zsmartsystems.zigbee.dongle.ember.ZigBeeDongleEzsp; @@ -17,7 +17,7 @@ * @author Chris Jackson - Initial Contribution * */ -public abstract class EmberConsoleAbstractCommand implements ZigBeeConsoleCommand { +public abstract class EmberConsoleAbstractCommand extends ZigBeeConsoleAbstractCommand { protected EmberNcp getEmberNcp(ZigBeeNetworkManager networkManager) throws IllegalArgumentException, IllegalStateException { diff --git a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleMmoHashCommand.java b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleMmoHashCommand.java index ca9dbba56..de0d13199 100644 --- a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleMmoHashCommand.java +++ b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleMmoHashCommand.java @@ -10,6 +10,7 @@ import java.io.PrintStream; import com.zsmartsystems.zigbee.ZigBeeNetworkManager; +import com.zsmartsystems.zigbee.console.ZigBeeConsoleArgument; import com.zsmartsystems.zigbee.dongle.ember.EmberNcp; import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EmberAesMmoHashContext; @@ -20,6 +21,11 @@ * */ public class EmberConsoleMmoHashCommand extends EmberConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "ncpmmohash"; @@ -30,11 +36,6 @@ public String getDescription() { return "Passes an install code to the NCP and receives the MMO hash key"; } - @Override - public String getSyntax() { - return "INSTALLCODE"; - } - @Override public String getHelp() { return ""; @@ -76,4 +77,10 @@ private String arrayToString(int[] data) { return builder.toString(); } + + @Override + public ZigBeeConsoleArgument getArguments() { + // TODO Auto-generated method stub + return null; + } } diff --git a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpChildrenCommand.java b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpChildrenCommand.java index 7e371d0c2..29568963c 100644 --- a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpChildrenCommand.java +++ b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpChildrenCommand.java @@ -10,6 +10,7 @@ import java.io.PrintStream; import com.zsmartsystems.zigbee.ZigBeeNetworkManager; +import com.zsmartsystems.zigbee.console.ZigBeeConsoleArgument; import com.zsmartsystems.zigbee.dongle.ember.EmberNcp; import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspGetChildDataResponse; import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspGetParentChildParametersResponse; @@ -20,6 +21,11 @@ * */ public class EmberConsoleNcpChildrenCommand extends EmberConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "ncpchildren"; diff --git a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpConfigurationCommand.java b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpConfigurationCommand.java index a6a5530a5..2247e9de4 100644 --- a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpConfigurationCommand.java +++ b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpConfigurationCommand.java @@ -13,6 +13,7 @@ import java.util.TreeMap; import com.zsmartsystems.zigbee.ZigBeeNetworkManager; +import com.zsmartsystems.zigbee.console.ZigBeeConsoleArgument; import com.zsmartsystems.zigbee.dongle.ember.EmberNcp; import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EzspConfigId; import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EzspValueId; @@ -24,6 +25,11 @@ * */ public class EmberConsoleNcpConfigurationCommand extends EmberConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "ncpconfig"; diff --git a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpCountersCommand.java b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpCountersCommand.java index eb71f0b0d..4dc4685ed 100644 --- a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpCountersCommand.java +++ b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpCountersCommand.java @@ -10,6 +10,7 @@ import java.io.PrintStream; import com.zsmartsystems.zigbee.ZigBeeNetworkManager; +import com.zsmartsystems.zigbee.console.ZigBeeConsoleArgument; import com.zsmartsystems.zigbee.dongle.ember.EmberNcp; import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EmberCounterType; @@ -19,6 +20,11 @@ * */ public class EmberConsoleNcpCountersCommand extends EmberConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "ncpcounters"; diff --git a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpScanCommand.java b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpScanCommand.java index 254a6d5e3..24e23957a 100644 --- a/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpScanCommand.java +++ b/com.zsmartsystems.zigbee.console.ember/src/main/java/com/zsmartsystems/zigbee/console/ember/EmberConsoleNcpScanCommand.java @@ -13,6 +13,7 @@ import com.zsmartsystems.zigbee.ExtendedPanId; import com.zsmartsystems.zigbee.ZigBeeChannelMask; import com.zsmartsystems.zigbee.ZigBeeNetworkManager; +import com.zsmartsystems.zigbee.console.ZigBeeConsoleArgument; import com.zsmartsystems.zigbee.dongle.ember.EmberNcp; import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspEnergyScanResultHandler; import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspNetworkFoundHandler; @@ -25,6 +26,11 @@ * */ public class EmberConsoleNcpScanCommand extends EmberConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "ncpscan"; @@ -88,4 +94,5 @@ private void outputChannelEnergy(PrintStream out, List len) { + len = suboption.getConstant().length(); + } + } + for (ZigBeeConsoleArgument suboption : argument.getSuboptions()) { + builder.append(getSyntax(indent, suboption)); + } + } else { + if (argument.isOptional()) { + builder.append('['); + } + if (argument.getConstant() != null) { + builder.append(argument.getConstant()); + } else { + builder.append(argument.getType()); + } + + if (argument.isOptional()) { + builder.append(']'); + } + } + argument = argument.getNext(); + if (argument != null) { + builder.append(' '); + } + } while (argument != null); + builder.append('\n'); + return builder.toString(); + } /** * Gets a {@link ZigBeeNode} diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgument.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgument.java new file mode 100644 index 000000000..66a8e3261 --- /dev/null +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgument.java @@ -0,0 +1,125 @@ +/** + * Copyright (c) 2016-2018 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 com.zsmartsystems.zigbee.console; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author Chris Jackson + * + */ +public class ZigBeeConsoleArgument { + private final ZigBeeConsoleArgumentType type; + private final String constant; + private final String description; + private final boolean optional; + private final List next; + + private ZigBeeConsoleArgument lastChain; + + ZigBeeConsoleArgument(ZigBeeConsoleArgumentType type, String constant, String description, boolean optional) { + this.type = type; + this.constant = constant; + this.description = description; + this.optional = optional; + this.next = new ArrayList<>(); + } + + /** + * @return the type + */ + public ZigBeeConsoleArgumentType getType() { + return type; + } + + /** + * @return the constant + */ + public String getConstant() { + return constant; + } + + /** + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * @return the optional + */ + public boolean isOptional() { + return optional; + } + + /** + * @return the next argument + */ + public boolean hasSuboptions() { + return next.size() > 1; + } + + /** + * @return the next argument + */ + public List getSuboptions() { + return next; + } + + /** + * + * @param name + * @return + */ + public ZigBeeConsoleArgument getSuboption(String name) { + for (ZigBeeConsoleArgument suboption : next) { + if (name.equalsIgnoreCase(suboption.getConstant())) { + return suboption; + } + } + + return null; + } + + /** + * @return the next argument + */ + public ZigBeeConsoleArgument getNext() { + if (next.isEmpty()) { + return null; + } + return next.get(0); + } + + public void chain(ZigBeeConsoleArgument next) { + if (lastChain == null) { + lastChain = this; + } + lastChain.setNext(next); + lastChain = next; + } + + public void chainSuboption(ZigBeeConsoleArgument next) { + if (lastChain == null) { + lastChain = this; + } + lastChain.addSuboption(next); + } + + private void setNext(ZigBeeConsoleArgument next) { + this.next.clear(); + this.next.add(next); + } + + private void addSuboption(ZigBeeConsoleArgument next) { + this.next.add(next); + } +} diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgumentBuilder.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgumentBuilder.java new file mode 100644 index 000000000..0d0268d89 --- /dev/null +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgumentBuilder.java @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2016-2018 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 com.zsmartsystems.zigbee.console; + +/** + * A builder class to build a {@link ZigBeeConsoleArgument} which defines the arguments required in a + * {@link ZigBeeConsoleCommand}. + * + * @author Chris Jackson + * + */ +public class ZigBeeConsoleArgumentBuilder { + private ZigBeeConsoleArgumentType type; + private String name; + private String description; + private boolean optional; + + private ZigBeeConsoleArgumentBuilder(ZigBeeConsoleArgumentType type) { + this.type = type; + } + + /** + * Sets the name of this argument. + * + * @param name a {@link String} defining the name + * @return the {@link ZigBeeConsoleArgumentBuilder} + */ + public ZigBeeConsoleArgumentBuilder withName(String name) { + this.name = name; + return this; + } + + /** + * Sets the description of this argument. + * + * @param description a {@link String} defining the description + * @return the {@link ZigBeeConsoleArgumentBuilder} + */ + public ZigBeeConsoleArgumentBuilder withDescription(String description) { + this.description = description; + return this; + } + + /** + * Sets the argument as optional. + * + * @return the {@link ZigBeeConsoleArgumentBuilder} + */ + public ZigBeeConsoleArgumentBuilder isOptional() { + this.optional = true; + return this; + } + + /** + * Builds the argument. + * + * @return the {@link ZigBeeConsoleArgument} + */ + public ZigBeeConsoleArgument build() { + return new ZigBeeConsoleArgument(type, name, description, optional); + } + + /** + * Creates an {@link ZigBeeConsoleArgumentBuilder}. {@link #build} must be called to create the + * {@link ZigBeeConsoleArgument}. + * + * @param type the {@link ZigBeeConsoleArgumentType} of this argument + * @return the {@link ZigBeeConsoleArgumentBuilder} + */ + public static ZigBeeConsoleArgumentBuilder create(ZigBeeConsoleArgumentType type) { + return new ZigBeeConsoleArgumentBuilder(type); + } + +} diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgumentType.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgumentType.java new file mode 100644 index 000000000..40cdc818a --- /dev/null +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleArgumentType.java @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2016-2018 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 com.zsmartsystems.zigbee.console; + +/** + * Enumeration defining console command argument types + * + * @author Chris Jackson + * + */ +public enum ZigBeeConsoleArgumentType { + ROOT, + CONSTANT, + NODE, + ENDPOINT, + CLUSTER, + KEY +} diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeReadCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeReadCommand.java index 3e4af06fd..43e27f92f 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeReadCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeReadCommand.java @@ -24,6 +24,11 @@ * */ public class ZigBeeConsoleAttributeReadCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "read"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeSupportedCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeSupportedCommand.java index 7f1b1449a..f7da3d8ee 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeSupportedCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeSupportedCommand.java @@ -22,6 +22,11 @@ * */ public class ZigBeeConsoleAttributeSupportedCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "attsupported"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeWriteCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeWriteCommand.java index 0899101b9..da99f4c50 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeWriteCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleAttributeWriteCommand.java @@ -24,6 +24,11 @@ * */ public class ZigBeeConsoleAttributeWriteCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "write"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindCommand.java index 80c842b6c..236b9cc20 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindCommand.java @@ -24,18 +24,26 @@ */ public class ZigBeeConsoleBindCommand extends ZigBeeConsoleAbstractCommand { @Override - public String getCommand() { - return "bind"; + protected ZigBeeConsoleArgument initializeArguments() { + ZigBeeConsoleArgument option = ZigBeeConsoleArgumentBuilder.create(ZigBeeConsoleArgumentType.ENDPOINT) + .withName("SOURCE-ENDPOINT").withDescription("The source endpoint to bind to").build(); + option.chain(ZigBeeConsoleArgumentBuilder.create(ZigBeeConsoleArgumentType.CLUSTER) + .withDescription("The cluster to bind to").build()); + option.chain(ZigBeeConsoleArgumentBuilder.create(ZigBeeConsoleArgumentType.ENDPOINT) + .withName("DESTINATION-ENDPOINT") + .withDescription("The destination endpoint to bind to (defaults to local node)").isOptional().build()); + + return option; } @Override - public String getDescription() { - return "Binds a device to another device. If destination is not specified, the coordinator will be used."; + public String getCommand() { + return "bind"; } @Override - public String getSyntax() { - return "CLUSTER SOURCE-ENDPOINT [DESTINATION-ENDPOINT]"; + public String getDescription() { + return "Binds a device to another device. If destination is not specified, the local node will be used."; } @Override diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindingTableCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindingTableCommand.java index 467f7d489..efb5ecc93 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindingTableCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindingTableCommand.java @@ -23,6 +23,11 @@ * */ public class ZigBeeConsoleBindingTableCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "bindtable"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleCommand.java index 32061e6f9..b0cc93a66 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleCommand.java @@ -40,6 +40,14 @@ public interface ZigBeeConsoleCommand { */ public String getSyntax(); + /** + * Gets the list of arguments that are applicable for this command. This is defined in a prescriptive way such that + * it can be machine interpreted. + * + * @return the {@link ZigBeeConsoleArgument} defining the possible arguments for this command + */ + public ZigBeeConsoleArgument getArguments(); + /** * Get detailed command help. * diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleCommandsSupportedCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleCommandsSupportedCommand.java index ad0e624e8..ad62620ab 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleCommandsSupportedCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleCommandsSupportedCommand.java @@ -22,6 +22,10 @@ * @author Henning Sudbrock */ public class ZigBeeConsoleCommandsSupportedCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } @Override public String getCommand() { diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDescribeEndpointCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDescribeEndpointCommand.java index 462609202..4baa358ab 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDescribeEndpointCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDescribeEndpointCommand.java @@ -25,6 +25,11 @@ * */ public class ZigBeeConsoleDescribeEndpointCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "endpoint"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDescribeNodeCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDescribeNodeCommand.java index 2cbcaa0bd..280d9865c 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDescribeNodeCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDescribeNodeCommand.java @@ -26,6 +26,11 @@ * */ public class ZigBeeConsoleDescribeNodeCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "node"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDeviceInformationCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDeviceInformationCommand.java index 1e74c32ae..6a4fe9eff 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDeviceInformationCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleDeviceInformationCommand.java @@ -23,6 +23,11 @@ * */ public class ZigBeeConsoleDeviceInformationCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "info"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleInstallKeyCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleInstallKeyCommand.java index 8c0a4e98c..fe78ad73c 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleInstallKeyCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleInstallKeyCommand.java @@ -22,6 +22,11 @@ * */ public class ZigBeeConsoleInstallKeyCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "installkey"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleLinkKeyCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleLinkKeyCommand.java index 3bf82d915..382b2ae16 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleLinkKeyCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleLinkKeyCommand.java @@ -22,18 +22,22 @@ */ public class ZigBeeConsoleLinkKeyCommand extends ZigBeeConsoleAbstractCommand { @Override - public String getCommand() { - return "linkkey"; + protected ZigBeeConsoleArgument initializeArguments() { + ZigBeeConsoleArgument option = ZigBeeConsoleArgumentBuilder.create(ZigBeeConsoleArgumentType.CONSTANT) + .withName("MMO").withDescription("Specified KEYDATA is a join code").isOptional().build(); + option.chain(ZigBeeConsoleArgumentBuilder.create(ZigBeeConsoleArgumentType.KEY).build()); + + return option; } @Override - public String getDescription() { - return "Sets the link key int the dongle, optionally computing the MMO Hash from the join code"; + public String getCommand() { + return "linkkey"; } @Override - public String getSyntax() { - return "[MMO] KEYDATA"; + public String getDescription() { + return "Sets the link key in the dongle, optionally computing the MMO Hash from the join code"; } @Override diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkBackupCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkBackupCommand.java index dbd1cc313..725fb4ccd 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkBackupCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkBackupCommand.java @@ -29,6 +29,11 @@ * */ public class ZigBeeConsoleNetworkBackupCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "netbackup"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkDiscoveryCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkDiscoveryCommand.java index ee2ccbd5e..56f73ab81 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkDiscoveryCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkDiscoveryCommand.java @@ -32,6 +32,11 @@ public class ZigBeeConsoleNetworkDiscoveryCommand extends ZigBeeConsoleAbstractC private static final DateFormat dfIso8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "discovery"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkJoinCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkJoinCommand.java index 49367b6cf..25555940b 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkJoinCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkJoinCommand.java @@ -18,6 +18,11 @@ * */ public class ZigBeeConsoleNetworkJoinCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "join"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkLeaveCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkLeaveCommand.java index a65239d7b..a710ee94a 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkLeaveCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkLeaveCommand.java @@ -18,6 +18,11 @@ * */ public class ZigBeeConsoleNetworkLeaveCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "leave"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkStartCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkStartCommand.java index f5bcda76f..5032c19c6 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkStartCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNetworkStartCommand.java @@ -22,6 +22,11 @@ * */ public class ZigBeeConsoleNetworkStartCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "netstart"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNodeListCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNodeListCommand.java index 89b0eba07..05efd909a 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNodeListCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleNodeListCommand.java @@ -26,6 +26,11 @@ * */ public class ZigBeeConsoleNodeListCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "nodelist"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleOtaUpgradeCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleOtaUpgradeCommand.java index 8e3b4960e..a71bd59cc 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleOtaUpgradeCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleOtaUpgradeCommand.java @@ -24,6 +24,11 @@ * */ public class ZigBeeConsoleOtaUpgradeCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "otaupgrade"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingConfigCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingConfigCommand.java index 1118fde92..5dc714647 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingConfigCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingConfigCommand.java @@ -24,6 +24,11 @@ * */ public class ZigBeeConsoleReportingConfigCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "reportcfg"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingSubscribeCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingSubscribeCommand.java index bf60b9927..7432e25cb 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingSubscribeCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingSubscribeCommand.java @@ -24,6 +24,13 @@ * */ public class ZigBeeConsoleReportingSubscribeCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + ZigBeeConsoleArgument arguments = ZigBeeConsoleArgumentBuilder.create(ZigBeeConsoleArgumentType.ROOT).build(); + + return arguments; + } + @Override public String getCommand() { return "subscribe"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingUnsubscribeCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingUnsubscribeCommand.java index 0edae4184..a9e996dad 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingUnsubscribeCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleReportingUnsubscribeCommand.java @@ -24,6 +24,11 @@ * */ public class ZigBeeConsoleReportingUnsubscribeCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "unsubscribe"; diff --git a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleUnbindCommand.java b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleUnbindCommand.java index e7a180ffc..1274a67a3 100644 --- a/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleUnbindCommand.java +++ b/com.zsmartsystems.zigbee.console/src/main/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleUnbindCommand.java @@ -23,6 +23,11 @@ * */ public class ZigBeeConsoleUnbindCommand extends ZigBeeConsoleAbstractCommand { + @Override + protected ZigBeeConsoleArgument initializeArguments() { + return null; + } + @Override public String getCommand() { return "unbind"; diff --git a/com.zsmartsystems.zigbee.console/src/test/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindCommandTest.java b/com.zsmartsystems.zigbee.console/src/test/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindCommandTest.java new file mode 100644 index 000000000..00373605d --- /dev/null +++ b/com.zsmartsystems.zigbee.console/src/test/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleBindCommandTest.java @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2016-2018 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 com.zsmartsystems.zigbee.console; + +import org.junit.Test; + +/** + * + * @author Chris Jackson + * + */ +public class ZigBeeConsoleBindCommandTest { + @Test + public void getSyntax() { + ZigBeeConsoleBindCommand command = new ZigBeeConsoleBindCommand(); + + System.out.println(command.getSyntax()); + } +} diff --git a/com.zsmartsystems.zigbee.console/src/test/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleLinkKeyCommandTest.java b/com.zsmartsystems.zigbee.console/src/test/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleLinkKeyCommandTest.java new file mode 100644 index 000000000..61c331ac3 --- /dev/null +++ b/com.zsmartsystems.zigbee.console/src/test/java/com/zsmartsystems/zigbee/console/ZigBeeConsoleLinkKeyCommandTest.java @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2016-2018 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 com.zsmartsystems.zigbee.console; + +import org.junit.Test; + +/** + * + * @author Chris Jackson + * + */ +public class ZigBeeConsoleLinkKeyCommandTest { + @Test + public void getSyntax() { + ZigBeeConsoleLinkKeyCommand command = new ZigBeeConsoleLinkKeyCommand(); + + System.out.println(command.getSyntax()); + } +}