Java tutorial
/* * Copyright 2015 Okinawa Open Laboratory, General Incorporated Association * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.okinawaopenlabs.orientdb.client; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.NumberUtils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx; import com.orientechnologies.orient.core.record.impl.ODocument; import static org.okinawaopenlabs.constants.ErrorMessage.*; import static org.okinawaopenlabs.constants.OfpmDefinition.ENABLE_DEVICE_TYPES; import static org.okinawaopenlabs.constants.OfpmDefinition.LEGACY_DEVICE_TYPES; import static org.okinawaopenlabs.constants.OfpmDefinition.STATUS_NOTFOUND; import static org.okinawaopenlabs.constants.OfpmDefinition.OPEN_FLOW_DEVICE_TYPES; import static org.okinawaopenlabs.constants.OfpmDefinition.STATUS_NOW_USED; import static org.okinawaopenlabs.constants.OrientDBDefinition.*; import org.okinawaopenlabs.ofpm.exception.ValidateException; import org.okinawaopenlabs.ofpm.json.device.DeviceInfo; import org.okinawaopenlabs.ofpm.json.device.OfcInfo; import org.okinawaopenlabs.ofpm.utils.OFPMUtils; import org.okinawaopenlabs.orientdb.utils.handlers.MapListHandler; public class DaoImpl implements Dao { private static final Logger logger = Logger.getLogger(DaoImpl.class); protected ConnectionUtils utils = null; protected ODatabaseDocumentTx database = null; protected List<ODocument> documents = null; // jdbc protected ConnectionUtilsJdbc utilsJdbc = null; public DaoImpl(ConnectionUtils utils) throws SQLException { if (logger.isTraceEnabled()) { logger.trace(String.format("DaoImpl(utils=%s) - start", utils)); } this.utils = utils; init(); if (logger.isTraceEnabled()) { logger.trace("DaoImpl() - end"); } } // jdbc public DaoImpl(ConnectionUtilsJdbc utils) { if (logger.isTraceEnabled()) { logger.trace(String.format("DaoImpl(utils=%s) - start", utils)); } this.utilsJdbc = utils; if (logger.isTraceEnabled()) { logger.trace("DaoImpl() - end"); } } // default constructor public DaoImpl() { if (logger.isTraceEnabled()) { logger.trace(String.format("DaoImpl() - start")); } if (logger.isTraceEnabled()) { logger.trace("DaoImpl() - end"); } } // connectionUtil setter public void setConnectionUtilsJdbc(ConnectionUtilsJdbc utils) { this.utilsJdbc = utils; } synchronized private void init() throws SQLException { if (logger.isTraceEnabled()) { logger.trace("init() - start"); } database = utils.getDatabase(); if (logger.isTraceEnabled()) { logger.trace("init() - end"); } } synchronized public void close() throws SQLException { if (logger.isTraceEnabled()) { logger.trace("close() - start"); } if (database != null && !database.isClosed()) { utils.close(database); } if (logger.isTraceEnabled()) { logger.trace("close() - end"); } } /* (non-Javadoc) * @see org.okinawaopenlabs.orientdb.client.Dao#getDeviceNameFromDatapathId(java.lang.String) */ @Override public String getDeviceNameFromDatapathId(Connection conn, String datapathId) throws SQLException { final String fname = "getDeviceNameFromDatapathId"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, datapathId=%s) - start", fname, conn, datapathId)); } String ret = null; try { // List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_DEVICENAME_FROM_DATAPATHID, // new MapListHandler(), datapathId); // if (records.size() <= 0) { // throw new Exception(String.format(NOT_FOUND, datapathId)); // } // ret = records.get(0).get("name").toString(); // return ret; List<Map<String, Object>> infoMapList = this.getNodeInfoList(conn); for (Map<String, Object> infoMap : infoMapList) { if (infoMap.containsKey("datapathId")) { if (datapathId.contentEquals((String) infoMap.get("datapathId"))) { return (String) infoMap.get("name"); } } } // not found. return null; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", ret)); } } } @Override public String getPortRidFromDeviceNamePortNumber(Connection conn, String deviceName, Integer portNumber) throws SQLException { final String fname = "getPortRidFromDeviceNamePortNumber"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(deviceName=%s, portNumber=%s) - start", fname, deviceName, portNumber)); } String ret = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_PORTRID_FROM_DEVICENAME_PORTNUMBER, new MapListHandler(), deviceName, portNumber); if (records.size() <= 0) { throw new Exception(String.format(NOT_FOUND, deviceName + "," + portNumber)); } ret = records.get(0).get("rid").toString(); return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", ret)); } } } @Override public List<Map<String, Map<String, Object>>> getDevicePortInfoSetFlowFromPortRid(Connection conn, String portRid) throws SQLException { final String fname = "getDevicePortInfoSetFlowFromPortRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(portRid=%s) - start", fname, portRid)); } List<Map<String, Map<String, Object>>> ret = new ArrayList<Map<String, Map<String, Object>>>(); try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_PATCH_INFO_FROM_PATCHWIRING_PORTRID, new MapListHandler(), portRid); if (records.size() <= 0) { throw new Exception(String.format(NOT_FOUND, portRid + ":wiring info")); } String inDeviceName = records.get(0).get("inDeviceName").toString(); String inPortName = records.get(0).get("inPortName").toString(); String outDeviceName = records.get(0).get("outDeviceName").toString(); String outPortName = records.get(0).get("outPortName").toString(); records = utilsJdbc.query(conn, SQL_GET_PATCH_INFO_FROM_PATCHWIRING_DEVICENAME_PORTNAME, new MapListHandler("out", "in", "parent"), inDeviceName, inPortName, outDeviceName, outPortName); if (records.size() != 3 && records.size() != 1) { throw new Exception(UNEXPECTED_ERROR); } Iterator<Map<String, Object>> it = records.iterator(); while (it.hasNext()) { Map<String, Object> record = it.next(); Map<String, Object> inPortInfo = getPortInfoFromPortRid(conn, record.get("in").toString()); Map<String, Object> outPortInfo = getPortInfoFromPortRid(conn, record.get("out").toString()); Map<String, Object> parentInfo = getDeviceInfoFromDeviceRid(conn, record.get("parent").toString()); Map<String, Map<String, Object>> tmp = new HashMap<String, Map<String, Object>>(); tmp.put("in", inPortInfo); tmp.put("out", outPortInfo); tmp.put("parent", parentInfo); ret.add(tmp); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public List<Map<String, Object>> getCableLinksFromDeviceName(Connection conn, String deviceName) throws SQLException { final String fname = "getCableLinks"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s) - start", fname, conn, deviceName)); } List<Map<String, Object>> maps = null; MapListHandler rhs = new MapListHandler("inDeviceName", "inPortName", "inPortNumber", "outDeviceName", "outPortName", "outPortNumber", "@rid.asString()", "band", "used"); try { maps = utilsJdbc.query(conn, SQL_GET_CABLE_LINKS, rhs, deviceName); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public List<Map<String, Object>> getPatchWiringsFromDeviceName(Connection conn, String deviceName) throws SQLException { final String fname = "getPatchWirings"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s) - start", fname, conn, deviceName)); } List<Map<String, Object>> maps = null; MapListHandler rhs = new MapListHandler("inDeviceName", "inPortName", "inPortNumber", "outDeviceName", "outPortName", "outPortNumber", "@rid.asString()", "band", "used"); try { maps = utilsJdbc.query(conn, SQL_GET_PATCH_WIRINGS_FROM_DEVICENAME, rhs, deviceName); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public List<Map<String, Object>> getLogicalLinksFromDeviceName(Connection conn, String deviceName) throws SQLException { final String fname = "getLogicalLinksFromDeviceName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s) - start", fname, conn, deviceName)); } List<Map<String, Object>> maps = null; MapListHandler rhs = new MapListHandler("inDeviceName", "inPortName", "outDeviceName", "outPortName"); try { maps = utilsJdbc.query(conn, SQL_GET_LOGICAL_LINKS_FROM_DEVICENAME, rhs, deviceName, deviceName); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public List<Map<String, Object>> getPatchWiringsFromDeviceNamePortName(Connection conn, String deviceName, String portName) throws SQLException { final String fname = "getPatchWiringsFromDeviceNamePortName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, devicename=%s, portName=%s) - start", fname, conn, deviceName, portName)); } List<Map<String, Object>> maps = null; try { MapListHandler rsh = new MapListHandler("in", "out", "parent", "inDeviceName", "inPortName", "outDeviceName", "outPortName", "sequence"); maps = utilsJdbc.query(conn, SQL_GET_PATCH_WIRINGS_FROM_DEVICENAME_PORTNAME, rsh, deviceName, portName); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public List<Map<String, Object>> getPatchWiringsFromParentRid(Connection conn, String parentRid) throws SQLException { final String fname = "getPatchWiringsFromParentRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, parentRid=%s) - start", fname, conn, parentRid)); } List<Map<String, Object>> ret = null; try { ret = utilsJdbc.query(conn, SQL_GET_PATCH_WIRINGS_FROM_PARENTRID, new MapListHandler("in", "out", "parent", "inDeviceName", "inPortName", "outDeviceName", "outPortName", "sequence"), parentRid); return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", ret)); } } } @Override public boolean isContainsPatchWiringFromDeviceNamePortName(Connection conn, String deviceName, String portName) throws SQLException { final String fname = "isContainsPatchWiringFromDeviceNamePortName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, devicename=%s, portName=%s) - start", fname, conn, deviceName, portName)); } boolean ret = true; try { MapListHandler rsh = new MapListHandler("in", "out", "parent", "inDeviceName", "inPortName", "outDeviceName", "outPortName"); List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_PATCH_WIRINGS_FROM_DEVICENAME_PORTNAME, rsh, deviceName, portName); if (maps == null || maps.isEmpty()) { ret = false; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public boolean isDeviceNameContainedIntoPatchWiring(Connection conn, String deviceName) throws SQLException { final String fname = "isDeviceNameContainedIntoPatchWiring"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s) - start", fname, conn, deviceName)); } boolean ret = true; try { MapListHandler rsh = new MapListHandler("parent"); List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_PATCH_WIRINGS_FROM_DEVICENAME, rsh, deviceName); if (maps == null || maps.isEmpty()) { ret = false; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public boolean isNodeRidContainedIntoPatchWiring(Connection conn, String nodeRid) throws SQLException { final String fname = "isNodeRidContainedIntoPatchWiring"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, nodeRid=%s) - start", fname, conn, nodeRid)); } boolean ret = true; try { MapListHandler rsh = new MapListHandler("parent"); List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_PATCH_WIRINGS_FROM_NODERID, rsh, nodeRid); if (maps == null || maps.isEmpty()) { ret = false; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public boolean isPortRidContainedIntoPatchWiring(Connection conn, String portRid) throws SQLException { final String fname = "isPortRidContainedIntoPatchWiring"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, portRid=%s) - start", fname, conn, portRid)); } boolean ret = true; try { MapListHandler rsh = new MapListHandler("parent"); List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_PATCH_WIRINGS_FROM_PORTRID, rsh, portRid, portRid); if (maps == null || maps.isEmpty()) { ret = false; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int deletePatchWiring(Connection conn, String deviceName, String portName) throws SQLException { final String fname = "deletePatchWiring"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, devicename=%s, portName=%s) - start", fname, conn, deviceName, portName)); } int ret = 0; try { Object[] params = { deviceName, portName, deviceName, portName }; ret = utilsJdbc.update(conn, SQL_DELETE_PATCH_WIRING_FROM_DEVICE_NAME_PORT_NAME, params); } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public Map<String, Object> getCableLinkFromInPortRid(Connection conn, String inPortRid) throws SQLException { final String fname = "getCableLinkFromInPortRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, inPortRid=%s) - start", fname, conn, inPortRid)); } Map<String, Object> ret = null; try { List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_CABLE_FROM_IN_PORTRID, new MapListHandler(), inPortRid); if (!maps.isEmpty()) { ret = maps.get(0); } } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public Map<String, Object> getCableLinkFromOutPortRid(Connection conn, String outPortRid) throws SQLException { final String fname = "getCableLinkFromOutPortRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, outPortRid=%s) - start", fname, conn, outPortRid)); } Map<String, Object> ret = null; try { List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_CABLE_FROM_OUT_PORTRID, new MapListHandler(), outPortRid); if (!maps.isEmpty()) { ret = maps.get(0); } } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public int createCableLink(Connection conn, String deviceName0, String portName0, String deviceName1, String portName1) throws SQLException { final String fname = "createCableLink"; if (logger.isTraceEnabled()) { logger.trace( String.format("%s(conn=%s, deviceName0=%s, portName0=%s, deviceName1=%s, portName1=%s) - start", fname, conn, deviceName0, portName0, deviceName1, portName1)); } int ret = DB_RESPONSE_STATUS_OK; try { String port0Rid = this.getPortRidFromDeviceNamePortName(conn, deviceName0, portName0); if (StringUtils.isBlank(port0Rid)) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } String port1Rid = this.getPortRidFromDeviceNamePortName(conn, deviceName1, portName1); if (StringUtils.isBlank(port1Rid)) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } String sql = SQL_INSERT_CABLE; sql = sql.replaceFirst("\\?", port0Rid); sql = sql.replaceFirst("\\?", port1Rid); int result = utilsJdbc.update(conn, sql); if (result != 1) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } sql = SQL_INSERT_CABLE; sql = sql.replaceFirst("\\?", port1Rid); sql = sql.replaceFirst("\\?", port0Rid); result = utilsJdbc.update(conn, sql); if (result != 1) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int deleteCableLink(Connection conn, String deviceName0, String portName0, String deviceName1, String portName1) throws SQLException { final String fname = "deleteCableLink"; if (logger.isTraceEnabled()) { logger.trace( String.format("%s(conn=%s, deviceName0=%s, portName0=%s, deviceName1=%s, portName1=%s) - start", fname, conn, deviceName0, portName0, deviceName1, portName1)); } int ret = DB_RESPONSE_STATUS_OK; try { boolean contain = false; // TODO // contain = this.isContainsPatchWiringFromDeviceNamePortName(conn, deviceName0, portName0); // if (contain) { // ret = DB_RESPONSE_STATUS_USED; // return ret; // } // TODO // contain = this.isContainsPatchWiringFromDeviceNamePortName(conn, deviceName1, portName1); // if (contain) { // ret = DB_RESPONSE_STATUS_USED; // return ret; // } String port0Rid = this.getPortRidFromDeviceNamePortName(conn, deviceName0, portName0); if (StringUtils.isBlank(port0Rid)) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } String port1Rid = this.getPortRidFromDeviceNamePortName(conn, deviceName1, portName1); if (StringUtils.isBlank(port1Rid)) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } // TODO // contain = this.isPortRidContainedIntoPatchWiring(conn, port0Rid); // if (contain) { // ret = DB_RESPONSE_STATUS_USED; // return ret; // } // TODO // contain = this.isPortRidContainedIntoPatchWiring(conn, port1Rid); // if (contain) { // ret = DB_RESPONSE_STATUS_USED; // return ret; // } String sql = SQL_DELETE_CABLE_FROM_ONE_PORTRID; sql = sql.replaceFirst("\\?", port0Rid); sql = sql.replaceFirst("\\?", port1Rid); int result = utilsJdbc.update(conn, sql); if (result == 0) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } if (result != 1) { ret = DB_RESPONSE_STATUS_FAIL; return ret; } sql = SQL_DELETE_CABLE_FROM_ONE_PORTRID; sql = sql.replaceFirst("\\?", port1Rid); sql = sql.replaceFirst("\\?", port0Rid); result = utilsJdbc.update(conn, sql); if (result == 0) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } if (result != 1) { ret = DB_RESPONSE_STATUS_FAIL; return ret; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public void updateCableLinkUsedFromPortRid(Connection conn, String portRid, long newUsed) throws SQLException { final String fname = "updateCableLinkUsedFromPortRid"; if (logger.isTraceEnabled()) { logger.trace( String.format("%s(conn=%s, portRid=%s, newUsed=%s) - start", fname, conn, portRid, newUsed)); } try { Object[] params = { newUsed, portRid, portRid }; int result = utilsJdbc.update(conn, SQL_UPDATE_CALBE_LINK_USED_VALUE_FROM_PORT_RID, params); if (result != 4 && result != 2) { throw new SQLException(String.format(INVALID_NUMBER_OF, "link(represent cable)")); } } catch (Exception e) { throw new SQLException(e.getMessage()); } if (logger.isTraceEnabled()) { logger.trace(String.format("%s() - end", fname)); } } @Override public List<Map<String, Object>> getShortestPath(Connection conn, String ridA, String ridZ) throws SQLException { final String fname = "getShortestPath"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ridA=%s, ridZ=%s) - start", fname, conn, ridA, ridZ)); } List<Map<String, Object>> ret = null; try { String sql = SQL_GET_DIJKSTRA_PATH_FLATTEN; sql = sql.replaceFirst("\\?", ridA); sql = sql.replaceFirst("\\?", ridZ); MapListHandler rsh = new MapListHandler("rid", "name", "number", "node_name", "class"); ret = utilsJdbc.query(conn, sql, rsh); for (Map<String, Object> current : ret) { String deviceName = ""; if (StringUtils.equals((String) current.get("class"), "node")) { deviceName = (String) current.get("name"); } else { deviceName = (String) current.get("node_name"); } Map<String, Object> nodeMap = this.getNodeInfoFromDeviceName(conn, deviceName); current.put("type", (String) nodeMap.get("type")); } } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public int insertPatchWiring(Connection conn, String ofpRid, String in, String out, String inDeviceName, String inPortName, String outDeviceName, String outPortName, int sequence) throws SQLException { final String fname = "insertPatchWiring"; if (logger.isTraceEnabled()) { logger.trace(String.format( "%s(conn=%s, ofpRid=%s, in=%s, out=%s, inDeviceName=%s, inPortName=%s, outDeviceName=%s, outPortName=%s, sequence=%s) - start", fname, conn, ofpRid, in, out, inDeviceName, inPortName, outDeviceName, outPortName, sequence)); } int ret = DB_RESPONSE_STATUS_OK; try { Object[] forwardParams = { in, out, ofpRid, inDeviceName, inPortName, outDeviceName, outPortName, sequence }; int result = utilsJdbc.update(conn, SQL_INSERT_PATCH_WIRING_2, forwardParams); if (result != 1) { throw new SQLException(String.format(PATCH_INSERT_FAILD, inDeviceName, inPortName, outDeviceName, outPortName, ofpRid, in, out)); } } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public int insertLogicalLink(Connection conn, String in_node_id, String in_node_name, String in_port_id, String in_port_name, String out_node_id, String out_node_name, String out_port_id, String out_port_name, Long nw_instance_id, String nw_instance_type) throws SQLException { final String fname = "insertLogicalLink"; if (logger.isTraceEnabled()) { logger.trace(String.format( "%s(conn=%s, in_node_id=%s, in_node_name=%s, in_port_id=%s, in_port_name=%s, out_node_id=%s, out_node_name=%s, out_port_id=%s, out_port_name=%s, nw_instance_id=%s, nw_instance_type=%s) - start", fname, conn, in_node_id, in_node_name, in_port_id, in_port_name, out_node_id, out_node_name, out_port_id, out_port_name, nw_instance_id, nw_instance_type)); } int ret = DB_RESPONSE_STATUS_OK; try { Object[] forwardParams = { in_node_id, in_node_name, in_port_id, in_port_name, out_node_id, out_node_name, out_port_id, out_port_name, nw_instance_id, nw_instance_type }; int result = utilsJdbc.update(conn, SQL_INSERT_LOGICAL_LINK, forwardParams); if (result != 1) { throw new SQLException(String.format(PATCH_INSERT_FAILD, in_node_id, in_node_name, in_port_id, in_port_name, out_node_id, out_node_name, out_port_id, out_port_name, nw_instance_id, nw_instance_type)); } } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public Long getNwInstanceId(Connection conn) throws SQLException { final String fname = "getNwInstanceId"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } List<String> ret = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_MAX_NW_INSTANCE_ID, new MapListHandler()); Long maxNwInstanceId = MIN_NETWORK_INSTANCE_ID; if (records.size() > 0) { maxNwInstanceId = (Long) Long.parseLong((records.get(0).get("maxNwInstanceId").toString())) + 1; if (maxNwInstanceId > MAX_NETWORK_INSTANCE_ID) { records = utilsJdbc.query(conn, SQL_GET_NW_INSTANCE_ID, new MapListHandler()); Long count = MIN_NETWORK_INSTANCE_ID; for (Map<String, Object> record : records) { Long curId = (Long) record.get("maxNwInstanceId"); if (curId != count) { // found. return count; } count++; } // not found. return -1L; } } return maxNwInstanceId; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", ret)); } } } @Override public Map<String, Object> getNodeInfoFromDeviceName(Connection conn, String deviceName) throws SQLException { final String fname = "getNodeInfoFromDeviceName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s) - start", fname, conn, deviceName)); } Map<String, Object> map = null; try { List<Map<String, Object>> infoMapList = this.getNodeInfoList(conn); for (Map<String, Object> infoMap : infoMapList) { if (deviceName.contentEquals((String) infoMap.get("name"))) { return infoMap; } } // not found. return null; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, map)); } } } @Override public List<Map<String, Object>> getNodeInfoList(Connection conn) throws SQLException { final String fname = "getNodeInfoList"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } List<Map<String, Object>> maps = null; try { maps = utilsJdbc.query(conn, SQL_GET_NODE_INFO_LIST, new MapListHandler()); List<Map<String, Object>> ofsMaps = utilsJdbc.query(conn, SQL_GET_OFS_INFO_LIST, new MapListHandler()); for (Map<String, Object> infoMap : maps) { for (Map<String, Object> ofsMap : ofsMaps) { String rid = (String) infoMap.get("rid"); if (rid.equals((String) ofsMap.get("node_id"))) { infoMap.put("sw_instance_id", ofsMap.get("rid")); infoMap.put("datapathId", (String) ofsMap.get("datapathId")); infoMap.put("ip", (String) ofsMap.get("ip")); infoMap.put("port", (Integer) ofsMap.get("port")); Integer port = (Integer) ofsMap.get("port"); infoMap.put("ofcIp", (String) ofsMap.get("ip") + ":" + port.toString()); } } } return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public Map<String, Object> getNodeInfoFromDeviceRid(Connection conn, String nodeRid) throws SQLException { final String fname = "getDeviceInfoFromDeviceRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, nodeRid=%s) - start", fname, conn, nodeRid)); } Map<String, Object> map = null; try { List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_NODE_INFO_FROM_DEVICE_RID, new MapListHandler(), nodeRid); if (!maps.isEmpty()) { map = maps.get(0); } return map; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, map)); } } } @Override public String getNodeRidFromDeviceName(Connection conn, String deviceName) throws SQLException { final String fname = "getNodeRidFromDeviceName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s) - start", fname, conn, deviceName)); } String ret = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_NODE_RID_FROM_DEVICENAME, new MapListHandler("rid"), deviceName); if (records != null && !records.isEmpty() && records.get(0) != null) { ret = (String) records.get(0).get("rid"); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int createNodeInfo(Connection conn, String deviceName, String deviceType, String location, String tenant, String datapathId, String ofcIp) throws SQLException { final String fname = "createNodeInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format( "%s(conn=%s, deviceName=%s, deviceType=%s, location=%s, tenant=%s, datapathId=%s, ofcIp=%s) - start", fname, conn, deviceName, deviceType, location, tenant, datapathId, ofcIp)); } int ret = DB_RESPONSE_STATUS_OK; try { Map<String, Object> current = this.getNodeInfoFromDeviceName(conn, deviceName); if (current != null) { return DB_RESPONSE_STATUS_EXIST; } Object[] params = { deviceName, location, deviceType, tenant }; int nRecords = utilsJdbc.update(conn, SQL_INSERT_NODE_INFO, params); if (nRecords == 0) { return DB_RESPONSE_STATUS_EXIST; } if (ArrayUtils.contains(SYSTEM_RESOURCE_TYPES, deviceType)) { String nodeRid = this.getNodeRidFromDeviceName(conn, deviceName); if (StringUtils.isBlank(nodeRid)) { return DB_RESPONSE_STATUS_NOT_FOUND; } ret = this.createOfsInfo(conn, nodeRid, datapathId, ofcIp); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } public String getResourceRidFromNodeRid(Connection conn, String nodeRid, String deviceType) throws SQLException { final String fname = "getResourceRidFromNodeRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, nodeRid=%s, deviceType=%s) - start", fname, conn, nodeRid, deviceType)); } String ret = null; try { String sql = null; if (ArrayUtils.contains(SYSTEM_RESOURCE_TYPES, deviceType)) { sql = SQL_GET_STSTEM_RESOURCE_RID_FROM_NODE_RID; } else { sql = SQL_GET_RENT_RESOURCE_RID_FROM_NODE_RID; } List<Map<String, Object>> records = utilsJdbc.query(conn, sql, new MapListHandler("rid"), nodeRid); if (records != null && !records.isEmpty() && records.get(0) != null) { ret = (String) records.get(0).get("rid"); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } public int createResourceInfo(Connection conn, String deviceName, String deviceType, String datapathId, String tenant, String ofcIp) throws SQLException { final String fname = "createResourceInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format( "%s(conn=%s, deviceName=%s, deviceType=%s, tenant=%s, datapathId=%s, ofcIp=%s) - start", fname, conn, deviceName, deviceType, tenant, datapathId, ofcIp)); } int ret = DB_RESPONSE_STATUS_OK; try { String nodeRid = this.getNodeRidFromDeviceName(conn, deviceName); if (StringUtils.isBlank(nodeRid)) { return DB_RESPONSE_STATUS_NOT_FOUND; } String sql = null; if (ArrayUtils.contains(SYSTEM_RESOURCE_TYPES, deviceType)) { sql = SQL_INSERT_SYSTEM_RESOURCE_INFO; } else { sql = SQL_INSERT_RENT_RESOURCE_INFO; } // Object[] params = {nodeRid, deviceType, tenant}; // int nRecords = utilsJdbc.update(conn, sql, params); sql = sql.replaceFirst("\\?", nodeRid); sql = sql.replaceFirst("\\?", deviceType); sql = sql.replaceFirst("\\?", tenant); int nRecords = utilsJdbc.update(conn, sql); if (nRecords == 0) { return DB_RESPONSE_STATUS_EXIST; } if (ArrayUtils.contains(SYSTEM_RESOURCE_TYPES, deviceType)) { String resourceRid = this.getResourceRidFromNodeRid(conn, nodeRid, deviceType); ret = this.createOfsInfo(conn, resourceRid, datapathId, ofcIp); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } public int createOfsInfo(Connection conn, String nodeRid, String datapathId, String ofcIp) throws SQLException { final String fname = "createOfsInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, nodeRid=%s, datapathId=%s, ofcIp=%s) - start", fname, conn, nodeRid, datapathId, ofcIp)); } int ret = DB_RESPONSE_STATUS_OK; try { if (!StringUtils.isBlank(datapathId) && !StringUtils.isBlank(ofcIp)) { String ofcRid = this.getOfcRid(conn, ofcIp); if (StringUtils.isBlank(ofcRid)) { return DB_RESPONSE_STATUS_NOT_FOUND; } // Object[] params = {datapathId, nodeRid, ofcRid}; // int nRecords = utilsJdbc.update(conn, SQL_INSERT_OFS_INFO, params); String sql = SQL_INSERT_OFS_INFO; sql = sql.replaceFirst("\\?", datapathId); sql = sql.replaceFirst("\\?", nodeRid); sql = sql.replaceFirst("\\?", ofcRid); int nRecords = utilsJdbc.update(conn, sql); if (nRecords == 0) { return DB_RESPONSE_STATUS_EXIST; } String ofsRid = this.getOfsRid(conn, nodeRid); if (StringUtils.isBlank(ofsRid)) { return DB_RESPONSE_STATUS_NOT_FOUND; } sql = SQL_UPDATE_NODE_SW_INSTANCE_INFO_FROM_RID; sql = sql.replaceFirst("\\?", "OpenFlowSwitch"); sql = sql.replaceFirst("\\?", ofsRid); sql = sql.replaceFirst("\\?", nodeRid); int result = utilsJdbc.update(conn, sql); if (result == 0) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } public String getOfsRid(Connection conn, String nodeRid) throws SQLException { final String fname = "getOfsRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, nodeRid=%s) - start", fname, conn, nodeRid)); } String ret = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_OFS_RID_FROM_NODE_ID, new MapListHandler("rid"), nodeRid); if (records != null && !records.isEmpty() && records.get(0) != null) { ret = (String) records.get(0).get("rid"); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public String getOfcRid(Connection conn, String ofcIp) throws SQLException { final String fname = "getOfcRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ofcIp=%s) - start", fname, conn, ofcIp)); } String ret = null; try { String[] ofc = ofcIp.split(":", 0); String ip = ofc[0]; if (!this.isNum(ofc[1])) { return null; } int port = Integer.parseInt(ofc[1]); List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_OFC_RID_FROM_IP_AND_PORT, new MapListHandler("rid"), ip, port); if (records != null && !records.isEmpty() && records.get(0) != null) { ret = (String) records.get(0).get("rid"); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } public boolean isNum(String number) { try { Integer.parseInt(number); return true; } catch (NumberFormatException e) { return false; } } @Override public int updateNodeInfo(Connection conn, String keyDeviceName, String deviceName, String location, String tenant, String datapathId, String ofcIp, String type) throws SQLException { final String fname = "updateNodeInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format( "%s(conn=%s, keyDeviceName=%s, newDeviceName=%s, datapathId=%s, ofcIp=%s) - start", fname, conn, keyDeviceName, deviceName, datapathId, ofcIp)); } int ret = DB_RESPONSE_STATUS_OK; try { Map<String, Object> current = this.getNodeInfoFromDeviceName(conn, keyDeviceName); if (current == null) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } String nodeRid = (String) current.get("rid"); if (StringUtils.isBlank(deviceName)) { deviceName = (String) current.get("name"); } if (StringUtils.isBlank(type)) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } if (!type.equals((String) current.get("type"))) { ret = DB_RESPONSE_STATUS_INVALID_ERR; return ret; } if (StringUtils.isBlank(location)) { location = (String) current.get("location"); } if (StringUtils.isBlank(tenant)) { tenant = (String) current.get("tenant"); } if (!ArrayUtils.contains(LEGACY_DEVICE_TYPES, type)) { if (StringUtils.isBlank(datapathId)) { datapathId = (String) current.get("datapathId"); } } String sql = SQL_UPDATE_NODE_INFO_FROM_RID; sql = sql.replaceFirst("\\?", deviceName); sql = sql.replaceFirst("\\?", location); sql = sql.replaceFirst("\\?", tenant); sql = sql.replaceFirst("\\?", nodeRid); int result = utilsJdbc.update(conn, sql); if (result == 0) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } if (ArrayUtils.contains(SYSTEM_RESOURCE_TYPES, (String) current.get("type"))) { if (StringUtils.isBlank(ofcIp)) { ofcIp = (String) current.get("ofcIp"); } String ofcRid = this.getOfcRid(conn, ofcIp); if (StringUtils.isBlank(ofcRid)) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } sql = SQL_UPDATE_OFS_INFO_FROM_RID; sql = sql.replaceFirst("\\?", datapathId); sql = sql.replaceFirst("\\?", ofcRid); sql = sql.replaceFirst("\\?", (String) current.get("sw_instance_id")); result = utilsJdbc.update(conn, sql); if (result == 0) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } } //TODO // Object[] updDevNamePara = {deviceName, keyDeviceName}; // utilsJdbc.update(conn, SQL_UPDATE_PORT_DEVICENAME, updDevNamePara); // utilsJdbc.update(conn, SQL_UPDATE_PATCH_WIRING_INDEVICENAME, updDevNamePara); // utilsJdbc.update(conn, SQL_UPDATE_PATCH_WIRING_OUTDEVICENAME, updDevNamePara); return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int deleteNodeInfo(Connection conn, String deviceName) throws SQLException { final String fname = "deleteNodeInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s) - start", fname, conn, deviceName)); } int ret = DB_RESPONSE_STATUS_OK; try { Map<String, Object> deviceMap = this.getNodeInfoFromDeviceName(conn, deviceName); if (deviceMap == null) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } String nodeRid = (String) deviceMap.get("rid"); // TODO // boolean contain = this.isDeviceNameContainedIntoPatchWiring(conn, deviceName); // if (contain) { // ret = DB_RESPONSE_STATUS_FORBIDDEN; // return ret; // } // TODO // contain = this.isNodeRidContainedIntoPatchWiring(conn, nodeRid); // if (contain) { // ret = DB_RESPONSE_STATUS_FORBIDDEN; // return ret; // } Object[] params = { deviceName }; utilsJdbc.update(conn, SQL_DELETE_PORT_FROM_DEVICENAME, params); if (ArrayUtils.contains(SYSTEM_RESOURCE_TYPES, (String) deviceMap.get("type"))) { String sql = SQL_DELETE_OFS_FROM_RID; sql = sql.replaceFirst("\\?", (String) deviceMap.get("sw_instance_id")); int nRecord = utilsJdbc.update(conn, sql); if (nRecord != 1) { ret = DB_RESPONSE_STATUS_FAIL; return ret; } } String sql = SQL_DELETE_NODE_FROM_NODERID; sql = sql.replaceFirst("\\?", nodeRid); int nRecord = utilsJdbc.update(conn, sql); if (nRecord != 1) { ret = DB_RESPONSE_STATUS_FAIL; return ret; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int createPortInfo(Connection conn, String portName, Integer portNumber, Integer band, String deviceName, String network) throws SQLException { final String fname = "createPortInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, portName=%s, portNumber=%s, band=%s, deviceName=%s) - start", fname, conn, portName, portNumber, band, deviceName)); } int ret = DB_RESPONSE_STATUS_OK; try { /* PHASE 1: Insert port info */ Map<String, Object> devMap = this.getNodeInfoFromDeviceName(conn, deviceName); if (devMap == null) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } if (StringUtils.equals((String) devMap.get("type"), NODE_TYPE_SERVER)) { portNumber = null; } Map<String, Object> current = this.getPortInfoFromPortName(conn, deviceName, portName); if (current != null) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } if (network == null) { network = (String) current.get(""); } Object[] params = { portName, portNumber, band, deviceName, network }; int nRecords = utilsJdbc.update(conn, SQL_INSERT_PORT_INFO, params); if (nRecords == 0) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } /* PHASE 2: Insert Bus-link */ String devRid = (String) devMap.get("rid"); String devType = (String) devMap.get("type"); String portRid = this.getPortRidFromDeviceNamePortName(conn, deviceName, portName); if (StringUtils.isBlank(portRid)) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } /* Here, decide Used default value of bus of Node. */ Long used = USED_BLOCKING_VALUE; if (ArrayUtils.contains(BIG_USED_BUS_TYPES, devType)) { used = BIG_USED_BUS_VALUE; } else if (StringUtils.equals(devType, NODE_TYPE_LEAF)) { used = 0L; } String sql = SQL_INSERT_BUS; sql = sql.replaceFirst("\\?", portRid); sql = sql.replaceFirst("\\?", devRid); sql = sql.replaceFirst("\\?", used.toString()); nRecords = utilsJdbc.update(conn, sql); if (nRecords == 0) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } sql = SQL_INSERT_BUS; sql = sql.replaceFirst("\\?", devRid); sql = sql.replaceFirst("\\?", portRid); sql = sql.replaceFirst("\\?", used.toString()); nRecords = utilsJdbc.update(conn, sql); if (nRecords == 0) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int updatePortInfo(Connection conn, String keyPortName, String keyDeviceName, String portName, Integer portNumber, Integer band, String network) throws SQLException { final String fname = "updatePortInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format( "%s(conn=%s, keyPortName=%s, keyDeviceName=%s, portName=%s, portNumber=%s, band=%s) - start", fname, conn, keyPortName, keyDeviceName, portName, portNumber, band)); } int ret = DB_RESPONSE_STATUS_OK; try { Map<String, Object> current = this.getPortInfoFromPortName(conn, keyDeviceName, keyPortName); if (current == null) { ret = DB_RESPONSE_STATUS_NOT_FOUND; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } return ret; } String portRid = (String) current.get("rid"); if (StringUtils.isBlank(portName)) { portName = (String) current.get("name"); } if (portNumber == null) { portNumber = (Integer) current.get("portNumber"); } if (band == null) { band = (Integer) current.get("band"); } if (network == null) { network = (String) current.get("network"); } Object[] params = { portName, portNumber, band, network, portRid }; int result = utilsJdbc.update(conn, SQL_UPDATE_PORT_INFO_FROM_RID, params); if (result == 0) { ret = DB_RESPONSE_STATUS_EXIST; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } return ret; } // TODO // Object[] updPortNamePara = {portName, keyPortName, keyDeviceName}; // utilsJdbc.update(conn, SQL_UPDATE_PATCH_WIRING_INPORTNAME, updPortNamePara); // utilsJdbc.update(conn, SQL_UPDATE_PATCH_WIRING_OUTPORTNAME, updPortNamePara); } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public int deletePortInfo(Connection conn, String portName, String deviceName) throws SQLException { final String fname = "deletePortInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, portName=%s, deviceName=%s) - start", fname, conn, portName, deviceName)); } int ret = DB_RESPONSE_STATUS_OK; try { String portRid = this.getPortRidFromDeviceNamePortName(conn, deviceName, portName); if (StringUtils.isBlank(portRid)) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } // TODO // boolean contain = this.isContainsPatchWiringFromDeviceNamePortName(conn, deviceName, portName); // if (contain) { // ret = DB_RESPONSE_STATUS_FORBIDDEN; // return ret; // } // TODO // contain = this.isPortRidContainedIntoPatchWiring(conn, portRid); // if (contain) { // ret = DB_RESPONSE_STATUS_FORBIDDEN; // return ret; // } String sql = SQL_DELETE_PORT_FROM_PORTRID; sql = sql.replaceFirst("\\?", portRid); int nRecord = utilsJdbc.update(conn, sql); if (nRecord != 1) { ret = DB_RESPONSE_STATUS_FAIL; return ret; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public Map<String, Object> getPortInfoFromPortName(Connection conn, String deviceName, String portName) throws SQLException { final String fname = "getPortInfoFromPortName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s, portName=%s) - start", fname, conn, deviceName, portName)); } Map<String, Object> map = null; try { List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_PORT_INFO_FROM_PORT_NAME, new MapListHandler(), portName, deviceName); if (!maps.isEmpty()) { map = maps.get(0); } return map; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, map)); } } } @Override public Map<String, Object> getPortInfoFromPortRid(Connection conn, String rid) throws SQLException { final String fname = "getPortInfoFromPortRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(rid=%s) - start", fname, rid)); } Map<String, Object> ret = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_PORT_INFO_FROM_PORTRID, new MapListHandler(), rid); if (records != null && !records.isEmpty()) { ret = records.get(0); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("getPortInfo(ret=%s) - end", ret)); } } } @Override public String getPortRidFromDeviceNamePortName(Connection conn, String deviceName, String portName) throws SQLException { final String fname = "getPortRidFromDeviceNamePortName"; if (logger.isTraceEnabled()) { logger.trace( String.format("%s(conn=%s, deviceName=%s, portName=%s) - start", fname, deviceName, portName)); } String ret = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_PORT_RID_FROM_DEVICENAME_PORTNAME, new MapListHandler("rid"), portName, deviceName); if (records != null && !records.isEmpty() && records.get(0) != null) { ret = (String) records.get(0).get("rid"); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public List<Map<String, Object>> getPortInfoListFromDeviceName(Connection conn, String deviceName) throws SQLException { final String fname = "getPortInfoListFromDeviceName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s) - start", fname, deviceName)); } List<Map<String, Object>> ret = null; try { ret = utilsJdbc.query(conn, SQL_GET_PORT_INFO_FROM_DEVICENAME, new MapListHandler(), deviceName); return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public Map<String, Object> getNeighborPortFromPortRid(Connection conn, String portRid) throws SQLException { final String fname = "getNeighborPortFromPortRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, portRid=%s) - start", fname, portRid)); } Map<String, Object> ret = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_NEIGHBOR_PORT_INFO_FROM_PORT_RID, new MapListHandler(), portRid); if (records != null && !records.isEmpty()) { ret = records.get(0); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public Map<String, Object> getDeviceInfoFromDeviceRid(Connection conn, String rid) throws SQLException { final String fname = "getDeviceInfoFromDeviceRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(rid=%s) - start", fname, rid)); } Map<String, Object> record = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_DEVICE_INFO_FROM_DEVICERID, new MapListHandler(), rid); if (records.size() <= 0) { String msg = String.format(NOT_FOUND, "node(" + rid + ")"); throw new SQLException(msg); } record = records.get(0); return record; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, record)); } } } static synchronized public String getInternalMacFromDeviceNameInPortSrcMacDstMac(ConnectionUtilsJdbc utilsJdbc, Connection conn, String deviceName, String inPort, String srcMac, String dstMac) throws SQLException { final String fname = "getInternalMacFromDeviceNameInPortSrcMacDstMac"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s, inPort=%s, srcMac=%s, dstMac=%s) - start", fname, conn, deviceName, inPort, srcMac, dstMac)); } String ret = null; try { DbAccessFlag.lock(); List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_INTERNALMAC_FROM_SRCMAC_DSTMAC_INPORT_DEVICENAME, new MapListHandler(), deviceName, inPort, srcMac, dstMac); if (records.size() > 0) { ret = OFPMUtils.longToMacAddress(Long.parseLong((records.get(0).get("internalMac").toString()))); } else { records = utilsJdbc.query(conn, SQL_GET_MAX_INTERNALMAC, new MapListHandler()); Long newInternalMac = 1L; if (records.size() > 0) { newInternalMac = Long.parseLong((records.get(0).get("maxInternalMac").toString())) + 1L; } Object[] params = { deviceName, inPort, srcMac, dstMac, newInternalMac }; int rows = utilsJdbc.update(conn, SQL_INSERT_INTERNALMAC, params); if (rows == 0) { // TODO exist error } ret = OFPMUtils.longToMacAddress(newInternalMac); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", ret)); } DbAccessFlag.unlock(); } } @Override public List<String> getInternalMacListFromDeviceNameInPort(Connection conn, String deviceName, String inPort) throws SQLException { final String fname = "getInternalMacListFromDeviceNameInPort"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s, inPort=%s) - start", fname, conn, deviceName, inPort)); } List<String> ret = null; try { ret = new ArrayList<String>(); List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_INTERNALMAC_LIST_FROM_DEVICENAME_INPORT, new MapListHandler("internalMac"), deviceName, inPort); for (int i = 0; i < records.size(); i++) { Map<String, Object> record = records.get(i); Long internalMac = Long.parseLong(record.get("internalMac").toString()); ret.add(OFPMUtils.longToMacAddress(internalMac)); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", ret)); } } } @Override public int deleteInternalMac(Connection conn, String deviceName, int inPort) throws SQLException { final String fname = "deleteInternalMac"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, devicename=%s, portName=%d) - start", fname, conn, deviceName, inPort)); } int ret = 0; try { Object[] params = { deviceName, inPort }; ret = utilsJdbc.update(conn, SQL_DELETE_INTERNALMAC_FROM_DEVICE_NAME_PORT_NAME, params); } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public List<Map<String, Object>> getInternalMacInfoListFromDeviceNameInPort(Connection conn, String deviceName, Integer portNumber) throws SQLException { final String fname = "getInternalMacInfoListFromDeviceNameInPort"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, deviceName=%s, portNumber=%s) - start", fname, conn, deviceName, portNumber)); } List<Map<String, Object>> ret = null; try { ret = utilsJdbc.query(conn, SQL_GET_INTERNALMAC_INFO_LIST_FROM_DEVICENAME_PORTNUMBER, new MapListHandler("srcMac", "dstMac", "internalMac"), deviceName, portNumber); if (ret == null) { return new ArrayList<Map<String, Object>>(); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", ret)); } } } @Override public String getPortBandFromDeviceNamePortName(Connection conn, String deviceName, String portName) throws SQLException { final String fname = "getPortBandFromDeviceNamePortName"; if (logger.isTraceEnabled()) { logger.trace( String.format("%s(conn=%s, deviceName=%s, portName=%s) - start", fname, deviceName, portName)); } String ret = null; try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_PORT_BAND_FROM_DEVICENAME_PORTNAME, new MapListHandler("band"), portName, deviceName); if (records != null && !records.isEmpty() && records.get(0) != null) { ret = (String) Integer.toString((Integer) records.get(0).get("band")); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public List<Map<String, Object>> getOfcInfoList(Connection conn) throws SQLException { final String fname = "getOfcInfoList"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } List<Map<String, Object>> maps = null; // List<Map<String, Object>> rent_resource_maps = null; try { maps = utilsJdbc.query(conn, SQL_GET_OFC_INFO_LIST, new MapListHandler()); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public Map<String, Object> getOfcInfo(Connection conn, String ofcIpPort) throws SQLException { final String fname = "getOfcInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ofcIpPort=%s) - start", fname, conn, ofcIpPort)); } String[] ofc = ofcIpPort.split(":", 0); String ip = ofc[0]; int port = Integer.parseInt(ofc[1]); List<Map<String, Object>> infoMapList = getOfcInfoList(conn); for (Map<String, Object> infoMap : infoMapList) { if (ip.equals((String) infoMap.get("ip")) && (port == (Integer) infoMap.get("port"))) { return infoMap; } } try { // not found return null; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ofcIpPort=%s) - end", fname, conn, ofcIpPort)); } } } @Override public Map<String, Object> getOfcRidInfo(Connection conn, String ofcIpPort) throws SQLException { final String fname = "getOfcRidInfo"; /* if (logger.isTraceEnabled()){ logger.trace(String.format("%s(conn=%s, ip=%s, port=%s) - start", fname, conn, ip, port)); } */ Map<String, Object> ret = null; // List<Map<String, Object>> rent_resource_maps = null; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ofcIpPort=%s) - start", fname, conn, ofcIpPort)); } String[] ofc = ofcIpPort.split(":", 0); String ip = ofc[0]; int port = Integer.parseInt(ofc[1]); try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_OFC_INFO_FROM_IP_PORT, new MapListHandler(), ip, port); if (records != null && !records.isEmpty()) { ret = records.get(0); } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int createOfcInfo(Connection conn, String ip, Integer port) throws SQLException { final String fname = "createOfcInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ofcIp=%s, ofcPort=%d) - start", fname, conn, ip, port)); } int ret = DB_RESPONSE_STATUS_OK; try { String ofcIpPort = ip + ":" + port.toString(); Map<String, Object> current = this.getOfcRidInfo(conn, ofcIpPort); if (current != null) { return DB_RESPONSE_STATUS_EXIST; } Object[] params = { ip, port }; int nRecords = utilsJdbc.update(conn, SQL_INSERT_OFC_INFO, params); if (nRecords == 0) { return DB_RESPONSE_STATUS_EXIST; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int updateOfcInfo(Connection conn, String ofcIpPort, String ip, Integer port) throws SQLException { final String fname = "updateOfcInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ip=%s, port=%s) - start", fname, conn, ip, port)); } int ret = DB_RESPONSE_STATUS_OK; try { Map<String, Object> current = this.getOfcRidInfo(conn, ofcIpPort); if (current == null) { ret = DB_RESPONSE_STATUS_NOT_FOUND; return ret; } String OfcRid = (String) current.get("rid"); if (StringUtils.isBlank(ip)) { ip = (String) current.get("ip"); } if (port == null) { port = (Integer) current.get("port"); } Object[] params = { ip, port, OfcRid }; int result = utilsJdbc.update(conn, SQL_UPDATE_OFC_INFO, params); if (result == 0) { ret = DB_RESPONSE_STATUS_EXIST; return ret; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int deleteOfcInfo(Connection conn, String ofcIpPort) throws SQLException { final String fname = "deleteOfcInfo"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ofcIpPort=%s) - start", fname, conn, ofcIpPort)); } int ret = DB_RESPONSE_STATUS_OK; try { String[] ofc = ofcIpPort.split(":", 0); String ip = ofc[0]; int port = Integer.parseInt(ofc[1]); Object[] params = { ip, port }; int nRecord = utilsJdbc.update(conn, SQL_DELETE_OFC_FROM_IP_AND_PORT, params); if (nRecord != 1) { ret = DB_RESPONSE_STATUS_FAIL; return ret; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int insertRoute(Connection conn, Integer sequence_num, String logical_link_id, String node_id, String node_name, String in_port_id, String in_port_name, Integer in_port_number, String out_port_id, String out_port_name, Integer out_port_number) throws SQLException { final String fname = "insertRoute"; if (logger.isTraceEnabled()) { logger.trace(String.format( "%s(conn=%s, sequence_num=%s, logical_link_id=%s, node_id=%s, node_name=%s, in_port_id=%s, in_port_name=%s, in_port_number=%s, out_port_id=%s, out_port_name=%s, out_port_number=%s) - start", fname, conn, sequence_num, logical_link_id, node_id, node_name, in_port_id, in_port_name, in_port_number, out_port_id, out_port_name, out_port_number)); } int ret = DB_RESPONSE_STATUS_OK; try { Object[] params = { sequence_num, logical_link_id, node_id, node_name, in_port_id, in_port_name, in_port_number, out_port_id, out_port_name, out_port_number }; int result = utilsJdbc.update(conn, SQL_INSERT_ROUTE_INFO, params); if (result != 1) { throw new SQLException(String.format(ROUTE_INSERT_FAILD, sequence_num, logical_link_id, node_id, node_name, in_port_id, in_port_name, in_port_number, out_port_id, out_port_name, out_port_number)); } } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public Map<String, Object> getLogicalLinkFromNodeNamePortName(Connection conn, String node_name, String port_name) throws SQLException { final String fname = "getLogicalLinkFromNodeNamePortName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, node_name=%s, port_name=%s) - start", fname, conn, node_name, port_name)); } Map<String, Object> map = null; try { List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_LOGICAL_LINK_FROM_NODE_NAME_PORT_NAME, new MapListHandler(), node_name, port_name, node_name, port_name); if (!maps.isEmpty()) { map = maps.get(0); } return map; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, map)); } } } @Override public Map<String, Object> getLogicalLinkFromRid(Connection conn, String logicalLinkRid) throws SQLException { final String fname = "getLogicalLinkFromRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, logicalLinkRid=%s) - start", fname, conn, logicalLinkRid)); } Map<String, Object> map = null; try { List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_LOGICAL_LINK_FROM_RID, new MapListHandler(), logicalLinkRid); if (!maps.isEmpty()) { map = maps.get(0); } return map; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, map)); } } } @Override public boolean isContainsLogicalLinkFromDeviceNamePortName(Connection conn, String deviceName, String portName) throws SQLException { final String fname = "isContainsLogicalLinkFromDeviceNamePortName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, devicename=%s, portName=%s) - start", fname, conn, deviceName, portName)); } boolean ret = true; try { Map<String, Object> map = getLogicalLinkFromNodeNamePortName(conn, deviceName, portName); if (map == null || map.isEmpty()) { ret = false; } return ret; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public List<Map<String, Object>> getRouteFromLogicalLinkId(Connection conn, String logical_link_id) throws SQLException { final String fname = "getRouteFromLogicalLinkId"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, logical_link_id=%s) - start", fname, conn, logical_link_id)); } List<Map<String, Object>> maps = null; try { MapListHandler rhs = new MapListHandler("@rid.asString()", "sequence_num", "logical_link_id", "node_id", "node_name", "in_port_id", "in_port_name", "out_port_id", "out_port_name"); maps = utilsJdbc.query(conn, SQL_GET_ROUTE_FROM_LOGICAL_LINK_ID, rhs, logical_link_id); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public List<Map<String, Object>> getRouteFromNodeRid(Connection conn, String nodeRid) throws SQLException { final String fname = "getRouteFromNodeRid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, nodeRid=%s) - start", fname, conn, nodeRid)); } List<Map<String, Object>> maps = null; try { MapListHandler rhs = new MapListHandler("@rid.asString()", "sequence_num", "logical_link_id", "node_id", "node_name", "in_port_id", "in_port_name", "in_port_number", "out_port_id", "out_port_name", "out_port_number"); maps = utilsJdbc.query(conn, SQL_GET_ROUTE_FROM_NODERID, rhs, nodeRid); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public int deleteLogicalLinkFromNodeNamePortName(Connection conn, String deviceName, String portName) throws SQLException { final String fname = "deleteLogicalLinkFromNodeNamePortName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, devicename=%s, portName=%s) - start", fname, conn, deviceName, portName)); } int ret = 0; try { Object[] params = { deviceName, portName, deviceName, portName }; ret = utilsJdbc.update(conn, SQL_DELETE_LOGICAL_LINK_FROM_DEVICE_NAME_PORT_NAME, params); } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public int deleteRouteFromLogicalLinkRid(Connection conn, String logical_link_id) throws SQLException { final String fname = "deleteLogicalLinkFromNodeNamePortName"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, logical_link_id=%s) - start", fname, conn, logical_link_id)); } int ret = 0; try { Object[] params = { logical_link_id }; ret = utilsJdbc.update(conn, SQL_DELETE_ROUTE_FROM_LOGICAL_LINK_ID, params); } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } return ret; } @Override public List<Map<String, Object>> getCableList(Connection conn) throws SQLException { final String fname = "getCableList"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } List<Map<String, Object>> maps = null; MapListHandler rhs = new MapListHandler("inDeviceName", "inPortName", "inPortNumber", "outDeviceName", "outPortName", "outPortNumber", "@rid.asString()", "band", "used"); try { maps = utilsJdbc.query(conn, SQL_GET_CABLE_LINKS_ALL, rhs); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, maps)); } } } @Override public List<Map<String, Object>> getNetworkidFromSpineid(Connection conn, String in_spine_id, String out_spine_id, String network_type) throws SQLException { final String fname = "getNetworkidFromSpineid"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, in_spine_id=%s, out_spine_id=%s) - start", fname, conn, in_spine_id, out_spine_id)); } try { MapListHandler rsh = new MapListHandler(); Object[] params = { in_spine_id, out_spine_id, network_type }; List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_NETWORK_ID_FROM_SPID, rsh, params); return maps; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { //logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public String payoutNetworkid(Connection conn, String in_spine_id, String out_spine_id, String network_type) throws SQLException { final String fname = "getCableList"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } String nwid = "Outer_Tag is sold out!"; try { MapListHandler rsh = new MapListHandler(); Object[] params = { network_type }; List<Map<String, Object>> maps = utilsJdbc.query(conn, SQL_GET_NETWORK_ID_OF_FREE, rsh, params); if (!maps.isEmpty()) { nwid = maps.get(0).get("outer_tag").toString(); Object[] insert_params = { in_spine_id, out_spine_id, nwid, network_type }; int status = utilsJdbc.update(conn, SQL_UPDATE_PAYOUT_OF_NETWORK_ID, insert_params); } return nwid; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { //logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int returnNetworkid(Connection conn, String spine_id, String network_type) throws SQLException { final String fname = "getCableList"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } try { Object[] params = { spine_id, spine_id }; int status = utilsJdbc.update(conn, SQL_UPDATE_RETURN_OF_NETWORK_ID, params); return status; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { //logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int insertOutertag(Connection conn, String localvlan, String outer_tag, String agid, String ag_inport, String ag_outport, String type, String network_type) throws SQLException { final String fname = "insertOutertag"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } try { Object[] params = { agid, ag_inport, ag_outport, localvlan, outer_tag, type, network_type }; int status = utilsJdbc.update(conn, SQL_INSERT_OUTER_TAG_OF_FLOW, params); return status; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { //logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public List<Map<String, Object>> getOutertagflows(Connection conn, String agid) throws SQLException { final String fname = "getOutertagflows"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } List<Map<String, Object>> flows = null; try { Object[] params = { agid }; flows = utilsJdbc.query(conn, SQL_GET_OUTER_TAG_FLOWS, new MapListHandler(), params); return flows; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { //logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int DeleteOutertagflows(Connection conn, Long localvlan) throws SQLException { final String fname = "DeleteOutertagflows"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } try { Object[] params = { localvlan }; int status = utilsJdbc.update(conn, SQL_DELETE_OUTER_TAG_OF_FLOW, params); return status; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { //logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int AddNetworkId(Connection conn, int networkid, String type) throws SQLException { final String fname = "AddNetworkId"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } try { int status; Object[] params = { networkid, type }; List<Map<String, Object>> query = utilsJdbc.query(conn, SQL_GET_ASSIGNED_NETWORK_ID, new MapListHandler(), params); if (query.isEmpty() == true) { status = utilsJdbc.update(conn, SQL_INSERT_NETWORK_ID, params); } else { status = 1; } return status; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { //logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public int delNetworkId(Connection conn, int networkid, String type) throws SQLException { final String fname = "delNetworkId"; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s) - start", fname, conn)); } try { int status; Object[] params = { networkid, type }; List<Map<String, Object>> result = utilsJdbc.query(conn, SQL_GET_ASSIGNED_NETWORK_ID, new MapListHandler(), params); if (result.get(0).containsKey("spine1") == true) { if (!result.get(0).get("spine1").equals("") && !result.get(0).get("spine2").equals("")) { status = STATUS_NOW_USED; } else { status = utilsJdbc.update(conn, SQL_DELETE_NETWORK_ID, params); } } else { status = utilsJdbc.update(conn, SQL_DELETE_NETWORK_ID, params); } return status; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { //logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } @Override public List<Map<String, Object>> getNetworkId(Connection conn) throws SQLException { final String fname = "getNetworkId"; /* if (logger.isTraceEnabled()){ logger.trace(String.format("%s(conn=%s, ip=%s, port=%s) - start", fname, conn, ip, port)); } */ Map<String, Object> ret = null; if (logger.isTraceEnabled()) { logger.trace(String.format("%s(conn=%s, ofcIpPort=%s) - start", fname, conn, "")); } try { List<Map<String, Object>> records = utilsJdbc.query(conn, SQL_GET_NETWORK, new MapListHandler()); if (records != null && !records.isEmpty()) { ret = records.get(0); } return records; } catch (Exception e) { throw new SQLException(e.getMessage()); } finally { if (logger.isTraceEnabled()) { logger.trace(String.format("%s(ret=%s) - end", fname, ret)); } } } }