X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-codec-gson%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fcodec%2Fgson%2FJSONStringInstanceIdentifierCodec.java;h=bb57f2fa8d7eaf124847a46e147c6150e66f6d7d;hb=0c092cbca774271a87578432212fb398f61543a4;hp=a1580dd5bb2c3f5681569c1c3541e68d38f51cbf;hpb=05dec17ecf753541133f8a852f5e16b157efef87;p=yangtools.git diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStringInstanceIdentifierCodec.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStringInstanceIdentifierCodec.java index a1580dd5bb..bb57f2fa8d 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStringInstanceIdentifierCodec.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStringInstanceIdentifierCodec.java @@ -8,19 +8,26 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import com.google.common.base.Preconditions; - +import com.google.gson.stream.JsonWriter; +import java.io.IOException; import java.net.URI; - import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; final class JSONStringInstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec implements JSONCodec { private final SchemaContext context; + private final DataSchemaContextTree dataContextTree; + private final JSONCodecFactory codecFactory; - JSONStringInstanceIdentifierCodec(final SchemaContext context) { + JSONStringInstanceIdentifierCodec(final SchemaContext context, final JSONCodecFactory jsonCodecFactory) { this.context = Preconditions.checkNotNull(context); + this.dataContextTree = DataSchemaContextTree.from(context); + this.codecFactory = jsonCodecFactory; } @Override @@ -34,8 +41,32 @@ final class JSONStringInstanceIdentifierCodec extends AbstractModuleStringInstan return module == null ? null : module.getName(); } + @Override + protected DataSchemaContextTree getDataContextTree() { + return dataContextTree; + } + @Override public boolean needQuotes() { return true; } + + @Override + protected Object deserializeKeyValue(DataSchemaNode schemaNode, String value) { + Preconditions.checkNotNull(schemaNode, "schemaNode cannot be null"); + Preconditions.checkArgument(schemaNode instanceof LeafSchemaNode, "schemaNode must be of type LeafSchemaNode"); + final JSONCodec objectJSONCodec = codecFactory.codecFor(schemaNode); + return objectJSONCodec.deserialize(value); + } + + /** + * Serialize YangInstanceIdentifier with specified JsonWriter. + * + * @param writer JsonWriter + * @param value YangInstanceIdentifier + */ + @Override + public void serializeToWriter(JsonWriter writer, YangInstanceIdentifier value) throws IOException { + writer.value(serialize(value)); + } }