Fix some SpotBugs issues
[transportpce.git] / pce / src / main / java / org / opendaylight / transportpce / pce / gnpy / ServiceDataStoreOperationsImpl.java
index 212985aa303285cab46527b3394da5fdfa8f8465..b282b7d37b45cf25404b6d24fdd1c9934735d15f 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.transportpce.pce.gnpy;
 
 import com.google.common.base.Function;
+//false positive in SpotBug -> cannot be used with FluentIterable...
 import com.google.common.collect.FluentIterable;
 
 import java.io.BufferedWriter;
@@ -19,19 +20,14 @@ import java.io.Writer;
 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;
@@ -39,7 +35,7 @@ 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.JSONCodecFactory;
+import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -56,14 +52,17 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     public ServiceDataStoreOperationsImpl(NetworkTransactionService networkTransactionService) {
     }
 
-    public void createXMLFromDevice(DataStoreContext dataStoreContextUtil, OrgOpenroadmDevice device, String output) {
+    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());
@@ -72,16 +71,16 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
                 writer.write(writerFromDataObject.toString());
                 writer.close();
             } catch (IOException e) {
-                LOG.error("Bufferwriter error ");
+                throw new GnpyException(
+                    String.format("In ServiceDataStoreOperationsImpl : Bufferwriter error"),e);
             }
             LOG.debug("GNPy: device xml : {}", writerFromDataObject.toString());
         }
     }
 
-    public String createJsonStringFromDataObject(final InstanceIdentifier<?> id, DataObject object) throws Exception {
+    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
@@ -101,10 +100,8 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
             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;
+            final BindingNormalizedNodeCodecRegistry codecRegistry =
+                new BindingNormalizedNodeCodecRegistry(bindingContext);
 
             /*
              * This function needs : - context - scPath.getParent() -
@@ -112,30 +109,27 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
              * JsonWriterFactory.createJsonWriter(writer)
              */
             domWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
-                    JSONCodecFactory.createSimple(schemaContext), scPath.getParent(),
-                    scPath.getLastComponent().getNamespace(), JsonWriterFactory.createJsonWriter(writer, 2));
+                JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.createSimple(schemaContext),
+                scPath.getParent(), scPath.getLastComponent().getNamespace(),
+                JsonWriterFactory.createJsonWriter(writer, 2));
             // The write part
-            final BindingStreamEventWriter bindingWriter = codecRegistry.newWriter(id, domWriter);
-            codecRegistry.getSerializer(id.getTargetType()).serialize(object, bindingWriter);
+            codecRegistry.getSerializer(id.getTargetType()).serialize(object, codecRegistry.newWriter(id, domWriter));
+            domWriter.close();
             writer.close();
-        } 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);
+        } catch (IOException | YangSyntaxErrorException | ReactorException 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) {
+    public void writeStringFile(String jsonString, String fileName) throws GnpyException {
         try {
             FileWriter file = new FileWriter(fileName);
             file.write(jsonString);
             file.close();
         } catch (IOException e) {
-            LOG.error("GNPy: writer error ");
+            throw new GnpyException("In ServiceDataStoreOperationsImpl : exception during file writing",e);
         }
     }
 }