X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fdom%2Fserializer%2Fimpl%2FCodecMapping.java;h=fa2d32a1387d95aa6a65c251279465ca3aaf27f6;hb=03abf047ba966c53f4901d36ae5198156d66dc05;hp=19e99617606ff9198379f48fec1be32a052e11b5;hpb=d6caaf86d29a8188ec2dce678315ef4417924e09;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/dom/serializer/impl/CodecMapping.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/dom/serializer/impl/CodecMapping.java index 19e9961760..fa2d32a138 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/dom/serializer/impl/CodecMapping.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/dom/serializer/impl/CodecMapping.java @@ -3,77 +3,104 @@ package org.opendaylight.controller.sal.binding.dom.serializer.impl; import java.lang.reflect.Field; import java.util.Map; +import org.opendaylight.controller.sal.binding.dom.serializer.api.IdentitityCodec; import org.opendaylight.controller.sal.binding.dom.serializer.api.InstanceIdentifierCodec; import org.opendaylight.yangtools.yang.binding.BindingCodec; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import org.opendaylight.yangtools.yang.data.api.Node; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class CodecMapping { + private static final Logger LOG = LoggerFactory.getLogger(CodecMapping.class); + public static final String INSTANCE_IDENTIFIER_CODEC = "INSTANCE_IDENTIFIER_CODEC"; + public static final String IDENTITYREF_CODEC = "IDENTITYREF_CODEC"; + public static final String CLASS_TO_CASE_MAP = "CLASS_TO_CASE"; public static final String COMPOSITE_TO_CASE = "COMPOSITE_TO_CASE"; public static final String AUGMENTATION_CODEC = "AUGMENTATION_CODEC"; - public static void setIdentifierCodec(Class obj,InstanceIdentifierCodec codec) { + public static void setIdentifierCodec(Class obj,InstanceIdentifierCodec codec) { Field instanceIdField; try { instanceIdField = obj.getField(INSTANCE_IDENTIFIER_CODEC); - instanceIdField.set(null, codec); + if(obj != null) { + instanceIdField.set(null, codec); + } } catch (NoSuchFieldException e) { - // NOOP - } catch (SecurityException e) { - // NOOP - } catch (IllegalAccessException e) { - // NOOp + LOG.trace("Instance identifier codec is not needed for {}",obj.getName(),e); + } catch (SecurityException | IllegalAccessException e) { + LOG.error("Instance identifier could not be set for {}",obj.getName(),e); } } - public static void setClassToCaseMap(Class codec, - Map classToCaseRawCodec) { + + public static void setIdentityRefCodec(Class obj,IdentitityCodec codec) { + Field instanceIdField; + try { + instanceIdField = obj.getField(IDENTITYREF_CODEC); + if(obj != null) { + instanceIdField.set(null, codec); + } + } catch (NoSuchFieldException e) { + LOG.trace("Instance identifier codec is not needed for {}",obj.getName(),e); + } catch (SecurityException | IllegalAccessException e) { + LOG.error("Instance identifier could not be set for {}",obj.getName(),e); + } + } + + public static void setClassToCaseMap(Class> codec, + Map,BindingCodec> classToCaseRawCodec) { Field instanceIdField; try { instanceIdField = codec.getField(CLASS_TO_CASE_MAP); instanceIdField.set(null, classToCaseRawCodec); } catch (NoSuchFieldException e) { - // NOOP - } catch (SecurityException e) { - // NOOP - } catch (IllegalAccessException e) { - // NOOp + LOG.debug("BUG: Class to case mappping is not needed for {}",codec.getName(),e); + } catch (SecurityException | IllegalAccessException e) { + LOG.error("Class to case mappping could not be set for {}",codec.getName(),e); } - - } - public static void setCompositeNodeToCaseMap(Class codec, - Map compositeToCase) { + public static void setCompositeNodeToCaseMap(Class> codec, + Map> compositeToCase) { Field instanceIdField; try { instanceIdField = codec.getField(COMPOSITE_TO_CASE); instanceIdField.set(null, compositeToCase); } catch (NoSuchFieldException e) { - // NOOP - } catch (SecurityException e) { - // NOOP - } catch (IllegalAccessException e) { - // NOOp + LOG.debug("BUG: Class to case mappping is not needed for {}",codec.getName(),e); + } catch (SecurityException | IllegalAccessException e) { + LOG.error("Composite node to case mappping could not be set for {}",codec.getName(),e); } } - public static void setAugmentationCodec(Class, Object>> dataCodec, - BindingCodec augmentableCodec) { + public static void setAugmentationCodec(Class> dataCodec, + BindingCodec augmentableCodec) { Field instanceIdField; try { instanceIdField = dataCodec.getField(AUGMENTATION_CODEC); instanceIdField.set(null, augmentableCodec); } catch (NoSuchFieldException e) { - // NOOP - } catch (SecurityException e) { - // NOOP - } catch (IllegalAccessException e) { - // NOOp + LOG.debug("BUG: Augmentation codec is not needed for {}",dataCodec.getName(),e); + } catch (SecurityException | IllegalAccessException e) { + LOG.error("Augmentation codec could not be set for {}",dataCodec.getName(),e); + } + } + + + public static BindingCodec getAugmentationCodec(Class> dataCodec) { + Field instanceIdField; + try { + instanceIdField = dataCodec.getField(AUGMENTATION_CODEC); + return (BindingCodec) instanceIdField.get(null); + } catch (NoSuchFieldException e) { + LOG.debug("BUG: Augmentation codec is not needed for {}",dataCodec.getName(),e); + } catch (SecurityException | IllegalAccessException e) { + LOG.error("Augmentation codec could not be set for {}",dataCodec.getName(),e); } + return null; } }