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.InstanceIdentifierCodec;
7 import org.opendaylight.yangtools.yang.binding.BindingCodec;
8 import org.opendaylight.yangtools.yang.common.QName;
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 CLASS_TO_CASE_MAP = "CLASS_TO_CASE";
19 public static final String COMPOSITE_TO_CASE = "COMPOSITE_TO_CASE";
20 public static final String AUGMENTATION_CODEC = "AUGMENTATION_CODEC";
22 public static void setIdentifierCodec(Class<?> obj,InstanceIdentifierCodec codec) {
23 Field instanceIdField;
25 instanceIdField = obj.getField(INSTANCE_IDENTIFIER_CODEC);
27 instanceIdField.set(null, codec);
29 } catch (NoSuchFieldException e) {
30 LOG.debug("Instance identifier codec is not needed for {}",obj.getName(),e);
31 } catch (SecurityException | IllegalAccessException e) {
32 LOG.error("Instance identifier could not be set for {}",obj.getName(),e);
36 public static void setClassToCaseMap(Class<? extends BindingCodec<?,?>> codec,
37 Map<Class<?>,BindingCodec<?,?>> classToCaseRawCodec) {
38 Field instanceIdField;
40 instanceIdField = codec.getField(CLASS_TO_CASE_MAP);
41 instanceIdField.set(null, classToCaseRawCodec);
42 } catch (NoSuchFieldException e) {
43 LOG.debug("BUG: Class to case mappping is not needed for {}",codec.getName(),e);
44 } catch (SecurityException | IllegalAccessException e) {
45 LOG.error("Class to case mappping could not be set for {}",codec.getName(),e);
49 public static void setCompositeNodeToCaseMap(Class<? extends BindingCodec<?,?>> codec,
50 Map<CompositeNode,BindingCodec<?,?>> compositeToCase) {
51 Field instanceIdField;
53 instanceIdField = codec.getField(COMPOSITE_TO_CASE);
54 instanceIdField.set(null, compositeToCase);
55 } catch (NoSuchFieldException e) {
56 LOG.debug("BUG: Class to case mappping is not needed for {}",codec.getName(),e);
57 } catch (SecurityException | IllegalAccessException e) {
58 LOG.error("Composite node to case mappping could not be set for {}",codec.getName(),e);
62 public static void setAugmentationCodec(Class<? extends BindingCodec<?,?>> dataCodec,
63 BindingCodec<?,?> augmentableCodec) {
64 Field instanceIdField;
66 instanceIdField = dataCodec.getField(AUGMENTATION_CODEC);
67 instanceIdField.set(null, augmentableCodec);
68 } catch (NoSuchFieldException e) {
69 LOG.debug("BUG: Augmentation codec is not needed for {}",dataCodec.getName(),e);
70 } catch (SecurityException | IllegalAccessException e) {
71 LOG.error("Augmentation codec could not be set for {}",dataCodec.getName(),e);