/* * Copyright (c) 2018 Orange and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.fd.honeycomb.transportpce.device.tools; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.Writer; import java.util.Optional; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.terminal.device.rev170708.terminal.device.top.TerminalDevice; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.fd.honeycomb.transportpce.binding.converter.XMLDataObjectConverter; import io.fd.honeycomb.transportpce.test.common.DataStoreContext; /** * Factory for creating the default device from the XML stored in classpath. * * @authors Gilles THOUENON and Christophe BETOULE ( gilles.thouenon@orange.com, * christophe.betoule@orange.com ) */ public class DefaultOcTerminalDeviceFactory { private static final Logger LOG = LoggerFactory.getLogger(DefaultOcTerminalDeviceFactory.class); /** * Returns a new instance of {@link TerminalDevice} from the loaded XML stored in * File. * * @return {@link TerminalDevice} */ public TerminalDevice createDefaultTerminalDevice(DataStoreContext dataStoreContextUtil, File oc_terminal_device_data) { TerminalDevice result = null; if (oc_terminal_device_data.exists()) { String oper = oc_terminal_device_data.getName(); LOG.info("file '{}' exists at location : {}", oper, oc_terminal_device_data.getAbsolutePath()); InputStream targetStream; try { targetStream = new FileInputStream(oc_terminal_device_data); Optional> transformIntoNormalizedNode = null; transformIntoNormalizedNode = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil) .transformIntoNormalizedNode(targetStream); if (!transformIntoNormalizedNode.isPresent()) { throw new IllegalStateException( String.format("Could not transform the input %s into normalized nodes", oper)); } Optional dataObject = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil) .getDataObject(transformIntoNormalizedNode.get(), TerminalDevice.QNAME); if (!dataObject.isPresent()) { LOG.warn("Could not transform normalized nodes into data object"); return null; } result = (TerminalDevice) dataObject.get(); } catch (FileNotFoundException e) { LOG.error("File not found : {} at {}", e.getMessage(), e.getLocalizedMessage()); } catch (IllegalStateException e) { LOG.warn("Could not transform the input OcTerminalDevice into normalized nodes"); return null; } } else { LOG.info("xml file not existed at : '{}'", oc_terminal_device_data.getAbsolutePath()); } return result; } /** * Returns a new instance of {@link TerminalDevice} from the loaded XML stored in * String. * * @return {@link TerminalDevice} */ public TerminalDevice createDefaultTerminalDevice(DataStoreContext dataStoreContextUtil, String oc_terminal_device_data) { TerminalDevice result = null; if (oc_terminal_device_data != null) { LOG.info("openconfig-terminal-device data string is ok "); InputStream targetStream; try { targetStream = new ByteArrayInputStream(oc_terminal_device_data.getBytes()); Optional> transformIntoNormalizedNode = null; transformIntoNormalizedNode = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil) .transformIntoNormalizedNode(targetStream); if (!transformIntoNormalizedNode.isPresent()) { throw new IllegalStateException( String.format("Could not transform the input %s into normalized nodes")); } Optional dataObject = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil) .getDataObject(transformIntoNormalizedNode.get(), TerminalDevice.QNAME); if (!dataObject.isPresent()) { LOG.warn("Could not transform normalized nodes into data object"); } result = (TerminalDevice) dataObject.get(); } catch (IllegalStateException e) { LOG.warn("Could not transform the input OcTerminalDevice into normalized nodes"); return null; } } else { LOG.info("openconfig-terminal-device data string is null!"); } return result; } /** * create an XML String from an instance of {@link TerminalDevice}. * */ public void createXMLFromTerminalDevice(DataStoreContext dataStoreContextUtil, TerminalDevice terminalDevice, String output) { if (terminalDevice != null) { Optional> transformIntoNormalizedNode = null; transformIntoNormalizedNode = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil) .toNormalizedNodes(terminalDevice, TerminalDevice.class); if (!transformIntoNormalizedNode.isPresent()) { throw new IllegalStateException( String.format("Could not transform the input %s into normalized nodes", terminalDevice)); } XMLDataObjectConverter createWithDataStoreUtil = XMLDataObjectConverter .createWithDataStoreUtil(dataStoreContextUtil); Writer writerFromDataObject = createWithDataStoreUtil.writerFromDataObject(terminalDevice, TerminalDevice.class, createWithDataStoreUtil.dataContainer()); try { BufferedWriter writer = new BufferedWriter(new FileWriter(output)); writer.write(writerFromDataObject.toString()); writer.close(); } catch (IOException e) { LOG.error("Bufferwriter error "); } LOG.info("openconfig-terminal-device xml : {}", writerFromDataObject.toString()); } } }