<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you 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.
  -->
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
        <command>
            <action class="org.onlab.onos.cli.SummaryCommand"/>
        </command>
        <command>
            <action class="org.onlab.onos.cli.NodesListCommand"/>
        </command>
        <command>
            <action class="org.onlab.onos.cli.NodeAddCommand"/>
        </command>
        <command>
            <action class="org.onlab.onos.cli.NodeRemoveCommand"/>
        </command>

        <command>
            <action class="org.onlab.onos.cli.RolesCommand"/>
        </command>
        <command>
            <action class="org.onlab.onos.cli.MastersListCommand"/>
            <completers>
                <ref component-id="clusterIdCompleter"/>
            </completers>
        </command>

        <command>
            <action class="org.onlab.onos.cli.net.DevicesListCommand"/>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.DevicePortsListCommand"/>
            <completers>
                <ref component-id="deviceIdCompleter"/>
                <null/>
            </completers>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.DeviceRemoveCommand"/>
            <completers>
                <ref component-id="deviceIdCompleter"/>
                <null/>
            </completers>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.DeviceRoleCommand"/>
            <completers>
                <ref component-id="deviceIdCompleter"/>
                <ref component-id="nodeIdCompleter"/>
                <ref component-id="roleCompleter"/>
                <null/>
            </completers>
        </command>

        <command>
            <action class="org.onlab.onos.cli.net.LinksListCommand"/>
            <completers>
                <ref component-id="deviceIdCompleter"/>
                <null/>
            </completers>
        </command>

        <command>
            <action class="org.onlab.onos.cli.net.TopologyCommand"/>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.PathListCommand"/>
            <completers>
                <ref component-id="deviceIdCompleter"/>
                <ref component-id="deviceIdCompleter"/>
                <null/>
            </completers>
        </command>

        <command>
            <action class="org.onlab.onos.cli.net.IntentsListCommand"/>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.IntentRemoveCommand"/>
            <completers>
                <ref component-id="intentIdCompleter"/>
                <null/>
            </completers>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.AddHostToHostIntentCommand"/>
            <completers>
                <ref component-id="hostIdCompleter"/>
                <ref component-id="hostIdCompleter"/>
                <null/>
            </completers>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.AddPointToPointIntentCommand"/>
            <completers>
                <ref component-id="connectPointCompleter"/>
                <ref component-id="connectPointCompleter"/>
                <null/>
            </completers>
            <optional-completers>
                <entry key="-t" value-ref="ethTypeCompleter"/>
            </optional-completers>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.AddMultiPointToSinglePointIntentCommand"/>
            <completers>
                <ref component-id="connectPointCompleter"/>
            </completers>
            <optional-completers>
                <entry key="-t" value-ref="ethTypeCompleter"/>
            </optional-completers>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.IntentPushTestCommand"/>
            <completers>
                <ref component-id="connectPointCompleter"/>
                <ref component-id="connectPointCompleter"/>
                <ref component-id="nullCompleter"/>
                <null/>
            </completers>
        </command>

        <command>
            <action class="org.onlab.onos.cli.net.ClustersListCommand"/>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.ClusterDevicesCommand"/>
            <completers>
                <ref component-id="clusterIdCompleter"/>
                <null/>
            </completers>
        </command>
        <command>
            <action class="org.onlab.onos.cli.net.ClusterLinksCommand"/>
            <completers>
                <ref component-id="clusterIdCompleter"/>
                <null/>
            </completers>
        </command>

        <command>
            <action class="org.onlab.onos.cli.net.HostsListCommand"/>
        </command>

        <command>
            <action class="org.onlab.onos.cli.net.FlowsListCommand"/>
            <completers>
                <ref component-id="flowRuleStatusCompleter"/>
                <ref component-id="deviceIdCompleter"/>
                <null/>
            </completers>
        </command>

        <command>
            <action class="org.onlab.onos.cli.net.WipeOutCommand"/>
        </command>
    </command-bundle>

    <bean id="nodeIdCompleter" class="org.onlab.onos.cli.NodeIdCompleter"/>
    <bean id="deviceIdCompleter" class="org.onlab.onos.cli.net.DeviceIdCompleter"/>
    <bean id="clusterIdCompleter" class="org.onlab.onos.cli.net.ClusterIdCompleter"/>
    <bean id="roleCompleter" class="org.onlab.onos.cli.net.RoleCompleter"/>
    <bean id="hostIdCompleter" class="org.onlab.onos.cli.net.HostIdCompleter"/>
    <bean id="intentIdCompleter" class="org.onlab.onos.cli.net.IntentIdCompleter"/>
    <bean id="flowRuleStatusCompleter" class="org.onlab.onos.cli.net.FlowRuleStatusCompleter"/>
    <bean id="connectPointCompleter" class="org.onlab.onos.cli.net.ConnectPointCompleter"/>
    <bean id="nullCompleter" class="org.apache.karaf.shell.console.completer.NullCompleter"/>
    <bean id="ethTypeCompleter" class="org.onlab.onos.cli.net.EthTypeCompleter"/>

</blueprint>
