Add configuration for extensions
[bgpcep.git] / programming / impl-config / src / main / java / org / opendaylight / controller / config / yang / programming / impl / InstructionSchedulerImplModule.java
1 /**
2  * Generated file
3
4  * Generated from: yang module name: config-programming-impl  yang module local name: instruction-scheduler-impl
5  * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
6  * Generated at: Mon Nov 18 16:50:17 CET 2013
7  *
8  * Do not modify this file unless it is present under src/main directory
9  */
10 package org.opendaylight.controller.config.yang.programming.impl;
11
12 import io.netty.util.HashedWheelTimer;
13 import io.netty.util.Timer;
14
15 import java.util.concurrent.ExecutorService;
16 import java.util.concurrent.Executors;
17
18 import org.opendaylight.bgpcep.programming.impl.ProgrammingServiceImpl;
19 import org.opendaylight.bgpcep.programming.spi.InstructionExecutor;
20 import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
21 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.ProgrammingService;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.SubmitInstructionInput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.failure.Failure;
25
26 /**
27  *
28  */
29 public final class InstructionSchedulerImplModule extends org.opendaylight.controller.config.yang.programming.impl.AbstractInstructionSchedulerImplModule
30 {
31
32         public InstructionSchedulerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
33                 super(identifier, dependencyResolver);
34         }
35
36         public InstructionSchedulerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final InstructionSchedulerImplModule oldModule, final java.lang.AutoCloseable oldInstance) {
37                 super(identifier, dependencyResolver, oldModule, oldInstance);
38         }
39
40         @Override
41         public void validate(){
42                 super.validate();
43                 // Add custom validation for module attributes here.
44         }
45
46         @Override
47         public java.lang.AutoCloseable createInstance() {
48                 // FIXME: configured timer
49                 final Timer timer = new HashedWheelTimer();
50
51                 final ExecutorService exec = Executors.newSingleThreadExecutor();
52
53                 final ProgrammingServiceImpl inst = new ProgrammingServiceImpl(getNotificationServiceDependency(), exec, timer);
54
55                 final RpcRegistration<ProgrammingService> reg = getRpcRegistryDependency().addRpcImplementation(ProgrammingService.class, inst);
56
57                 final class ProgrammingServiceImplCloseable implements InstructionScheduler, AutoCloseable {
58                         @Override
59                         public void close() throws Exception {
60                                 try {
61                                         reg.close();
62                                 } finally {
63                                         try {
64                                                 inst.close();
65                                         } finally {
66                                                 exec.shutdown();
67                                         }
68                                 }
69                         }
70
71                         @Override
72                         public Failure submitInstruction(final SubmitInstructionInput input, final InstructionExecutor executor) {
73                                 return inst.submitInstruction(input, executor);
74                         }
75                 }
76
77                 return new ProgrammingServiceImplCloseable();
78         }
79 }