import static java.util.Objects.requireNonNull;
import java.util.ArrayDeque;
-import java.util.Collection;
import java.util.Deque;
import javax.xml.transform.dom.DOMSource;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAnyXmlNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
"Invalid nesting of data.");
}
- @SuppressWarnings("rawtypes")
- protected static final class NormalizedNodeResultBuilder implements NormalizedNodeContainerBuilder {
-
- private final NormalizedNodeResult result;
-
- public NormalizedNodeResultBuilder(final NormalizedNodeResult result) {
- this.result = result;
- }
-
- @Override
- public NormalizedNodeBuilder withValue(final Object value) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public NormalizedNodeContainerBuilder withValue(final Collection value) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public NormalizedNode build() {
- throw new IllegalStateException("Can not close NormalizedNodeResult");
- }
-
- @Override
- public NormalizedNodeContainerBuilder withNodeIdentifier(final PathArgument nodeIdentifier) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public NormalizedNodeContainerBuilder addChild(final NormalizedNode child) {
- result.setResult(child);
- return this;
- }
-
- @Override
- public NormalizedNodeContainerBuilder removeChild(final PathArgument key) {
- throw new UnsupportedOperationException();
- }
- }
-
@Override
public void flush() {
// no-op
public void nextDataSchemaNode(final DataSchemaNode schema) {
nextSchema = requireNonNull(schema);
}
+
+ final void reset(final NormalizedNodeResultBuilder builder) {
+ nextSchema = null;
+ builders.clear();
+ builders.push(builder);
+ }
}
return result;
}
+ public boolean isFinished() {
+ return finished;
+ }
+
void setResult(final NormalizedNode<?, ?> result) {
if (finished) {
throw new ResultAlreadySetException("Normalized Node result was already set.", this.result);
this.result = result;
}
- public boolean isFinished() {
- return finished;
+ void reset() {
+ result = null;
+ finished = false;
}
}
--- /dev/null
+/*
+ * 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.yangtools.yang.data.impl.schema;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.Collection;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
+
+@SuppressWarnings("rawtypes")
+final class NormalizedNodeResultBuilder implements NormalizedNodeContainerBuilder {
+ private final @NonNull NormalizedNodeResult result;
+
+ NormalizedNodeResultBuilder() {
+ this.result = new NormalizedNodeResult();
+ }
+
+ NormalizedNodeResultBuilder(final NormalizedNodeResult result) {
+ this.result = requireNonNull(result);
+ }
+
+ @NonNull NormalizedNodeResult result() {
+ return result;
+ }
+
+ @Override
+ public NormalizedNodeBuilder withValue(final Object value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public NormalizedNodeContainerBuilder withValue(final Collection value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public NormalizedNode build() {
+ throw new IllegalStateException("Can not close NormalizedNodeResult");
+ }
+
+ @Override
+ public NormalizedNodeContainerBuilder withNodeIdentifier(final PathArgument nodeIdentifier) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public NormalizedNodeContainerBuilder addChild(final NormalizedNode child) {
+ result.setResult(child);
+ return this;
+ }
+
+ @Override
+ public NormalizedNodeContainerBuilder removeChild(final PathArgument key) {
+ throw new UnsupportedOperationException();
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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.yangtools.yang.data.impl.schema;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+
+/**
+ * A reusable variant of {@link ImmutableNormalizedNodeStreamWriter}. It can be reset into its base state and used for
+ * multiple streaming sessions.
+ */
+@Beta
+public final class ReusableImmutableNormalizedNodeStreamWriter extends ImmutableNormalizedNodeStreamWriter {
+ private final NormalizedNodeResultBuilder builder;
+
+ private ReusableImmutableNormalizedNodeStreamWriter(final NormalizedNodeResultBuilder builder) {
+ super(builder);
+ this.builder = requireNonNull(builder);
+ }
+
+ public static @NonNull ReusableImmutableNormalizedNodeStreamWriter create() {
+ return new ReusableImmutableNormalizedNodeStreamWriter(new NormalizedNodeResultBuilder());
+ }
+
+ public void reset() {
+ builder.result().reset();
+ reset(builder);
+ }
+
+ public NormalizedNode<?, ?> getResult() {
+ return builder.result().getResult();
+ }
+}