2 * Copyright © 2019 Orange, Inc. and others. All rights reserved.
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
8 package org.opendaylight.transportpce.tapi.utils;
10 import com.google.common.util.concurrent.FluentFuture;
12 import java.io.FileInputStream;
13 import java.io.FileNotFoundException;
14 import java.io.InputStream;
15 import java.util.Optional;
16 import java.util.concurrent.ExecutionException;
17 import org.opendaylight.mdsal.binding.api.DataBroker;
18 import org.opendaylight.mdsal.binding.api.WriteTransaction;
19 import org.opendaylight.mdsal.common.api.CommitInfo;
20 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
21 import org.opendaylight.transportpce.test.DataStoreContext;
22 import org.opendaylight.transportpce.test.converter.XMLDataObjectConverter;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.Network;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
25 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInput;
26 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInputBuilder;
27 import org.opendaylight.yangtools.yang.binding.DataObject;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
33 public final class TopologyDataUtils {
35 private static final Logger LOG = LoggerFactory.getLogger(TopologyDataUtils.class);
36 public static final String OPENROADM_TOPOLOGY_FILE = "src/test/resources/openroadm-topology.xml";
37 public static final String OTN_TOPOLOGY_FILE = "src/test/resources/otn-topology.xml";
38 public static final String PORTMAPPING_FILE = "src/test/resources/portmapping.xml";
40 public static GetTopologyDetailsInput buildGetTopologyDetailsInput(String topoName) {
41 GetTopologyDetailsInputBuilder builtInput = new GetTopologyDetailsInputBuilder();
42 builtInput.setTopologyIdOrName(topoName);
43 return builtInput.build();
46 public static <T> void writeTopologyFromFileToDatastore(DataStoreContext dataStoreContextUtil, String file,
47 InstanceIdentifier ii) throws InterruptedException, ExecutionException {
48 Networks networks = null;
49 File topoFile = new File(file);
50 if (topoFile.exists()) {
51 String fileName = topoFile.getName();
52 InputStream targetStream;
54 targetStream = new FileInputStream(topoFile);
55 Optional<NormalizedNode<?, ?>> transformIntoNormalizedNode = XMLDataObjectConverter
56 .createWithDataStoreUtil(dataStoreContextUtil).transformIntoNormalizedNode(targetStream);
57 if (!transformIntoNormalizedNode.isPresent()) {
58 throw new IllegalStateException(String.format(
59 "Could not transform the input %s into normalized nodes", fileName));
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");
66 networks = (Networks) dataObject.get();
68 } catch (FileNotFoundException e) {
69 LOG.error("File not found : {} at {}", e.getMessage(), e.getLocalizedMessage());
72 LOG.error("xml file {} not found at {}", topoFile.getName(), topoFile.getAbsolutePath());
74 FluentFuture<? extends CommitInfo> commitFuture = writeTransaction(dataStoreContextUtil.getDataBroker(), ii,
75 networks.nonnullNetwork().values().stream().findFirst().get());
77 LOG.info("extraction from {} stored with success in datastore", topoFile.getName());
80 @SuppressWarnings("unchecked")
81 private static FluentFuture<? extends CommitInfo> writeTransaction(DataBroker dataBroker,
82 InstanceIdentifier instanceIdentifier, DataObject object) {
83 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
84 transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object);
85 return transaction.commit();
88 public static void writePortmappingFromFileToDatastore(DataStoreContext dataStoreContextUtil)
89 throws InterruptedException, ExecutionException {
90 Network result = null;
91 File portmappingFile = new File(PORTMAPPING_FILE);
92 if (portmappingFile.exists()) {
93 String fileName = portmappingFile.getName();
94 InputStream targetStream;
96 targetStream = new FileInputStream(portmappingFile);
97 Optional<NormalizedNode<?, ?>> transformIntoNormalizedNode = null;
98 transformIntoNormalizedNode = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil)
99 .transformIntoNormalizedNode(targetStream);
100 if (!transformIntoNormalizedNode.isPresent()) {
101 throw new IllegalStateException(String.format(
102 "Could not transform the input %s into normalized nodes", fileName));
104 Optional<DataObject> dataObject = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil)
105 .getDataObject(transformIntoNormalizedNode.get(), Network.QNAME);
106 if (!dataObject.isPresent()) {
107 throw new IllegalStateException("Could not transform normalized nodes into data object");
109 result = (Network) dataObject.get();
111 } catch (FileNotFoundException e) {
112 LOG.error("File not found : {} at {}", e.getMessage(), e.getLocalizedMessage());
115 LOG.error("xml file {} not found at {}", portmappingFile.getName(), portmappingFile.getAbsolutePath());
117 InstanceIdentifier<Network> portmappingIID = InstanceIdentifier.builder(Network.class).build();
118 FluentFuture<? extends CommitInfo> writeTransaction = writeTransaction(dataStoreContextUtil.getDataBroker(),
119 portmappingIID, result);
120 writeTransaction.get();
121 LOG.info("portmapping-example stored with success in datastore");
124 private TopologyDataUtils() {