352a65a85f86691843a47f9a0af11c0ddaf4db83
[transportpce.git] / tapi / src / test / java / org / opendaylight / transportpce / tapi / utils / TopologyDataUtils.java
1 /*
2  * Copyright © 2019 Orange, Inc. 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.tapi.utils;
9
10 import edu.umd.cs.findbugs.annotations.NonNull;
11
12 import java.io.File;
13 import java.io.FileInputStream;
14 import java.io.FileNotFoundException;
15 import java.io.InputStream;
16 import java.util.Optional;
17 import org.opendaylight.mdsal.binding.api.DataBroker;
18 import org.opendaylight.mdsal.binding.api.WriteTransaction;
19 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
20 import org.opendaylight.transportpce.common.DataStoreContext;
21 import org.opendaylight.transportpce.common.converter.XMLDataObjectConverter;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200113.Network;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
24 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInput;
25 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInputBuilder;
26 import org.opendaylight.yangtools.yang.binding.DataObject;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 public final class TopologyDataUtils {
33
34     private static final Logger LOG = LoggerFactory.getLogger(TopologyDataUtils.class);
35     private static final String TOPOLOGY_FILE =
36         "src/test/resources/openroadm-topology2.xml";
37     private static final String PORTMAPPING_FILE =
38         "src/test/resources/portmapping-example.xml";
39
40     public static GetTopologyDetailsInput buildGetTopologyDetailsInput() {
41         GetTopologyDetailsInputBuilder builtInput = new GetTopologyDetailsInputBuilder();
42         builtInput.setTopologyIdOrName("topo1");
43         return builtInput.build();
44     }
45
46     public static void writeTopologyFromFileToDatastore(DataStoreContext dataStoreContextUtil) {
47         Networks result = null;
48         File topoFile = new File(TOPOLOGY_FILE);
49         if (topoFile.exists()) {
50             String fileName = topoFile.getName();
51             InputStream targetStream;
52             try {
53                 targetStream = new FileInputStream(topoFile);
54                 Optional<NormalizedNode<?, ?>> transformIntoNormalizedNode = null;
55                 transformIntoNormalizedNode = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil)
56                     .transformIntoNormalizedNode(targetStream);
57                 if (!transformIntoNormalizedNode.isPresent()) {
58                     throw new IllegalStateException(String.format(
59                         "Could not transform the input %s into normalized nodes", fileName));
60                 }
61                 Optional<DataObject> dataObject = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil)
62                     .getDataObject(transformIntoNormalizedNode.get(), Networks.QNAME);
63                 if (!dataObject.isPresent()) {
64                     throw new IllegalStateException("Could not transform normalized nodes into data object");
65                 } else {
66                     result = (Networks) dataObject.get();
67                 }
68             } catch (FileNotFoundException e) {
69                 LOG.error("File not found : {} at {}", e.getMessage(), e.getLocalizedMessage());
70             }
71         } else {
72             LOG.error("xml file {} not found at {}", topoFile.getName(), topoFile.getAbsolutePath());
73         }
74         LOG.info("Storing openroadm-topology in datastore");
75         InstanceIdentifier<Networks> ietfNetworksIID = InstanceIdentifier.builder(Networks.class).build();
76         writeTransaction(dataStoreContextUtil.getDataBroker(), ietfNetworksIID, result);
77         LOG.info("openroadm-topology stored with success in datastore");
78     }
79
80     @SuppressWarnings("unchecked")
81     private static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
82         DataObject object) {
83         @NonNull
84         WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
85         transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object);
86         transaction.commit();
87         return true;
88     }
89
90     public static void writePortmappingFromFileToDatastore(DataStoreContext dataStoreContextUtil) {
91         Network result = null;
92         File portmappingFile = new File(PORTMAPPING_FILE);
93         if (portmappingFile.exists()) {
94             String fileName = portmappingFile.getName();
95             InputStream targetStream;
96             try {
97                 targetStream = new FileInputStream(portmappingFile);
98                 Optional<NormalizedNode<?, ?>> transformIntoNormalizedNode = null;
99                 transformIntoNormalizedNode = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil)
100                     .transformIntoNormalizedNode(targetStream);
101                 if (!transformIntoNormalizedNode.isPresent()) {
102                     throw new IllegalStateException(String.format(
103                         "Could not transform the input %s into normalized nodes", fileName));
104                 }
105                 Optional<DataObject> dataObject = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil)
106                     .getDataObject(transformIntoNormalizedNode.get(), Network.QNAME);
107                 if (!dataObject.isPresent()) {
108                     throw new IllegalStateException("Could not transform normalized nodes into data object");
109                 } else {
110                     result = (Network) dataObject.get();
111                 }
112             } catch (FileNotFoundException e) {
113                 LOG.error("File not found : {} at {}", e.getMessage(), e.getLocalizedMessage());
114             }
115         } else {
116             LOG.error("xml file {} not found at {}", portmappingFile.getName(), portmappingFile.getAbsolutePath());
117         }
118         InstanceIdentifier<Network> portmappingIID = InstanceIdentifier.builder(Network.class).build();
119         writeTransaction(dataStoreContextUtil.getDataBroker(), portmappingIID, result);
120         LOG.info("portmapping-example stored with success in datastore");
121     }
122
123     private TopologyDataUtils() {
124
125     }
126
127 }