Update docs conf.yaml version to Sulfur
[transportpce.git] / networkmodel / src / main / java / org / opendaylight / transportpce / networkmodel / NetworkUtilsImpl.java
1 /*
2  * Copyright © 2017 AT&T 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.transportpce.networkmodel;
9
10 import com.google.common.util.concurrent.ListenableFuture;
11 import java.util.Optional;
12 import java.util.concurrent.ExecutionException;
13 import org.opendaylight.mdsal.binding.api.DataBroker;
14 import org.opendaylight.mdsal.binding.api.ReadTransaction;
15 import org.opendaylight.mdsal.binding.api.WriteTransaction;
16 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
17 import org.opendaylight.transportpce.common.NetworkUtils;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkInput;
19 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkOutput;
20 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkOutputBuilder;
21 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRdmXpdrLinksInput;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRdmXpdrLinksOutput;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRdmXpdrLinksOutputBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInput;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesOutput;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesOutputBuilder;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitXpdrRdmLinksInput;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitXpdrRdmLinksOutput;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitXpdrRdmLinksOutputBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
39 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
40 import org.opendaylight.yangtools.yang.common.RpcResult;
41 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
44
45 public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
46
47     private static final Logger LOG = LoggerFactory.getLogger(NetworkUtilsImpl.class);
48     private final DataBroker dataBroker;
49
50     public NetworkUtilsImpl(DataBroker dataBroker) {
51         this.dataBroker = dataBroker;
52     }
53
54     @Override
55     public ListenableFuture<RpcResult<DeleteLinkOutput>> deleteLink(DeleteLinkInput input) {
56
57         LinkId linkId = new LinkId(input.getLinkId());
58         // Building link instance identifier
59         InstanceIdentifier.InstanceIdentifierBuilder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
60             .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
61             .augmentation(Network1.class).child(Link.class, new LinkKey(linkId));
62
63
64         //Check if link exists
65         try {
66             ReadTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction();
67             Optional<Link> linkOptional = readOnlyTransaction.read(LogicalDatastoreType.CONFIGURATION, linkIID.build())
68                 .get();
69             if (!linkOptional.isPresent()) {
70                 LOG.info("Link not present");
71                 return RpcResultBuilder
72                     .success(new DeleteLinkOutputBuilder().setResult("Fail").build())
73                     .buildFuture();
74             }
75         } catch (ExecutionException | InterruptedException e) {
76             LOG.error("readMdSal: Error reading link {}", input.getLinkId());
77             return RpcResultBuilder
78                 .success(new DeleteLinkOutputBuilder().setResult("Fail").build())
79                 .buildFuture();
80         }
81
82         WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
83         writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, linkIID.build());
84         try {
85             writeTransaction.commit().get();
86             LOG.info("Link with linkId: {} deleted from {} layer.",
87                 input.getLinkId(), NetworkUtils.OVERLAY_NETWORK_ID);
88             return RpcResultBuilder
89                 .success(new DeleteLinkOutputBuilder().setResult("Link {} deleted successfully").build())
90                 .buildFuture();
91         } catch (InterruptedException | ExecutionException e) {
92             return RpcResultBuilder.<DeleteLinkOutput>failed().buildFuture();
93         }
94     }
95
96     @Override
97     public ListenableFuture<RpcResult<InitRoadmNodesOutput>> initRoadmNodes(InitRoadmNodesInput input) {
98         boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input, this.dataBroker);
99         if (createRdmLinks) {
100             return RpcResultBuilder
101                 .success(new InitRoadmNodesOutputBuilder()
102                     .setResult("Unidirectional Roadm-to-Roadm Link created successfully")
103                     .build())
104                 .buildFuture();
105         } else {
106             return RpcResultBuilder.<InitRoadmNodesOutput>failed().buildFuture();
107         }
108     }
109
110     @Override
111     public ListenableFuture<RpcResult<InitXpdrRdmLinksOutput>> initXpdrRdmLinks(InitXpdrRdmLinksInput input) {
112         // Assigns user provided input in init-network-view RPC to nodeId
113         LOG.info("Xpdr to Roadm links rpc called");
114         boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(), this.dataBroker);
115         if (createXpdrRdmLinks) {
116             return RpcResultBuilder
117                 .success(new InitXpdrRdmLinksOutputBuilder()
118                     .setResult("Xponder Roadm Link created successfully")
119                     .build())
120                 .buildFuture();
121         } else {
122             LOG.error("init-xpdr-rdm-links rpc failed due to a bad input parameter");
123             return RpcResultBuilder.<InitXpdrRdmLinksOutput>failed().buildFuture();
124         }
125     }
126
127     @Override
128     public ListenableFuture<RpcResult<InitRdmXpdrLinksOutput>> initRdmXpdrLinks(InitRdmXpdrLinksInput input) {
129         LOG.info("Roadm to Xpdr links rpc called");
130         boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), this.dataBroker);
131         if (createRdmXpdrLinks) {
132             return RpcResultBuilder
133                 .success(new InitRdmXpdrLinksOutputBuilder()
134                     .setResult("Roadm Xponder links created successfully")
135                     .build())
136                 .buildFuture();
137         } else {
138             LOG.error("init-rdm-xpdr-links rpc failed due to a bad input parameter");
139             return RpcResultBuilder.<InitRdmXpdrLinksOutput>failed().buildFuture();
140         }
141     }
142 }