+++ /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.api.schema.stream;
-
-import com.google.common.annotations.Beta;
-import java.io.IOException;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-
-/**
- * A {@link NormalizedNodeStreamWriterExtension} supporting streaming of {@code anydata} nodes.
- *
- * @author Robert Varga
- */
-@Beta
-// FIXME: 4.0.0: integrate this into NormalizedNodeStreamWriter
-public interface AnydataExtension extends NormalizedNodeStreamWriterExtension {
- /**
- * Start emitting a new anydata node identified by name.
- *
- * @param name The name of the anydata element
- * @param objectModel The object model of anydata content
- * @return True if the specified object model is supported by this extension and the process of emitting the node
- * has started. False if the object model is not supported and the node has not started to be emitted.
- * @throws IOException if an underlying IO error occurs
- */
- boolean startAnydataNode(NodeIdentifier name, Class<?> objectModel) throws IOException;
-}
delegate().startYangModeledAnyXmlNode(name, childSizeHint);
}
+ @Override
+ public boolean startAnydataNode(final NodeIdentifier name, final Class<?> objectModel) throws IOException {
+ return delegate().startAnydataNode(name, objectModel);
+ }
+
@Override
public void endNode() throws IOException {
delegate().endNode();
incIndent();
}
+ @Override
+ public boolean startAnydataNode(final NodeIdentifier name, final Class<?> objectModel) {
+ LOG.debug("{}{}(anydata)", ind(), name);
+ incIndent();
+ return true;
+ }
+
@Override
public void startYangModeledAnyXmlNode(final NodeIdentifier name, final int childSizeHint) {
LOG.debug("{}{}(yangModeledAnyXml)", ind(), name);
import static java.util.Objects.requireNonNull;
+import com.google.common.annotations.Beta;
import java.io.Closeable;
import java.io.Flushable;
import java.io.IOException;
*/
void startAugmentationNode(AugmentationIdentifier identifier) throws IOException;
- ////
+ /**
+ * Start emitting a new anydata node identified by name.
+ *
+ * @param name The name of the anydata element
+ * @param objectModel The object model of anydata content
+ * @return True if the specified object model is supported by this extension and the process of emitting the node
+ * has started. False if the object model is not supported and the node has not started to be emitted.
+ * @throws IOException if an underlying IO error occurs
+ */
+ @Beta
+ boolean startAnydataNode(NodeIdentifier name, Class<?> objectModel) throws IOException;
/**
* Emits a start of anyxml node event.
* node.
* @throws IOException if an underlying IO error occurs
*/
- // FIXME: 4.0.0: this method should live in a separate NormalizedNodeStreamWriterExtension
+ // FIXME: 4.0.0: this should follow the startAnydataNode template
void startAnyxmlNode(NodeIdentifier name) throws IOException;
/**
* implementation does not allow resetting the value.
* @throws IOException if an underlying IO error occurs
*/
- // FIXME: 4.0.0: this method should live in a separate NormalizedNodeStreamWriterExtension
+ // FIXME: 5.0.0: this probably should integrated with scalarValue()
void domSourceValue(DOMSource value) throws IOException;
/**
LOG.debug("Ignoring unhandled anyxml node {}", anyxmlNode);
} else if (node instanceof AnydataNode) {
- final AnydataExtension ext = writer.getExtensions().getInstance(AnydataExtension.class);
- if (ext != null) {
- final AnydataNode<?> anydata = (AnydataNode<?>) node;
- final Class<?> model = anydata.getValueObjectModel();
- if (ext.startAnydataNode(anydata.getIdentifier(), model)) {
- writer.scalarValue(anydata.getValue());
- writer.endNode();
- return true;
- }
-
- LOG.debug("Writer {} does not support anydata in form of {}", writer, model);
- } else {
- LOG.debug("Writer {} does not support anydata", writer);
+ final AnydataNode<?> anydata = (AnydataNode<?>) node;
+ final Class<?> model = anydata.getValueObjectModel();
+ if (writer.startAnydataNode(anydata.getIdentifier(), model)) {
+ writer.scalarValue(anydata.getValue());
+ writer.endNode();
+ return true;
}
+
+ LOG.debug("Writer {} does not support anydata in form of {}", writer, model);
}
return false;
import static org.w3c.dom.Node.TEXT_NODE;
import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.net.URI;
import java.util.regex.Pattern;
import javax.xml.transform.dom.DOMSource;
import org.checkerframework.checker.regex.qual.Regex;
-import org.opendaylight.yangtools.concepts.ObjectExtensions;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointStreamWriter;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedAnydata;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
import org.opendaylight.yangtools.yang.data.impl.codec.SchemaTracker;
* <p>
* Values of leaf and leaf-list are NOT translated according to codecs.
*/
-public abstract class JSONNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter, AnydataExtension,
+public abstract class JSONNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter,
MountPointStreamWriter {
private static final class Exclusive extends JSONNormalizedNodeStreamWriter {
Exclusive(final JSONCodecFactory codecFactory, final SchemaTracker tracker, final JsonWriter writer,
*/
private static final boolean DEFAULT_EMIT_EMPTY_CONTAINERS = true;
- static final ObjectExtensions.Factory<JSONNormalizedNodeStreamWriter, NormalizedNodeStreamWriter,
- NormalizedNodeStreamWriterExtension> EXTENSIONS_BUILDER = ObjectExtensions.factory(
- JSONNormalizedNodeStreamWriter.class, AnydataExtension.class, MountPointStreamWriter.class);
-
@Regex
private static final String NUMBER_STRING = "-?\\d+(\\.\\d+)?";
private static final Pattern NUMBER_PATTERN = Pattern.compile(NUMBER_STRING);
@Override
public ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
- return EXTENSIONS_BUILDER.newInstance(this);
+ return ImmutableClassToInstanceMap.of(MountPointStreamWriter.class, this);
}
@Override
import static java.util.Objects.requireNonNull;
import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.util.Map.Entry;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.dom.DOMSource;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.ObjectExtensions;
import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadataStreamWriter;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedAnydata;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
import org.opendaylight.yangtools.yang.data.impl.codec.SchemaTracker;
* removed in a future version.
*/
public abstract class XMLStreamNormalizedNodeStreamWriter<T> implements NormalizedNodeStreamWriter,
- NormalizedMetadataStreamWriter, AnydataExtension {
+ NormalizedMetadataStreamWriter {
private static final Logger LOG = LoggerFactory.getLogger(XMLStreamNormalizedNodeStreamWriter.class);
private static final Set<String> BROKEN_ATTRIBUTES = ConcurrentHashMap.newKeySet();
- @SuppressWarnings("rawtypes")
- static final ObjectExtensions.Factory<XMLStreamNormalizedNodeStreamWriter, NormalizedNodeStreamWriter,
- NormalizedNodeStreamWriterExtension> EXTENSIONS_BUILDER = ObjectExtensions.factory(
- XMLStreamNormalizedNodeStreamWriter.class, NormalizedMetadataStreamWriter.class, AnydataExtension.class);
-
private final @NonNull StreamWriterFacade facade;
XMLStreamNormalizedNodeStreamWriter(final XMLStreamWriter writer) {
@Override
public final ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
- return EXTENSIONS_BUILDER.newInstance(this);
+ return ImmutableClassToInstanceMap.of(NormalizedMetadataStreamWriter.class, this);
}
abstract void startAnydata(NodeIdentifier name);
import com.google.common.annotations.Beta;
import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.util.ArrayDeque;
import java.util.Deque;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.ObjectExtensions;
-import org.opendaylight.yangtools.concepts.ObjectExtensions.Factory;
import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata;
import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadataStreamWriter;
import org.opendaylight.yangtools.rfc7952.data.util.ImmutableNormalizedMetadata;
import org.opendaylight.yangtools.rfc7952.data.util.ImmutableNormalizedMetadata.Builder;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
}
}
- private static final Factory<ImmutableMetadataNormalizedNodeStreamWriter, ?, NormalizedNodeStreamWriterExtension>
- EXTENSIONS_FACTORY = ObjectExtensions.factory(ImmutableMetadataNormalizedNodeStreamWriter.class,
- AnydataExtension.class, NormalizedMetadataStreamWriter.class);
-
private final Deque<Builder> builders = new ArrayDeque<>();
private final NormalizedNodeMetadataResult result;
@Override
public final ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
- return EXTENSIONS_FACTORY.newInstance(this);
+ return ImmutableClassToInstanceMap.of(NormalizedMetadataStreamWriter.class, this);
}
@Override
import com.google.common.annotations.Beta;
import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
import java.io.IOException;
-import org.opendaylight.yangtools.concepts.ObjectExtensions;
-import org.opendaylight.yangtools.concepts.ObjectExtensions.Factory;
import org.opendaylight.yangtools.rcf8528.data.util.ImmutableMountPointNode;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
import org.opendaylight.yangtools.yang.data.api.schema.stream.ForwardingNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
@Beta
public abstract class ImmutableMountPointNormalizedNodeStreamWriter extends ImmutableNormalizedNodeStreamWriter
implements MountPointStreamWriter {
- private static final Factory<ImmutableMountPointNormalizedNodeStreamWriter, ?, NormalizedNodeStreamWriterExtension>
- EXTENSIONS_FACTORY = ObjectExtensions.factory(ImmutableMountPointNormalizedNodeStreamWriter.class,
- AnydataExtension.class, MountPointStreamWriter.class);
-
protected ImmutableMountPointNormalizedNodeStreamWriter(final NormalizedNodeResult result) {
super(result);
}
@Override
public final ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
- return EXTENSIONS_FACTORY.newInstance(this);
+ return ImmutableClassToInstanceMap.of(MountPointStreamWriter.class, this);
}
@Override
import static com.google.common.base.Preconditions.checkState;
import static java.util.Objects.requireNonNull;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ImmutableClassToInstanceMap;
import java.io.IOException;
import java.util.ArrayDeque;
import java.util.Deque;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
* <p>
* This class is not final for purposes of customization, normal users should not need to subclass it.
*/
-public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter, AnydataExtension {
+public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter {
@SuppressWarnings("rawtypes")
private final Deque<NormalizedNodeBuilder> builders = new ArrayDeque<>();
return new ImmutableMetadataNormalizedNodeStreamWriter(result);
}
- @Override
- public ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
- return ImmutableClassToInstanceMap.of(AnydataExtension.class, this);
- }
-
@Override
public void startLeafNode(final NodeIdentifier name) {
checkDataNodeContainer();
import java.io.IOException;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadataStreamWriter;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
@Override
protected void write(final NormalizedNodeStreamWriter writer, final NormalizedMetadataStreamWriter metaWriter)
throws IOException {
- final AnydataExtension ext = writer.getExtensions().getInstance(AnydataExtension.class);
- if (ext != null) {
- writer.nextDataSchemaNode(getSchema());
- if (ext.startAnydataNode(provideNodeIdentifier(), getObjectModel())) {
- writer.scalarValue(getValue());
- writer.endNode();
- }
+ writer.nextDataSchemaNode(getSchema());
+ if (writer.startAnydataNode(provideNodeIdentifier(), getObjectModel())) {
+ writer.scalarValue(getValue());
+ writer.endNode();
}
}