1 package org.opendaylight.mwtn.config.impl;
4 import java.io.IOException;
5 import java.util.ArrayList;
8 import org.opendaylight.mwtn.base.internalTypes.FileWatchdog;
9 import org.opendaylight.mwtn.base.internalTypes.IniConfigurationFile;
10 import org.opendaylight.mwtn.base.internalTypes.IniConfigurationFile.ConfigurationException;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
14 public class HtDevicemanagerConfiguration {
16 private static final long FILE_POLL_INTERVAL_MS = 1000;
18 public interface IConfigChangedListener {
19 void onConfigChanged();
21 public static class ConfigFileObserver extends FileWatchdog
23 private final List<IConfigChangedListener> mConfigChangedHandlers = new ArrayList<IConfigChangedListener>();
24 protected ConfigFileObserver(String filename) {
26 this.setDelay(FILE_POLL_INTERVAL_MS);
30 protected void doOnChange() {
32 boolean succeeded=true;
33 LOG.debug("property file has changed");
37 } catch (ConfigurationException e) {
38 LOG.warn("error reloading config: "+e.getMessage());
44 if(this.mConfigChangedHandlers==null)
46 LOG.debug("handler list is null");//should never happen
49 //push event to all listeners
50 for (IConfigChangedListener listener : this.mConfigChangedHandlers) {
52 listener.onConfigChanged();
56 public void registerConfigChangedListener(IConfigChangedListener l) {
57 if (!this.mConfigChangedHandlers.contains(l))
58 this.mConfigChangedHandlers.add(l);
61 public void unregisterConfigChangedListener(IConfigChangedListener l) {
62 this.mConfigChangedHandlers.remove(l);
67 public interface ISubConfigHandler {
71 private static final Logger LOG = LoggerFactory.getLogger(HtDevicemanagerConfiguration.class);
73 private static final String CONFIGURATIONFILE = "etc/devicemanager.properties";
74 private static final String CONFIGURATIONTESTFILE = "test.properties"; // for
77 private static HtDevicemanagerConfiguration mObj;
78 private static HtDevicemanagerConfiguration mObjTest;
80 public static HtDevicemanagerConfiguration getConfiguration() {
82 mObj = new HtDevicemanagerConfiguration(CONFIGURATIONFILE);
85 public static HtDevicemanagerConfiguration getTestConfiguration() {
87 mObjTest = new HtDevicemanagerConfiguration(CONFIGURATIONTESTFILE);
90 private static IniConfigurationFile mConfig;
93 public IniConfigurationFile getMConfig() {
97 private final ConfigFileObserver fileObserver;
98 public void registerConfigChangedListener(IConfigChangedListener l) {
99 this.fileObserver.registerConfigChangedListener(l);
102 public void unregisterConfigChangedListener(IConfigChangedListener l) {
103 this.fileObserver.unregisterConfigChangedListener(l);
106 private HtDevicemanagerConfiguration(String filename) {
109 this.mFile = new File(filename);
110 if (!this.mFile.exists())
111 this.mFile.createNewFile();
113 mConfig = new IniConfigurationFile(this.mFile);
116 } catch (ConfigurationException e) {
117 LOG.error("error loading config values:" + e.getMessage());
119 } catch (IOException e) {
120 LOG.error("error loading config file " + filename + ": " + e.getMessage());
123 this.fileObserver=new ConfigFileObserver(filename);
124 this.fileObserver.start();
128 protected void finalize() throws Throwable {
129 if(this.fileObserver!=null)
130 this.fileObserver.interrupt();
133 public DcaeConfig getDcae() {
134 return DcaeConfig.getDcae(mConfig, this.subconfigHandler);
137 public AaiConfig getAai() {
138 return AaiConfig.getAai(mConfig, this.subconfigHandler);
141 public EsConfig getEs() {
142 return EsConfig.getEs(mConfig, this.subconfigHandler);
145 public PmConfig getPm() {
146 return PmConfig.getPm(mConfig, this.subconfigHandler);
149 private final ISubConfigHandler subconfigHandler = new ISubConfigHandler() {
157 public ISubConfigHandler getSubconfigHandler() {
158 return subconfigHandler;