Populate SubmoduleEffectiveModule with import namespaces
[yangtools.git] / yang / yang-model-export / src / main / java / org / opendaylight / yangtools / yang / model / export / YangTextSnippet.java
index 6993381e770a6542a8550a63a26bc3be9dca2741..abdefd7f722201ee8ec056923544be6152d142ea 100644 (file)
@@ -12,26 +12,18 @@ import static org.eclipse.jdt.annotation.DefaultLocation.PARAMETER;
 import static org.eclipse.jdt.annotation.DefaultLocation.RETURN_TYPE;
 
 import com.google.common.annotations.Beta;
-import com.google.common.collect.ImmutableSet;
-import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.Spliterator;
 import java.util.Spliterators;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
-import javax.annotation.concurrent.ThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.yangtools.concepts.Immutable;
-import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement.QNameModuleToPrefixNamespace;
 
 /**
  * A YANG text snippet generated from a {@link DeclaredStatement}. Generated {@link #stream()} or {@link #iterator()}
@@ -45,30 +37,24 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement.Q
  * @author Robert Varga
  */
 @Beta
-@ThreadSafe
 @NonNullByDefault({ PARAMETER, RETURN_TYPE })
 public final class YangTextSnippet implements Immutable, Iterable<@NonNull String> {
     private final Set<@NonNull StatementDefinition> ignoredStatements;
-    private final Map<QNameModule, @NonNull String> mapper;
+    private final StatementPrefixResolver resolver;
     private final DeclaredStatement<?> statement;
     private final boolean omitDefaultStatements;
 
-    private YangTextSnippet(final DeclaredStatement<?> statement,
-            final Map<QNameModule, @NonNull String> namespaces,
+    YangTextSnippet(final DeclaredStatement<?> statement, final StatementPrefixResolver resolver,
             final Set<@NonNull StatementDefinition> ignoredStatements, final boolean omitDefaultStatements) {
         this.statement = requireNonNull(statement);
-        this.mapper = requireNonNull(namespaces);
+        this.resolver = requireNonNull(resolver);
         this.ignoredStatements = requireNonNull(ignoredStatements);
         this.omitDefaultStatements = omitDefaultStatements;
     }
 
-    public static Builder builder(final ModuleEffectiveStatement module, final DeclaredStatement<?> statement) {
-        return new Builder(module, statement);
-    }
-
     @Override
     public Iterator<@NonNull String> iterator() {
-        return new YangTextSnippetIterator(statement, mapper, ignoredStatements, omitDefaultStatements);
+        return new YangTextSnippetIterator(statement, resolver, ignoredStatements, omitDefaultStatements);
     }
 
     @Override
@@ -88,9 +74,10 @@ public final class YangTextSnippet implements Immutable, Iterable<@NonNull Strin
      *
      * @param str String to be checked
      * @return True if the string contains end of line.
+     * @throws NullPointerException if str is null
      */
     public static boolean isEolString(final String str) {
-        return str.charAt(str.length() - 1) == '\n';
+        return !str.isEmpty() && str.charAt(str.length() - 1) == '\n';
     }
 
     @Override
@@ -98,48 +85,4 @@ public final class YangTextSnippet implements Immutable, Iterable<@NonNull Strin
     public String toString() {
         return stream().collect(Collectors.joining());
     }
-
-    /**
-     * Builder class for instantiation of a customized {@link YangTextSnippet}.
-     */
-    @Beta
-    public static final class Builder implements org.opendaylight.yangtools.concepts.Builder<@NonNull YangTextSnippet> {
-        private final List<@NonNull StatementDefinition> ignoredStatements = new ArrayList<>();
-        private final @NonNull DeclaredStatement<?> statement;
-        private final @NonNull ModuleEffectiveStatement module;
-        private boolean retainDefaultStatements;
-
-        Builder(final ModuleEffectiveStatement module, final DeclaredStatement<?> statement) {
-            this.module = requireNonNull(module);
-            this.statement = requireNonNull(statement);
-        }
-
-        /**
-         * Add a statement which should be skipped along with any of its children.
-         *
-         * @param statementDef Statement to be ignored
-         * @return This builder
-         */
-        public Builder addIgnoredStatement(final StatementDefinition statementDef) {
-            ignoredStatements.add(requireNonNull(statementDef));
-            return this;
-        }
-
-        /**
-         * Retain common known statements whose argument matches semantics of not being present. By default these
-         * statements are omitted from output.
-         *
-         * @return This builder
-         */
-        public Builder retainDefaultStatements() {
-            retainDefaultStatements = true;
-            return this;
-        }
-
-        @Override
-        public YangTextSnippet build() {
-            return new YangTextSnippet(statement, module.getAll(QNameModuleToPrefixNamespace.class),
-                ImmutableSet.copyOf(ignoredStatements), !retainDefaultStatements);
-        }
-    }
 }