From eb2a7c97c0007b013bd1784ac17d57be02b63d03 Mon Sep 17 00:00:00 2001 From: Michael DÜrre Date: Thu, 10 Mar 2022 10:39:16 +0100 Subject: migrate sdnr features to phosphorus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix mapper and switch to dom api Updated to use phosphorus version of parent poms Issue-ID: CCSDK-3566 Signed-off-by: Michael DÜrre Change-Id: I98c5bef9286622e0d66b53db687557d798cd53f5 Signed-off-by: Michael DÜrre --- .../dataprovider/database/sqldb/SqlDBClient.java | 74 +++----- .../database/sqldb/data/HtUserdataManagerBase.java | 2 +- .../database/sqldb/data/HtUserdataManagerImpl.java | 26 +-- .../database/sqldb/data/SqlDBDataProvider.java | 7 +- .../sqldb/data/entity/DatabaseIdGenerator.java | 1 - .../sqldb/data/entity/HtDatabaseEventsService.java | 56 ++++-- .../data/entity/HtDatabaseMaintenanceService.java | 9 +- .../database/sqldb/database/SqlDBMapper.java | 26 ++- .../database/sqldb/database/SqlDBReaderWriter.java | 93 ++++++++-- .../sqldb/database/SqlDBReaderWriterFault.java | 4 +- .../sqldb/database/SqlDBReaderWriterPm.java | 6 +- .../sqldb/database/SqlDBReaderWriterUserdata.java | 6 +- .../database/sqldb/database/SqlDBStatusReader.java | 1 + .../database/sqldb/query/CountQuery.java | 2 +- .../database/sqldb/query/InsertQuery.java | 46 +++-- .../database/sqldb/query/SelectQuery.java | 19 +- .../database/sqldb/query/SqlQuery.java | 9 +- .../database/sqldb/query/UpdateQuery.java | 4 +- .../database/sqldb/query/UpsertQuery.java | 4 + .../dataprovider/dblib/test/TestCRUDMariaDB.java | 4 + .../dblib/test/TestMariaDataProvider.java | 203 +++++++++++++++++---- .../dataprovider/dblib/test/TestQuerySyntax.java | 42 ++++- .../dblib/test/util/MariaDBTestBase.java | 10 +- .../dblib/src/test/resources/pmdata24h.json | 55 ++++++ 24 files changed, 516 insertions(+), 193 deletions(-) create mode 100644 sdnr/wt/data-provider/dblib/src/test/resources/pmdata24h.json (limited to 'sdnr/wt/data-provider/dblib/src') diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/SqlDBClient.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/SqlDBClient.java index ce9d4dcd1..1ed0b5f17 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/SqlDBClient.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/SqlDBClient.java @@ -56,7 +56,6 @@ public class SqlDBClient { private static final String DBVERSION_REGEX = "^([\\d]+\\.[\\d]+\\.[\\d]+)"; private static final Pattern DBVERSION_PATTERN = Pattern.compile(DBVERSION_REGEX); private static final String SELECT_VERSION_QUERY = "SELECT @@version as version"; - private static final String LOG_PROBLEM_CLOSING_CONNECTION = "problem closing connection: "; private static final String DBNAME_DEFAULT = "sdnrdb"; private final String dbConnectionString; @@ -100,6 +99,7 @@ public class SqlDBClient { } catch (SQLException e) { LOG.warn("problem reading views: ", e); } + try { data.close(); } catch (SQLException ignore) { } return list; } @@ -114,6 +114,7 @@ public class SqlDBClient { } catch (SQLException e) { LOG.warn("problem reading tables: ", e); } + try { data.close(); } catch (SQLException ignore) { } return list; } @@ -155,22 +156,18 @@ public class SqlDBClient { public boolean createTable(String query) { boolean result = false; PreparedStatement stmt = null; + Connection connection = null; try { - Connection connection = this.getConnection(); + connection = this.getConnection(); stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); stmt.execute(); - connection.close(); + result = true; } catch (SQLException e) { LOG.warn("problem creating table:", e); } finally { - if (stmt != null) { - try { - stmt.close(); - } catch (SQLException e) { - LOG.warn("problem closing stmt:", e); - } - } + if (stmt != null) try { stmt.close(); } catch (SQLException logOrIgnore) {} + if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} } return result; } @@ -199,20 +196,17 @@ public class SqlDBClient { boolean result = false; SQLException innerE = null; Statement stmt = null; - try (Connection connection = this.getConnection()) { + Connection connection = null; + try { + connection= this.getConnection(); stmt = connection.createStatement(); result = stmt.execute(query); result = stmt.getUpdateCount() > 0 ? stmt.getUpdateCount() > 0 : result; } catch (SQLException e) { innerE = e; } finally { - try { - if (stmt != null) { - stmt.close(); - } - } catch (SQLException e) { - LOG.warn(LOG_PROBLEM_CLOSING_CONNECTION, e); - } + if (stmt != null) try { stmt.close(); } catch (SQLException ignore) {} + if (connection != null) try { connection.close(); } catch (SQLException ignore) {} } if (innerE != null) { throw innerE; @@ -224,20 +218,17 @@ public class SqlDBClient { boolean result = false; SQLException innerE = null; PreparedStatement stmt = null; - try (Connection connection = this.getConnection()) { + Connection connection = null; + try { + connection = this.getConnection(); stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); result = stmt.execute(); result = stmt.getUpdateCount() > 0 ? stmt.getUpdateCount() > 0 : result; } catch (SQLException e) { innerE = e; } finally { - try { - if (stmt != null) { - stmt.close(); - } - } catch (SQLException e) { - LOG.warn(LOG_PROBLEM_CLOSING_CONNECTION, e); - } + if (stmt != null) try { stmt.close(); } catch (SQLException ignore) {} + if (connection != null) try { connection.close(); } catch (SQLException ignore) {} } if (innerE != null) { throw innerE; @@ -249,24 +240,22 @@ public class SqlDBClient { String result = null; SQLException innerE = null; PreparedStatement stmt = null; - try (Connection connection = this.getConnection()) { + ResultSet generatedKeys = null; + Connection connection = null; + try { + connection = this.getConnection(); stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); stmt.execute(); - ResultSet generatedKeys = stmt.getGeneratedKeys(); + generatedKeys = stmt.getGeneratedKeys(); if (generatedKeys.next()) { result = String.valueOf(generatedKeys.getLong(1)); } } catch (SQLException e) { innerE = e; } finally { - try { - if (stmt != null) { - stmt.close(); - } - - } catch (SQLException e) { - LOG.warn(LOG_PROBLEM_CLOSING_CONNECTION, e); - } + if (generatedKeys != null) try { generatedKeys.close(); } catch (SQLException ignore) {} + if (stmt != null) try { stmt.close(); } catch (SQLException ignore) {} + if (connection != null) try { connection.close(); } catch (SQLException ignore) {} } if (innerE != null) { throw innerE; @@ -291,19 +280,16 @@ public class SqlDBClient { public ResultSet read(String query) { ResultSet data = null; Statement stmt = null; - try (Connection connection = this.getConnection()) { + Connection connection = null; + try{ + connection = this.getConnection(); stmt = connection.createStatement(); data = stmt.executeQuery(query); } catch (SQLException e) { LOG.warn("problem reading db for query '{}': ", query, e); } finally { - try { - if (stmt != null) { - stmt.close(); - } - } catch (SQLException e) { - LOG.warn(LOG_PROBLEM_CLOSING_CONNECTION, e); - } + if (stmt != null) try { stmt.close(); } catch (SQLException ignore) {} + if (connection != null) try { connection.close(); } catch (SQLException ignore) {} } return data; } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/HtUserdataManagerBase.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/HtUserdataManagerBase.java index 60f28d95c..e015dd29f 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/HtUserdataManagerBase.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/HtUserdataManagerBase.java @@ -74,7 +74,7 @@ public abstract class HtUserdataManagerBase implements HtUserdataManager { @Override public boolean setUserdata(String username, String key, String data) { - JSONObject o = new JSONObject(); + JSONObject o = new JSONObject(this.getUserdata(username)); o.put(key, new JSONObject(data)); return this.setUserdata(username, o.toString()); } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/HtUserdataManagerImpl.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/HtUserdataManagerImpl.java index 79d963751..832d473c2 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/HtUserdataManagerImpl.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/HtUserdataManagerImpl.java @@ -21,16 +21,7 @@ */ package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data; -import java.util.Arrays; -import java.util.List; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.rpctypehelper.QueryResult; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriterUserdata; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EntityInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.PaginationBuilder; -import org.opendaylight.yangtools.yang.common.Uint32; -import org.opendaylight.yangtools.yang.common.Uint64; public class HtUserdataManagerImpl extends HtUserdataManagerBase { @@ -42,7 +33,9 @@ public class HtUserdataManagerImpl extends HtUserdataManagerBase { @Override public boolean setUserdata(String username, String data) { - return this.rw.write(new UserdataBuilder().setId(username).setValue(data).build(), username) != null; + Userdata o = new UserdataBuilder().setId(username).setValue(data).build(); + String x = this.rw.updateOrInsert(o, username); + return x!=null; } @Override @@ -52,17 +45,8 @@ public class HtUserdataManagerImpl extends HtUserdataManagerBase { @Override protected String readUserdata(String username, String defaultValue) { - EntityInput input = new ReadFaultcurrentListInputBuilder() - .setFilter(Arrays.asList(new FilterBuilder().setProperty("id").setFiltervalue(username).build())) - .setPagination(new PaginationBuilder().setPage(Uint64.valueOf(1)).setSize(Uint32.valueOf(1)).build()) - .build(); - QueryResult result = this.rw.getData(input); - if (result != null) { - List data = result.getResult(); - Userdata user = (data != null && !data.isEmpty()) ? data.get(0) : null; - return user == null ? defaultValue : user.getValue(); - } - return defaultValue; + Userdata user = this.rw.read(username); + return user!=null? user.getValue():defaultValue; } } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/SqlDBDataProvider.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/SqlDBDataProvider.java index b6df73b89..1bb30dc69 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/SqlDBDataProvider.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/SqlDBDataProvider.java @@ -120,11 +120,11 @@ public class SqlDBDataProvider extends HtDatabaseEventsService implements Databa this.mediatorserverRW = new SqlDBReaderWriter<>(this.dbClient, Entity.MediatorServer, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId).setWriteInterface(MediatorServerEntity.class); + this.controllerId).setWriteInterface(MediatorServerEntity.class); this.maintenanceRW = new SqlDBReaderWriter<>(this.dbClient, Entity.Maintenancemode, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId).setWriteInterface(MaintenanceEntity.class); + this.controllerId).setWriteInterface(MaintenanceEntity.class); this.readStatus = new SqlDBStatusReader(this.dbClient, this.controllerId); @@ -137,7 +137,7 @@ public class SqlDBDataProvider extends HtDatabaseEventsService implements Databa }; this.dbMaintenanceService = new HtDatabaseMaintenanceService(this); this.usermanager = new HtUserdataManagerImpl(new SqlDBReaderWriterUserdata(this.dbClient, - Entity.Userdata, config.getDbSuffix(), this.dbClient.getDatabaseName(), this.controllerId)); + Entity.Userdata, config.getDbSuffix())); if (initControllerId) { try { this.setControllerId(); @@ -512,6 +512,7 @@ public class SqlDBDataProvider extends HtDatabaseEventsService implements Databa query = String.format("INSERT INTO `%s` (`id`,`desc`) VALUES ('%s','%s')", this.controllerTableName, this.controllerId, ""); LOG.trace(query); + try { data.close(); } catch (SQLException ignore) { } return this.dbClient.write(query); } else { LOG.trace("controllerId already set"); diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/DatabaseIdGenerator.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/DatabaseIdGenerator.java index 6244894e5..9d09a11c8 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/DatabaseIdGenerator.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/DatabaseIdGenerator.java @@ -74,7 +74,6 @@ public class DatabaseIdGenerator { public static String getFaultcurrentId(String nodeId, String objectId, String problemName) { String uuId = extractUuid(objectId); - return String.format(FORMAT_FAULTDATA_ID, nodeId, uuId, problemName); } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseEventsService.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseEventsService.java index 88aaa583d..776c91fe5 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseEventsService.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseEventsService.java @@ -40,6 +40,7 @@ import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogEntity; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionLogStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity; @@ -50,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Filter; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterBuilder; import org.slf4j.Logger; @@ -89,68 +91,68 @@ public class HtDatabaseEventsService implements DataProvider { this.dbClient = new SqlDBClient(config.getUrl(), config.getUsername(), config.getPassword()); this.connectionlogRW = new SqlDBReaderWriter<>(dbClient, Entity.Connectionlog, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); this.eventlogRW = new SqlDBReaderWriter<>(dbClient, Entity.Eventlog, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); this.eventRWFaultLog = new SqlDBReaderWriter<>(dbClient, Entity.Faultlog, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); this.eventRWFaultCurrent = new SqlDBReaderWriterFault<>(dbClient, Entity.Faultcurrent, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); this.equipmentRW = new SqlDBReaderWriter<>(dbClient, Entity.Inventoryequipment, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); this.guicutthroughRW = new SqlDBReaderWriter<>(dbClient, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity.Guicutthrough, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId).setWriteInterface(Guicutthrough.class); + this.controllerId).setWriteInterface(Guicutthrough.class); this.networkelementConnectionRW = new SqlDBReaderWriter<>(dbClient, Entity.NetworkelementConnection, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); this.networkelementConnectionRW.setWriteInterface(NetworkElementConnectionEntity.class); this.pm15mRW = new SqlDBReaderWriterPm<>(dbClient, Entity.Historicalperformance15min, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); this.pm24hRW = new SqlDBReaderWriterPm<>(dbClient, Entity.Historicalperformance24h, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); this.eventRWCMLog = new SqlDBReaderWriter<>(dbClient, Entity.Cmlog, config.getDbSuffix(), org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.cmlog.list.output.Data.class, - this.dbClient.getDatabaseName(), this.controllerId); + this.controllerId); } @Override public void writeConnectionLog(ConnectionlogEntity event) { - this.connectionlogRW.write(event, event.getId()); + this.connectionlogRW.write(event, null); } @Override public void writeEventLog(EventlogEntity event) { - this.eventlogRW.write(event, event.getId()); + this.eventlogRW.write(event, null); } @Override public void writeFaultLog(FaultlogEntity fault) { - this.eventRWFaultLog.write(fault, fault.getId()); + this.eventRWFaultLog.write(fault, null); } @Override public void writeCMLog(CmlogEntity cm) { - this.eventRWCMLog.write(cm, cm.getId()); + this.eventRWCMLog.write(cm, null); } @Override public void updateFaultCurrent(FaultcurrentEntity fault) { - final String id = fault.getId() != null ? fault.getId() : DatabaseIdGenerator.getFaultcurrentId(fault); + final String id = DatabaseIdGenerator.getFaultcurrentId(fault); if (FaultEntityManager.isManagedAsCurrentProblem(fault)) { if (FaultEntityManager.isNoAlarmIndication(fault)) { LOG.debug("Remove from currentFaults: {}", fault.toString()); @@ -198,8 +200,7 @@ public class HtDatabaseEventsService implements DataProvider { @Override public int clearGuiCutThroughEntriesOfNode(String nodeName) { - this.guicutthroughRW.remove(nodeName); - return 0; + return this.guicutthroughRW.remove(nodeName); } @Override @@ -213,9 +214,28 @@ public class HtDatabaseEventsService implements DataProvider { return this.networkelementConnectionRW.updateOrInsert(ne, nodeId) != null; } + /** + * Remove network element connection if not required + * This function is called onDisconnect event for netconf node + */ @Override public void removeNetworkConnection(String nodeId) { - this.networkelementConnectionRW.remove(nodeId); + NetworkElementConnectionEntity e = this.networkelementConnectionRW.read(nodeId); + Boolean isRequired = e!=null? e.getIsRequired():null; + if (e != null && isRequired != null) { + if (isRequired) { + LOG.debug("updating connection status for {} of required ne to disconnected", nodeId); + this.networkelementConnectionRW.update(new UpdateNetworkElementConnectionInputBuilder() + .setStatus(ConnectionLogStatus.Disconnected).build(), nodeId); + } else { + LOG.debug("remove networkelement-connection for {} entry because of non-required", nodeId); + this.networkelementConnectionRW.remove(nodeId); + } + } else { + LOG.warn("Unable to update connection-status. dbentry for {} not found in networkelement-connection", + nodeId); + } + } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseMaintenanceService.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseMaintenanceService.java index a17c6ae48..8c549ded8 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseMaintenanceService.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseMaintenanceService.java @@ -33,8 +33,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Filter; @@ -109,12 +107,7 @@ public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance { @Override public MaintenanceEntity getMaintenance(@Nullable String nodeId) { - ReadMaintenanceListOutput result = this.dbProvider - .readMaintenanceList( - new ReadMaintenanceListInputBuilder().setFilter(getFilterInput("node-id", nodeId)).build()) - .build(); - final List data = result.getData(); - return data != null ? !data.isEmpty() ? data.get(0) : null : null; + return this.maintenanceRw.read(DatabaseIdGenerator.getMaintenanceId(nodeId)); } @Override diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBMapper.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBMapper.java index c63d2f16b..19323b9f7 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBMapper.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBMapper.java @@ -60,7 +60,7 @@ public class SqlDBMapper { private static final String ENUM_DBTYPE = "VARCHAR(100)"; private static final String BIGINT_DBTYPE = "BIGINT"; public static final String ODLID_DBCOL = "controller-id"; - private static final String ID_DBCOL = "id"; + public static final String ID_DBCOL = "id"; private static List> numericClasses = Arrays.asList(Byte.class, Integer.class, Long.class, BigInteger.class, Uint8.class, Uint16.class, Uint32.class, Uint64.class); private static final YangToolsMapper mapper = new YangToolsMapper(); @@ -78,18 +78,19 @@ public class SqlDBMapper { } public static String createTable(Class clazz, Entity e) throws UnableToMapClassException { - return createTable(clazz, e, "", false); + return createTable(clazz, e, "", false, true); } public static String createTable(Class clazz, Entity e, String suffix) throws UnableToMapClassException { - return createTable(clazz, e, suffix, false); + return createTable(clazz, e, suffix, false, true); } public static String createTable(Class clazz, Entity e, boolean autoIndex) throws UnableToMapClassException { - return createTable(clazz, e, "", false); + return createTable(clazz, e, "", false, true); } - public static String createTable(Class clazz, Entity e, String suffix, boolean autoIndex) + public static String createTable(Class clazz, Entity e, String suffix, boolean autoIndex, + boolean withControllerId) throws UnableToMapClassException { StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE IF NOT EXISTS `" + e.getName() + suffix + "` (\n"); @@ -99,7 +100,9 @@ public class SqlDBMapper { } else { sb.append("`" + ID_DBCOL + "` " + STRING_DBTYPE + " " + getColumnOptions(ID_DBCOL, STRING_DBTYPE) + ",\n"); } - sb.append("`" + ODLID_DBCOL + "` " + ODLID_DBTYPE + " " + getColumnOptions(ODLID_DBCOL, ODLID_DBTYPE) + ",\n"); + if(withControllerId) { + sb.append("`" + ODLID_DBCOL + "` " + ODLID_DBTYPE + " " + getColumnOptions(ODLID_DBCOL, ODLID_DBTYPE) + ",\n"); + } for (Method method : getFilteredMethods(clazz, true)) { Class valueType = method.getReturnType(); String colName = getColumnName(method); @@ -110,8 +113,10 @@ public class SqlDBMapper { String options = getColumnOptions(colName, dbType); sb.append("`" + colName + "` " + dbType + " " + options + ",\n"); } - sb.append("primary key(" + ID_DBCOL + "),"); - sb.append("foreign key(`" + ODLID_DBCOL + "`) references " + TABLENAME_CONTROLLER + "(" + ID_DBCOL + ")"); + sb.append("primary key(" + ID_DBCOL + ")"); + if(withControllerId) { + sb.append(",foreign key(`" + ODLID_DBCOL + "`) references " + TABLENAME_CONTROLLER + "(" + ID_DBCOL + ")"); + } sb.append(");"); return sb.toString(); @@ -350,11 +355,14 @@ public class SqlDBMapper { public static List read(ResultSet data, Class clazz, String column) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, SQLException, InstantiationException, SecurityException, NoSuchMethodException, JsonProcessingException { - + if(data==null) { + return Arrays.asList(); + } Builder builder = findPOJOBuilder(clazz); if(builder==null && column==null) { throw new InstantiationException("unable to find builder for class "+clazz.getName()); } + List list = new ArrayList<>(); while (data.next()) { if (column == null) { diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriter.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriter.java index b5322d6ff..56e965c9f 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriter.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriter.java @@ -57,34 +57,47 @@ public class SqlDBReaderWriter { protected final Entity entity; private final Class clazz; protected final SqlDBClient dbService; - private final String dbName; protected final String controllerId; protected final String tableName; + private final boolean ignoreControllerId; - public SqlDBReaderWriter(SqlDBClient dbService, Entity e, String dbSuffix, Class clazz, String dbName, + public SqlDBReaderWriter(SqlDBClient dbService, Entity e, String dbSuffix, Class clazz, String controllerId) { + this(dbService, e, dbSuffix, clazz, controllerId, false); + } + + public SqlDBReaderWriter(SqlDBClient dbService, Entity e, String dbSuffix, Class clazz, + String controllerId, boolean ignoreControllerId) { this.dbService = dbService; this.entity = e; this.clazz = clazz; - this.dbName = dbName; this.tableName = this.entity.getName() + dbSuffix; this.controllerId = controllerId; + this.ignoreControllerId = ignoreControllerId; } public long count(List filter) throws SQLException { String query; if (filter == null || filter.isEmpty()) { - query = String.format("SELECT table_rows FROM `information_schema`.`tables` " - + "WHERE `table_schema` = '%s' AND `table_name` = '%s'", this.dbName, this.tableName); + // query = String.format("SELECT table_rows FROM `information_schema`.`tables` " + // + "WHERE `table_schema` = '%s' AND `table_name` = '%s'", this.dbName, this.tableName); + query = String.format("SELECT COUNT(`id`) FROM `%s`", this.tableName); } else { query = String.format("SELECT COUNT(`id`) FROM `%s` %s", this.tableName, SqlQuery.getWhereExpression(filter)); } ResultSet data = this.dbService.read(query); + if(data==null) { + return 0; + } long cnt = 0; if (data.next()) { cnt = data.getLong(1); } + try { + data.close(); + } catch (SQLException ignore) { + } return cnt; } @@ -106,11 +119,19 @@ public class SqlDBReaderWriter { public QueryResult getData(EntityInput input) { SelectQuery query = new SelectQuery(this.tableName, input, this.controllerId); - LOG.trace("query={}", query.toSql()); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } try { ResultSet data = this.dbService.read(query.toSql()); List mappedData = SqlDBMapper.read(data, clazz); final Map filter = input.getFilter(); + try { + if(data!=null) { + data.close(); + } + } catch (SQLException ignore) { + } long total = this.count(filter != null ? new ArrayList<>(filter.values()) : null, this.controllerId); return new QueryResult(mappedData, query.getPage(), query.getPageSize(), total); } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException @@ -126,8 +147,11 @@ public class SqlDBReaderWriter { if (id == null) { return this.writeWithoutId(object); } - InsertQuery query = new InsertQuery(this.entity, object, this.controllerId); + InsertQuery query = new InsertQuery(this.entity, object, this.controllerId, this.ignoreControllerId); query.setId(id); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } boolean success = false; try { success = this.dbService.write(query.toSql()); @@ -140,7 +164,11 @@ public class SqlDBReaderWriter { private String writeWithoutId(S object) { - InsertQuery query = new InsertQuery(this.entity, object, this.controllerId); + InsertQuery query = + new InsertQuery(this.entity, object, this.controllerId, this.ignoreControllerId, true); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } try { return this.dbService.writeAndReturnId(query.toSql()); } catch (SQLException e) { @@ -150,8 +178,11 @@ public class SqlDBReaderWriter { } public String update(S object, String id) { - UpdateQuery query = new UpdateQuery(this.entity, object, this.controllerId); + UpdateQuery query = new UpdateQuery(this.entity, object, this.controllerId, this.ignoreControllerId, true); query.setId(id); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } String insertedId = null; PreparedStatement stmt = null; try { @@ -164,6 +195,9 @@ public class SqlDBReaderWriter { if (affectedRows > 0) { insertedId = id; } + if (LOG.isTraceEnabled()) { + LOG.trace("insertedid={}", insertedId); + } } catch (SQLException e) { LOG.warn("problem writing data into db: ", e); } finally { @@ -180,10 +214,12 @@ public class SqlDBReaderWriter { } public String updateOrInsert(S object, String id) { - UpsertQuery query = new UpsertQuery(this.entity, object, this.controllerId); + UpsertQuery query = new UpsertQuery(this.entity, object, this.controllerId, this.ignoreControllerId, true); query.setId(id); String insertedId = null; - LOG.trace("query={}", query.toSql()); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } PreparedStatement stmt = null; try { Connection connection = this.dbService.getConnection(); @@ -221,6 +257,9 @@ public class SqlDBReaderWriter { public int remove(List filters) { DeleteQuery query = new DeleteQuery(this.entity, filters); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } int affectedRows = 0; PreparedStatement stmt = null; try { @@ -249,9 +288,16 @@ public class SqlDBReaderWriter { public List readAll(Class clazz) { SelectQuery query = new SelectQuery(this.tableName); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } try { ResultSet data = this.dbService.read(query.toSql()); List mappedData = SqlDBMapper.read(data, clazz); + try { + data.close(); + } catch (SQLException ignore) { + } return mappedData; } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) { @@ -262,9 +308,16 @@ public class SqlDBReaderWriter { public List readAll(String key) { SelectQuery query = new SelectQuery(this.tableName, key, this.controllerId).groupBy(key); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } try { ResultSet data = this.dbService.read(query.toSql()); List mappedData = SqlDBMapper.read(data, String.class, key); + try { + data.close(); + } catch (SQLException ignore) { + } return mappedData; } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) { @@ -272,4 +325,22 @@ public class SqlDBReaderWriter { } return null; } + + public T read(String id) { + SelectQuery query = + new SelectQuery(this.tableName, this.controllerId).addFilter(SqlDBMapper.ID_DBCOL, id); + if (LOG.isTraceEnabled()) { + LOG.trace("query={}", query.toSql()); + } + T item = null; + try { + ResultSet data = this.dbService.read(query.toSql()); + List mappedData = SqlDBMapper.read(data, clazz); + item = mappedData.size()>0? mappedData.get(0): null; + } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException + | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) { + LOG.warn("problem reading data {}: ", this.entity, e); + } + return item; + } } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterFault.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterFault.java index 2d4e26eea..86d888a16 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterFault.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterFault.java @@ -30,9 +30,9 @@ public class SqlDBReaderWriterFault extends SqlDBReaderWri private static final String NODE_KEY = "node-id"; - public SqlDBReaderWriterFault(SqlDBClient dbService, Entity e, String dbSuffix, Class clazz, String dbName, + public SqlDBReaderWriterFault(SqlDBClient dbService, Entity e, String dbSuffix, Class clazz, String controllerId) { - super(dbService, e, dbSuffix, clazz, dbName, controllerId); + super(dbService, e, dbSuffix, clazz, controllerId); } public List getAllNodes() { diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterPm.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterPm.java index 021741bd8..22aabc429 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterPm.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterPm.java @@ -53,9 +53,9 @@ public class SqlDBReaderWriterPm extends SqlDBReaderWriter private static final FilterKey FILTERKEY = new FilterKey(KEY); - public SqlDBReaderWriterPm(SqlDBClient dbService, Entity e, String dbSuffix, Class clazz, String dbName, + public SqlDBReaderWriterPm(SqlDBClient dbService, Entity e, String dbSuffix, Class clazz, String controllerId) { - super(dbService, e, dbSuffix, clazz, dbName, controllerId); + super(dbService, e, dbSuffix, clazz, controllerId); } /** @@ -83,6 +83,7 @@ public class SqlDBReaderWriterPm extends SqlDBReaderWriter try { ResultSet data = this.dbService.read(query.toSql()); List mappedData = SqlDBMapper.read(data, String.class, UUID_KEY); + try { data.close(); } catch (SQLException ignore) { } Map inpFilter = input.getFilter(); long total = this.count(inpFilter != null ? new ArrayList<>(inpFilter.values()) : null, this.controllerId); return new QueryResult<>(mappedData, query.getPage(), query.getPageSize(), total); @@ -114,6 +115,7 @@ public class SqlDBReaderWriterPm extends SqlDBReaderWriter try { ResultSet data = this.dbService.read(query.toSql()); List mappedData = SqlDBMapper.read(data, String.class, NODE_KEY); + try { data.close(); } catch (SQLException ignore) { } Map inpFilter = input.getFilter(); long total = this.count(inpFilter != null ? new ArrayList<>(inpFilter.values()) : null, this.controllerId); return new QueryResult<>(mappedData, query.getPage(), query.getPageSize(), total); diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterUserdata.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterUserdata.java index 2c849ac67..258cd160f 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterUserdata.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterUserdata.java @@ -27,11 +27,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro public class SqlDBReaderWriterUserdata extends SqlDBReaderWriter { - public SqlDBReaderWriterUserdata(SqlDBClient dbService, Entity e, String dbSuffix, String dbName, - String controllerId) { - super(dbService, e, dbSuffix, Userdata.class, dbName, controllerId); + public SqlDBReaderWriterUserdata(SqlDBClient dbService, Entity e, String dbSuffix) { + super(dbService, e, dbSuffix, Userdata.class, null, true); } + } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBStatusReader.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBStatusReader.java index c98ba388d..b0b169d18 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBStatusReader.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBStatusReader.java @@ -74,6 +74,7 @@ public class SqlDBStatusReader { } } + try { data.close(); } catch (SQLException ignore) { } } catch (SQLException e) { LOG.warn("problem reading status:", e); } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/CountQuery.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/CountQuery.java index c499fefb8..1c1ec622b 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/CountQuery.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/CountQuery.java @@ -59,7 +59,7 @@ public class CountQuery implements SqlQuery { this(e); Map filter = input != null ? input.getFilter() : null; if (filter != null && filter.size() > 0) { - this.filters.addAll(filters); + this.filters.addAll(filter.values()); } if (controllerId != null) { this.addFilter(SqlDBMapper.ODLID_DBCOL, controllerId); diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/InsertQuery.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/InsertQuery.java index 108888ad0..f52fbd55a 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/InsertQuery.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/InsertQuery.java @@ -39,17 +39,28 @@ public class InsertQuery implements SqlQuery { protected final Entity entity; private final String controllerId; + private final boolean ignoreControllerId; private final T object; private final boolean ignoreNull; private String id; + private final boolean ignoreIdField; public InsertQuery(Entity e, T object, String controllerId) { + this(e, object, controllerId, SqlQuery.DEFAULT_IGNORE_CONTROLLERID); + } + + public InsertQuery(Entity e, T object, String controllerId, boolean ignoreControllerId) { + this(e, object, controllerId, ignoreControllerId, SqlQuery.DEFAULT_IGNORE_ID_FIELD); + } + + public InsertQuery(Entity e, T object, String controllerId, boolean ignoreControllerId, boolean ignoreIdField) { this.entity = e; this.controllerId = controllerId; this.object = object; this.ignoreNull = true; this.id = null; - + this.ignoreControllerId = ignoreControllerId; + this.ignoreIdField = ignoreIdField; } @Override @@ -63,8 +74,8 @@ public class InsertQuery implements SqlQuery { return null; } - protected String toSqlWithError() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, - JsonProcessingException { + protected String toSqlWithError() throws IllegalAccessException, IllegalArgumentException, + InvocationTargetException, JsonProcessingException { Class cls = this.object.getClass(); List> kvps = new ArrayList<>(); List cols = new ArrayList<>(); @@ -78,26 +89,37 @@ public class InsertQuery implements SqlQuery { m.setAccessible(true); value = m.invoke(this.object); col = SqlDBMapper.getColumnName(m); - if (col.equals("id") && this.id != null) { - value = this.id; + if (col.equals("id")) { + if (this.ignoreIdField) { + continue; + } + if (this.id != null) { + value = this.id; + } } if (ignoreNull && value == null) { continue; } - DBKeyValuePair kvp = SqlDBMapper.getEscapedKeyValue(m,col, value); + DBKeyValuePair kvp = SqlDBMapper.getEscapedKeyValue(m, col, value); cols.add(kvp.getKey()); args.add(kvp.getValue()); kvps.add(kvp); } if (this.id != null && !cols.contains("`id`")) { cols.add("`id`"); - args.add("'"+this.id+"'"); + args.add("'" + this.id + "'"); + } + if (!this.ignoreControllerId) { + args.add("'" + this.controllerId + "'"); + } + sb.append(String.join(",", cols)); + if (!this.ignoreControllerId) { + sb.append(",`" + SqlDBMapper.ODLID_DBCOL + "`) VALUES ("); + } else { + sb.append(") VALUES ("); } - args.add("'"+this.controllerId+"'"); - sb.append( String.join(",", cols)); - sb.append(",`" + SqlDBMapper.ODLID_DBCOL + "`) VALUES ("); - sb.append( String.join(",", args)+" )"); - this.appendAdditionalToQuery(sb,kvps); + sb.append(String.join(",", args) + " )"); + this.appendAdditionalToQuery(sb, kvps); return sb.toString(); } diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SelectQuery.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SelectQuery.java index 2b3f9f3fa..6403a5c1d 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SelectQuery.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SelectQuery.java @@ -54,9 +54,11 @@ public class SelectQuery implements SqlQuery { private final List groups; public SelectQuery(String tableName) { - this(tableName, Arrays.asList("*"), null); + this(tableName, (String)null); + } + public SelectQuery(String tableName, String controllerId) { + this(tableName, Arrays.asList("*"), controllerId); } - public SelectQuery(String tableName, List fields, String controllerId) { this.tableName = tableName; this.fields = fields; @@ -105,18 +107,21 @@ public class SelectQuery implements SqlQuery { } - public void addFilter(String property, String filtervalue) { + public SelectQuery addFilter(String property, String filtervalue) { this.addFilter(new FilterBuilder().setProperty(property).setFiltervalue(filtervalue).build()); + return this; } private static Filter cleanFilter(Filter filter) { - if (filter.getFiltervalue() != null - && (filter.getFiltervalues() == null || filter.getFiltervalues().isEmpty())) { + final String sFilter = filter.getFiltervalue(); + final List sFilters = filter.getFiltervalues(); + //if only single filter value is set + if (sFilter != null && (sFilters == null || sFilter.isEmpty())) { return "*".equals(filter.getFiltervalue()) ? null : filter; } else { List list = new ArrayList<>(filter.getFiltervalues()); - if (filter.getFiltervalue() != null && !filter.getFiltervalue().isEmpty()) { - list.add(filter.getFiltervalue()); + if (sFilter != null && !sFilter.isEmpty()) { + list.add(sFilter); } if (list.size() == 1 && "*".equals(list.get(0))) { return null; diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SqlQuery.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SqlQuery.java index 82f10b1e5..3e26d0935 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SqlQuery.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SqlQuery.java @@ -27,6 +27,7 @@ import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.TimeZone; +import java.util.stream.Collectors; import org.eclipse.jdt.annotation.Nullable; import org.onap.ccsdk.features.sdnr.wt.common.database.data.DbFilter; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.filters.DBFilterKeyValuePair; @@ -46,12 +47,15 @@ public interface SqlQuery { static final String MARIADB_TIMESTAMP_REPLACER_MIN = "0000-00-00 00:00:00"; static final int MARIADB_TIMESTAMP_REPLACER_MIN_LENGTH = MARIADB_TIMESTAMP_REPLACER_MIN.length(); static final int MARIADB_TIMESTAMP_REPLACER_MAX_LENGTH = MARIADB_TIMESTAMP_REPLACER.length(); + static final boolean DEFAULT_IGNORE_CONTROLLERID = false; + static final boolean DEFAULT_IGNORE_ID_FIELD = false; public static String getWhereExpression(List filters) { if (filters == null) { return ""; } StringBuilder sb = new StringBuilder(); + filters = filters.stream().filter(e -> !"*".equals(e.getFiltervalue())).collect(Collectors.toList()); if (!filters.isEmpty()) { sb.append(" WHERE (" + getFilterExpression(filters.get(0)) + ")"); @@ -64,7 +68,8 @@ public interface SqlQuery { public static String getFilterExpression(Filter filter) { String property = filter.getProperty(); - List values = collectValues(filter.getFiltervalue(), filter.getFiltervalues()); + List values = collectValues(filter.getFiltervalue(), filter.getFiltervalues()).stream() + .filter(e -> !"*".equals(e)).collect(Collectors.toList()); if (values.size() == 1) { return getFilterExpression(property, values.get(0)); } else if (values.size() > 1) { @@ -225,7 +230,7 @@ public interface SqlQuery { } private static String netconfToMariaDBTimestamp(String ts) { - if(ts==null) { + if (ts == null) { return null; } String v = ts.replace("T", " ").replace("Z", ""); diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/UpdateQuery.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/UpdateQuery.java index b47b03042..dc81161ee 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/UpdateQuery.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/UpdateQuery.java @@ -44,10 +44,10 @@ public class UpdateQuery implements SqlQuery { private String id; public UpdateQuery(Entity e, T object) { - this(e, object, null); + this(e, object, null, SqlQuery.DEFAULT_IGNORE_CONTROLLERID, SqlQuery.DEFAULT_IGNORE_ID_FIELD); } - public UpdateQuery(Entity e, T object, String controllerId) { + public UpdateQuery(Entity e, T object, String controllerId, boolean ignoreControllerId, boolean ignoreIdField) { this.entity = e; this.controllerId = controllerId; this.object = object; diff --git a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/UpsertQuery.java b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/UpsertQuery.java index e6f1e13cb..39c505454 100644 --- a/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/UpsertQuery.java +++ b/sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/UpsertQuery.java @@ -31,6 +31,10 @@ public class UpsertQuery extends InsertQuery { public UpsertQuery(Entity e, T object, String controllerId) { super(e, object, controllerId); + } + public UpsertQuery(Entity e, T object, String controllerId, boolean ignoreControllerId, boolean ignoreIdField) { + super(e, object, controllerId, ignoreControllerId, ignoreIdField); + } @Override diff --git a/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestCRUDMariaDB.java b/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestCRUDMariaDB.java index ad4ab6789..1dd9f725e 100644 --- a/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestCRUDMariaDB.java +++ b/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestCRUDMariaDB.java @@ -105,6 +105,7 @@ public class TestCRUDMariaDB { e.printStackTrace(); fail("unable to read size"); } + try { data.close(); } catch (SQLException ignore) { } //create entry success = false; try { @@ -125,6 +126,7 @@ public class TestCRUDMariaDB { e.printStackTrace(); fail("unable to verify write"); } + try { data.close(); } catch (SQLException ignore) { } //update entry success = false; try { @@ -145,6 +147,7 @@ public class TestCRUDMariaDB { e.printStackTrace(); fail("unable to verify write"); } + try { data.close(); } catch (SQLException ignore) { } //delete entry success = false; try { @@ -161,6 +164,7 @@ public class TestCRUDMariaDB { e.printStackTrace(); fail("unable to verify delete. size>0"); } + try { data.close(); } catch (SQLException ignore) { } } @Test diff --git a/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestMariaDataProvider.java b/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestMariaDataProvider.java index b4e0584b0..c9cf27c68 100644 --- a/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestMariaDataProvider.java +++ b/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestMariaDataProvider.java @@ -24,6 +24,8 @@ package org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.IOException; import java.sql.SQLException; @@ -34,14 +36,17 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import org.json.JSONArray; import org.json.JSONException; +import org.json.JSONObject; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriter; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.DeleteQuery; import org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test.util.MariaDBTestBase; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager; import org.onap.ccsdk.features.sdnr.wt.yang.mapper.YangToolsMapper; import org.opendaylight.netconf.shaded.sshd.common.util.io.IoUtils; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; @@ -57,6 +62,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateNetworkElementConnectionOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInput; @@ -72,6 +80,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType; @@ -90,10 +99,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mDeviceListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mLtpListOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hDeviceListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hListOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hLtpListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadStatusOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SeverityType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SourceType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput; @@ -102,6 +115,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.PaginationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint64; import ch.vorburger.exec.ManagedProcessException; @@ -112,6 +126,8 @@ public class TestMariaDataProvider { private static final String NODEID1 = "node1"; private static final String NODEID2 = "node2"; private static final String NODEID3 = "node3"; + private static final String NODEID4 = "node4"; + private static final String NODEID5 = "node5"; private static final String PROBLEM1 = "problem1"; private static final String TIME1 = "2021-05-25T05:12:55.0Z"; private static final String TIME2 = "2021-05-25T05:12:56.0Z"; @@ -121,6 +137,7 @@ public class TestMariaDataProvider { private static final String URI2 = "http://localhost:8181"; private static final String URI3 = "http://localhost:8181"; private static final String PATH = "https://samsung.com/3GPP/simulation/network-function/ves"; + private static final String USERNAME = "admin"; private static MariaDBTestBase testBase; private static SqlDBDataProvider dbProvider; private static SqlDBClient dbClient; @@ -176,12 +193,43 @@ public class TestMariaDataProvider { assertEquals(1, status.getData().get(0).getFaults().getMinors().intValue()); assertEquals(0, status.getData().get(0).getFaults().getWarnings().intValue()); + List nodeList = dbProvider.getAllNodesWithCurrentAlarms(); + assertTrue(nodeList.contains(NODEID1)); + assertEquals(1,nodeList.size()); + faultCurrent1 = new FaultcurrentBuilder().setNodeId(NODEID1).setCounter(1).setObjectId("obj") .setProblem(PROBLEM1).setTimestamp(DateAndTime.getDefaultInstance(TIME1)) .setSeverity(SeverityType.NonAlarmed).setId(String.format("%s/%s", NODEID1, PROBLEM1)).build(); dbProvider.updateFaultCurrent(faultCurrent1); faultCurrents = dbProvider.readFaultCurrentList(createInput("node-id", NODEID1, 1, 20)); assertEquals(1, faultCurrents.getData().size()); + + + } + + @Test + public void testSerializeDeserialize() { + + try { + CreateNetworkElementConnectionOutputBuilder necon = dbProvider.createNetworkElementConnection( + new NetworkElementConnectionBuilder().setNodeId(NODEID1).setIsRequired(Boolean.TRUE).build()); + List netestList = + dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20)).getData(); + + assertNotNull(necon); + assertEquals(1, netestList.size()); + assertTrue(netestList.get(0).getIsRequired()); + SqlDBReaderWriter dbrw = new SqlDBReaderWriter<>(dbClient, Entity.NetworkelementConnection, + MariaDBTestBase.SUFFIX, + Data.class, + CONTROLLERID); + Data e = dbrw.read(NODEID1); + assertNotNull(e); + + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } } @Test @@ -204,6 +252,7 @@ public class TestMariaDataProvider { dbProvider.writeFaultLog(fault2); faultlogs = dbProvider.readFaultLogList(createInput("node-id", NODEID1, 1, 20)); assertEquals(2, faultlogs.getData().size()); + } @Test @@ -211,28 +260,16 @@ public class TestMariaDataProvider { ReadCmlogListOutputBuilder cmlogs = dbProvider.readCMLogList(createInput(1, 20)); assertEquals(0, cmlogs.getData().size()); - CmlogEntity cm1 = new CmlogBuilder() - .setNodeId(NODEID2) - .setCounter(1) - .setTimestamp(DateAndTime.getDefaultInstance(TIME1)) - .setObjectId("obj") - .setNotificationType(CmNotificationType.NotifyMOIChanges) - .setNotificationId("1") - .setSourceIndicator(CmSourceIndicator.MANAGEMENTOPERATION) - .setPath(PATH) - .setValue("pnf-registration: true") - .build(); - CmlogEntity cm2 = new CmlogBuilder() - .setNodeId(NODEID2) - .setCounter(2) - .setTimestamp(DateAndTime.getDefaultInstance(TIME2)) - .setObjectId("obj") - .setNotificationType(CmNotificationType.NotifyMOIChanges) - .setNotificationId("2") - .setSourceIndicator(CmSourceIndicator.UNKNOWN) - .setPath(PATH) - .setValue("pnf-registration: false") - .build(); + CmlogEntity cm1 = + new CmlogBuilder().setNodeId(NODEID2).setCounter(1).setTimestamp(DateAndTime.getDefaultInstance(TIME1)) + .setObjectId("obj").setNotificationType(CmNotificationType.NotifyMOIChanges) + .setNotificationId("1").setSourceIndicator(CmSourceIndicator.MANAGEMENTOPERATION).setPath(PATH) + .setValue("pnf-registration: true").build(); + CmlogEntity cm2 = + new CmlogBuilder().setNodeId(NODEID2).setCounter(2).setTimestamp(DateAndTime.getDefaultInstance(TIME2)) + .setObjectId("obj").setNotificationType(CmNotificationType.NotifyMOIChanges) + .setNotificationId("2").setSourceIndicator(CmSourceIndicator.UNKNOWN).setPath(PATH) + .setValue("pnf-registration: false").build(); dbProvider.writeCMLog(cm1); dbProvider.writeCMLog(cm2); @@ -240,10 +277,10 @@ public class TestMariaDataProvider { assertEquals(2, cmlogs.getData().size()); List cmLogEntityList = List.of(cm1, cm2); - assertEquals("node2",cmLogEntityList.get(0).getNodeId()); - assertEquals("obj",cmLogEntityList.get(0).getObjectId()); - assertEquals(CmNotificationType.NotifyMOIChanges,cmLogEntityList.get(0).getNotificationType()); - assertEquals("2",cmLogEntityList.get(1).getNotificationId()); + assertEquals("node2", cmLogEntityList.get(0).getNodeId()); + assertEquals("obj", cmLogEntityList.get(0).getObjectId()); + assertEquals(CmNotificationType.NotifyMOIChanges, cmLogEntityList.get(0).getNotificationType()); + assertEquals("2", cmLogEntityList.get(1).getNotificationId()); } @@ -383,6 +420,45 @@ public class TestMariaDataProvider { data = dbProvider.readMaintenanceList(createInput(1, 20)); assertEquals(3, data.getData().size()); + UpdateMaintenanceInput update1 = + new UpdateMaintenanceInputBuilder().setId(NODEID1).setNodeId(NODEID1).setActive(false).build(); + try { + dbProvider.updateMaintenance(update1); + } catch (IOException e) { + e.printStackTrace(); + fail("unable to update maintenance data"); + } + data = dbProvider.readMaintenanceList(createInput("active","false",1, 20)); + assertEquals(1, data.getData().size()); + DeleteMaintenanceInput delete1 = new DeleteMaintenanceInputBuilder().setId(NODEID1).build(); + try { + dbProvider.deleteMaintenance(delete1); + } catch (IOException e) { + e.printStackTrace(); + fail("unable to delete maintenance data"); + } + data = dbProvider.readMaintenanceList(createInput(1, 20)); + assertEquals(2, data.getData().size()); + try { + dbClient.delete(new DeleteQuery(Entity.Maintenancemode, null).toSql()); + } catch (SQLException e) { + e.printStackTrace(); + fail("problem clearing faultlog"); + } + final String nodeId = "maint_node1"; + HtDatabaseMaintenance maintenanceService = dbProvider.getHtDatabaseMaintenance(); + MaintenanceEntity e = maintenanceService.createIfNotExists(nodeId); + assertNotNull(e); + assertEquals(nodeId,e.getNodeId()); + MaintenanceEntity e2 = new CreateMaintenanceInputBuilder(e).setActive(true).build(); + e = maintenanceService.setMaintenance(e2); + assertNotNull(e); + assertEquals(nodeId,e.getNodeId()); + assertTrue(e.getActive()); + maintenanceService.deleteIfNotRequired(nodeId); + data = dbProvider.readMaintenanceList(createInput("node-id",nodeId,1, 20)); + assertEquals(0, data.getData().size()); + } @Test @@ -456,22 +532,26 @@ public class TestMariaDataProvider { NetworkElementConnectionEntity ne2 = new NetworkElementConnectionBuilder().setNodeId(NODEID2) .setHost("10.20.30.55").setPort(Uint32.valueOf(8300)).setIsRequired(false).setUsername("user") .setPassword("passwd").setStatus(ConnectionLogStatus.Connecting).build(); + NetworkElementConnectionEntity ne3 = new NetworkElementConnectionBuilder().setNodeId(NODEID3) + .setHost("10.20.30.55").setPort(Uint32.valueOf(8300)).setIsRequired(false).setUsername("user") + .setPassword("passwd").setStatus(ConnectionLogStatus.Connecting).build(); try { dbProvider.createNetworkElementConnection(ne1); dbProvider.createNetworkElementConnection(ne2); + dbProvider.updateNetworkConnection22(ne3, NODEID3); } catch (IOException e) { e.printStackTrace(); fail("problem creating neconnection"); } data = dbProvider.readNetworkElementConnectionList(createInput(1, 20)); - assertEquals(2, data.getData().size()); + assertEquals(3, data.getData().size()); NetworkElementConnectionEntity update1 = new NetworkElementConnectionBuilder() .setStatus(ConnectionLogStatus.Connected).setDeviceType(NetworkElementDeviceType.ORAN).build(); dbProvider.updateNetworkConnectionDeviceType(update1, NODEID1); data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20)); assertEquals(1, data.getData().size()); assertEquals(NetworkElementDeviceType.ORAN, data.getData().get(0).getDeviceType()); - assertEquals(true, data.getData().get(0).isIsRequired()); + assertEquals(true, data.getData().get(0).getIsRequired()); UpdateNetworkElementConnectionInput update2 = new UpdateNetworkElementConnectionInputBuilder().setId(NODEID2) .setHost("10.20.55.44").setIsRequired(true).build(); try { @@ -483,7 +563,7 @@ public class TestMariaDataProvider { data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID2, 1, 20)); assertEquals(1, data.getData().size()); assertEquals("10.20.55.44", data.getData().get(0).getHost()); - assertEquals(true, data.getData().get(0).isIsRequired()); + assertEquals(true, data.getData().get(0).getIsRequired()); ReadStatusOutputBuilder status = null; try { @@ -493,10 +573,10 @@ public class TestMariaDataProvider { fail("failed to read status"); } assertEquals(1, status.getData().get(0).getNetworkElementConnections().getConnected().intValue()); - assertEquals(1, status.getData().get(0).getNetworkElementConnections().getConnecting().intValue()); + assertEquals(2, status.getData().get(0).getNetworkElementConnections().getConnecting().intValue()); assertEquals(0, status.getData().get(0).getNetworkElementConnections().getDisconnected().intValue()); assertEquals(0, status.getData().get(0).getNetworkElementConnections().getMounted().intValue()); - assertEquals(2, status.getData().get(0).getNetworkElementConnections().getTotal().intValue()); + assertEquals(3, status.getData().get(0).getNetworkElementConnections().getTotal().intValue()); assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUnableToConnect().intValue()); assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUndefined().intValue()); assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUnmounted().intValue()); @@ -513,9 +593,39 @@ public class TestMariaDataProvider { data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20)); assertEquals(0, data.getData().size()); data = dbProvider.readNetworkElementConnectionList(createInput(1, 20)); - assertEquals(1, data.getData().size()); + assertEquals(2, data.getData().size()); + } + @Test + public void testUserdata() { + HtUserdataManager mgr = dbProvider.getUserManager(); + String userdata = mgr.getUserdata(USERNAME); + assertEquals("{}",userdata); + JSONObject o = new JSONObject(); + o.put("key1", false); + o.put("key2","value2"); + boolean result = mgr.setUserdata(USERNAME, o.toString()); + assertTrue(result); + userdata = mgr.getUserdata(USERNAME); + o = new JSONObject(userdata); + assertEquals(false,o.getBoolean("key1")); + assertEquals("value2",o.getString("key2")); + o = new JSONObject(); + o.put("enabled", true); + o.put("name","abcdef"); + result = mgr.setUserdata(USERNAME,"app1",o.toString()); + assertTrue(result); + userdata = mgr.getUserdata(USERNAME); + o = new JSONObject(userdata); + assertEquals(false,o.getBoolean("key1")); + assertEquals("value2",o.getString("key2")); + JSONObject app = o.getJSONObject("app1"); + assertNotNull(app); + assertEquals(true, app.getBoolean("enabled")); + assertEquals("abcdef", app.getString("name")); + + } @Test public void testpm15m() { try { @@ -538,7 +648,7 @@ public class TestMariaDataProvider { assertEquals(10, data.getData().size()); ReadPmdata15mLtpListOutputBuilder ltpdata = null; try { - ltpdata = dbProvider.readPmdata15mLtpList(createInput("node-name","sim12600",1, 20)); + ltpdata = dbProvider.readPmdata15mLtpList(createInput("node-name", "sim12600", 1, 20)); } catch (IOException e) { e.printStackTrace(); fail("failed to read pmdata15m ltp list"); @@ -546,7 +656,7 @@ public class TestMariaDataProvider { assertEquals(3, ltpdata.getData().size()); ReadPmdata15mDeviceListOutputBuilder devicedata = null; try { - devicedata = dbProvider.readPmdata15mDeviceList(createInput(1,20)); + devicedata = dbProvider.readPmdata15mDeviceList(createInput(1, 20)); } catch (IOException e) { e.printStackTrace(); fail("failed to read pmdata15m devices list"); @@ -554,7 +664,6 @@ public class TestMariaDataProvider { assertEquals(1, devicedata.getData().size()); } - @Ignore @Test public void testpm24h() { try { @@ -573,9 +682,27 @@ public class TestMariaDataProvider { fail("failed to load pmdata24h"); } dbProvider.doWritePerformanceData(list); + data = dbProvider.readPmdata24hList(createInput(1, 20)); + assertEquals(1, data.getData().size()); + ReadPmdata24hLtpListOutputBuilder ltpdata = null; + try { + ltpdata = dbProvider.readPmdata24hLtpList(createInput("node-name", "test", 1, 20)); + } catch (IOException e) { + e.printStackTrace(); + fail("failed to read pmdata15m ltp list"); + } + assertEquals(1, ltpdata.getData().size()); + ReadPmdata24hDeviceListOutputBuilder devicedata = null; + try { + devicedata = dbProvider.readPmdata24hDeviceList(createInput(1, 20)); + } catch (IOException e) { + e.printStackTrace(); + fail("failed to read pmdata15m devices list"); + } + assertEquals(1, devicedata.getData().size()); } - private static EntityInput createInput(int page, int size) { + static EntityInput createInput(int page, int size) { return createInput(null, null, page, size); } @@ -597,7 +724,7 @@ public class TestMariaDataProvider { return String.join("\n", IoUtils.readAllLines(TestMariaDataProvider.class.getResourceAsStream(filename))); } - private static EntityInput createInput(String filter, String filterValue, int page, int size) { + static EntityInput createInput(String filter, String filterValue, int page, int size) { ReadFaultcurrentListInputBuilder builder = new ReadFaultcurrentListInputBuilder().setPagination( new PaginationBuilder().setPage(Uint64.valueOf(page)).setSize(Uint32.valueOf(size)).build()); if (filter != null && filterValue != null) { diff --git a/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestQuerySyntax.java b/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestQuerySyntax.java index 24347c7db..576a3825c 100644 --- a/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestQuerySyntax.java +++ b/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/TestQuerySyntax.java @@ -22,12 +22,16 @@ package org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.CountQuery; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.SelectQuery; +import org.onap.ccsdk.features.sdnr.wt.yang.mapper.YangToolsMapperHelper; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EntityInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryInputBuilder; @@ -164,8 +168,8 @@ public class TestQuerySyntax { @Test public void testSelectForFilterValues() { EntityInput input = new ReadGuiCutThroughEntryInputBuilder() - .setFilter(Arrays.asList( - new FilterBuilder().setProperty("id").setFiltervalues(Arrays.asList("das", "das2")).build())) + .setFilter(YangToolsMapperHelper.toMap(Arrays.asList( + new FilterBuilder().setProperty("id").setFiltervalues(Arrays.asList("das", "das2")).build()))) .setPagination(new PaginationBuilder().setSize(Uint32.valueOf(20)).setPage(Uint64.valueOf(1)).build()) .build(); SelectQuery query = new SelectQuery(TABLENAME1, input, CONTROLLERID); @@ -174,8 +178,8 @@ public class TestQuerySyntax { @Test public void testSelectForFilterValues2() { EntityInput input = new ReadGuiCutThroughEntryInputBuilder() - .setFilter(Arrays.asList( - new FilterBuilder().setProperty("id").setFiltervalue("*").build())) + .setFilter(YangToolsMapperHelper.toMap(Arrays.asList( + new FilterBuilder().setProperty("id").setFiltervalue("*").build()))) .setPagination(new PaginationBuilder().setSize(Uint32.valueOf(20)).setPage(Uint64.valueOf(1)).build()) .build(); SelectQuery query = new SelectQuery(TABLENAME1, input, CONTROLLERID); @@ -185,12 +189,38 @@ public class TestQuerySyntax { @Test public void testSelectForFilterValues3() { EntityInput input = new ReadGuiCutThroughEntryInputBuilder() - .setFilter(Arrays.asList( - new FilterBuilder().setProperty("id").setFiltervalues(Arrays.asList("*","abc")).build())) + .setFilter(YangToolsMapperHelper.toMap(Arrays.asList( + new FilterBuilder().setProperty("id").setFiltervalues(Arrays.asList("*","abc")).build()))) .setPagination(new PaginationBuilder().setSize(Uint32.valueOf(20)).setPage(Uint64.valueOf(1)).build()) .build(); SelectQuery query = new SelectQuery(TABLENAME1, input, CONTROLLERID); System.out.println(query.toSql()); assertFalse(query.toSql().contains("RLIKE")); } + @Test + public void testSelectForFilterValues4() { + EntityInput input = new ReadGuiCutThroughEntryInputBuilder() + .setFilter(YangToolsMapperHelper.toMap(Arrays.asList( + new FilterBuilder().setProperty("id").setFiltervalues(Arrays.asList("abc")).build(), + new FilterBuilder().setProperty("node-id").setFiltervalues(Arrays.asList("*")).build()))) + .setPagination(new PaginationBuilder().setSize(Uint32.valueOf(20)).setPage(Uint64.valueOf(1)).build()) + .build(); + SelectQuery query = new SelectQuery(TABLENAME1, input, CONTROLLERID); + System.out.println(query.toSql()); + assertFalse(query.toSql().contains("RLIKE")); + } + @Test + public void testCount() { + CountQuery query = new CountQuery(Entity.Eventlog, TestMariaDataProvider.createInput(1, 20)); + String sQuery = query.toSql(); + assertNotNull(sQuery); + assertTrue(sQuery.contains("*") && sQuery.contains("COUNT") && sQuery.contains(Entity.Eventlog.getName())); + + query = new CountQuery(Entity.Eventlog, TestMariaDataProvider.createInput("node-id","abc",1, 20)); + sQuery = query.toSql(); + assertNotNull(sQuery); + assertTrue(sQuery.contains("node-id") && sQuery.contains("COUNT") && sQuery.contains(Entity.Eventlog.getName())); + + + } } diff --git a/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/util/MariaDBTestBase.java b/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/util/MariaDBTestBase.java index 3360d3ed8..aebd3328e 100644 --- a/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/util/MariaDBTestBase.java +++ b/sdnr/wt/data-provider/dblib/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/dblib/test/util/MariaDBTestBase.java @@ -34,6 +34,7 @@ import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section.Env import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBConfig; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.Userdata; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper.UnableToMapClassException; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogEntity; @@ -60,6 +61,7 @@ public class MariaDBTestBase { private SqlDBConfig config; private static final Map envDefaultValues = initEnvDefaultValues(); private static final String SDNRDBDATABASETEST = "test"; + public static final String SUFFIX = ""; public MariaDBTestBase() throws ManagedProcessException { this(new Random().nextInt(1000) + 50000); @@ -173,6 +175,7 @@ public class MariaDBTestBase { createTable(dbService, MaintenanceEntity.class, Entity.Maintenancemode, false); createTable(dbService, MediatorServerEntity.class, Entity.MediatorServer, true); createTable(dbService, NetworkElementConnectionEntity.class, Entity.NetworkelementConnection, false); + createTable(dbService, Userdata.class, Entity.Userdata, false, false); } public static boolean createTableOdl(SqlDBClient dbService) { @@ -181,11 +184,14 @@ public class MariaDBTestBase { System.out.println(createStatement); return dbService.createTable(createStatement); } - public static boolean createTable(SqlDBClient dbService, Class cls, Entity entity, boolean autoIndex) { + return createTable(dbService, cls, entity, autoIndex, true); + } + public static boolean createTable(SqlDBClient dbService, Class cls, Entity entity, boolean autoIndex, + boolean withControllerId) { String createStatement = null; try { - createStatement = SqlDBMapper.createTable(cls, entity, "", autoIndex); + createStatement = SqlDBMapper.createTable(cls, entity, SUFFIX, autoIndex,withControllerId); } catch (UnableToMapClassException e) { fail(e.getMessage()); } diff --git a/sdnr/wt/data-provider/dblib/src/test/resources/pmdata24h.json b/sdnr/wt/data-provider/dblib/src/test/resources/pmdata24h.json new file mode 100644 index 000000000..6b1f6b543 --- /dev/null +++ b/sdnr/wt/data-provider/dblib/src/test/resources/pmdata24h.json @@ -0,0 +1,55 @@ +[ + { + "uuid-interface": "LP-MWPS-TTP-RADIO", + "granularity-period": "period-24-hours", + "suspect-interval-flag": false, + "layer-protocol-name": "MWPS", + "performance-data": { + "time-period": 86400, + "es": 0, + "ses": 0, + "cses": 0, + "unavailability": 0, + "tx-level-min": 3, + "tx-level-max": 3, + "tx-level-avg": 3, + "rx-level-min": -44, + "rx-level-max": -45, + "rx-level-avg": -44, + "time2-states": 0, + "time4-states-s": 0, + "time4-states": 0, + "time8-states": -1, + "time16-states-s": -1, + "time16-states": 0, + "time32-states": -1, + "time64-states": 86400, + "time128-states": -1, + "time256-states": -1, + "time512-states": -1, + "time512-states-l": -1, + "time1024-states": -1, + "time1024-states-l": -1, + "time2048-states": -1, + "time2048-states-l": -1, + "time4096-states": -1, + "time4096-states-l": -1, + "time8192-states": -1, + "time8192-states-l": -1, + "snir-min": -99, + "snir-max": -99, + "snir-avg": -99, + "xpd-min": -99, + "xpd-max": -99, + "xpd-avg": -99, + "rf-temp-min": -99, + "rf-temp-max": -99, + "rf-temp-avg": -99, + "defect-blocks-sum": -1 + }, + "radio-signal-id": "Test8", + "scanner-id": "PM_RADIO_24H_1", + "time-stamp": "2017-03-01T00:00:00.0+00:00", + "node-name": "test" + } +] \ No newline at end of file -- cgit 1.2.3-korg