Bump upstreams
[bgpcep.git] / config-loader / config-loader-impl / src / main / java / org / opendaylight / bgpcep / config / loader / impl / OSGiConfigLoader.java
1 /*
2  * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.bgpcep.config.loader.impl;
9
10 import static com.google.common.base.Verify.verifyNotNull;
11
12 import com.google.common.annotations.Beta;
13 import java.io.File;
14 import java.nio.file.WatchKey;
15 import org.opendaylight.bgpcep.config.loader.spi.ConfigLoader;
16 import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
17 import org.osgi.service.component.annotations.Activate;
18 import org.osgi.service.component.annotations.Component;
19 import org.osgi.service.component.annotations.Deactivate;
20 import org.osgi.service.component.annotations.Reference;
21 import org.osgi.service.component.annotations.ReferencePolicy;
22
23 @Beta
24 @Component(immediate = true, service = ConfigLoader.class)
25 public final class OSGiConfigLoader extends AbstractWatchingConfigLoader {
26     @Reference
27     FileWatcher watcher;
28
29     private File directory;
30
31     @Reference(policy = ReferencePolicy.DYNAMIC, updated = "setRuntimeContext", unbind = "setRuntimeContext")
32     void setRuntimeContext(final BindingRuntimeContext runtimeContext) {
33         updateModelContext(runtimeContext.modelContext());
34     }
35
36     @Activate
37     void activate() {
38         directory = new File(watcher.getPathFile());
39         start();
40     }
41
42     @Deactivate
43     void deactivate() {
44         try {
45             stop();
46         } finally {
47             directory = null;
48         }
49     }
50
51     @Override
52     File directory() {
53         return verifyNotNull(directory);
54     }
55
56     @Override
57     WatchKey takeEvent() throws InterruptedException {
58         return watcher.getWatchService().take();
59     }
60 }