Fix logging and formatting
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / beans / EgressRoute.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 \r
25 package org.onap.dmaap.datarouter.provisioning.beans;\r
26 \r
27 import java.sql.Connection;\r
28 import java.sql.PreparedStatement;\r
29 import java.sql.ResultSet;\r
30 import java.sql.SQLException;\r
31 import java.sql.Statement;\r
32 import java.util.Objects;\r
33 import java.util.SortedSet;\r
34 import java.util.TreeSet;\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  * The representation of one route in the Egress Route Table.\r
42  *\r
43  * @author Robert P. Eby\r
44  * @version $Id: EgressRoute.java,v 1.3 2013/12/16 20:30:23 eby Exp $\r
45  */\r
46 public class EgressRoute extends NodeClass implements Comparable<EgressRoute> {\r
47 \r
48     private static Logger intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");\r
49     private final int subid;\r
50     private final int nodeid;\r
51 \r
52     /**\r
53      * Get a set of all Egress Routes in the DB.  The set is sorted according to the natural sorting order of the routes\r
54      * (based on the subscription ID in each route).\r
55      *\r
56      * @return the sorted set\r
57      */\r
58     public static SortedSet<EgressRoute> getAllEgressRoutes() {\r
59         SortedSet<EgressRoute> set = new TreeSet<EgressRoute>();\r
60         try {\r
61             DB db = new DB();\r
62             @SuppressWarnings("resource")\r
63             Connection conn = db.getConnection();\r
64             try (Statement stmt = conn.createStatement()) {\r
65                 try (ResultSet rs = stmt.executeQuery("select SUBID, NODEID from EGRESS_ROUTES")) {\r
66                     while (rs.next()) {\r
67                         int subid = rs.getInt("SUBID");\r
68                         int nodeid = rs.getInt("NODEID");\r
69                         set.add(new EgressRoute(subid, nodeid));\r
70                     }\r
71                 }\r
72             }\r
73 \r
74             db.release(conn);\r
75         } catch (SQLException e) {\r
76             intlogger.error("SQLException " + e.getMessage());\r
77         }\r
78         return set;\r
79     }\r
80 \r
81     /**\r
82      * Get a single Egress Route for the subscription <i>sub</i>.\r
83      *\r
84      * @param sub the subscription to lookup\r
85      * @return an EgressRoute, or null if there is no route for this subscription\r
86      */\r
87     public static EgressRoute getEgressRoute(int sub) {\r
88         EgressRoute v = null;\r
89         PreparedStatement ps = null;\r
90         try {\r
91             DB db = new DB();\r
92             @SuppressWarnings("resource")\r
93             Connection conn = db.getConnection();\r
94             String sql = "select NODEID from EGRESS_ROUTES where SUBID = ?";\r
95             ps = conn.prepareStatement(sql);\r
96             ps.setInt(1, sub);\r
97             try (ResultSet rs = ps.executeQuery()) {\r
98                 if (rs.next()) {\r
99                     int node = rs.getInt("NODEID");\r
100                     v = new EgressRoute(sub, node);\r
101                 }\r
102             }\r
103             ps.close();\r
104             db.release(conn);\r
105         } catch (SQLException e) {\r
106             intlogger.error("SQLException " + e.getMessage());\r
107         } finally {\r
108             try {\r
109                 if (ps != null) {\r
110                     ps.close();\r
111                 }\r
112             } catch (SQLException e) {\r
113                 intlogger.error("SQLException " + e.getMessage());\r
114             }\r
115         }\r
116         return v;\r
117     }\r
118 \r
119     public EgressRoute(int subid, int nodeid) throws IllegalArgumentException {\r
120         this.subid = subid;\r
121         this.nodeid = nodeid;\r
122 // Note: unlike for Feeds, it subscriptions can be removed from the tables, so it is\r
123 // possible that an orphan ERT entry can exist if a sub is removed.\r
124 //        if (Subscription.getSubscriptionById(subid) == null)\r
125 //            throw new IllegalArgumentException("No such subscription: "+subid);\r
126     }\r
127 \r
128     public EgressRoute(int subid, String node) throws IllegalArgumentException {\r
129         this(subid, lookupNodeName(node));\r
130     }\r
131 \r
132     @Override\r
133     public boolean doDelete(Connection c) {\r
134         boolean rv = true;\r
135         PreparedStatement ps = null;\r
136         try {\r
137             String sql = "delete from EGRESS_ROUTES where SUBID = ?";\r
138             ps = c.prepareStatement(sql);\r
139             ps.setInt(1, subid);\r
140             ps.execute();\r
141         } catch (SQLException e) {\r
142             rv = false;\r
143             intlogger.warn("PROV0007 doDelete: " + e.getMessage());\r
144             intlogger.error("SQLException " + e.getMessage());\r
145         } finally {\r
146             try {\r
147                 if (ps != null) {\r
148                     ps.close();\r
149                 }\r
150             } catch (SQLException e) {\r
151                 intlogger.error("SQLException " + e.getMessage());\r
152             }\r
153         }\r
154         return rv;\r
155     }\r
156 \r
157     @Override\r
158     public boolean doInsert(Connection c) {\r
159         boolean rv = false;\r
160         PreparedStatement ps = null;\r
161         try {\r
162             // Create the NETWORK_ROUTES row\r
163             String sql = "insert into EGRESS_ROUTES (SUBID, NODEID) values (?, ?)";\r
164             ps = c.prepareStatement(sql);\r
165             ps.setInt(1, this.subid);\r
166             ps.setInt(2, this.nodeid);\r
167             ps.execute();\r
168             ps.close();\r
169             rv = true;\r
170         } catch (SQLException e) {\r
171             intlogger.warn("PROV0005 doInsert: " + e.getMessage());\r
172         } finally {\r
173             try {\r
174                 if (ps != null) {\r
175                     ps.close();\r
176                 }\r
177             } catch (SQLException e) {\r
178                 intlogger.error("SQLException " + e.getMessage());\r
179             }\r
180         }\r
181         return rv;\r
182     }\r
183 \r
184     @Override\r
185     public boolean doUpdate(Connection c) {\r
186         boolean rv = true;\r
187         PreparedStatement ps = null;\r
188         try {\r
189             String sql = "update EGRESS_ROUTES set NODEID = ? where SUBID = ?";\r
190             ps = c.prepareStatement(sql);\r
191             ps.setInt(1, nodeid);\r
192             ps.setInt(2, subid);\r
193             ps.executeUpdate();\r
194         } catch (SQLException e) {\r
195             rv = false;\r
196             intlogger.warn("PROV0006 doUpdate: " + e.getMessage());\r
197         } finally {\r
198             try {\r
199                 if (ps != null) {\r
200                     ps.close();\r
201                 }\r
202             } catch (SQLException e) {\r
203                 intlogger.error("SQLException " + e.getMessage());\r
204             }\r
205         }\r
206         return rv;\r
207     }\r
208 \r
209     @Override\r
210     public JSONObject asJSONObject() {\r
211         JSONObject jo = new JSONObject();\r
212         jo.put("" + subid, lookupNodeID(nodeid));\r
213         return jo;\r
214     }\r
215 \r
216     @Override\r
217     public String getKey() {\r
218         return "" + subid;\r
219     }\r
220 \r
221     @Override\r
222     public boolean equals(Object obj) {\r
223         if (!(obj instanceof EgressRoute)) {\r
224             return false;\r
225         }\r
226         EgressRoute on = (EgressRoute) obj;\r
227         return (subid == on.subid) && (nodeid == on.nodeid);\r
228     }\r
229 \r
230     @Override\r
231     public int compareTo(EgressRoute o) {\r
232         return this.subid - o.subid;\r
233     }\r
234 \r
235     @Override\r
236     public String toString() {\r
237         return String.format("EGRESS: sub=%d, node=%d", subid, nodeid);\r
238     }\r
239 \r
240     @Override\r
241     public int hashCode() {\r
242         return Objects.hash(subid, nodeid);\r
243     }\r
244 }\r