[Emu] ONOS-3512 CLI for new resource subsystem

- "resources" command to print available resources on new resource service.
- "allocations" command to dump current allocations
- "test-allocate-resource" command to allocate a resource

Change-Id: I89e531c71ef288b8c06dcd355a3a819d667c8225
diff --git a/cli/src/main/java/org/onosproject/cli/net/TestAllocateResource.java b/cli/src/main/java/org/onosproject/cli/net/TestAllocateResource.java
new file mode 100644
index 0000000..843361f
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/TestAllocateResource.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.cli.net;
+
+import static org.onosproject.net.newresource.ResourcePath.discrete;
+
+import java.util.Optional;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.newresource.ResourceAllocation;
+import org.onosproject.net.newresource.ResourceConsumer;
+import org.onosproject.net.newresource.ResourcePath;
+import org.onosproject.net.newresource.ResourceService;
+
+/**
+ * Test tool to allocate resources.
+ */
+@Command(scope = "onos", name = "test-allocate-resources",
+         description = "Test tool to allocate resources")
+public class TestAllocateResource extends AbstractShellCommand {
+
+    // TODO add support for other resource types
+
+    // FIXME provide a proper way to specify a lambda and lambda ranges
+    @Option(name = "-l", aliases = "--lambda",
+            description = "Lambda Resource to allocate",
+            required = false, multiValued = false)
+    private String lambda = "1";
+
+    @Option(name = "-i", aliases = "--intentId",
+            description = "IntentId to use for allocation",
+            required = false, multiValued = false)
+    private int nIntendId = 42;
+
+
+    @Argument(index = 0, name = "deviceIdString", description = "Device ID",
+            required = true, multiValued = false)
+    String deviceIdStr = null;
+
+    @Argument(index = 1, name = "portNumberString", description = "PortNumber",
+            required = true, multiValued = false)
+    String portNumberStr = null;
+
+    private ResourceService resourceService;
+
+    @Override
+    protected void execute() {
+        resourceService = get(ResourceService.class);
+        DeviceId did = DeviceId.deviceId(deviceIdStr);
+        PortNumber portNum = PortNumber.fromString(portNumberStr);
+
+        ResourceConsumer consumer = IntentId.valueOf(nIntendId);
+
+        ResourcePath resource = discrete(did, portNum,
+                                         createLambda(Integer.parseInt(lambda)));
+
+        Optional<ResourceAllocation> allocate = resourceService.allocate(consumer, resource);
+        if (allocate.isPresent()) {
+            print("Allocated: %s", allocate.get());
+        } else {
+            print("Failed to allocate %s for %s", resource, consumer);
+        }
+    }
+
+    private OchSignal createLambda(int i) {
+        return new OchSignal(GridType.FLEX,
+                             ChannelSpacing.CHL_12P5GHZ,
+                             i,
+                             1);
+    }
+
+}