357444e4de0d49bb277cce47ebbeb2456c81320d
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / beans / Parameters.java
1 /*******************************************************************************\r
2  * ============LICENSE_START==================================================\r
3  * * org.onap.dmaap\r
4  * * ===========================================================================\r
5  * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * * ===========================================================================\r
7  * * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * * you may not use this file except in compliance with the License.\r
9  * * You may obtain a copy of the License at\r
10  * *\r
11  *  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * *\r
13  *  * Unless required by applicable law or agreed to in writing, software\r
14  * * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * * See the License for the specific language governing permissions and\r
17  * * limitations under the License.\r
18  * * ============LICENSE_END====================================================\r
19  * *\r
20  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
21  * *\r
22  ******************************************************************************/\r
23 \r
24 package org.onap.dmaap.datarouter.provisioning.beans;\r
25 \r
26 import java.sql.Connection;\r
27 import java.sql.PreparedStatement;\r
28 import java.sql.ResultSet;\r
29 import java.sql.SQLException;\r
30 import java.sql.Statement;\r
31 import java.util.*;\r
32 \r
33 import com.att.eelf.configuration.EELFLogger;\r
34 import com.att.eelf.configuration.EELFManager;\r
35 import org.json.JSONObject;\r
36 import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
37 \r
38 /**\r
39  * Methods to provide access to Provisioning parameters in the DB. This class also provides constants of the standard\r
40  * parameters used by the Data Router.\r
41  *\r
42  * @author Robert Eby\r
43  * @version $Id: Parameters.java,v 1.11 2014/03/12 19:45:41 eby Exp $\r
44  */\r
45 public class Parameters extends Syncable {\r
46 \r
47     public static final String PROV_REQUIRE_SECURE = "PROV_REQUIRE_SECURE";\r
48     public static final String PROV_REQUIRE_CERT = "PROV_REQUIRE_CERT";\r
49     public static final String PROV_AUTH_ADDRESSES = "PROV_AUTH_ADDRESSES";\r
50     public static final String PROV_AUTH_SUBJECTS = "PROV_AUTH_SUBJECTS";\r
51     public static final String PROV_NAME = "PROV_NAME";\r
52     public static final String PROV_ACTIVE_NAME = "PROV_ACTIVE_NAME";\r
53     public static final String PROV_DOMAIN = "PROV_DOMAIN";\r
54     public static final String PROV_MAXFEED_COUNT = "PROV_MAXFEED_COUNT";\r
55     public static final String PROV_MAXSUB_COUNT = "PROV_MAXSUB_COUNT";\r
56     public static final String PROV_POKETIMER1 = "PROV_POKETIMER1";\r
57     public static final String PROV_POKETIMER2 = "PROV_POKETIMER2";\r
58     public static final String PROV_SPECIAL_SUBNET = "PROV_SPECIAL_SUBNET";\r
59     public static final String PROV_LOG_RETENTION = "PROV_LOG_RETENTION";\r
60     public static final String DEFAULT_LOG_RETENTION = "DEFAULT_LOG_RETENTION";\r
61     public static final String NODES = "NODES";\r
62     public static final String ACTIVE_POD = "ACTIVE_POD";\r
63     public static final String STANDBY_POD = "STANDBY_POD";\r
64     public static final String LOGROLL_INTERVAL = "LOGROLL_INTERVAL";\r
65     public static final String DELIVERY_INIT_RETRY_INTERVAL = "DELIVERY_INIT_RETRY_INTERVAL";\r
66     public static final String DELIVERY_MAX_RETRY_INTERVAL = "DELIVERY_MAX_RETRY_INTERVAL";\r
67     public static final String DELIVERY_RETRY_RATIO = "DELIVERY_RETRY_RATIO";\r
68     public static final String DELIVERY_MAX_AGE = "DELIVERY_MAX_AGE";\r
69     public static final String THROTTLE_FILTER = "THROTTLE_FILTER";\r
70     public static final String STATIC_ROUTING_NODES = "STATIC_ROUTING_NODES"; //Adding new param for static Routing - Rally:US664862-1610\r
71 \r
72     private static EELFLogger intlogger = EELFManager.getInstance().getLogger("InternalLog");\r
73     private static final String SQLEXCEPTION = "SQLException: ";\r
74 \r
75     private String keyname;\r
76     private String value;\r
77 \r
78     /**\r
79      * Get all parameters in the DB as a Map.\r
80      *\r
81      * @return the Map of keynames/values from the DB.\r
82      */\r
83     public static Map<String, String> getParameters() {\r
84         Map<String, String> props = new HashMap<String, String>();\r
85         for (Parameters p : getParameterCollection()) {\r
86             props.put(p.getKeyname(), p.getValue());\r
87         }\r
88         return props;\r
89     }\r
90 \r
91     public static Collection<Parameters> getParameterCollection() {\r
92         Collection<Parameters> coll = new ArrayList<Parameters>();\r
93         try {\r
94             DB db = new DB();\r
95             @SuppressWarnings("resource")\r
96             Connection conn = db.getConnection();\r
97             try (Statement stmt = conn.createStatement()) {\r
98                 String sql = "select * from PARAMETERS";\r
99                 try (ResultSet rs = stmt.executeQuery(sql)) {\r
100                     while (rs.next()) {\r
101                         Parameters p = new Parameters(rs);\r
102                         coll.add(p);\r
103                     }\r
104                 }\r
105             }\r
106             db.release(conn);\r
107         } catch (SQLException e) {\r
108             intlogger.error(SQLEXCEPTION + e.getMessage());\r
109         }\r
110         return coll;\r
111     }\r
112 \r
113     /**\r
114      * Get a specific parameter value from the DB.\r
115      *\r
116      * @param k the key to lookup\r
117      * @return the value, or null if non-existant\r
118      */\r
119     public static Parameters getParameter(String k) {\r
120         Parameters v = null;\r
121         try {\r
122             DB db = new DB();\r
123             @SuppressWarnings("resource")\r
124             Connection conn = db.getConnection();\r
125             try (PreparedStatement stmt = conn\r
126                     .prepareStatement("select KEYNAME, VALUE from PARAMETERS where KEYNAME = ?")) {\r
127                 stmt.setString(1, k);\r
128                 try (ResultSet rs = stmt.executeQuery()) {\r
129                     if (rs.next()) {\r
130                         v = new Parameters(rs);\r
131                     }\r
132                 }\r
133             }\r
134             db.release(conn);\r
135         } catch (SQLException e) {\r
136             intlogger.error(SQLEXCEPTION + e.getMessage());\r
137         }\r
138         return v;\r
139     }\r
140 \r
141     public Parameters() {\r
142         this("", "");\r
143     }\r
144 \r
145     public Parameters(String k, String v) {\r
146         this.keyname = k;\r
147         this.value = v;\r
148     }\r
149 \r
150     public Parameters(ResultSet rs) throws SQLException {\r
151         this.keyname = rs.getString("KEYNAME");\r
152         this.value = rs.getString("VALUE");\r
153     }\r
154 \r
155     public String getKeyname() {\r
156         return keyname;\r
157     }\r
158 \r
159     public void setKeyname(String keyname) {\r
160         this.keyname = keyname;\r
161     }\r
162 \r
163     public String getValue() {\r
164         return value;\r
165     }\r
166 \r
167     public void setValue(String value) {\r
168         this.value = value;\r
169     }\r
170 \r
171     @Override\r
172     public JSONObject asJSONObject() {\r
173         JSONObject jo = new JSONObject();\r
174         jo.put("keyname", keyname);\r
175         jo.put("value", value);\r
176         return jo;\r
177     }\r
178 \r
179     @Override\r
180     public boolean doInsert(Connection c) {\r
181         boolean rv = true;\r
182         PreparedStatement ps = null;\r
183         try {\r
184             // Create the SUBSCRIPTIONS row\r
185             String sql = "insert into PARAMETERS values (?, ?)";\r
186             ps = c.prepareStatement(sql);\r
187             ps.setString(1, getKeyname());\r
188             ps.setString(2, getValue());\r
189             ps.execute();\r
190         } catch (SQLException e) {\r
191             rv = false;\r
192             intlogger.warn("PROV0005 doInsert: " + e.getMessage(), e);\r
193         } finally {\r
194             try {\r
195                 if (ps != null) {\r
196                     ps.close();\r
197                 }\r
198             } catch (SQLException e) {\r
199                 intlogger.error(SQLEXCEPTION + e.getMessage());\r
200             }\r
201         }\r
202         return rv;\r
203     }\r
204 \r
205     @Override\r
206     public boolean doUpdate(Connection c) {\r
207         boolean rv = true;\r
208         PreparedStatement ps = null;\r
209         try {\r
210             // Update the PARAMETERS row\r
211             String sql = "update PARAMETERS set VALUE = ? where KEYNAME = ?";\r
212             ps = c.prepareStatement(sql);\r
213             ps.setString(1, getValue());\r
214             ps.setString(2, getKeyname());\r
215             ps.executeUpdate();\r
216         } catch (SQLException e) {\r
217             rv = false;\r
218             intlogger.warn("PROV0006 doUpdate: " + e.getMessage(),e);\r
219         } finally {\r
220             try {\r
221                 if (ps != null) {\r
222                     ps.close();\r
223                 }\r
224             } catch (SQLException e) {\r
225                 intlogger.error(SQLEXCEPTION + e.getMessage(), e);\r
226             }\r
227         }\r
228         return rv;\r
229     }\r
230 \r
231     @Override\r
232     public boolean doDelete(Connection c) {\r
233         boolean rv = true;\r
234         PreparedStatement ps = null;\r
235         try {\r
236             // Create the SUBSCRIPTIONS row\r
237             String sql = "delete from PARAMETERS where KEYNAME = ?";\r
238             ps = c.prepareStatement(sql);\r
239             ps.setString(1, getKeyname());\r
240             ps.execute();\r
241         } catch (SQLException e) {\r
242             rv = false;\r
243             intlogger.warn("PROV0007 doDelete: " + e.getMessage(), e);\r
244         } finally {\r
245             try {\r
246                 if (ps != null) {\r
247                     ps.close();\r
248                 }\r
249             } catch (SQLException e) {\r
250                 intlogger.error(SQLEXCEPTION + e.getMessage(), e);\r
251             }\r
252         }\r
253         return rv;\r
254     }\r
255 \r
256     @Override\r
257     public String getKey() {\r
258         return getKeyname();\r
259     }\r
260 \r
261     @Override\r
262     public boolean equals(Object obj) {\r
263         if (!(obj instanceof Parameters)) {\r
264             return false;\r
265         }\r
266         Parameters of = (Parameters) obj;\r
267         if (!keyname.equals(of.keyname)) {\r
268             return false;\r
269         }\r
270         if (!value.equals(of.value)) {\r
271             return false;\r
272         }\r
273         return true;\r
274     }\r
275 \r
276     @Override\r
277     public int hashCode() {\r
278         return Objects.hash(keyname, value);\r
279     }\r
280 \r
281     @Override\r
282     public String toString() {\r
283         return "PARAM: keyname=" + keyname + ", value=" + value;\r
284     }\r
285 }\r
286 \r