<?xml version="1.0" encoding="UTF-8"?>
<service-logic xmlns="http://www.onap.org/sdnc/svclogic" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd" module="GENERIC-RESOURCE-API" version="${project.version}">
    <method rpc="network-topology-operation" mode="sync">
        <block atomic="true">
            <call module="GENERIC-RESOURCE-API" rpc="validate-network-input" mode="sync" />
            <switch test="`$network-topology-operation-input.sdnc-request-header.svc-action`">
                <outcome value="assign">
                    <block atomic="true">
                        <call module="GENERIC-RESOURCE-API" rpc="network-topology-operation-assign" mode="sync" />
                    </block>
                </outcome>
                <outcome value="activate">
                    <switch test="`$network-topology-operation-input.request-information.request-action`">
                        <outcome value="ActivateDCINetworkInstance">
                            <call module="GENERIC-RESOURCE-API" rpc="dci-connects-network-topology-operation-activate" mode="sync" />
                        </outcome>
                        <outcome value="other">
                            <block atomic="true">
                                <switch test="`$service-data.networks.network_length`">
                                    <outcome value="">
                                        <return status="failure">
                                            <parameter name="ack-final" value="Y" />
                                            <parameter name="error-code" value="500" />
                                            <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
                                        </return>
                                    </outcome>
                                    <outcome value="Other">
                                        <block atomic="true">
                                            <for index="nidx" start="0" end="`$service-data.networks.network_length`">
                                                <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
                                                    <outcome value="true">
                                                        <set>
                                                            <parameter name="tmp.nidx" value="`$nidx`" />
                                                            <parameter name="ctx.network-data." value="`$service-data.networks.network[$nidx].`" />
                                                        </set>
                                                    </outcome>
                                                </switch>
                                            </for>
                                            <switch test="`$tmp.nidx`">
                                                <outcome value="">
                                                    <return status="failure">
                                                        <parameter name="ack-final" value="Y" />
                                                        <parameter name="error-code" value="500" />
                                                        <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
                                                    </return>
                                                </outcome>
                                            </switch>
                                        </block>
                                    </outcome>
                                </switch>
                                <switch test="`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`">
                                    <outcome value="PendingCreate">
                                        <call module="GENERIC-RESOURCE-API" rpc="network-topology-operation-activate" mode="sync" />
                                    </outcome>
                                    <outcome value="Other">
                                        <return status="failure">
                                            <parameter name="ack-final" value="Y" />
                                            <parameter name="error-code" value="500" />
                                            <parameter name="error-message" value="`'Network is not in appropriate state for activate. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
                                        </return>
                                    </outcome>
                                </switch>
                            </block>
                        </outcome>
                    </switch>
                </outcome>
                <outcome value="deactivate">
                    <block atomic="true">
                        <switch test="`$service-data.networks.network_length`">
                            <outcome value="">
                                <return status="failure">
                                    <parameter name="ack-final" value="Y" />
                                    <parameter name="error-code" value="500" />
                                    <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
                                </return>
                            </outcome>
                            <outcome value="Other">
                                <block atomic="true">
                                    <for index="nidx" start="0" end="`$service-data.networks.network_length`">
                                        <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
                                            <outcome value="true">
                                                <set>
                                                    <parameter name="tmp.nidx" value="`$nidx`" />
                                                    <parameter name="ctx.network-data." value="`$service-data.networks.network[$nidx].`" />
                                                </set>
                                            </outcome>
                                        </switch>
                                    </for>
                                    <switch test="`$tmp.nidx`">
                                        <outcome value="">
                                            <return status="failure">
                                                <parameter name="ack-final" value="Y" />
                                                <parameter name="error-code" value="500" />
                                                <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
                                            </return>
                                        </outcome>
                                    </switch>
                                </block>
                            </outcome>
                        </switch>
                        <switch test="`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`">
                            <outcome value="Created">
                                <switch test="`$network-topology-operation-input.request-information.request-action`">
                                    <outcome value="DeActivateDCINetworkInstance">
                                        <call module="GENERIC-RESOURCE-API" rpc="dci-connects-network-topology-operation-deactivate" mode="sync" />
                                    </outcome>
                                    <outcome value="Other">
                                        <call module="GENERIC-RESOURCE-API" rpc="network-topology-operation-deactivate" mode="sync" />
                                    </outcome>
                                </switch>
                            </outcome>
                            <outcome value="Other">
                                <return status="failure">
                                    <parameter name="ack-final" value="Y" />
                                    <parameter name="error-code" value="500" />
                                    <parameter name="error-message" value="`'Network is not in appropriate state for deactivate. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
                                </return>
                            </outcome>
                        </switch>
                    </block>
                </outcome>
                <outcome value="unassign">
                    <block atomic="true">
                        <switch test="`$service-data.networks.network_length`">
                            <outcome value="">
                                <return status="failure">
                                    <parameter name="ack-final" value="Y" />
                                    <parameter name="error-code" value="500" />
                                    <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
                                </return>
                            </outcome>
                            <outcome value="Other">
                                <block atomic="true">
                                    <for index="nidx" start="0" end="`$service-data.networks.network_length`">
                                        <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
                                            <outcome value="true">
                                                <set>
                                                    <parameter name="tmp.nidx" value="`$nidx`" />
                                                    <parameter name="ctx.network-data." value="`$service-data.networks.network[$nidx].`" />
                                                </set>
                                            </outcome>
                                        </switch>
                                    </for>
                                    <switch test="`$tmp.nidx`">
                                        <outcome value="">
                                            <return status="failure">
                                                <parameter name="ack-final" value="Y" />
                                                <parameter name="error-code" value="500" />
                                                <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
                                            </return>
                                        </outcome>
                                    </switch>
                                </block>
                            </outcome>
                        </switch>
                        <switch test="`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`">
                            <outcome value="PendingCreate">
                                <call module="GENERIC-RESOURCE-API" rpc="network-topology-operation-unassign" mode="sync" />
                            </outcome>
                            <outcome value="PendingDelete">
                                <call module="GENERIC-RESOURCE-API" rpc="network-topology-operation-unassign" mode="sync" />
                            </outcome>
                            <outcome value="Other">
                                <return status="failure">
                                    <parameter name="ack-final" value="Y" />
                                    <parameter name="error-code" value="500" />
                                    <parameter name="error-message" value="`'Network is not in appropriate state for unassign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
                                </return>
                            </outcome>
                        </switch>
                    </block>
                </outcome>
                <outcome value="Other">
                    <return status="failure">
                        <parameter name="ack-final" value="Y" />
                        <parameter name="error-code" value="500" />
                        <parameter name="error-message" value="sdnc-request-header.svc-action is a required input" />
                    </return>
                </outcome>
                <outcome value="create">
                    <block atomic="true">
                        <call module="GENERIC-RESOURCE-API" rpc="network-topology-operation-create" mode="sync" />
                    </block>
                </outcome>
                <outcome value="delete">
                    <block atomic="true">
                        <call module="GENERIC-RESOURCE-API" rpc="network-topology-operation-delete" mode="sync" />
                    </block>
                </outcome>
            </switch>
            <set>
                <parameter name="ack-final" value="Y" />
            </set>
            <return status="success">
                <parameter name="ack-final-indicator" value="Y" />
                <parameter name="error-code" value="200" />
                <parameter name="error-message" value="`$error-message`" />
            </return>
        </block>
    </method>
</service-logic>