X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Ftree%2FInMemoryDataTreeFactory.java;h=17e330eb09e544c6c5ea11f4ca1ebc66140cb35b;hb=2fb9e7cb0aaeac0792f918190803b2041c192611;hp=dd23823d62e50497b60608f5b23525cbeaa9d3a3;hpb=a30bea3eefedbde31d9cf0c1ac7cdb3f8cdd190b;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeFactory.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeFactory.java index dd23823d62..17e330eb09 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeFactory.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeFactory.java @@ -10,6 +10,9 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree; import static com.google.common.base.Preconditions.checkArgument; import java.util.Optional; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.eclipse.jdt.annotation.NonNull; import org.kohsuke.MetaInfServices; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -29,18 +32,35 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; +import org.opendaylight.yangtools.yang.model.api.ContainerLike; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * A factory for creating in-memory data trees. */ @MetaInfServices +@Singleton +@Component(immediate = true) public final class InMemoryDataTreeFactory implements DataTreeFactory { - private static final NormalizedNode ROOT_CONTAINER = ImmutableNodes.containerNode(SchemaContext.NAME); + private static final Logger LOG = LoggerFactory.getLogger(InMemoryDataTreeFactory.class); + // FIXME: YANGTOOLS-1074: we do not want this name + private static final @NonNull NormalizedNode ROOT_CONTAINER = + ImmutableNodes.containerNode(SchemaContext.NAME); + + @Inject + public InMemoryDataTreeFactory() { + // Exposed for DI + } @Override public DataTree create(final DataTreeConfiguration treeConfig) { @@ -49,14 +69,14 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { } @Override - public DataTree create(final DataTreeConfiguration treeConfig, final SchemaContext initialSchemaContext) { - return create(treeConfig, initialSchemaContext, true); + public DataTree create(final DataTreeConfiguration treeConfig, final EffectiveModelContext initialSchemaContext) { + return createDataTree(treeConfig, initialSchemaContext, true); } @Override - public DataTree create(final DataTreeConfiguration treeConfig, final SchemaContext initialSchemaContext, + public DataTree create(final DataTreeConfiguration treeConfig, final EffectiveModelContext initialSchemaContext, final NormalizedNodeContainer initialRoot) throws DataValidationFailedException { - final DataTree ret = create(treeConfig, initialSchemaContext, false); + final DataTree ret = createDataTree(treeConfig, initialSchemaContext, false); final DataTreeModification mod = ret.takeSnapshot().newModification(); mod.write(YangInstanceIdentifier.empty(), initialRoot); @@ -68,8 +88,20 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { return ret; } - private static DataTree create(final DataTreeConfiguration treeConfig, final SchemaContext initialSchemaContext, - final boolean maskMandatory) { + @Activate + @SuppressWarnings("static-method") + void activate() { + LOG.info("In-memory Data Tree activated"); + } + + @Deactivate + @SuppressWarnings("static-method") + void deactivate() { + LOG.info("In-memory Data Tree deactivated"); + } + + private static @NonNull DataTree createDataTree(final DataTreeConfiguration treeConfig, + final EffectiveModelContext initialSchemaContext, final boolean maskMandatory) { final DataSchemaNode rootSchemaNode = getRootSchemaNode(initialSchemaContext, treeConfig.getRootPath()); final NormalizedNode rootDataNode = createRoot((DataNodeContainer)rootSchemaNode, treeConfig.getRootPath()); @@ -77,22 +109,10 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { initialSchemaContext, rootSchemaNode, maskMandatory); } - private static DataSchemaNode getRootSchemaNode(final SchemaContext schemaContext, - final YangInstanceIdentifier rootPath) { - final DataSchemaContextTree contextTree = DataSchemaContextTree.from(schemaContext); - final Optional> rootContextNode = contextTree.findChild(rootPath); - checkArgument(rootContextNode.isPresent(), "Failed to find root %s in schema context", rootPath); - - final DataSchemaNode rootSchemaNode = rootContextNode.get().getDataSchemaNode(); - checkArgument(rootSchemaNode instanceof DataNodeContainer, "Root %s resolves to non-container type %s", - rootPath, rootSchemaNode); - return rootSchemaNode; - } - - private static NormalizedNode createRoot(final DataNodeContainer schemaNode, + private static @NonNull NormalizedNode createRoot(final DataNodeContainer schemaNode, final YangInstanceIdentifier path) { if (path.isEmpty()) { - checkArgument(schemaNode instanceof ContainerSchemaNode, + checkArgument(schemaNode instanceof ContainerLike, "Conceptual tree root has to be a container, not %s", schemaNode); return ROOT_CONTAINER; } @@ -113,7 +133,7 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { } } - private static NormalizedNode createRoot(final YangInstanceIdentifier path) { + private static @NonNull NormalizedNode createRoot(final YangInstanceIdentifier path) { if (path.isEmpty()) { return ROOT_CONTAINER; } @@ -129,4 +149,16 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { // FIXME: implement augmentations and leaf-lists throw new IllegalArgumentException("Unsupported root node " + arg); } + + private static DataSchemaNode getRootSchemaNode(final EffectiveModelContext schemaContext, + final YangInstanceIdentifier rootPath) { + final DataSchemaContextTree contextTree = DataSchemaContextTree.from(schemaContext); + final Optional> rootContextNode = contextTree.findChild(rootPath); + checkArgument(rootContextNode.isPresent(), "Failed to find root %s in schema context", rootPath); + + final DataSchemaNode rootSchemaNode = rootContextNode.get().getDataSchemaNode(); + checkArgument(rootSchemaNode instanceof DataNodeContainer, "Root %s resolves to non-container type %s", + rootPath, rootSchemaNode); + return rootSchemaNode; + } }