X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pce%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fpce%2Fgnpy%2FServiceDataStoreOperationsImpl.java;h=72ac832b009e1f53bb8b81e4c97091dbb64fbb37;hb=82d93922dcc41353c92d092d25d110b4f4d48c62;hp=3910c996c503b8bfa891082160b0d3e2b2cf122d;hpb=c5fc25e73679127ad29a5196410f24b50dcc8f7d;p=transportpce.git diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java index 3910c996c..72ac832b0 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImpl.java @@ -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> 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() { - @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 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 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); } } }