Update project structure to org.onap
[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.ArrayList;\r
32 import java.util.Collection;\r
33 import java.util.HashMap;\r
34 import java.util.Map;\r
35 \r
36 import org.apache.log4j.Logger;\r
37 import org.json.JSONObject;\r
38 import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
39 \r
40 /**\r
41  * Methods to provide access to Provisioning parameters in the DB.\r
42  * This class also provides constants of the standard parameters used by the Data Router.\r
43  * @author Robert Eby\r
44  * @version $Id: Parameters.java,v 1.11 2014/03/12 19:45:41 eby Exp $\r
45  */\r
46 public class Parameters extends Syncable {\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 NODES                        = "NODES";\r
61         public static final String ACTIVE_POD                   = "ACTIVE_POD";\r
62         public static final String STANDBY_POD                  = "STANDBY_POD";\r
63         public static final String LOGROLL_INTERVAL             = "LOGROLL_INTERVAL";\r
64         public static final String DELIVERY_INIT_RETRY_INTERVAL = "DELIVERY_INIT_RETRY_INTERVAL";\r
65         public static final String DELIVERY_MAX_RETRY_INTERVAL  = "DELIVERY_MAX_RETRY_INTERVAL";\r
66         public static final String DELIVERY_RETRY_RATIO         = "DELIVERY_RETRY_RATIO";\r
67         public static final String DELIVERY_MAX_AGE             = "DELIVERY_MAX_AGE";\r
68         public static final String THROTTLE_FILTER              = "THROTTLE_FILTER";\r
69         public static final String STATIC_ROUTING_NODES         = "STATIC_ROUTING_NODES"; //Adding new param for static Routing - Rally:US664862-1610\r
70 \r
71         private static Logger intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");\r
72 \r
73         private String keyname;\r
74         private String value;\r
75 \r
76         /**\r
77          * Get all parameters in the DB as a Map.\r
78          * @return the Map of keynames/values from the DB.\r
79          */\r
80         public static Map<String,String> getParameters() {\r
81                 Map<String,String> props = new HashMap<String,String>();\r
82                 for (Parameters p : getParameterCollection()) {\r
83                         props.put(p.getKeyname(), p.getValue());\r
84                 }\r
85                 return props;\r
86         }\r
87         public static Collection<Parameters> getParameterCollection() {\r
88                 Collection<Parameters> coll = new ArrayList<Parameters>();\r
89                 try {\r
90                         DB db = new DB();\r
91                         @SuppressWarnings("resource")\r
92                         Connection conn = db.getConnection();\r
93                         Statement  stmt = conn.createStatement();\r
94                         String sql = "select * from PARAMETERS";\r
95                         ResultSet rs = stmt.executeQuery(sql);\r
96                         while (rs.next()) {\r
97                                 Parameters p = new Parameters(rs);\r
98                                 coll.add(p);\r
99                         }\r
100                         rs.close();\r
101                         stmt.close();\r
102                         db.release(conn);\r
103                 } catch (SQLException e) {\r
104                         e.printStackTrace();\r
105                 }\r
106                 return coll;\r
107         }\r
108         /**\r
109          * Get a specific parameter value from the DB.\r
110          * @param k the key to lookup\r
111          * @return the value, or null if non-existant\r
112          */\r
113         public static Parameters getParameter(String k) {\r
114                 Parameters v = null;\r
115                 try {\r
116                         DB db = new DB();\r
117                         @SuppressWarnings("resource")\r
118                         Connection conn = db.getConnection();\r
119                         Statement  stmt = conn.createStatement();\r
120                         String sql = "select KEYNAME, VALUE from PARAMETERS where KEYNAME = \"" + k + "\"";\r
121                         ResultSet rs = stmt.executeQuery(sql);\r
122                         if (rs.next()) {\r
123                                 v = new Parameters(rs);\r
124                         }\r
125                         rs.close();\r
126                         stmt.close();\r
127                         db.release(conn);\r
128                 } catch (SQLException e) {\r
129                         e.printStackTrace();\r
130                 }\r
131                 return v;\r
132         }\r
133 \r
134         public Parameters() {\r
135                 this("", "");\r
136         }\r
137         public Parameters(String k, String v) {\r
138                 this.keyname = k;\r
139                 this.value   = v;\r
140         }\r
141         public Parameters(ResultSet rs) throws SQLException {\r
142                 this.keyname = rs.getString("KEYNAME");\r
143                 this.value   = rs.getString("VALUE");\r
144         }\r
145         public String getKeyname() {\r
146                 return keyname;\r
147         }\r
148         public void setKeyname(String keyname) {\r
149                 this.keyname = keyname;\r
150         }\r
151         public String getValue() {\r
152                 return value;\r
153         }\r
154         public void setValue(String value) {\r
155                 this.value = value;\r
156         }\r
157         @Override\r
158         public JSONObject asJSONObject() {\r
159                 JSONObject jo = new JSONObject();\r
160                 jo.put("keyname", keyname);\r
161                 jo.put("value", value);\r
162                 return jo;\r
163         }\r
164         @Override\r
165         public boolean doInsert(Connection c) {\r
166                 boolean rv = true;\r
167                 PreparedStatement ps = null;\r
168                 try {\r
169                         // Create the SUBSCRIPTIONS row\r
170                         String sql = "insert into PARAMETERS values (?, ?)";\r
171                         ps = c.prepareStatement(sql);\r
172                         ps.setString(1, getKeyname());\r
173                         ps.setString(2, getValue());\r
174                         ps.execute();\r
175                 } catch (SQLException e) {\r
176                         rv = false;\r
177                         intlogger.warn("PROV0005 doInsert: "+e.getMessage());\r
178                         e.printStackTrace();\r
179                 } finally {\r
180                         try {\r
181                                 ps.close();\r
182                         } catch (SQLException e) {\r
183                                 e.printStackTrace();\r
184                         }\r
185                 }\r
186                 return rv;\r
187         }\r
188         @Override\r
189         public boolean doUpdate(Connection c) {\r
190                 boolean rv = true;\r
191                 PreparedStatement ps = null;\r
192                 try {\r
193                         // Update the PARAMETERS row\r
194                         String sql = "update PARAMETERS set VALUE = ? where KEYNAME = ?";\r
195                         ps = c.prepareStatement(sql);\r
196                         ps.setString(1, getValue());\r
197                         ps.setString(2, getKeyname());\r
198                         ps.executeUpdate();\r
199                 } catch (SQLException e) {\r
200                         rv = false;\r
201                         intlogger.warn("PROV0006 doUpdate: "+e.getMessage());\r
202                         e.printStackTrace();\r
203                 } finally {\r
204                         try {\r
205                                 ps.close();\r
206                         } catch (SQLException e) {\r
207                                 e.printStackTrace();\r
208                         }\r
209                 }\r
210                 return rv;\r
211         }\r
212         @Override\r
213         public boolean doDelete(Connection c) {\r
214                 boolean rv = true;\r
215                 PreparedStatement ps = null;\r
216                 try {\r
217                         // Create the SUBSCRIPTIONS row\r
218                         String sql = "delete from PARAMETERS where KEYNAME = ?";\r
219                         ps = c.prepareStatement(sql);\r
220                         ps.setString(1, getKeyname());\r
221                         ps.execute();\r
222                 } catch (SQLException e) {\r
223                         rv = false;\r
224                         intlogger.warn("PROV0007 doDelete: "+e.getMessage());\r
225                         e.printStackTrace();\r
226                 } finally {\r
227                         try {\r
228                                 ps.close();\r
229                         } catch (SQLException e) {\r
230                                 e.printStackTrace();\r
231                         }\r
232                 }\r
233                 return rv;\r
234         }\r
235         @Override\r
236         public String getKey() {\r
237                 return getKeyname();\r
238         }\r
239         @Override\r
240         public boolean equals(Object obj) {\r
241                 if (!(obj instanceof Parameters))\r
242                         return false;\r
243                 Parameters of = (Parameters) obj;\r
244                 if (!keyname.equals(of.keyname))\r
245                         return false;\r
246                 if (!value.equals(of.value))\r
247                         return false;\r
248                 return true;\r
249         }\r
250 \r
251         @Override\r
252         public String toString() {\r
253                 return "PARAM: keyname=" + keyname + ", value=" + value;\r
254         }\r
255 }\r
256 \r