1 /*******************************************************************************
\r
2 * ============LICENSE_START==================================================
\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
11 * * http://www.apache.org/licenses/LICENSE-2.0
\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
20 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
\r
22 ******************************************************************************/
\r
25 package org.onap.dmaap.datarouter.provisioning.beans;
\r
27 import com.att.eelf.configuration.EELFLogger;
\r
28 import com.att.eelf.configuration.EELFManager;
\r
29 import java.sql.Connection;
\r
30 import java.sql.PreparedStatement;
\r
31 import java.sql.ResultSet;
\r
32 import java.sql.SQLException;
\r
33 import java.sql.Statement;
\r
34 import java.util.Objects;
\r
35 import java.util.SortedSet;
\r
36 import java.util.TreeSet;
\r
37 import org.json.JSONObject;
\r
38 import org.onap.dmaap.datarouter.provisioning.utils.DB;
\r
41 * The representation of one route in the Network Route Table.
\r
43 * @author Robert P. Eby
\r
44 * @version $Id: NetworkRoute.java,v 1.2 2013/12/16 20:30:23 eby Exp $
\r
46 public class NetworkRoute extends NodeClass implements Comparable<NetworkRoute> {
\r
48 private static EELFLogger intlogger = EELFManager.getInstance().getLogger("InternalLog");
\r
49 private static final String SQLEXCEPTION = "SQLException: ";
\r
50 private final int fromnode;
\r
51 private final int tonode;
\r
52 private final int vianode;
\r
55 * NetworkRoute Constructor.
\r
56 * @param fromnode node source
\r
57 * @param tonode node destination
\r
59 public NetworkRoute(String fromnode, String tonode) {
\r
60 this.fromnode = lookupNodeName(fromnode);
\r
61 this.tonode = lookupNodeName(tonode);
\r
66 * NetworkRoute Constructor.
\r
67 * @param fromnode node source
\r
68 * @param tonode node destination
\r
69 * @param vianode via node
\r
71 public NetworkRoute(String fromnode, String tonode, String vianode) {
\r
72 this.fromnode = lookupNodeName(fromnode);
\r
73 this.tonode = lookupNodeName(tonode);
\r
74 this.vianode = lookupNodeName(vianode);
\r
78 * NetworkRoute Constructor.
\r
79 * @param jo JSONObject of attributes
\r
81 public NetworkRoute(JSONObject jo) {
\r
82 this.fromnode = lookupNodeName(jo.getString("from"));
\r
83 this.tonode = lookupNodeName(jo.getString("to"));
\r
84 this.vianode = lookupNodeName(jo.getString("via"));
\r
88 * NetworkRoute Constructor.
\r
89 * @param fromnode integer source node
\r
90 * @param tonode integer destination node
\r
91 * @param vianode integer via node
\r
93 private NetworkRoute(int fromnode, int tonode, int vianode) {
\r
94 this.fromnode = fromnode;
\r
95 this.tonode = tonode;
\r
96 this.vianode = vianode;
\r
100 * Get a set of all Network Routes in the DB. The set is sorted according to the natural sorting order of the
\r
101 * routes (based on the from and to node names in each route).
\r
103 * @return the sorted set
\r
105 public static SortedSet<NetworkRoute> getAllNetworkRoutes() {
\r
106 SortedSet<NetworkRoute> set = new TreeSet<>();
\r
109 @SuppressWarnings("resource")
\r
110 Connection conn = db.getConnection();
\r
111 try (Statement stmt = conn.createStatement()) {
\r
112 try (ResultSet rs = stmt.executeQuery("select FROMNODE, TONODE, VIANODE from NETWORK_ROUTES")) {
\r
113 addNetworkRouteToSet(set, rs);
\r
118 } catch (SQLException e) {
\r
119 intlogger.error(SQLEXCEPTION + e.getMessage(), e);
\r
124 private static void addNetworkRouteToSet(SortedSet<NetworkRoute> set, ResultSet rs) throws SQLException {
\r
125 while (rs.next()) {
\r
126 int fromnode = rs.getInt("FROMNODE");
\r
127 int tonode = rs.getInt("TONODE");
\r
128 int vianode = rs.getInt("VIANODE");
\r
129 set.add(new NetworkRoute(fromnode, tonode, vianode));
\r
133 public int getFromnode() {
\r
137 public int getTonode() {
\r
141 public int getVianode() {
\r
146 public boolean doDelete(Connection conn) {
\r
148 String sql = "delete from NETWORK_ROUTES where FROMNODE = ? AND TONODE = ?";
\r
149 try (PreparedStatement ps = conn.prepareStatement(sql)) {
\r
150 ps.setInt(1, fromnode);
\r
151 ps.setInt(2, tonode);
\r
153 } catch (SQLException e) {
\r
155 intlogger.warn("PROV0007 doDelete: " + e.getMessage(), e);
\r
161 public boolean doInsert(Connection conn) {
\r
162 boolean rv = false;
\r
163 String sql = "insert into NETWORK_ROUTES (FROMNODE, TONODE, VIANODE) values (?, ?, ?)";
\r
164 if (this.vianode >= 0) {
\r
165 try (PreparedStatement ps = conn.prepareStatement(sql)) {
\r
166 // Create the NETWORK_ROUTES row
\r
167 ps.setInt(1, this.fromnode);
\r
168 ps.setInt(2, this.tonode);
\r
169 ps.setInt(3, this.vianode);
\r
172 } catch (SQLException e) {
\r
173 intlogger.warn("PROV0005 doInsert: " + e.getMessage(), e);
\r
180 public boolean doUpdate(Connection conn) {
\r
182 String sql = "update NETWORK_ROUTES set VIANODE = ? where FROMNODE = ? and TONODE = ?";
\r
183 try (PreparedStatement ps = conn.prepareStatement(sql)) {
\r
184 ps.setInt(1, vianode);
\r
185 ps.setInt(2, fromnode);
\r
186 ps.setInt(3, tonode);
\r
187 ps.executeUpdate();
\r
188 } catch (SQLException e) {
\r
190 intlogger.warn("PROV0006 doUpdate: " + e.getMessage(), e);
\r
196 public JSONObject asJSONObject() {
\r
197 JSONObject jo = new JSONObject();
\r
198 jo.put("from", lookupNodeID(fromnode));
\r
199 jo.put("to", lookupNodeID(tonode));
\r
200 jo.put("via", lookupNodeID(vianode));
\r
205 public String getKey() {
\r
206 return lookupNodeID(fromnode) + ":" + lookupNodeID(tonode);
\r
210 public boolean equals(Object obj) {
\r
211 if (!(obj instanceof NetworkRoute)) {
\r
214 NetworkRoute on = (NetworkRoute) obj;
\r
215 return (fromnode == on.fromnode) && (tonode == on.tonode) && (vianode == on.vianode);
\r
219 public int hashCode() {
\r
220 return Objects.hash(fromnode, tonode, vianode);
\r
224 public int compareTo(NetworkRoute nr) {
\r
225 if (this.fromnode == nr.fromnode) {
\r
226 if (this.tonode == nr.tonode) {
\r
227 return this.vianode - nr.vianode;
\r
229 return this.tonode - nr.tonode;
\r
231 return this.fromnode - nr.fromnode;
\r
235 public String toString() {
\r
236 return String.format("NETWORK: from=%d, to=%d, via=%d", fromnode, tonode, vianode);
\r