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