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