X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fmdsal-netconf-yang-library%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fmdsal%2Fyang%2Flibrary%2FSchemaServiceToMdsalWriter.java;h=5fe60f91ff9c3d2201dea3d21dd68884fe5d60ed;hb=676b7818fd81f1322b7e8aa977271f3a3af397a6;hp=2360369e6af354a1a934dfde79f3867a927c0957;hpb=4dac2dcf6e0f92a64e4303a0d6db788a6da41404;p=netconf.git diff --git a/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java b/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java index 2360369e6a..5fe60f91ff 100644 --- a/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java +++ b/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java @@ -5,35 +5,29 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.mdsal.yang.library; -import com.google.common.collect.Lists; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.MoreExecutors; import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; -import javax.annotation.Nullable; +import java.util.stream.Collectors; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; -import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesState; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesStateBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.OptionalRevision; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module.ConformanceType; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.ModuleBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.Submodules; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.SubmodulesBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.submodules.Submodule; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.submodules.SubmoduleBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesStateBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionUtils; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module.ConformanceType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.Submodule; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.SubmoduleBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; @@ -42,8 +36,9 @@ import org.slf4j.LoggerFactory; /** * Listens for updates on global schema context, transforms context to ietf-yang-library:modules-state and - * writes this state to operational data store + * writes this state to operational data store. */ +// TODO Implement also yang-library-change notfication public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(SchemaServiceToMdsalWriter.class); @@ -51,11 +46,11 @@ public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCl private static final InstanceIdentifier MODULES_STATE_INSTANCE_IDENTIFIER = InstanceIdentifier.create(ModulesState.class); - private final SchemaService schemaService; + private final DOMSchemaService schemaService; private final AtomicInteger moduleSetId; private final DataBroker dataBroker; - public SchemaServiceToMdsalWriter(final SchemaService schemaService, + public SchemaServiceToMdsalWriter(final DOMSchemaService schemaService, final DataBroker dataBroker) { this.schemaService = schemaService; this.dataBroker = dataBroker; @@ -63,12 +58,12 @@ public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCl } @Override - public void close() throws Exception { + public void close() { // TODO Delete modules-state from operational data store } /** - * Invoke by blueprint + * Invoked by blueprint. */ public void start() { schemaService.registerSchemaContextListener(this); @@ -83,54 +78,43 @@ public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCl MODULES_STATE_INSTANCE_IDENTIFIER, newModuleState); LOG.debug("Trying to write new module-state: {}", newModuleState); - Futures.addCallback(tx.submit(), new FutureCallback() { + tx.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(@Nullable final Void result) { + public void onSuccess(final CommitInfo result) { LOG.debug("Modules state updated successfully"); } @Override - public void onFailure(final Throwable t) { - LOG.warn("Failed to update modules state", t); + public void onFailure(final Throwable throwable) { + LOG.warn("Failed to update modules state", throwable); } - }); + }, MoreExecutors.directExecutor()); } private ModulesState createModuleStateFromModules(final Set modules) { - final ModulesStateBuilder modulesStateBuilder = new ModulesStateBuilder(); - final List moduleList = - Lists.newArrayList(); - - for (final Module module : modules) { - moduleList.add(createModuleEntryFromModule(module)); - } - - return modulesStateBuilder.setModule(moduleList).setModuleSetId(String.valueOf(moduleSetId.getAndIncrement())).build(); + return new ModulesStateBuilder() + .setModule(modules.stream().map(this::createModuleEntryFromModule).collect(Collectors.toList())) + .setModuleSetId(String.valueOf(moduleSetId.getAndIncrement())) + .build(); } - private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module createModuleEntryFromModule(final Module module) { - final ModuleBuilder moduleBuilder = new ModuleBuilder(); - - // TODO Conformance type is always set to Implement value, but it should it really be like this? - // TODO Add also deviations and features lists to module entries - moduleBuilder.setName(new YangIdentifier(module.getName())) - .setRevision(new OptionalRevision(SimpleDateFormatUtil.getRevisionFormat().format(module.getRevision()))) + private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module + createModuleEntryFromModule(final Module module) { + return new ModuleBuilder() + .setName(new YangIdentifier(module.getName())) + .setRevision(RevisionUtils.fromYangCommon(module.getQNameModule().getRevision())) .setNamespace(new Uri(module.getNamespace().toString())) + // FIXME: Conformance type is always set to Implement value, but it should it really be like this? .setConformanceType(ConformanceType.Implement) - .setSubmodules(createSubmodulesForModule(module)); - - return moduleBuilder.build(); + .setSubmodule(createSubmodulesForModule(module)) + // FIXME: Add also deviations and features lists to module entries + .build(); } - private Submodules createSubmodulesForModule(final Module module) { - final List submodulesList = Lists.newArrayList(); - for (final Module subModule : module.getSubmodules()) { - final SubmoduleBuilder subModuleEntryBuilder = new SubmoduleBuilder(); - subModuleEntryBuilder.setName(new YangIdentifier(subModule.getName())) - .setRevision(new OptionalRevision(SimpleDateFormatUtil.getRevisionFormat().format(subModule.getRevision()))); - submodulesList.add(subModuleEntryBuilder.build()); - } - - return new SubmodulesBuilder().setSubmodule(submodulesList).build(); + private static List createSubmodulesForModule(final Module module) { + return module.getSubmodules().stream().map(subModule -> new SubmoduleBuilder() + .setName(new YangIdentifier(subModule.getName())) + .setRevision(RevisionUtils.fromYangCommon(subModule.getQNameModule().getRevision())) + .build()).collect(Collectors.toList()); } -} \ No newline at end of file +}