/* * Copyright (c) 2019 PANTHEON.tech, s.r.o. 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.cluster.datastore.node.utils.transformer; import com.google.common.annotations.Beta; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.SchemaContext; /** * The NormalizedNodePruner removes all nodes from the input NormalizedNode that do not have a corresponding * schema element in the passed in SchemaContext. * *

* Unlike {@link NormalizedNodePruner}, this class can be reused multiple times and must be initialized before each use * through {@link #initializeForPath(YangInstanceIdentifier)}. */ @Beta public final class ReusableNormalizedNodePruner extends AbstractNormalizedNodePruner { private ReusableNormalizedNodePruner(final SchemaContext schemaContext) { super(schemaContext); } private ReusableNormalizedNodePruner(final DataSchemaContextTree tree) { super(tree); } /** * Create a new pruner bound to a SchemaContext. * * @param schemaContext SchemaContext to use * @return A new uninitialized pruner * @throws NullPointerException if {@code schemaContext} is null */ public static @NonNull ReusableNormalizedNodePruner forSchemaContext(final SchemaContext schemaContext) { return new ReusableNormalizedNodePruner(schemaContext); } /** * Create a new pruner bound to a DataSchemaContextTree. This is a more efficient alternative of * {@link #forSchemaContext(SchemaContext)}. * * @param tree DataSchemaContextTree to use * @return A new uninitialized pruner * @throws NullPointerException if {@code schemaContext} is null */ public static @NonNull ReusableNormalizedNodePruner forDataSchemaContext(final DataSchemaContextTree tree) { return new ReusableNormalizedNodePruner(tree); } /** * Return a new instance, which is backed but the same DataSchemaContextTree, but does not share any state and is * uninitialized. This is equivalent to {@link #forDataSchemaContext(DataSchemaContextTree)} and is provided for * convenience. * * @return A new uninitialized pruner bound to the same SchemaContext as this one. */ public @NonNull ReusableNormalizedNodePruner duplicate() { return new ReusableNormalizedNodePruner(getTree()); } /** * Initialize this pruner for processing a node at specified path. * * @param path Path that will be processed next * @throws NullPointerException if {@code path} is null */ public void initializeForPath(final YangInstanceIdentifier path) { initialize(path); } }