1 package org.opendaylight.controller.sal.binding.dom.serializer.impl;
3 import java.lang.reflect.Field;
6 import org.opendaylight.controller.sal.binding.dom.serializer.api.IdentitityCodec;
7 import org.opendaylight.controller.sal.binding.dom.serializer.api.InstanceIdentifierCodec;
8 import org.opendaylight.yangtools.yang.binding.BindingCodec;
9 import org.opendaylight.yangtools.yang.common.QName;
10 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
14 public class CodecMapping {
16 private static final Logger LOG = LoggerFactory.getLogger(CodecMapping.class);
18 public static final String INSTANCE_IDENTIFIER_CODEC = "INSTANCE_IDENTIFIER_CODEC";
19 public static final String IDENTITYREF_CODEC = "IDENTITYREF_CODEC";
21 public static final String CLASS_TO_CASE_MAP = "CLASS_TO_CASE";
22 public static final String COMPOSITE_TO_CASE = "COMPOSITE_TO_CASE";
23 public static final String AUGMENTATION_CODEC = "AUGMENTATION_CODEC";
25 public static void setIdentifierCodec(Class<?> obj,InstanceIdentifierCodec codec) {
26 Field instanceIdField;
28 instanceIdField = obj.getField(INSTANCE_IDENTIFIER_CODEC);
30 instanceIdField.set(null, codec);
32 } catch (NoSuchFieldException e) {
33 LOG.trace("Instance identifier codec is not needed for {}",obj.getName(),e);
34 } catch (SecurityException | IllegalAccessException e) {
35 LOG.error("Instance identifier could not be set for {}",obj.getName(),e);
40 public static void setIdentityRefCodec(Class<?> obj,IdentitityCodec<?> codec) {
41 Field instanceIdField;
43 instanceIdField = obj.getField(IDENTITYREF_CODEC);
45 instanceIdField.set(null, codec);
47 } catch (NoSuchFieldException e) {
48 LOG.trace("Instance identifier codec is not needed for {}",obj.getName(),e);
49 } catch (SecurityException | IllegalAccessException e) {
50 LOG.error("Instance identifier could not be set for {}",obj.getName(),e);
54 public static void setClassToCaseMap(Class<? extends BindingCodec<?,?>> codec,
55 Map<Class<?>,BindingCodec<?,?>> classToCaseRawCodec) {
56 Field instanceIdField;
58 instanceIdField = codec.getField(CLASS_TO_CASE_MAP);
59 instanceIdField.set(null, classToCaseRawCodec);
60 } catch (NoSuchFieldException e) {
61 LOG.debug("BUG: Class to case mappping is not needed for {}",codec.getName(),e);
62 } catch (SecurityException | IllegalAccessException e) {
63 LOG.error("Class to case mappping could not be set for {}",codec.getName(),e);
67 public static void setCompositeNodeToCaseMap(Class<? extends BindingCodec<?,?>> codec,
68 Map<CompositeNode,BindingCodec<?,?>> compositeToCase) {
69 Field instanceIdField;
71 instanceIdField = codec.getField(COMPOSITE_TO_CASE);
72 instanceIdField.set(null, compositeToCase);
73 } catch (NoSuchFieldException e) {
74 LOG.debug("BUG: Class to case mappping is not needed for {}",codec.getName(),e);
75 } catch (SecurityException | IllegalAccessException e) {
76 LOG.error("Composite node to case mappping could not be set for {}",codec.getName(),e);
80 public static void setAugmentationCodec(Class<? extends BindingCodec<?,?>> dataCodec,
81 BindingCodec<?,?> augmentableCodec) {
82 Field instanceIdField;
84 instanceIdField = dataCodec.getField(AUGMENTATION_CODEC);
85 instanceIdField.set(null, augmentableCodec);
86 } catch (NoSuchFieldException e) {
87 LOG.debug("BUG: Augmentation codec is not needed for {}",dataCodec.getName(),e);
88 } catch (SecurityException | IllegalAccessException e) {
89 LOG.error("Augmentation codec could not be set for {}",dataCodec.getName(),e);
94 public static BindingCodec<?,?> getAugmentationCodec(Class<? extends BindingCodec<?,?>> dataCodec) {
95 Field instanceIdField;
97 instanceIdField = dataCodec.getField(AUGMENTATION_CODEC);
98 return (BindingCodec<?,?>) instanceIdField.get(null);
99 } catch (NoSuchFieldException e) {
100 LOG.debug("BUG: Augmentation codec is not needed for {}",dataCodec.getName(),e);
101 } catch (SecurityException | IllegalAccessException e) {
102 LOG.error("Augmentation codec could not be set for {}",dataCodec.getName(),e);