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