Unplug savagely a GNPy link to the PCE module
[transportpce.git] / pce / src / main / java / org / opendaylight / transportpce / pce / gnpy / ServiceDataStoreOperationsImpl.java
index 3910c996c503b8bfa891082160b0d3e2b2cf122d..72ac832b009e1f53bb8b81e4c97091dbb64fbb37 100644 (file)
@@ -8,35 +8,26 @@
 
 package org.opendaylight.transportpce.pce.gnpy;
 
-import com.google.common.base.Function;
 import com.google.common.collect.FluentIterable;
-
 import java.io.BufferedWriter;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.Optional;
-
-import javassist.ClassPool;
-
-import org.opendaylight.mdsal.binding.dom.codec.gen.impl.StreamWriterGenerator;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
 import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
 import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
-import org.opendaylight.mdsal.binding.generator.util.JavassistUtils;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.transportpce.common.DataStoreContext;
 import org.opendaylight.transportpce.common.converter.XMLDataObjectConverter;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
-import org.opendaylight.yangtools.yang.binding.BindingStreamEventWriter;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
@@ -44,11 +35,12 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamW
 import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
-import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    value = "DLS_DEAD_LOCAL_STORE",
+    justification = "FIXME aluminium migration pending: need to convert GNPy to BindingDOMCodecServices")
 public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperations {
 
     private static final Logger LOG = LoggerFactory.getLogger(ServiceDataStoreOperationsImpl.class);
@@ -56,87 +48,77 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     public ServiceDataStoreOperationsImpl(NetworkTransactionService networkTransactionService) {
     }
 
-    public void createXMLFromDevice(DataStoreContext dataStoreContextUtil, OrgOpenroadmDevice device, String output) {
+    @Override
+    public void createXMLFromDevice(DataStoreContext dataStoreContextUtil, OrgOpenroadmDevice device, String output)
+        throws GnpyException {
+
         if (device != null) {
             Optional<NormalizedNode<?, ?>> transformIntoNormalizedNode = null;
             XMLDataObjectConverter cwDsU = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil);
             transformIntoNormalizedNode = cwDsU.toNormalizedNodes(device, OrgOpenroadmDevice.class);
             if (!transformIntoNormalizedNode.isPresent()) {
-                throw new IllegalStateException(
-                        String.format("Could not transform the input %s into normalized nodes", device));
+                throw new GnpyException(String.format(
+                    "In ServiceDataStoreOperationsImpl: Cannot transform the device %s into normalized nodes",
+                    device.toString()));
             }
             Writer writerFromDataObject =
                 cwDsU.writerFromDataObject(device, OrgOpenroadmDevice.class,cwDsU.dataContainer());
-            try {
-                BufferedWriter writer = new BufferedWriter(new FileWriter(output));
+            try (BufferedWriter writer = new BufferedWriter(new FileWriter(output,StandardCharsets.UTF_8))) {
                 writer.write(writerFromDataObject.toString());
-                writer.close();
             } catch (IOException e) {
-                LOG.error("Bufferwriter error ");
+                throw new GnpyException(
+                    String.format("In ServiceDataStoreOperationsImpl : Bufferwriter error %s",e));
             }
-            LOG.debug("GNPy: device xml : {}", writerFromDataObject.toString());
+            LOG.debug("GNPy: device xml : {}", writerFromDataObject);
         }
     }
 
-    public String createJsonStringFromDataObject(final InstanceIdentifier<?> id, DataObject object) throws Exception {
+    @Override
+    public String createJsonStringFromDataObject(final InstanceIdentifier<?> id, DataObject object)
+        throws GnpyException, Exception {
 
-        // See this link for more info :
-        // https://github.com/opendaylight/fpc/blob/master/impl/src/main/java/org/opendaylight/fpc/utils/FpcCodecUtils.java
-        final SchemaPath scPath = SchemaPath
-                .create(FluentIterable.from(id.getPathArguments()).transform(new Function<PathArgument, QName>() {
-                    @Override
-                    public QName apply(final PathArgument input) {
-                        return BindingReflections.findQName(input.getType());
-                    }
-                }), true);
-        final Writer writer = new StringWriter();
-        NormalizedNodeStreamWriter domWriter;
+        final SchemaPath scPath = SchemaPath.create(FluentIterable
+                .from(id.getPathArguments())
+                .transform(input -> BindingReflections.findQName(input.getType())), true);
+
+        // Prepare the variables
+        final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create();
+        Iterable<? extends YangModuleInfo> moduleInfos = Collections
+                .singleton(BindingReflections.getModuleInfo(object.getClass()));
+        moduleContext.addModuleInfos(moduleInfos);
+        SchemaContext schemaContext = moduleContext.tryToCreateSchemaContext().get();
+        BindingRuntimeContext bindingContext;
+        bindingContext = BindingRuntimeContext.create(moduleContext, schemaContext);
+        final BindingNormalizedNodeCodecRegistry codecRegistry =
+            new BindingNormalizedNodeCodecRegistry(bindingContext);
 
-        try {
-            // Prepare the variables
-            final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create();
-            Iterable<? extends YangModuleInfo> moduleInfos = Collections
-                    .singleton(BindingReflections.getModuleInfo(object.getClass()));
-            moduleContext.addModuleInfos(moduleInfos);
-            SchemaContext schemaContext = moduleContext.tryToCreateSchemaContext().get();
-            BindingRuntimeContext bindingContext;
-            bindingContext = BindingRuntimeContext.create(moduleContext, schemaContext);
-            final BindingNormalizedNodeCodecRegistry bindingStreamCodecs = new BindingNormalizedNodeCodecRegistry(
-                    StreamWriterGenerator.create(JavassistUtils.forClassPool(ClassPool.getDefault())));
-            bindingStreamCodecs.onBindingRuntimeContextUpdated(bindingContext);
-            BindingNormalizedNodeCodecRegistry codecRegistry = bindingStreamCodecs;
+        /*
+         * This function needs : - context - scPath.getParent() -
+         * scPath.getLastComponent().getNamespace(), -
+         * JsonWriterFactory.createJsonWriter(writer)
+         */
+        final Writer writer = new StringWriter();
 
-            /*
-             * This function needs : - context - scPath.getParent() -
-             * scPath.getLastComponent().getNamespace(), -
-             * JsonWriterFactory.createJsonWriter(writer)
-             */
-            domWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
+        try (NormalizedNodeStreamWriter domWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
                 JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.createSimple(schemaContext),
                 scPath.getParent(), scPath.getLastComponent().getNamespace(),
-                JsonWriterFactory.createJsonWriter(writer, 2));
+                JsonWriterFactory.createJsonWriter(writer, 2));) {
             // The write part
-            final BindingStreamEventWriter bindingWriter = codecRegistry.newWriter(id, domWriter);
-            codecRegistry.getSerializer(id.getTargetType()).serialize(object, bindingWriter);
-            writer.close();
+            //FIXME
+            //codecRegistry.getSerializer(id.getTargetType()).serialize(object, codecRegistry.newWriter(id, domWriter));
         } catch (IOException e) {
-            LOG.error("GNPy: writer error ");
-        } catch (YangSyntaxErrorException e) {
-            LOG.warn("GNPy: exception {} occured during json file creation", e.getMessage(), e);
-        } catch (ReactorException e) {
-            LOG.warn("GNPy: exception {} occured during json file creation", e.getMessage(), e);
+            throw new GnpyException("In ServiceDataStoreOperationsImpl: exception during json file creation",e);
         }
         return writer.toString();
     }
 
     // Write the json as a string in a file
-    public void writeStringFile(String jsonString, String fileName) {
-        try {
-            FileWriter file = new FileWriter(fileName);
+    @Override
+    public void writeStringFile(String jsonString, String fileName) throws GnpyException {
+        try (FileWriter file = new FileWriter(fileName,StandardCharsets.UTF_8)) {
             file.write(jsonString);
-            file.close();
         } catch (IOException e) {
-            LOG.error("GNPy: writer error ");
+            throw new GnpyException("In ServiceDataStoreOperationsImpl : exception during file writing",e);
         }
     }
 }