84a0065ea13d7cb3e2e50e530382355f4aabf91c
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / main / java / org / opendaylight / controller / sal / binding / impl / connect / dom / MappingServiceImpl.xtend
1 package org.opendaylight.controller.sal.binding.impl.connect.dom
2
3 import org.opendaylight.controller.sal.core.api.model.SchemaServiceListener
4 import org.opendaylight.yangtools.yang.model.api.SchemaContext
5 import org.opendaylight.yangtools.sal.binding.model.api.CodeGenerator
6 import org.opendaylight.yangtools.sal.binding.generator.impl.BindingGeneratorImpl
7 import org.opendaylight.yangtools.sal.binding.generator.api.BindingGenerator
8 import org.opendaylight.yangtools.yang.data.api.CompositeNode
9 import org.opendaylight.yangtools.yang.binding.DataObject
10 import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl
11 import java.util.Collections
12 import java.util.Map.Entry
13 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
14 import java.util.AbstractMap.SimpleEntry
15 import org.opendaylight.controller.sal.core.api.model.SchemaService
16
17 class MappingServiceImpl implements SchemaServiceListener, BindingIndependentMappingService {
18
19     var extension BindingMapping mapping = new BindingMapping;
20
21     @Property
22     BindingGeneratorImpl binding;
23
24     @Property
25     SchemaService schemaService;
26
27     override onGlobalContextUpdated(SchemaContext arg0) {
28         recreateBindingContext(arg0);
29     }
30
31     def recreateBindingContext(SchemaContext schemaContext) {
32         val newBinding = new BindingGeneratorImpl();
33         newBinding.generateTypes(schemaContext);
34         val newMapping = new BindingMapping();
35         for (entry : newBinding.moduleContexts.entrySet) {
36             val module = entry.key;
37             val context = entry.value;
38             
39             newMapping.updateBinding(schemaContext, context);
40         }
41         mapping = newMapping
42     }
43
44     override CompositeNode toDataDom(DataObject data) {
45         mapping.toCompositeNode(data);
46     }
47
48     override Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, CompositeNode> toDataDom(
49         Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry) {
50         val key = mapping.toDataDom(entry.key);
51         val data = mapping.toCompositeNode(entry.value);
52         return new SimpleEntry(key, data);
53     }
54
55     override org.opendaylight.yangtools.yang.data.api.InstanceIdentifier toDataDom(
56         InstanceIdentifier<? extends DataObject> path) {
57         return mapping.toDataDom(path);
58     }
59     
60     override dataObjectFromDataDom(InstanceIdentifier<? extends DataObject> path, CompositeNode result) {
61         return mapping.dataObjectFromDataDom(path,result);
62     }
63     
64     public def void start() {
65         schemaService.registerSchemaServiceListener(this);
66         recreateBindingContext(schemaService.globalContext);
67     }
68 }