c07bf4620e316a7a0fd0619ac6aa1bdefa4cc446
[ccsdk/features.git] /
1 /*******************************************************************************
2  * ============LICENSE_START========================================================================
3  * ONAP : ccsdk feature sdnr wt
4  * =================================================================================================
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6  * =================================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software distributed under the License
13  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14  * or implied. See the License for the specific language governing permissions and limitations under
15  * the License.
16  * ============LICENSE_END==========================================================================
17  ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.devicemanager.config;
19
20 import java.io.File;
21 import java.io.IOException;
22 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile;
23 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.IniConfigurationFile.ConfigurationException;
24 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig;
25 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig;
26 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.EsConfig;
27 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.PmConfig;
28 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.ToggleAlarmConfig;
29 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util.ConfigFileObserver;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 public class HtDevicemanagerConfiguration {
34
35     private static final long FILE_POLL_INTERVAL_MS = 1000;
36
37     private static final Logger LOG = LoggerFactory.getLogger(HtDevicemanagerConfiguration.class);
38
39     private static final String CONFIGURATIONFILE = "etc/devicemanager.properties";
40     private static final String CONFIGURATIONTESTFILE = "test.properties"; // for
41     // testing
42
43     private static HtDevicemanagerConfiguration mObj;
44     private static HtDevicemanagerConfiguration mObjTest;
45     private static IniConfigurationFile mConfig;
46     private final ISubConfigHandler subconfigHandler = () -> mConfig.save();
47
48     private final ConfigFileObserver fileObserver;
49     private File mFile;
50
51     private HtDevicemanagerConfiguration(String filename) {
52
53         try {
54             this.mFile = new File(filename);
55             if (!this.mFile.exists()) {
56                 if (!this.mFile.createNewFile()) {
57                     LOG.error("Can not create file {}", filename);
58                 }
59             }
60             if (mConfig == null) {
61                 mConfig = new IniConfigurationFile(this.mFile);
62             }
63             mConfig.load();
64
65         } catch (ConfigurationException e) {
66             LOG.error("Problem loading config values: {}", e.getMessage());
67         } catch (IOException e) {
68             LOG.error("Problem loading config file {} : {}", filename, e.getMessage());
69         }
70
71         this.fileObserver = new ConfigFileObserver(filename, FILE_POLL_INTERVAL_MS, mConfig);
72         this.fileObserver.start();
73     }
74
75
76     public static HtDevicemanagerConfiguration getConfiguration() {
77         if (mObj == null) {
78             mObj = new HtDevicemanagerConfiguration(CONFIGURATIONFILE);
79         }
80         return mObj;
81     }
82     public static HtDevicemanagerConfiguration getTestConfiguration() {
83         return getTestConfiguration(CONFIGURATIONTESTFILE,false);
84     }
85    
86     public static HtDevicemanagerConfiguration getTestConfiguration(boolean newInstance) {
87         return getTestConfiguration(CONFIGURATIONTESTFILE,newInstance);
88     }
89     public static HtDevicemanagerConfiguration getTestConfiguration(String filename) {
90         return getTestConfiguration(filename,false);
91     }
92     public static HtDevicemanagerConfiguration getTestConfiguration(final String filename,boolean newInstance) {
93         if (mObjTest == null || newInstance) {
94             mObjTest = new HtDevicemanagerConfiguration(filename);
95         }
96         return mObjTest;
97     }
98
99     public IniConfigurationFile getMConfig() {
100         return mConfig;
101     }
102
103     public void registerConfigChangedListener(IConfigChangedListener l) {
104         this.fileObserver.registerConfigChangedListener(l);
105     }
106
107     public void unregisterConfigChangedListener(IConfigChangedListener l) {
108         this.fileObserver.unregisterConfigChangedListener(l);
109     }
110
111     @Override
112     protected void finalize() throws Throwable {
113         if (this.fileObserver != null) {
114             this.fileObserver.interrupt();
115         }
116         super.finalize();
117     }
118
119     public DcaeConfig getDcae() {
120         return DcaeConfig.getDcae(mConfig, this.subconfigHandler);
121     }
122
123     public AaiConfig getAai() {
124         return AaiConfig.getAai(mConfig, this.subconfigHandler);
125     }
126
127     public EsConfig getEs() {
128         return EsConfig.getEs(mConfig, this.subconfigHandler);
129     }
130
131     public PmConfig getPm() {
132         return PmConfig.getPm(mConfig, this.subconfigHandler);
133     }
134
135     public ToggleAlarmConfig getToggleAlarm() {
136         return ToggleAlarmConfig.getTa(mConfig, this.subconfigHandler);
137     }
138
139     public ISubConfigHandler getSubconfigHandler() {
140         return subconfigHandler;
141     }
142
143     public static void clear() {
144         mObj = null;
145         mObjTest = null;
146         DcaeConfig.clear();
147         AaiConfig.clear();
148         EsConfig.clear();
149         PmConfig.clear();
150         ToggleAlarmConfig.clear();
151     }
152 }