2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.model.export;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.annotations.Beta;
13 import com.google.common.collect.ImmutableSet;
14 import java.util.HashSet;
16 import org.eclipse.jdt.annotation.NonNullByDefault;
17 import org.opendaylight.yangtools.concepts.Immutable;
18 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
19 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
20 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement;
24 * Utility class for formatting {@link DeclaredStatement}s.
26 * @author Robert Varga
30 public final class DeclaredStatementFormatter implements Immutable {
31 private static final DeclaredStatementFormatter DEFAULT = new DeclaredStatementFormatter(ImmutableSet.of(), true);
33 private final Set<StatementDefinition> ignoredStatements;
34 private final boolean omitDefaultStatements;
36 DeclaredStatementFormatter(final Set<StatementDefinition> ignoredStatements, final boolean omitDefaultStatements) {
37 this.ignoredStatements = requireNonNull(ignoredStatements);
38 this.omitDefaultStatements = omitDefaultStatements;
42 * Format specified statement into a {@link YangTextSnippet}.
44 * @param module parent module
45 * @param statement statement to format
46 * @return A {@link YangTextSnippet}
47 * @throws NullPointerException if any of the arguments is null
49 public YangTextSnippet toYangTextSnippet(final ModuleEffectiveStatement module,
50 final DeclaredStatement<?> statement) {
51 return new YangTextSnippet(statement, StatementPrefixResolver.forModule(module), ignoredStatements,
52 omitDefaultStatements);
55 public YangTextSnippet toYangTextSnippet(final SubmoduleEffectiveStatement submodule,
56 final DeclaredStatement<?> statement) {
57 return new YangTextSnippet(statement, StatementPrefixResolver.forSubmodule(submodule), ignoredStatements,
58 omitDefaultStatements);
62 * Return the default DeclaredStatementFormatter instance. The instance suppresses statements with default values
63 * and does not ignore any statements.
65 * @return Default-configured instance.
67 public static DeclaredStatementFormatter defaultInstance() {
72 * Create a new {@link Builder}, which can be used to create customized DeclaredStatementFormatter instances.
74 * @return A new Builder.
76 public static Builder builder() {
81 * Builder class for instantiation of a customized {@link DeclaredStatementFormatter}.
84 public static final class Builder
85 implements org.opendaylight.yangtools.concepts.Builder<DeclaredStatementFormatter> {
86 private final Set<StatementDefinition> ignoredStatements = new HashSet<>(4);
87 private boolean retainDefaultStatements;
94 * Add a statement which should be skipped along with any of its children.
96 * @param statementDef Statement to be ignored
97 * @return This builder
99 public Builder addIgnoredStatement(final StatementDefinition statementDef) {
100 ignoredStatements.add(requireNonNull(statementDef));
105 * Retain common known statements whose argument matches semantics of not being present. By default these
106 * statements are omitted from output.
108 * @return This builder
110 public Builder retainDefaultStatements() {
111 retainDefaultStatements = true;
116 public DeclaredStatementFormatter build() {
117 return new DeclaredStatementFormatter(ImmutableSet.copyOf(ignoredStatements), !retainDefaultStatements);