X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2FRestCodec.java;h=14b8282312d7accd1ba0c912a55178c72d3f317c;hp=d6b530039eb681cf831956b9e61a83aad106ac64;hb=c1362c86eb19e92e6c64d10099a45deb499c6db1;hpb=2c7c9ef5e517de98e0d740f938762cc746dbcde1 diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestCodec.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestCodec.java index d6b530039e..14b8282312 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestCodec.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestCodec.java @@ -41,13 +41,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class RestCodec { - + private static final Logger logger = LoggerFactory.getLogger(RestCodec.class); private RestCodec() { } - public static final Codec from(TypeDefinition typeDefinition, MountInstance mountPoint) { + public static final Codec from(final TypeDefinition typeDefinition, final MountInstance mountPoint) { return new ObjectCodec(typeDefinition, mountPoint); } @@ -62,7 +62,7 @@ public class RestCodec { private final TypeDefinition type; - private ObjectCodec(TypeDefinition typeDefinition, MountInstance mountPoint) { + private ObjectCodec(final TypeDefinition typeDefinition, final MountInstance mountPoint) { type = RestUtil.resolveBaseTypeFrom(typeDefinition); if (type instanceof IdentityrefTypeDefinition) { identityrefCodec = new IdentityrefCodecImpl(mountPoint); @@ -78,7 +78,7 @@ public class RestCodec { @SuppressWarnings("unchecked") @Override - public Object deserialize(Object input) { + public Object deserialize(final Object input) { try { if (type instanceof IdentityrefTypeDefinition) { if (input instanceof IdentityValuesDTO) { @@ -89,6 +89,9 @@ public class RestCodec { input == null ? "null" : input.getClass(), String.valueOf(input)); return null; } else if (type instanceof LeafrefTypeDefinition) { + if (input instanceof IdentityValuesDTO) { + return LEAFREF_DEFAULT_CODEC.deserialize(((IdentityValuesDTO)input).getOriginValue()); + } return LEAFREF_DEFAULT_CODEC.deserialize(input); } else if (type instanceof InstanceIdentifierTypeDefinition) { if (input instanceof IdentityValuesDTO) { @@ -102,6 +105,9 @@ public class RestCodec { TypeDefinitionAwareCodec> typeAwarecodec = TypeDefinitionAwareCodec .from(type); if (typeAwarecodec != null) { + if (input instanceof IdentityValuesDTO) { + return typeAwarecodec.deserialize(((IdentityValuesDTO)input).getOriginValue()); + } return typeAwarecodec.deserialize(String.valueOf(input)); } else { logger.debug("Codec for type \"" + type.getQName().getLocalName() @@ -110,7 +116,7 @@ public class RestCodec { } } } catch (ClassCastException e) { // TODO remove this catch when - // everyone use codecs + // everyone use codecs logger.error( "ClassCastException was thrown when codec is invoked with parameter " + String.valueOf(input), e); @@ -120,7 +126,7 @@ public class RestCodec { @SuppressWarnings("unchecked") @Override - public Object serialize(Object input) { + public Object serialize(final Object input) { try { if (type instanceof IdentityrefTypeDefinition) { return identityrefCodec.serialize(input); @@ -140,7 +146,7 @@ public class RestCodec { } } } catch (ClassCastException e) { // TODO remove this catch when - // everyone use codecs + // everyone use codecs logger.error( "ClassCastException was thrown when codec is invoked with parameter " + String.valueOf(input), e); @@ -156,17 +162,17 @@ public class RestCodec { private final MountInstance mountPoint; - public IdentityrefCodecImpl(MountInstance mountPoint) { + public IdentityrefCodecImpl(final MountInstance mountPoint) { this.mountPoint = mountPoint; } @Override - public IdentityValuesDTO serialize(QName data) { - return new IdentityValuesDTO(data.getNamespace().toString(), data.getLocalName(), data.getPrefix()); + public IdentityValuesDTO serialize(final QName data) { + return new IdentityValuesDTO(data.getNamespace().toString(), data.getLocalName(), data.getPrefix(),null); } @Override - public QName deserialize(IdentityValuesDTO data) { + public QName deserialize(final IdentityValuesDTO data) { IdentityValue valueWithNamespace = data.getValuesWithNamespaces().get(0); Module module = getModuleByNamespace(valueWithNamespace.getNamespace(), mountPoint); if (module == null) { @@ -174,7 +180,7 @@ public class RestCodec { logger.info("Idenetityref will be translated as NULL for data - {}", String.valueOf(valueWithNamespace)); return null; } - + return QName.create(module.getNamespace(), module.getRevision(), valueWithNamespace.getValue()); } @@ -183,12 +189,12 @@ public class RestCodec { public static class LeafrefCodecImpl implements LeafrefCodec { @Override - public String serialize(Object data) { + public String serialize(final Object data) { return String.valueOf(data); } @Override - public Object deserialize(String data) { + public Object deserialize(final String data) { return data; } @@ -198,15 +204,14 @@ public class RestCodec { private final Logger logger = LoggerFactory.getLogger(InstanceIdentifierCodecImpl.class); private final MountInstance mountPoint; - public InstanceIdentifierCodecImpl(MountInstance mountPoint) { + public InstanceIdentifierCodecImpl(final MountInstance mountPoint) { this.mountPoint = mountPoint; } @Override - public IdentityValuesDTO serialize(InstanceIdentifier data) { - List pathArguments = data.getPath(); + public IdentityValuesDTO serialize(final InstanceIdentifier data) { IdentityValuesDTO identityValuesDTO = new IdentityValuesDTO(); - for (PathArgument pathArgument : pathArguments) { + for (PathArgument pathArgument : data.getPathArguments()) { IdentityValue identityValue = qNameToIdentityValue(pathArgument.getNodeType()); if (pathArgument instanceof NodeIdentifierWithPredicates && identityValue != null) { List predicates = keyValuesToPredicateList(((NodeIdentifierWithPredicates) pathArgument) @@ -224,7 +229,7 @@ public class RestCodec { } @Override - public InstanceIdentifier deserialize(IdentityValuesDTO data) { + public InstanceIdentifier deserialize(final IdentityValuesDTO data) { List result = new ArrayList(); IdentityValue valueWithNamespace = data.getValuesWithNamespaces().get(0); Module module = getModuleByNamespace(valueWithNamespace.getNamespace(), mountPoint); @@ -286,11 +291,11 @@ public class RestCodec { } } } - - return result.isEmpty() ? null : new InstanceIdentifier(result); + + return result.isEmpty() ? null : InstanceIdentifier.create(result); } - private List keyValuesToPredicateList(Map keyValues) { + private List keyValuesToPredicateList(final Map keyValues) { List result = new ArrayList<>(); for (QName qName : keyValues.keySet()) { Object value = keyValues.get(qName); @@ -299,15 +304,15 @@ public class RestCodec { return result; } - private IdentityValue qNameToIdentityValue(QName qName) { + private IdentityValue qNameToIdentityValue(final QName qName) { if (qName != null) { return new IdentityValue(qName.getNamespace().toString(), qName.getLocalName(), qName.getPrefix()); } return null; } } - - private static Module getModuleByNamespace(String namespace, MountInstance mountPoint) { + + private static Module getModuleByNamespace(final String namespace, final MountInstance mountPoint) { URI validNamespace = resolveValidNamespace(namespace, mountPoint); Module module = null; @@ -322,8 +327,8 @@ public class RestCodec { } return module; } - - private static URI resolveValidNamespace(String namespace, MountInstance mountPoint) { + + private static URI resolveValidNamespace(final String namespace, final MountInstance mountPoint) { URI validNamespace; if (mountPoint != null) { validNamespace = ControllerContext.getInstance().findNamespaceByModuleName(mountPoint, namespace);