1 package org.opendaylight.yangtools.sal.binding.generator.impl;
3 import java.lang.reflect.Field;
6 import org.opendaylight.yangtools.yang.data.impl.codec.IdentitityCodec;
7 import org.opendaylight.yangtools.yang.data.impl.codec.InstanceIdentifierCodec;
8 import org.opendaylight.yangtools.yang.binding.BindingCodec;
9 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
13 public class CodecMapping {
15 private static final Logger LOG = LoggerFactory.getLogger(CodecMapping.class);
17 public static final String INSTANCE_IDENTIFIER_CODEC = "INSTANCE_IDENTIFIER_CODEC";
18 public static final String IDENTITYREF_CODEC = "IDENTITYREF_CODEC";
20 public static final String CLASS_TO_CASE_MAP = "CLASS_TO_CASE";
21 public static final String COMPOSITE_TO_CASE = "COMPOSITE_TO_CASE";
22 public static final String AUGMENTATION_CODEC = "AUGMENTATION_CODEC";
24 public static void setIdentifierCodec(Class<?> obj,InstanceIdentifierCodec codec) {
25 Field instanceIdField;
27 instanceIdField = obj.getField(INSTANCE_IDENTIFIER_CODEC);
29 instanceIdField.set(null, codec);
31 } catch (NoSuchFieldException e) {
32 LOG.trace("Instance identifier codec is not needed for {}",obj.getName(),e);
33 } catch (SecurityException | IllegalAccessException e) {
34 LOG.error("Instance identifier could not be set for {}",obj.getName(),e);
39 public static void setIdentityRefCodec(Class<?> obj,IdentitityCodec<?> codec) {
40 Field instanceIdField;
42 instanceIdField = obj.getField(IDENTITYREF_CODEC);
44 instanceIdField.set(null, codec);
46 } catch (NoSuchFieldException e) {
47 LOG.trace("Instance identifier codec is not needed for {}",obj.getName(),e);
48 } catch (SecurityException | IllegalAccessException e) {
49 LOG.error("Instance identifier could not be set for {}",obj.getName(),e);
53 public static void setClassToCaseMap(Class<? extends BindingCodec<?,?>> codec,
54 Map<Class<?>,BindingCodec<?,?>> classToCaseRawCodec) {
55 Field instanceIdField;
57 instanceIdField = codec.getField(CLASS_TO_CASE_MAP);
58 instanceIdField.set(null, classToCaseRawCodec);
59 } catch (NoSuchFieldException e) {
60 LOG.debug("BUG: Class to case mappping is not needed for {}",codec.getName(),e);
61 } catch (SecurityException | IllegalAccessException e) {
62 LOG.error("Class to case mappping could not be set for {}",codec.getName(),e);
66 public static void setCompositeNodeToCaseMap(Class<? extends BindingCodec<?,?>> codec,
67 Map<CompositeNode,BindingCodec<?,?>> compositeToCase) {
68 Field instanceIdField;
70 instanceIdField = codec.getField(COMPOSITE_TO_CASE);
71 instanceIdField.set(null, compositeToCase);
72 } catch (NoSuchFieldException e) {
73 LOG.debug("BUG: Class to case mappping is not needed for {}",codec.getName(),e);
74 } catch (SecurityException | IllegalAccessException e) {
75 LOG.error("Composite node to case mappping could not be set for {}",codec.getName(),e);
79 public static void setAugmentationCodec(Class<? extends BindingCodec<?,?>> dataCodec,
80 BindingCodec<?,?> augmentableCodec) {
81 Field instanceIdField;
83 instanceIdField = dataCodec.getField(AUGMENTATION_CODEC);
84 instanceIdField.set(null, augmentableCodec);
85 } catch (NoSuchFieldException e) {
86 LOG.debug("BUG: Augmentation codec is not needed for {}",dataCodec.getName(),e);
87 } catch (SecurityException | IllegalAccessException e) {
88 LOG.error("Augmentation codec could not be set for {}",dataCodec.getName(),e);
93 public static BindingCodec<?,?> getAugmentationCodec(Class<? extends BindingCodec<?,?>> dataCodec) {
94 Field instanceIdField;
96 instanceIdField = dataCodec.getField(AUGMENTATION_CODEC);
97 return (BindingCodec<?,?>) instanceIdField.get(null);
98 } catch (NoSuchFieldException e) {
99 LOG.debug("BUG: Augmentation codec is not needed for {}",dataCodec.getName(),e);
100 } catch (SecurityException | IllegalAccessException e) {
101 LOG.error("Augmentation codec could not be set for {}",dataCodec.getName(),e);