1 package org.opendaylight.controller.sal.binding.test;
4 import java.io.InputStream;
5 import java.util.ArrayList;
9 import org.junit.Before;
10 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
11 import org.opendaylight.controller.sal.binding.impl.DataBrokerImpl;
12 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentDataServiceConnector;
13 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentMappingService;
14 import org.opendaylight.controller.sal.binding.impl.connect.dom.RuntimeGeneratedMappingServiceImpl;
15 import org.opendaylight.controller.sal.binding.test.connect.dom.MappingServiceTest;
16 import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
17 import org.opendaylight.controller.sal.dom.broker.impl.HashMapDataStore;
18 import org.opendaylight.yangtools.yang.model.api.Module;
19 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
20 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
21 import org.reflections.Reflections;
22 import org.reflections.scanners.ResourcesScanner;
24 import com.google.common.base.Predicate;
25 import com.google.common.util.concurrent.ListeningExecutorService;
26 import com.google.common.util.concurrent.MoreExecutors;
28 public abstract class AbstractDataServiceTest {
29 protected DataBrokerService biDataService;
30 protected DataProviderService baDataService;
32 protected RuntimeGeneratedMappingServiceImpl mappingServiceImpl;
33 protected BindingIndependentMappingService mappingService;
34 protected DataBrokerImpl baDataImpl;
35 protected org.opendaylight.controller.sal.dom.broker.DataBrokerImpl biDataImpl;
36 protected ListeningExecutorService executor;
37 protected BindingIndependentDataServiceConnector connectorServiceImpl;
38 protected HashMapDataStore dataStore;
43 executor = MoreExecutors.sameThreadExecutor();
44 baDataImpl = new DataBrokerImpl();
45 baDataService = baDataImpl;
46 baDataImpl.setExecutor(executor);
48 biDataImpl = new org.opendaylight.controller.sal.dom.broker.DataBrokerImpl();
49 biDataService = biDataImpl;
50 biDataImpl.setExecutor(executor);
52 dataStore = new HashMapDataStore();
53 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier treeRoot = org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder().toInstance();
54 biDataImpl.registerConfigurationReader(treeRoot, dataStore);
55 biDataImpl.registerOperationalReader(treeRoot, dataStore);
56 biDataImpl.registerCommitHandler(treeRoot, dataStore);
58 mappingServiceImpl = new RuntimeGeneratedMappingServiceImpl();
59 mappingService = mappingServiceImpl;
60 File pathname = new File("target/gen-classes-debug");
61 //System.out.println("Generated classes are captured in " + pathname.getAbsolutePath());
62 mappingServiceImpl.start();
63 //mappingServiceImpl.getBinding().setClassFileCapturePath(pathname);
65 connectorServiceImpl = new BindingIndependentDataServiceConnector();
66 connectorServiceImpl.setBaDataService(baDataService);
67 connectorServiceImpl.setBiDataService(biDataService);
68 connectorServiceImpl.setMappingService(mappingServiceImpl);
69 connectorServiceImpl.start();
71 String[] yangFiles= getModelFilenames();
72 mappingServiceImpl.onGlobalContextUpdated(getContext(yangFiles));
76 protected String[] getModelFilenames() {
77 return getModelFilenamesImpl();
80 public static String[] getModelFilenamesImpl() {
81 Predicate<String> predicate = new Predicate<String>() {
83 public boolean apply(String input) {
84 return input.endsWith(".yang");
87 Reflections reflection= new Reflections("META-INF.yang", new ResourcesScanner());
88 Set<String> result = reflection.getResources(predicate);
89 return (String[]) result.toArray(new String[result.size()]);
92 public static SchemaContext getContext(String[] yangFiles) {
94 ClassLoader loader = AbstractDataServiceTest.class.getClassLoader();
96 List<InputStream> streams = new ArrayList<>();
97 for (String string : yangFiles) {
98 InputStream stream = loader.getResourceAsStream(string);
102 YangParserImpl parser = new YangParserImpl();
104 Set<Module> modules = parser.parseYangModelsFromStreams(streams);
105 return parser.resolveSchemaContext(modules);