Merge "Add missing copyright text"
[controller.git] / opendaylight / netconf / netconf-cli / src / main / java / org / opendaylight / controller / netconf / cli / commands / input / Input.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.netconf.cli.commands.input;
9
10 import com.google.common.base.Preconditions;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.Collections;
14 import java.util.HashMap;
15 import java.util.List;
16 import java.util.Map;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
19 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
20 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
21 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
22
23 /**
24  * Input arguments for and rpc/command execution
25  */
26 public class Input {
27
28     private final List<NormalizedNode<?, ?>> args;
29
30     private final Map<String, NormalizedNode<?, ?>> nameToArg = new HashMap<>();
31
32     public Input(final List<NormalizedNode<?, ?>> args) {
33         // FIXME empty Input should be constructed from static factory method
34         if(args.isEmpty()) {
35             this.args = Collections.emptyList();
36             return;
37         }
38
39         final NormalizedNode<?, ?> input = args.iterator().next();
40         Preconditions
41                 .checkArgument(input instanceof DataContainerChild<?, ?>, "Input container has to be of type Data Container Child.");
42         this.args = new ArrayList<>((Collection) input.getValue());
43
44         for (final NormalizedNode<?, ?> arg : this.args) {
45             nameToArg.put(arg.getNodeType().getLocalName(), arg);
46         }
47     }
48
49     public NormalizedNode<?, ?> getArg(final String name) {
50         return nameToArg.get(name);
51     }
52
53     public NormalizedNode<?, ?> wrap(final QName rpcQName) {
54         //TODO just add the list as children to the node
55         return ImmutableContainerNodeBuilder.create()
56                 .withNodeIdentifier(new NodeIdentifier(rpcQName))
57                 .withValue((Collection) args).build();
58     }
59 }