import java.net.URI;
+import org.opendaylight.controller.sal.core.api.mount.MountInstance;
import org.opendaylight.controller.sal.rest.impl.RestUtil;
import org.opendaylight.controller.sal.restconf.impl.IdentityValuesDTO.IdentityValue;
import org.opendaylight.yangtools.concepts.Codec;
private RestCodec() {
}
- public static final Codec<Object, Object> from(TypeDefinition<?> typeDefinition) {
- return new ObjectCodec(typeDefinition);
+ public static final Codec<Object, Object> from(TypeDefinition<?> typeDefinition, MountInstance mountPoint) {
+ return new ObjectCodec(typeDefinition, mountPoint);
}
@SuppressWarnings("rawtypes")
private final Logger logger = LoggerFactory.getLogger(RestCodec.class);
- public static final Codec IDENTITYREF_DEFAULT_CODEC = new IdentityrefCodecImpl();
public static final Codec LEAFREF_DEFAULT_CODEC = new LeafrefCodecImpl();
+ private final Codec identityrefCodec;
- private TypeDefinition<?> type;
+ private final TypeDefinition<?> type;
- private ObjectCodec(TypeDefinition<?> typeDefinition) {
+ private ObjectCodec(TypeDefinition<?> typeDefinition, MountInstance mountPoint) {
type = RestUtil.resolveBaseTypeFrom(typeDefinition);
+ if (type instanceof IdentityrefTypeDefinition) {
+ identityrefCodec = new IdentityrefCodecImpl(mountPoint);
+ } else {
+ identityrefCodec = null;
+ }
}
@SuppressWarnings("unchecked")
public Object deserialize(Object input) {
try {
if (type instanceof IdentityrefTypeDefinition) {
- return IDENTITYREF_DEFAULT_CODEC.deserialize(input);
+ return identityrefCodec.deserialize(input);
} else if (type instanceof LeafrefTypeDefinition) {
return LEAFREF_DEFAULT_CODEC.deserialize(input);
} else {
public Object serialize(Object input) {
try {
if (type instanceof IdentityrefTypeDefinition) {
- return IDENTITYREF_DEFAULT_CODEC.serialize(input);
+ return identityrefCodec.serialize(input);
} else if (type instanceof LeafrefTypeDefinition) {
return LEAFREF_DEFAULT_CODEC.serialize(input);
} else {
public static class IdentityrefCodecImpl implements IdentityrefCodec<IdentityValuesDTO> {
+ private final MountInstance mountPoint;
+
+ public IdentityrefCodecImpl(MountInstance mountPoint) {
+ this.mountPoint = mountPoint;
+ }
+
@Override
public IdentityValuesDTO serialize(QName data) {
return new IdentityValuesDTO(data.getNamespace().toString(), data.getLocalName(), data.getPrefix());
public QName deserialize(IdentityValuesDTO data) {
IdentityValue valueWithNamespace = data.getValuesWithNamespaces().get(0);
String namespace = valueWithNamespace.getNamespace();
- URI validNamespace = ControllerContext.getInstance().findNamespaceByModuleName(namespace);
+ URI validNamespace;
+ if (mountPoint != null) {
+ validNamespace = ControllerContext.getInstance().findNamespaceByModuleName(mountPoint, namespace);
+ } else {
+ validNamespace = ControllerContext.getInstance().findNamespaceByModuleName(namespace);
+ }
if (validNamespace == null) {
validNamespace = URI.create(namespace);
}
return QName.create(validNamespace, null, valueWithNamespace.getValue());
}
-
+
}
public static class LeafrefCodecImpl implements LeafrefCodec<String> {