<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' ></call>
            <switch test='`$network-topology-operation-input.sdnc-request-header.svc-action`'>
                <outcome value='assign'>
                    <block atomic="true">
                        <switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>
                            <outcome value='Created'>
                                <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 assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
                                </return>
                            </outcome>
                            <outcome value='PendingDelete'>
                                <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 assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
                                </return>
                            </outcome>
                            <outcome value='PendingCreate'>
                                <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 assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
                                </return>
                            </outcome>
                            <outcome value='Other'>
                                <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-assign' mode='sync' ></call>
                            </outcome>
                        </switch>
                    </block>
                </outcome>
                <outcome value='activate'>
                    <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='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>
                                        <outcome value='Other'>
                                            <set>
                                                <parameter name='nidx' value='`$tmp.nidx`' />
                                            </set>
                                        </outcome>
                                    </switch>
                                </block>
                            </outcome>
                        </switch>
                        <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
                            <outcome value=''>
                                <return status='success'>
                                    <parameter name='' value='' />
                                </return>
                            </outcome>
                            <outcome value='Other'>
                                <block>
                                    <switch test='`$service-data.network-instance-groups.network-instance-group_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-instance-group-id not found in service-data" />
                                            </return>
                                        </outcome>
                                        <outcome value='Other'>
                                            <block atomic="true">
                                                <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
                                                    <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
                                                        <outcome value='true'>
                                                            <block atomic="true">
                                                                <set>
                                                                    <parameter name='tmp.ngidx' value='`$ngidx`' />
                                                                    <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
                                                                </set>
                                                            </block>
                                                        </outcome>
                                                    </switch>
                                                </for>
                                            </block>
                                        </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' ></call>
                            </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>
                <outcome value='changeassign'>
                    <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='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>
                                        <outcome value='Other'>
                                            <set>
                                                <parameter name='nidx' value='`$tmp.nidx`' />
                                            </set>
                                        </outcome>
                                    </switch>
                                </block>
                            </outcome>
                        </switch>
                        <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-changeassign' mode='sync' ></call>
                    </block>
                </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='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>
                                        <outcome value='Other'>
                                            <set>
                                                <parameter name='nidx' value='`$tmp.nidx`' />
                                            </set>
                                        </outcome>
                                    </switch>
                                </block>
                            </outcome>
                        </switch>
                        <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
                            <outcome value=''>
                                <return status='success'>
                                    <parameter name='' value='' />
                                </return>
                            </outcome>
                            <outcome value='Other'>
                                <block>
                                    <switch test='`$service-data.network-instance-groups.network-instance-group_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-instance-group-id not found in service-data" />
                                            </return>
                                        </outcome>
                                        <outcome value='Other'>
                                            <block atomic="true">
                                                <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
                                                    <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
                                                        <outcome value='true'>
                                                            <block atomic="true">
                                                                <set>
                                                                    <parameter name='tmp.ngidx' value='`$ngidx`' />
                                                                    <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
                                                                </set>
                                                            </block>
                                                        </outcome>
                                                    </switch>
                                                </for>
                                            </block>
                                        </outcome>
                                    </switch>
                                </block>
                            </outcome>
                        </switch>
                        <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-deactivate' mode='sync' ></call>
                    </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='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>
                                        <outcome value='Other'>
                                            <set>
                                                <parameter name='nidx' value='`$tmp.nidx`' />
                                            </set>
                                        </outcome>
                                    </switch>
                                </block>
                            </outcome>
                        </switch>
                        <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
                            <outcome value=''>
                                <return status='success'>
                                    <parameter name='' value='' />
                                </return>
                            </outcome>
                            <outcome value='Other'>
                                <block>
                                    <switch test='`$service-data.network-instance-groups.network-instance-group_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-instance-group-id not found in service-data" />
                                            </return>
                                        </outcome>
                                        <outcome value='Other'>
                                            <block atomic="true">
                                                <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
                                                    <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
                                                        <outcome value='true'>
                                                            <block atomic="true">
                                                                <set>
                                                                    <parameter name='tmp.ngidx' value='`$ngidx`' />
                                                                    <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
                                                                </set>
                                                            </block>
                                                        </outcome>
                                                    </switch>
                                                </for>
                                            </block>
                                        </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' ></call>
                            </outcome>
                            <outcome value='PendingDelete'>
                                <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-unassign' mode='sync' ></call>
                            </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>
            </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>