--- /dev/null
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. 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.opendaylight.controller.netconf.cli.commands.input;
+
+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
+
+/**
+ * Input arguments for and rpc/command execution
+ */
+public class Input {
+
+ private final List<NormalizedNode<?, ?>> args;
+
+ private final Map<String, NormalizedNode<?, ?>> nameToArg = new HashMap<>();
+
+ public Input(final List<NormalizedNode<?, ?>> args) {
+ // FIXME empty Input should be constructed from static factory method
+ if(args.isEmpty()) {
+ this.args = Collections.emptyList();
+ return;
+ }
+
+ final NormalizedNode<?, ?> input = args.iterator().next();
+ Preconditions
+ .checkArgument(input instanceof DataContainerChild<?, ?>, "Input container has to be of type Data Container Child.");
+ this.args = new ArrayList<>((Collection) input.getValue());
+
+ for (final NormalizedNode<?, ?> arg : this.args) {
+ nameToArg.put(arg.getNodeType().getLocalName(), arg);
+ }
+ }
+
+ public NormalizedNode<?, ?> getArg(final String name) {
+ return nameToArg.get(name);
+ }
+
+ public NormalizedNode<?, ?> wrap(final QName rpcQName) {
+ //TODO just add the list as children to the node
+ return ImmutableContainerNodeBuilder.create()
+ .withNodeIdentifier(new NodeIdentifier(rpcQName))
+ .withValue((Collection) args).build();
+ }
+}