package org.opendaylight.yangtools.yang.data.codec.xml;
+import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
import org.opendaylight.yangtools.yang.data.util.codec.AbstractCodecFactory;
import org.opendaylight.yangtools.yang.data.util.codec.SharedCodecCache;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.TypeAware;
import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.UnknownTypeDefinition;
+import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
/**
* A thread-safe factory for instantiating {@link XmlCodec}s.
private final MountPointContext mountCtx;
private XmlCodecFactory(final MountPointContext mountCtx) {
- super(mountCtx.getSchemaContext(), new SharedCodecCache<>());
+ super(mountCtx.getEffectiveModelContext(), new SharedCodecCache<>());
this.mountCtx = requireNonNull(mountCtx);
}
@Override
protected XmlCodec<?> identityRefCodec(final IdentityrefTypeDefinition type, final QNameModule module) {
- return new IdentityrefXmlCodec(getSchemaContext(), module);
+ return new IdentityrefXmlCodec(getEffectiveModelContext(), module);
}
@Override
protected XmlCodec<?> instanceIdentifierCodec(final InstanceIdentifierTypeDefinition type) {
- return new XmlStringInstanceIdentifierCodec(getSchemaContext(), this);
+ return new XmlStringInstanceIdentifierCodec(getEffectiveModelContext(), this);
}
@Override
protected XmlCodec<?> unknownCodec(final UnknownTypeDefinition type) {
return NullXmlCodec.INSTANCE;
}
+
+ <T extends SchemaNode & TypeAware> XmlCodec<?> codecFor(final T currentNode) {
+ return codecFor(currentNode, type -> verifyNotNull(
+ SchemaContextUtil.getBaseTypeForLeafRef(type, getEffectiveModelContext(), currentNode),
+ "Unable to find base type for leafref node %s type %s.", currentNode, type));
+ }
}