/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * 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.controller.md.sal.dom.store.impl; import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreMetadataNode; import org.opendaylight.controller.md.sal.dom.store.impl.tree.TreeNodeUtils; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import com.google.common.base.Optional; class DataAndMetadataSnapshot { private final StoreMetadataNode metadataTree; private final Optional schemaContext; private DataAndMetadataSnapshot(final StoreMetadataNode metadataTree, final Optional schemaCtx) { this.metadataTree = metadataTree; this.schemaContext = schemaCtx; } public static Builder builder() { return new Builder(); } public static DataAndMetadataSnapshot createEmpty(final NodeIdentifier rootNode) { NormalizedNode data = Builders.containerBuilder().withNodeIdentifier(rootNode).build(); StoreMetadataNode metadata = StoreMetadataNode.builder() .setData(data) .build(); return new DataAndMetadataSnapshot(metadata,Optional.absent()); } public static DataAndMetadataSnapshot createEmpty(final SchemaContext ctx) { NodeIdentifier rootNodeIdentifier = new NodeIdentifier(ctx.getQName()); NormalizedNode data = Builders.containerBuilder().withNodeIdentifier(rootNodeIdentifier).build(); StoreMetadataNode metadata = StoreMetadataNode.builder() .setData(data) .build(); return new DataAndMetadataSnapshot(metadata, Optional.of(ctx)); } public Optional getSchemaContext() { return schemaContext; } public NormalizedNode getDataTree() { return metadataTree.getData(); } public StoreMetadataNode getMetadataTree() { return metadataTree; } public Optional read(final InstanceIdentifier path) { return TreeNodeUtils.findNode(metadataTree, path); } public static class Builder { private NormalizedNode dataTree; private StoreMetadataNode metadataTree; private SchemaContext schemaContext; public NormalizedNode getDataTree() { return dataTree; } public Builder setMetadataTree(final StoreMetadataNode metadataTree) { this.metadataTree = metadataTree; return this; } public Builder setSchemaContext(final SchemaContext schemaContext) { this.schemaContext = schemaContext; return this; } public DataAndMetadataSnapshot build() { return new DataAndMetadataSnapshot(metadataTree, Optional.fromNullable(schemaContext)); } } }