Minor fix in flow IP Matching
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / main / java / org / opendaylight / controller / sal / binding / dom / serializer / impl / CodecMapping.java
1 package org.opendaylight.controller.sal.binding.dom.serializer.impl;
2
3 import java.lang.reflect.Field;
4 import java.util.Map;
5
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;
13
14 public class CodecMapping {
15
16     private static final Logger LOG = LoggerFactory.getLogger(CodecMapping.class);
17     
18     public static final String INSTANCE_IDENTIFIER_CODEC = "INSTANCE_IDENTIFIER_CODEC";
19     public static final String IDENTITYREF_CODEC = "IDENTITYREF_CODEC";
20     
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";
24     
25     public static void setIdentifierCodec(Class<?> obj,InstanceIdentifierCodec codec) {
26         Field instanceIdField;
27         try {
28             instanceIdField = obj.getField(INSTANCE_IDENTIFIER_CODEC);
29             if(obj != null) {
30                 instanceIdField.set(null, codec);
31             }
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);
36         }
37     }
38
39
40     public static void setIdentityRefCodec(Class<?> obj,IdentitityCodec<?> codec) {
41         Field instanceIdField;
42         try {
43             instanceIdField = obj.getField(IDENTITYREF_CODEC);
44             if(obj != null) {
45                 instanceIdField.set(null, codec);
46             }
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);
51         }
52     }
53
54     public static void setClassToCaseMap(Class<? extends BindingCodec<?,?>> codec,
55             Map<Class<?>,BindingCodec<?,?>> classToCaseRawCodec) {
56         Field instanceIdField;
57         try {
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);
64         }
65     }
66
67     public static void setCompositeNodeToCaseMap(Class<? extends BindingCodec<?,?>> codec,
68             Map<CompositeNode,BindingCodec<?,?>> compositeToCase) {
69         Field instanceIdField;
70         try {
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);
77         }
78     }
79
80     public static void setAugmentationCodec(Class<? extends BindingCodec<?,?>> dataCodec,
81             BindingCodec<?,?> augmentableCodec) {
82             Field instanceIdField;
83             try {
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);
90             }
91     }
92     
93     
94     public static BindingCodec<?,?> getAugmentationCodec(Class<? extends BindingCodec<?,?>> dataCodec) {
95             Field instanceIdField;
96             try {
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);
103             }
104             return null;
105     }
106 }