fix some sdnr sonar bugs 83/123483/1
authorMichael DÜrre <michael.duerre@highstreet-technologies.com>
Tue, 24 Aug 2021 04:16:11 +0000 (06:16 +0200)
committerMichael DÜrre <michael.duerre@highstreet-technologies.com>
Tue, 24 Aug 2021 04:17:47 +0000 (06:17 +0200)
sonar fixes for some sdnr components

Issue-ID: SDNC-1590
Change-Id: I02e44b6f5477bcd0490c3499caf20228eb9772ed
Signed-off-by: Michael DÜrre <michael.duerre@highstreet-technologies.com>
34 files changed:
sdnr/wt/apigateway/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/apigateway/MyProperties.java
sdnr/wt/common-yang/utils/src/main/java/org/onap/ccsdk/features/sdnr/wt/yang/mapper/YangToolsMapperHelper.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/configuration/ConfigurationFileRepresentation.java
sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/configuration/subtypes/Section.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/SqlDBClient.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/DatabaseIdGenerator.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/data/entity/HtDatabaseMaintenanceService.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBMapper.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriter.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/database/SqlDBReaderWriterPm.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SelectQuery.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/SqlQuery.java
sdnr/wt/data-provider/dblib/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/sqldb/query/filters/DBKeyValuePair.java
sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/types/YangHelper2.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/EsDataObjectReaderWriter2.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/rpctypehelper/QueryByFilter.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeHttpServlet.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/UserdataHttpServlet.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/AboutHttpServlet.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/MarkdownTable.java
sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderServiceImpl.java
sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/Program.java
sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/database/ElasticsearchDataMigrationProvider.java
sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/database/MariaDbDataMigrationProvider.java
sdnr/wt/oauth-provider/provider-jar/pom.xml
sdnr/wt/oauth-provider/provider-jar/src/main/java/org/onap/ccsdk/features/sdnr/wt/oauthprovider/data/Config.java
sdnr/wt/oauth-provider/provider-jar/src/main/java/org/onap/ccsdk/features/sdnr/wt/oauthprovider/http/AuthHttpServlet.java
sdnr/wt/oauth-provider/provider-jar/src/main/java/org/onap/ccsdk/features/sdnr/wt/oauthprovider/providers/MdSalAuthorizationStore.java
sdnr/wt/oauth-provider/provider-jar/src/main/java/org/onap/ccsdk/features/sdnr/wt/oauthprovider/providers/TokenCreator.java
sdnr/wt/websocketmanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager/model/data/ReducedSchemaInfo.java
sdnr/wt/websocketmanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager/model/data/SchemaInfo.java
sdnr/wt/websocketmanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager/model/data/Scope.java
sdnr/wt/websocketmanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager/WebSocketManagerSocket.java
sdnr/wt/websocketmanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/test/UserScopeTest.java

index 66cbd02..560330f 100644 (file)
@@ -150,7 +150,7 @@ public class MyProperties {
         in.close();
 
         this.aaiBase = getProperty(defaultProps,"aai", DEFAULT_AAI);
-        this.aaiHeaders = _parseHeadersMap(getProperty(defaultProps,"aaiHeaders", DEFAULT_AAI_HEADERS));
+        this.aaiHeaders = parseHeadersMap(getProperty(defaultProps,"aaiHeaders", DEFAULT_AAI_HEADERS));
         this.esBase = getProperty(defaultProps,"database", DEFAULT_ESDATABASE);
         this.tilesBase = getProperty(defaultProps,"tiles", DEFAULT_TILES, DEFAULT_URL_OFF);
         this.topologyBase = getProperty(defaultProps,"topology", DEFAULT_TOPOLOGY, DEFAULT_URL_OFF);
@@ -187,12 +187,12 @@ public class MyProperties {
             }
             value = tmp;
         }
-        if((value==null || value == "") && valueIfEmpty!=null) {
+        if((value==null || value.isEmpty()) && valueIfEmpty!=null) {
             value = valueIfEmpty;
         }
         return value;
     }
-    private static Map<String, String> _parseHeadersMap(String s) {
+    private static Map<String, String> parseHeadersMap(String s) {
         Map<String, String> r = new HashMap<>();
         try {
             JSONArray a = new JSONArray(s);
index c50e321..f443fd6 100644 (file)
@@ -87,7 +87,7 @@ public class YangToolsMapperHelper {
             }
         }
         // really not found in any bundle
-        throw new ClassNotFoundException("Can not find class '"+name+"'");
+        throw new ClassNotFoundException("Can not find class '" + name + "'");
     }
 
     private static Class<?> loadClass(Bundle b, String name) throws ClassNotFoundException {
@@ -126,11 +126,13 @@ public class YangToolsMapperHelper {
     }
 
     @SuppressWarnings("unchecked")
-    public static <B extends Builder<?>> Class<B> findBuilderClass(DeserializationContext ctxt, Class<?> clazz) throws ClassNotFoundException {
+    public static <B extends Builder<?>> Class<B> findBuilderClass(DeserializationContext ctxt, Class<?> clazz)
+            throws ClassNotFoundException {
         return (Class<B>) findClass(getBuilderClassName(clazz));
     }
 
-    public static <B extends Builder<?>> Optional<Class<B>> findBuilderClassOptional(DeserializationContext ctxt, Class<?> clazz) {
+    public static <B extends Builder<?>> Optional<Class<B>> findBuilderClassOptional(DeserializationContext ctxt,
+            Class<?> clazz) {
         try {
             return Optional.of(findBuilderClass(ctxt, clazz));
         } catch (ClassNotFoundException e) {
@@ -149,7 +151,9 @@ public class YangToolsMapperHelper {
     }
 
     @SuppressWarnings("unchecked")
-    public static <T> Optional<T> getInstanceByConstructor(Class<?> clazz, String arg) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
+    public static <T> Optional<T> getInstanceByConstructor(Class<?> clazz, String arg)
+            throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
+            NoSuchMethodException, SecurityException {
         List<Class<?>> ctypes = getConstructorParameterTypes(clazz, String.class);
         Optional<Object> oObj;
         for (Class<?> ctype : ctypes) {
@@ -167,17 +171,16 @@ public class YangToolsMapperHelper {
     }
 
     @SuppressWarnings("unchecked")
-    public static <T> Optional<T> getDefaultInstance(@Nullable Class<?> clazz, String arg)
-            throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
-            InvocationTargetException {
-        LOG.trace("arg:'{}' clazz '{}'", arg, clazz.getName());
+    public static <T> Optional<T> getDefaultInstance(@Nullable Class<?> clazz, String arg) throws NoSuchMethodException,
+            SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+        LOG.trace("arg:'{}' clazz '{}'", arg, clazz != null ? clazz.getName() : "null");
         if (clazz != null) {
             Method[] methods = clazz.getDeclaredMethods();
             for (Method m : methods) {
                 //TODO Verify argument type to avoid exception
                 if (m.getName().equals(TYPEOBJECT_INSTANCE_METHOD)) {
                     Method method = clazz.getDeclaredMethod(TYPEOBJECT_INSTANCE_METHOD, String.class);
-                    LOG.trace("Invoke {} available {}",TYPEOBJECT_INSTANCE_METHOD, method != null);
+                    LOG.trace("Invoke {} available {}", TYPEOBJECT_INSTANCE_METHOD, method != null);
                     return Optional.of((T) method.invoke(null, arg));
                 }
             }
@@ -212,7 +215,7 @@ public class YangToolsMapperHelper {
     }
 
     public static boolean implementsInterface(Class<?> clz, Class<?> ifToImplement) {
-        if(clz.equals(ifToImplement)) {
+        if (clz.equals(ifToImplement)) {
             return true;
         }
         Class<?>[] ifs = clz.getInterfaces();
@@ -240,6 +243,7 @@ public class YangToolsMapperHelper {
         ret.append(toCamelCase(name));
         return ret.toString();
     }
+
     public static String toCamelCase(final String name) {
         int start = 0;
         final StringBuilder ret = new StringBuilder(name.length());
@@ -255,20 +259,25 @@ public class YangToolsMapperHelper {
         }
         return ret.toString();
     }
+
     public static String toCamelCaseClassName(final String name) {
         final String clsName = toCamelCase(name);
-        return clsName.substring(0,1).toUpperCase()+clsName.substring(1);
+        return clsName.substring(0, 1).toUpperCase() + clsName.substring(1);
     }
+
     private static BundleContext getBundleContext() {
         Bundle bundle = FrameworkUtil.getBundle(YangToolsMapperHelper.class);
         return bundle != null ? bundle.getBundleContext() : null;
     }
+
     public static boolean hasTime(Notification notification) {
         return notification instanceof EventInstantAware;
     }
+
     public static boolean hasTime(DOMNotification notification) {
         return notification instanceof DOMEvent;
     }
+
     public static DateAndTime getTime(Notification notification, Instant defaultValue) {
         Instant time;
         if (hasTime(notification)) { // If notification class extends/implements the EventInstantAware
index 54a5172..9ca985d 100644 (file)
@@ -49,6 +49,8 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
     public static final String SECTIONNAME_ROOT = "";
     private static final String LR = "\n";
     private static final String EMPTY = "";
+
+    private static final String LOG_UNKNWON_CONFIG_SECTION = "Unknown configuration section {}";
     // end of constants
 
     // variables
@@ -70,8 +72,12 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
                 if (!this.mFile.createNewFile()) {
                     LOG.error("Can not create file {}", f.getAbsolutePath());
                 }
-                this.mFile.setReadable(true, false);
-                this.mFile.setWritable(true, false);
+                if (!this.mFile.setReadable(true, false)) {
+                    LOG.warn("unable to set file as readable");
+                }
+                if (!this.mFile.setWritable(true, false)) {
+                    LOG.warn("unable to set file as writable");
+                }
             }
             reLoad();
 
@@ -106,9 +112,7 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
         String curSectionName = SECTIONNAME_ROOT;
         Optional<Section> sectionOptional = this.getSection(curSectionName);
         Section curSection = sectionOptional.isPresent() ? sectionOptional.get() : this.addSection(curSectionName);
-        BufferedReader br = null;
-        try {
-            br = new BufferedReader(new FileReader(this.mFile));
+        try (BufferedReader br = new BufferedReader(new FileReader(this.mFile))) {
             for (String line; (line = br.readLine()) != null;) {
                 line = line.trim();
                 if (line.isEmpty()) {
@@ -124,13 +128,6 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
 
         } catch (Exception e) {
             LOG.info("Problem loading configuration file. {} {}", getMFileName(), e);
-        } finally {
-            try {
-                if (br != null) {
-                    br.close();
-                }
-            } catch (IOException e) {
-            }
         }
         LOG.debug("finished loading file");
         LOG.debug("start parsing sections");
@@ -164,9 +161,8 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
                     bw.write(String.join(LR, section.toLines()) + LR + LR);
                 }
             }
-            bw.close();
         } catch (Exception e) {
-            LOG.warn("problem saving value: " + e.getMessage());
+            LOG.warn("problem saving value: {}", e.getMessage());
         }
     }
 
@@ -194,7 +190,6 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
         if (this.fileObserver != null) {
             this.fileObserver.interrupt();
         }
-        super.finalize();
     }
 
     /*
@@ -206,7 +201,7 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
             os.get().setProperty(key, value == null ? "null" : value.toString());
             save();
         } else {
-            LOG.info("Unknown configuration section {}", section);
+            LOG.info(LOG_UNKNWON_CONFIG_SECTION, section);
         }
     }
 
@@ -215,7 +210,7 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
         if (os.isPresent()) {
             return os.get().getProperty(propertyKey);
         } else {
-            LOG.debug("Unknown configuration section {}", section);
+            LOG.debug(LOG_UNKNWON_CONFIG_SECTION, section);
             return EMPTY;
         }
     }
@@ -225,7 +220,7 @@ public class ConfigurationFileRepresentation implements IConfigChangedListener {
         if (os.isPresent()) {
             return os.get().getLong(propertyKey);
         } else {
-            LOG.debug("Unknown configuration section {}", section);
+            LOG.debug(LOG_UNKNWON_CONFIG_SECTION, section);
             return Optional.empty();
         }
     }
index c6b121a..55e329e 100644 (file)
@@ -29,7 +29,6 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import org.eclipse.jdt.annotation.NonNull;
 import org.onap.ccsdk.features.sdnr.wt.common.configuration.exception.ConversionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -266,7 +265,7 @@ public class Section {
     }
 
     // static methods
-    public static void setEnvGetter(@NonNull EnvGetter newEnvGetter) {
+    public static void setEnvGetter(EnvGetter newEnvGetter) {
         if (Objects.nonNull(newEnvGetter)) {
             envGetter = newEnvGetter;
         } else {
index f16eadd..ce9d4dc 100644 (file)
@@ -56,6 +56,7 @@ 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;
@@ -72,8 +73,8 @@ public class SqlDBClient {
     public SqlDBClient(String dbUrl, String username, String password) throws IllegalArgumentException {
         this.dbConnectionString = String.format("%s?user=%s&password=%s", dbUrl, username, password);
         final Matcher matcher = DBURL_PATTERN.matcher(dbUrl);
-        if(!matcher.find()) {
-            throw new IllegalArgumentException("unable to parse databaseUrl "+dbUrl);
+        if (!matcher.find()) {
+            throw new IllegalArgumentException("unable to parse databaseUrl " + dbUrl);
         }
         this.dbHost = matcher.group(2);
         this.dbPort = Integer.parseInt(matcher.group(3));
@@ -117,7 +118,7 @@ public class SqlDBClient {
     }
 
     public void waitForYellowStatus(long timeoutms) {
-        Portstatus.waitSecondsTillAvailable(timeoutms/1000, this.dbHost, this.dbPort);
+        Portstatus.waitSecondsTillAvailable(timeoutms / 1000, this.dbHost, this.dbPort);
     }
 
     public DatabaseVersion readActualVersion() throws SQLException, ParseException {
@@ -136,7 +137,7 @@ public class SqlDBClient {
                 }
             }
         } catch (SQLException e) {
-            LOG.warn("problem reading tables: ", e);
+            LOG.warn("problem reading actual version: ", e);
         }
         throw new SQLException("unable to read version from database");
     }
@@ -152,16 +153,26 @@ public class SqlDBClient {
     }
 
     public boolean createTable(String query) {
+        boolean result = false;
+        PreparedStatement stmt = null;
         try {
             Connection connection = this.getConnection();
-            PreparedStatement stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
+            stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
             stmt.execute();
             connection.close();
-            return true;
+            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);
+                }
+            }
         }
-        return false;
+        return result;
     }
 
     public boolean createView(String tableName, String viewName) throws SQLException {
@@ -186,31 +197,81 @@ public class SqlDBClient {
 
     public boolean update(String query) throws SQLException {
         boolean result = false;
-        Connection connection = null;
-        connection = DriverManager.getConnection(this.dbConnectionString);
-        Statement stmt = connection.createStatement();
-        result = stmt.execute(query);
-        return stmt.getUpdateCount() > 0 ? stmt.getUpdateCount() > 0 : result;
+        SQLException innerE = null;
+        Statement stmt = null;
+        try (Connection 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 (innerE != null) {
+            throw innerE;
+        }
+        return result;
     }
 
     public boolean write(String query) throws SQLException {
-        Connection connection = this.getConnection();
-        PreparedStatement stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
-        boolean result = stmt.execute();
-        connection.close();
-        return stmt.getUpdateCount() > 0 ? stmt.getUpdateCount() > 0 : result;
+        boolean result = false;
+        SQLException innerE = null;
+        PreparedStatement stmt = null;
+        try (Connection 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 (innerE != null) {
+            throw innerE;
+        }
+        return result;
     }
 
     public String writeAndReturnId(String query) throws SQLException {
-        Connection connection = this.getConnection();
-        PreparedStatement stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
-        stmt.execute();
-        ResultSet generatedKeys = stmt.getGeneratedKeys();
-        connection.close();
-        if (generatedKeys.next()) {
-            return String.valueOf(generatedKeys.getLong(1));
+        String result = null;
+        SQLException innerE = null;
+        PreparedStatement stmt = null;
+        try (Connection connection = this.getConnection()) {
+            stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
+            stmt.execute();
+            ResultSet 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);
+            }
         }
-        return null;
+        if (innerE != null) {
+            throw innerE;
+        }
+        return result;
     }
 
     public boolean deleteTable(String tableName) throws SQLException {
@@ -229,24 +290,21 @@ public class SqlDBClient {
 
     public ResultSet read(String query) {
         ResultSet data = null;
-        Connection connection = null;
         Statement stmt = null;
-        try {
-            connection = DriverManager.getConnection(this.dbConnectionString);
+        try (Connection connection = this.getConnection()) {
             stmt = connection.createStatement();
             data = stmt.executeQuery(query);
         } catch (SQLException e) {
-            LOG.warn("problem reading tables: ", e);
+            LOG.warn("problem reading db for query '{}': ", query, e);
         } finally {
             try {
-                if (connection != null) {
-                    connection.close();
+                if (stmt != null) {
+                    stmt.close();
                 }
             } catch (SQLException e) {
-                LOG.warn("problem closing connection: ", e);
+                LOG.warn(LOG_PROBLEM_CLOSING_CONNECTION, e);
             }
         }
-
         return data;
     }
 
@@ -258,7 +316,4 @@ public class SqlDBClient {
         this.write(query);
         return true;
     }
-
-
-
 }
index 5a9e58c..2b07dfa 100644 (file)
@@ -40,6 +40,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro
 public class DatabaseIdGenerator {
 
     private static final Pattern FAULTPATTERN = Pattern.compile(".*\\[layerProtocol=(.*)\\]");
+    private static final String FORMAT_PMDATA_ID = "%s/%s/%s";
+    private static final String FORMAT_FAULTDATA_ID = "%s/%s/%s";
+    private static final String FORMAT_INVENTORYDATA_ID = "%s/%s";
+
+    private DatabaseIdGenerator(){
+
+    }
 
     public static String getMaintenanceId(String nodeId) {
         return nodeId;
@@ -62,7 +69,7 @@ public class DatabaseIdGenerator {
         } else {
             uuId = objectId;
         }
-        return String.format("%s/%s/%s", nodeId, uuId, problemName);
+        return String.format(FORMAT_FAULTDATA_ID, nodeId, uuId, problemName);
     }
 
     public static String getFaultcurrentId(FaultcurrentEntity object) {
@@ -78,7 +85,7 @@ public class DatabaseIdGenerator {
     }
 
     public static String getPmData15mId(String nodeId, String uuidInterface, String timestamp) {
-        return String.format("%s/%s/%s", nodeId, uuidInterface, timestamp);
+        return String.format(FORMAT_PMDATA_ID, nodeId, uuidInterface, timestamp);
     }
 
     public static String getPmData15mId(Pmdata15mEntity object) {
@@ -86,7 +93,7 @@ public class DatabaseIdGenerator {
                 : getPmData15mId(object.getNodeName(), object.getUuidInterface(), object.getTimeStamp().getValue());
     }
     public static String getPmData24hId(String nodeId, String uuidInterface, String timestamp) {
-        return String.format("%s/%s/%s", nodeId, uuidInterface, timestamp);
+        return String.format(FORMAT_PMDATA_ID, nodeId, uuidInterface, timestamp);
     }
 
     public static String getPmData24hId(Pmdata24hEntity object) {
@@ -99,6 +106,6 @@ public class DatabaseIdGenerator {
     }
 
     private static String getInventoryId(String nodeId, String uuid) {
-        return String.format("%s/%s", nodeId, uuid);
+        return String.format(FORMAT_INVENTORYDATA_ID, nodeId, uuid);
     }
 }
index dbbb89c..a17c6ae 100644 (file)
@@ -66,7 +66,7 @@ public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance {
                         .createMaintenance(new CreateMaintenanceInputBuilder().setNodeId(nodeId).build());
                 e = createResult.build();
             } catch (IOException e1) {
-                LOG.warn("problem writing initial maintenance entry for {} : ", nodeId, e);
+                LOG.warn("problem writing initial maintenance entry for {} : ", nodeId, e1);
             }
         }
         return e;
@@ -84,10 +84,12 @@ public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance {
         ReadNetworkElementConnectionListOutput result = this.dbProvider.readNetworkElementConnectionList(
                 new ReadNetworkElementConnectionListInputBuilder().setFilter(getFilterInput("node-id", nodeId)).build())
                 .build();
-        if (result.getData() != null && result.getData().size() > 0) {
+        final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data> data =
+                result.getData();
+        if (data != null && !data.isEmpty()) {
             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data entry =
-                    result.getData().get(0);
-            if (entry.isIsRequired()) {
+                    data.get(0);
+            if (entry.getIsRequired()) {
                 return;
 
             }
@@ -111,8 +113,8 @@ public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance {
                 .readMaintenanceList(
                         new ReadMaintenanceListInputBuilder().setFilter(getFilterInput("node-id", nodeId)).build())
                 .build();
-
-        return result.getData() != null ? result.getData().size() > 0 ? result.getData().get(0) : null : null;
+        final List<Data> data = result.getData();
+        return data != null ? !data.isEmpty() ? data.get(0) : null : null;
     }
 
     @Override
index 063fae6..c63d2f1 100644 (file)
@@ -58,17 +58,23 @@ public class SqlDBMapper {
     private static final String ODLID_DBTYPE = "VARCHAR(40)";
     private static final String STRING_DBTYPE = "VARCHAR(255)";
     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";
     private static List<Class<?>> 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();
     public static final String TABLENAME_CONTROLLER = "controller";
     private static final String DEFAULTID_DBTYPE = "int(11)";
 
+    private SqlDBMapper() {
+
+    }
+
     public static String createTableOdl() {
-        return "CREATE TABLE IF NOT EXISTS " + TABLENAME_CONTROLLER + " (" + "`id` " + ODLID_DBTYPE + " "
-                + getColumnOptions("id", ODLID_DBTYPE) + "," + "`desc` " + STRING_DBTYPE + " "
-                + getColumnOptions("description", STRING_DBTYPE) + "," + "primary key(id))";
+        return "CREATE TABLE IF NOT EXISTS " + TABLENAME_CONTROLLER + " (`" + ID_DBCOL + "` " + ODLID_DBTYPE + " "
+                + getColumnOptions(ID_DBCOL, ODLID_DBTYPE) + "," + "`desc` " + STRING_DBTYPE + " "
+                + getColumnOptions("description", STRING_DBTYPE) + "," + "primary key(" + ID_DBCOL + "))";
     }
 
     public static <T> String createTable(Class<T> clazz, Entity e) throws UnableToMapClassException {
@@ -88,23 +94,24 @@ public class SqlDBMapper {
         StringBuilder sb = new StringBuilder();
         sb.append("CREATE TABLE IF NOT EXISTS `" + e.getName() + suffix + "` (\n");
         if (autoIndex) {
-            sb.append("`id` " + DEFAULTID_DBTYPE + " " + getColumnOptions("id", DEFAULTID_DBTYPE) + ",\n");
+            sb.append("`" + ID_DBCOL + "` " + DEFAULTID_DBTYPE + " " + getColumnOptions(ID_DBCOL, DEFAULTID_DBTYPE)
+                    + ",\n");
         } else {
-            sb.append("`id` " + STRING_DBTYPE + " " + getColumnOptions("id", STRING_DBTYPE) + ",\n");
+            sb.append("`" + ID_DBCOL + "` " + STRING_DBTYPE + " " + getColumnOptions(ID_DBCOL, STRING_DBTYPE) + ",\n");
         }
         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);
-            if (colName.equals("id")) {
+            if (ID_DBCOL.equals(colName)) {
                 continue;
             }
             String dbType = getDBType(valueType);
             String options = getColumnOptions(colName, dbType);
             sb.append("`" + colName + "` " + dbType + " " + options + ",\n");
         }
-        sb.append("primary key(id),");
-        sb.append("foreign key(`" + ODLID_DBCOL + "`) references " + TABLENAME_CONTROLLER + "(id)");
+        sb.append("primary key(" + ID_DBCOL + "),");
+        sb.append("foreign key(`" + ODLID_DBCOL + "`) references " + TABLENAME_CONTROLLER + "(" + ID_DBCOL + ")");
 
         sb.append(");");
         return sb.toString();
@@ -115,7 +122,7 @@ public class SqlDBMapper {
         if (dbType.contains("VARCHAR")) {
             options.append("CHARACTER SET utf8 ");
         }
-        if (colName.equals("id") || colName.equals(ODLID_DBCOL)) {
+        if (ID_DBCOL.equals(colName) || ODLID_DBCOL.equals(colName)) {
             if (dbType.equals(DEFAULTID_DBTYPE)) {
                 options.append("NOT NULL AUTO_INCREMENT");
             } else {
@@ -157,8 +164,8 @@ public class SqlDBMapper {
         map.put(BigInteger.class, "BIGINT");
         map.put(Uint8.class, "SMALLINT");
         map.put(Uint16.class, "INTEGER");
-        map.put(Uint32.class, "BIGINT");
-        map.put(Uint64.class, "BIGINT"); //????
+        map.put(Uint32.class, BIGINT_DBTYPE);
+        map.put(Uint64.class, BIGINT_DBTYPE); //????
         map.put(DateAndTime.class, "DATETIME(3)");
         return map;
     }
@@ -174,12 +181,10 @@ public class SqlDBMapper {
                 //resolve conflict
                 return !resolveConflict(method, cm, getterOrSetter);
             }
-            //silicon fix
-            if (method.getReturnType().equals(Boolean.class) && getterOrSetter) {
-                if (name.startsWith("get") && cm.getName().startsWith("is")
-                        && cm.getName().endsWith(name.substring(3))) {
-                    return true;
-                }
+            //silicon fix for deprecated is-... and getIs- methods for booleans
+            if (method.getReturnType().equals(Boolean.class) && getterOrSetter && name.startsWith("get")
+                    && cm.getName().startsWith("is") && cm.getName().endsWith(name.substring(3))) {
+                return true;
             }
         }
         return false;
@@ -336,20 +341,23 @@ public class SqlDBMapper {
     }
 
     public static <T extends DataObject> List<T> read(ResultSet data, Class<T> clazz)
-            throws JsonMappingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
-            InstantiationException, SecurityException, NoSuchMethodException, JsonProcessingException, SQLException {
+            throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException,
+            SecurityException, NoSuchMethodException, JsonProcessingException, SQLException {
         return read(data, clazz, null);
     }
 
     @SuppressWarnings("unchecked")
-    public static <T> List<T> read(ResultSet data, Class<T> clazz, String column) throws IllegalAccessException,
-            IllegalArgumentException, InvocationTargetException, SQLException, InstantiationException,
-            SecurityException, NoSuchMethodException, JsonMappingException, JsonProcessingException {
+    public static <T> List<T> read(ResultSet data, Class<T> clazz, String column)
+            throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, SQLException,
+            InstantiationException, SecurityException, NoSuchMethodException, JsonProcessingException {
 
+        Builder<T> builder = findPOJOBuilder(clazz);
+        if(builder==null && column==null) {
+            throw new InstantiationException("unable to find builder for class "+clazz.getName());
+        }
         List<T> list = new ArrayList<>();
         while (data.next()) {
             if (column == null) {
-                Builder<T> builder = findPOJOBuilder(clazz);
                 Class<?> argType;
                 String col;
                 for (Method m : getFilteredMethods(builder.getClass(), false)) {
@@ -409,7 +417,7 @@ public class SqlDBMapper {
         } else if (isComplex(dstType)) {
             String v = data.getString(col);
 
-            return (v == null || v.toLowerCase().equals("null")) ? null : mapper.readValue(v, dstType);
+            return (v == null || v.equalsIgnoreCase("null")) ? null : mapper.readValue(v, dstType);
         }
         return defaultValue;
     }
@@ -436,14 +444,14 @@ public class SqlDBMapper {
             return Uint32.valueOf(value);
         } else if (dstType.equals(Uint16.class)) {
             return Uint16.valueOf(value);
-        } else if (dstType.equals(Uint16.class)) {
+        } else if (dstType.equals(Uint8.class)) {
             return Uint8.valueOf(value);
         } else if (dstType.equals(Long.class)) {
-            return Long.valueOf(value);
+            return value;
         } else if (dstType.equals(Integer.class)) {
-            return Long.valueOf(value).intValue();
+            return (int)value;
         } else if (dstType.equals(Byte.class)) {
-            return Long.valueOf(value).byteValue();
+            return (byte)value;
         }
         return null;
     }
@@ -463,7 +471,7 @@ public class SqlDBMapper {
         } else {
             svalue = "'" + escape(value) + "'";
         }
-        return new DBKeyValuePair<String>("`" + col + "`", svalue);
+        return new DBKeyValuePair<>("`" + col + "`", svalue);
     }
 
     private static String getDateTimeValue(DateAndTime value) {
@@ -475,6 +483,4 @@ public class SqlDBMapper {
         }
         return s;
     }
-
-
 }
index 6cc9e35..b5322d6 100644 (file)
@@ -30,6 +30,7 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.Nullable;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
@@ -44,6 +45,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.EntityInput;
 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.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterKey;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -96,8 +98,8 @@ public class SqlDBReaderWriter<T extends DataObject> {
             list.remove(cFilter.get());
         }
         if (controllerId != null) {
-            list.add(new FilterBuilder().setProperty(SqlDBMapper.ODLID_DBCOL).setFiltervalue(this.controllerId)
-                    .build());
+            list.add(
+                    new FilterBuilder().setProperty(SqlDBMapper.ODLID_DBCOL).setFiltervalue(this.controllerId).build());
         }
         return this.count(list);
     }
@@ -108,8 +110,8 @@ public class SqlDBReaderWriter<T extends DataObject> {
         try {
             ResultSet data = this.dbService.read(query.toSql());
             List<T> mappedData = SqlDBMapper.read(data, clazz);
-            long total = this.count(input.getFilter() != null ? new ArrayList<>(input.getFilter().values()) : null,
-                    this.controllerId);
+            final Map<FilterKey, Filter> filter = input.getFilter();
+            long total = this.count(filter != null ? new ArrayList<>(filter.values()) : null, this.controllerId);
             return new QueryResult<T>(mappedData, query.getPage(), query.getPageSize(), total);
         } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
                 | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) {
@@ -151,9 +153,10 @@ public class SqlDBReaderWriter<T extends DataObject> {
         UpdateQuery<S> query = new UpdateQuery<S>(this.entity, object, this.controllerId);
         query.setId(id);
         String insertedId = null;
+        PreparedStatement stmt = null;
         try {
             Connection connection = this.dbService.getConnection();
-            PreparedStatement stmt = connection.prepareStatement(query.toSql());
+            stmt = connection.prepareStatement(query.toSql());
             stmt.execute();
 
             int affectedRows = stmt.getUpdateCount();
@@ -163,6 +166,14 @@ public class SqlDBReaderWriter<T extends DataObject> {
             }
         } catch (SQLException e) {
             LOG.warn("problem writing data into db: ", e);
+        } finally {
+            if (stmt != null) {
+                try {
+                    stmt.close();
+                } catch (SQLException e) {
+                    LOG.warn("problem closing sql statement: ", e);
+                }
+            }
         }
 
         return insertedId;
@@ -173,9 +184,10 @@ public class SqlDBReaderWriter<T extends DataObject> {
         query.setId(id);
         String insertedId = null;
         LOG.trace("query={}", query.toSql());
+        PreparedStatement stmt = null;
         try {
             Connection connection = this.dbService.getConnection();
-            PreparedStatement stmt = connection.prepareStatement(query.toSql());
+            stmt = connection.prepareStatement(query.toSql());
             stmt.execute();
 
             int affectedRows = stmt.getUpdateCount();
@@ -185,6 +197,14 @@ public class SqlDBReaderWriter<T extends DataObject> {
             }
         } catch (SQLException e) {
             LOG.warn("problem writing data into db: ", e);
+        } finally {
+            if (stmt != null) {
+                try {
+                    stmt.close();
+                } catch (SQLException e) {
+                    LOG.warn("problem closing sql statement: ", e);
+                }
+            }
         }
         return insertedId;
     }
@@ -202,14 +222,23 @@ public class SqlDBReaderWriter<T extends DataObject> {
     public int remove(List<Filter> filters) {
         DeleteQuery query = new DeleteQuery(this.entity, filters);
         int affectedRows = 0;
+        PreparedStatement stmt = null;
         try {
             Connection connection = this.dbService.getConnection();
-            PreparedStatement stmt = connection.prepareStatement(query.toSql());
+            stmt = connection.prepareStatement(query.toSql());
             stmt.execute();
             affectedRows = stmt.getUpdateCount();
             connection.close();
         } catch (SQLException e) {
             LOG.warn("problem execute delete query: ", e);
+        } finally {
+            if (stmt != null) {
+                try {
+                    stmt.close();
+                } catch (SQLException e) {
+                    LOG.warn("problem closing sql statement: ", e);
+                }
+            }
         }
         return affectedRows;
     }
@@ -226,7 +255,7 @@ public class SqlDBReaderWriter<T extends DataObject> {
             return mappedData;
         } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
                 | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) {
-            LOG.warn("problem reading data {}: ", this.entity, e);
+            LOG.warn("problem reading all data{}: ", this.entity, e);
         }
         return null;
     }
@@ -239,7 +268,7 @@ public class SqlDBReaderWriter<T extends DataObject> {
             return mappedData;
         } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
                 | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) {
-            LOG.warn("problem reading data {}: ", this.entity, e);
+            LOG.warn("problem reading all data {} for key: ", this.entity, key, e);
         }
         return null;
     }
index f0ce268..021741b 100644 (file)
@@ -30,6 +30,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.entity.DatabaseIdGenerator;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.rpctypehelper.QueryResult;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.SelectQuery;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
@@ -82,9 +83,9 @@ public class SqlDBReaderWriterPm<T extends DataObject> extends SqlDBReaderWriter
         try {
             ResultSet data = this.dbService.read(query.toSql());
             List<String> mappedData = SqlDBMapper.read(data, String.class, UUID_KEY);
-            long total = this.count(input.getFilter() != null ? new ArrayList<>(input.getFilter().values()) : null,
-                    this.controllerId);
-            return new QueryResult<String>(mappedData, query.getPage(), query.getPageSize(), total);
+            Map<FilterKey, Filter> 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);
         } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
                 | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) {
             LOG.warn("problem reading ltp list: ", e);
@@ -113,9 +114,9 @@ public class SqlDBReaderWriterPm<T extends DataObject> extends SqlDBReaderWriter
         try {
             ResultSet data = this.dbService.read(query.toSql());
             List<String> mappedData = SqlDBMapper.read(data, String.class, NODE_KEY);
-            long total = this.count(input.getFilter() != null ? new ArrayList<>(input.getFilter().values()) : null,
-                    this.controllerId);
-            return new QueryResult<String>(mappedData, query.getPage(), query.getPageSize(), total);
+            Map<FilterKey, Filter> 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);
         } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
                 | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) {
             LOG.warn("problem reading device list: ", e);
@@ -125,7 +126,7 @@ public class SqlDBReaderWriterPm<T extends DataObject> extends SqlDBReaderWriter
 
     public void write(PmdataEntity pmData) {
         DateAndTime date = pmData.getTimeStamp();
-        final String id = String.format("%s/%s/%s", pmData.getNodeName(), pmData.getUuidInterface(),
+        final String id = DatabaseIdGenerator.getPmData15mId(pmData.getNodeName(), pmData.getUuidInterface(),
                 date != null ? date.getValue() : "null");
         this.updateOrInsert(pmData, id);
     }
index e2cc217..6afcae0 100644 (file)
@@ -85,14 +85,13 @@ public class SelectQuery implements SqlQuery {
             this.addFilter(SqlDBMapper.ODLID_DBCOL, controllerId);
         }
 
-        Map<SortorderKey, Sortorder> so = input.getSortorder();
-        if (so != null && so.size() > 0) {
+        Map<SortorderKey, Sortorder> so = input != null ? input.getSortorder() : null;
+        if (so != null && !so.isEmpty()) {
             for (Sortorder s : so.values()) {
-                this.addSortOrder(s.getProperty(),
-                        s.getSortorder() == SortOrder.Ascending ? "ASC" : "DESC");
+                this.addSortOrder(s.getProperty(), s.getSortorder() == SortOrder.Ascending ? "ASC" : "DESC");
             }
         }
-        Pagination pagination = input.getPagination();
+        Pagination pagination = input != null ? input.getPagination() : null;
         if (pagination != null) {
             this.setPagination(pagination.getPage().longValue(), pagination.getSize().longValue());
         } else {
@@ -118,11 +117,11 @@ public class SelectQuery implements SqlQuery {
     public void setPagination(@Nullable Pagination pagination) {
         long page = DEFAULT_PAGE;
         long pageSize = DEFAULT_PAGESIZE;
-        if(pagination!=null) {
-            if(pagination.getPage()!=null) {
+        if (pagination != null) {
+            if (pagination.getPage() != null) {
                 page = pagination.getPage().longValue();
             }
-            if(pagination.getSize()!=null) {
+            if (pagination.getSize() != null) {
                 pageSize = pagination.getSize().longValue();
             }
         }
index 95e3605..82f10b1 100644 (file)
@@ -52,7 +52,7 @@ public interface SqlQuery {
             return "";
         }
         StringBuilder sb = new StringBuilder();
-        if (filters.size() > 0) {
+        if (!filters.isEmpty()) {
 
             sb.append(" WHERE (" + getFilterExpression(filters.get(0)) + ")");
             for (int i = 1; i < filters.size(); i++) {
@@ -80,7 +80,7 @@ public interface SqlQuery {
     }
 
     public static String getFilterExpression(String property, String value) {
-        String filter = null;;
+        String filter = null;
         if (DbFilter.hasSearchParams(value)) {
             if (TIMESTAMPPROPERTYNAMES.contains(property.toLowerCase())) {
                 if (DbFilter.isComparisonValid(value)) {
@@ -224,12 +224,15 @@ public interface SqlQuery {
                 netconfToMariaDBTimestamp(upperEnd), false);
     }
 
-        private static String netconfToMariaDBTimestamp(String ts) {
-            String v = ts.replace("T", " ").replace("Z", "");
-            return v.length() > MARIADB_TIMESTAMP_REPLACER_MAX_LENGTH
-                    ? v.substring(0, MARIADB_TIMESTAMP_REPLACER_MAX_LENGTH)
-                    : v;
+    private static String netconfToMariaDBTimestamp(String ts) {
+        if(ts==null) {
+            return null;
         }
+        String v = ts.replace("T", " ").replace("Z", "");
+        return v.length() > MARIADB_TIMESTAMP_REPLACER_MAX_LENGTH
+                ? v.substring(0, MARIADB_TIMESTAMP_REPLACER_MAX_LENGTH)
+                : v;
+    }
 
     private static String getTimestampUpperLimit(String lowerEnd, int idx) {
 
@@ -244,7 +247,7 @@ public interface SqlQuery {
         if (dt == null) {
             return null;
         }
-        //        property.substring(0,idx)+REPLACE.substring(idx+1);
+
         Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
         c.setTime(dt);
         int tmpvalue;
index 2474e52..1dd9516 100644 (file)
@@ -47,10 +47,7 @@ public class DBKeyValuePair<T> implements SqlDBFilter {
     }
 
     protected boolean isNumericValue(T v) {
-        if ((v instanceof Long) || (v instanceof Integer) || (v instanceof Byte) || (v instanceof BigInteger)) {
-            return true;
-        }
-        return false;
+        return ((v instanceof Long) || (v instanceof Integer) || (v instanceof Byte) || (v instanceof BigInteger));
     }
 
     @Override
index dd90d29..423ebab 100644 (file)
@@ -29,7 +29,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.binding.Identifiable;
 import org.opendaylight.yangtools.yang.binding.Identifier;
 import org.opendaylight.yangtools.yang.common.Uint16;
@@ -38,43 +37,47 @@ import org.opendaylight.yangtools.yang.common.Uint64;
 
 public class YangHelper2 {
 
-    static public @NonNull Uint64 getUint64(@NonNull BigInteger val) {
+    private YangHelper2() {
+
+    }
+
+    public static @NonNull Uint64 getUint64(@NonNull BigInteger val) {
         return Uint64.valueOf(val);
     }
 
-    static public @NonNull Uint64 getUint64(@NonNull Uint64 val) {
+    public static @NonNull Uint64 getUint64(@NonNull Uint64 val) {
         return val;
     }
 
-    static public @NonNull Uint32 getUint32(@NonNull Long val) {
+    public static @NonNull Uint32 getUint32(@NonNull Long val) {
         return Uint32.valueOf(val);
     }
 
-    static public @NonNull Uint32 getUint32(@NonNull Uint32 val) {
+    public static @NonNull Uint32 getUint32(@NonNull Uint32 val) {
         return val;
     }
 
-    public static @NonNull Uint16 getUint16(@Nullable Integer val) {
+    public static @NonNull Uint16 getUint16(@NonNull Integer val) {
         return Uint16.valueOf(val);
     }
 
-    public static @NonNull Uint16 getUint16(@Nullable Uint16 val) {
+    public static @NonNull Uint16 getUint16(@NonNull Uint16 val) {
         return val;
     }
 
-    public static @NonNull Integer getInteger(@Nullable Integer val) {
+    public static @NonNull Integer getInteger(@NonNull Integer val) {
         return val;
     }
 
-    public static @NonNull Integer getInteger(@Nullable Uint16 val) {
+    public static @NonNull Integer getInteger(@NonNull Uint16 val) {
         return val.intValue();
     }
 
-    public static @NonNull Long getInteger(@Nullable Long val) {
+    public static @NonNull Long getInteger(@NonNull Long val) {
         return val;
     }
 
-    public static @NonNull Long getInteger(@Nullable Uint32 val) {
+    public static @NonNull Long getInteger(@NonNull Uint32 val) {
         return val.longValue();
     }
     /**
index a86ecdd..cb0f22d 100644 (file)
@@ -53,7 +53,7 @@ import org.slf4j.LoggerFactory;
  */
 public class EsDataObjectReaderWriter2<T extends DataObject> {
 
-    private final Logger LOG = LoggerFactory.getLogger(EsDataObjectReaderWriter2.class);
+    private static final Logger LOG = LoggerFactory.getLogger(EsDataObjectReaderWriter2.class);
 
     /** Typename for elastic search data schema **/
     private String dataTypeName;
@@ -202,7 +202,7 @@ public class EsDataObjectReaderWriter2<T extends DataObject> {
      *
      * @param writeInterfaceClazz
      */
-    public EsDataObjectReaderWriter2<T> setWriteInterface(@Nonnull Class<? extends DataObject> writeInterfaceClazz) {
+    public EsDataObjectReaderWriter2<T> setWriteInterface(Class<? extends DataObject> writeInterfaceClazz) {
         LOG.debug("Set write interface to {}", writeInterfaceClazz);
         if (writeInterfaceClazz == null) {
             throw new IllegalArgumentException("Null not allowed here.");
@@ -359,7 +359,7 @@ public class EsDataObjectReaderWriter2<T extends DataObject> {
         if(this.doFullsizeRequest) {
             query.doFullsizeRequest();
         }
-        SearchResult<T> res = new SearchResult<T>();
+        SearchResult<T> res = new SearchResult<>();
         SearchResult<SearchHit> result;
         List<SearchHit> hits;
         if (query != null) {
index eef61e0..69f9bcc 100644 (file)
@@ -96,10 +96,10 @@ public class QueryByFilter {
         if (fromPage < 0 || pageSize > 10000)
             throw new IllegalArgumentException("mismatching input parameters. From:" + fromPage + " size:" + pageSize);
 
-        filterList = YangHelper.getList(input.getFilter());
+        filterList = input == null ? null : YangHelper.getList(input.getFilter());
         if (filterList == null)
             filterList = emptyFilterList;
-        sortOrder = YangHelper.getList(input.getSortorder());
+        sortOrder = input == null ? null : YangHelper.getList(input.getSortorder());
         if (sortOrder == null)
             sortOrder = emptySortOrderList;
 
@@ -167,7 +167,7 @@ public class QueryByFilter {
      * Private and static implementations
      */
     private static QueryBuilder setSortOrder(QueryBuilder query, @Nullable List<Sortorder> sortorder, String prefix) {
-        if (sortorder != null && sortorder.size() > 0) {
+        if (sortorder != null && !sortorder.isEmpty()) {
             for (Sortorder so : sortorder) {
                 query.sort(handlePrefix(prefix, so.getProperty()), convert(so.getSortorder()));
             }
@@ -179,7 +179,7 @@ public class QueryByFilter {
         return sortOrder == SortOrder.Ascending
                 ? org.onap.ccsdk.features.sdnr.wt.common.database.queries.SortOrder.ASCENDING
                 : org.onap.ccsdk.features.sdnr.wt.common.database.queries.SortOrder.DESCENDING;
-    };
+    }
 
     private static Sortorder getSortOrder(@Nullable List<Sortorder> list, String prop) {
         if (list == null) {
@@ -353,7 +353,7 @@ public class QueryByFilter {
     }
 
     private static List<String> collectValues(Filter filter) {
-        List<String> values = new ArrayList<String>();
+        List<String> values = new ArrayList<>();
         if (filter.getFiltervalue() != null) {
             values.add(filter.getFiltervalue());
         }
@@ -364,7 +364,7 @@ public class QueryByFilter {
     }
 
     private static QueryBuilder fromFilter(@Nullable List<Filter> filters, String prefix) {
-        if (filters == null || filters.size() == 0) {
+        if (filters == null || filters.isEmpty()) {
             return QueryBuilders.matchAllQuery();
 
         } else if (filters.size() == 1) {
@@ -399,7 +399,6 @@ public class QueryByFilter {
                         tmpQuery.should(getSinglePropertyQuery(p, v, prefix));
                     }
                     query.must(tmpQuery);
-                    tmpQuery = QueryBuilders.boolQuery();
                 }
             }
             LOG.trace("Query result. {}", query.toJSON());
index 115ff4f..3c4a762 100644 (file)
@@ -29,6 +29,7 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.servlet.ServletException;
@@ -70,9 +71,9 @@ public class DataTreeHttpServlet extends HttpServlet {
         String body = null;
         StringBuilder stringBuilder = new StringBuilder();
         BufferedReader bufferedReader = null;
+        IOException toThrow = null;
+        try (InputStream inputStream = request.getInputStream()) {
 
-        try {
-            InputStream inputStream = request.getInputStream();
             if (inputStream != null) {
                 bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                 char[] charBuffer = new char[128];
@@ -84,17 +85,20 @@ public class DataTreeHttpServlet extends HttpServlet {
                 stringBuilder.append("");
             }
         } catch (IOException ex) {
-            throw ex;
+            toThrow = ex;
         } finally {
             if (bufferedReader != null) {
                 try {
                     bufferedReader.close();
                 } catch (IOException ex) {
-                    throw ex;
+                    LOG.debug("problem closing reader:", ex);
+                    toThrow = ex;
                 }
             }
         }
-
+        if (toThrow != null) {
+            throw toThrow;
+        }
         body = stringBuilder.toString();
         return body;
     }
@@ -164,13 +168,16 @@ public class DataTreeHttpServlet extends HttpServlet {
         final String regex = "^\\/tree\\/read-(.*)-tree\\/?(.*)$";
         final Pattern pattern = Pattern.compile(regex);
         final Matcher matcher = pattern.matcher(uri);
-        Entity e = null;
         if (matcher.find() && matcher.groupCount() > 0) {
             try {
-                e = Entity.forName(matcher.group(1)).get();
-                return new EntityWithTree(e, matcher.groupCount() > 1 ? matcher.group(2) : null);
+                Optional<Entity> oe = Entity.forName(matcher.group(1));
+                if (oe.isPresent()) {
+                    return new EntityWithTree(oe.get(), matcher.groupCount() > 1 ? matcher.group(2) : null);
+                } else {
+                    LOG.warn("unable to find entity for name {}", matcher.group(1));
+                }
             } catch (Exception e2) {
-                LOG.warn("unable to parse {} into entity: {}", matcher.group(2), e2);
+                LOG.warn("unable to parse {} into entity: ", matcher.group(2), e2);
             }
         }
         return null;
@@ -182,7 +189,7 @@ public class DataTreeHttpServlet extends HttpServlet {
         try {
             resp.getWriter().write(data.toJSON());
         } catch (IOException e) {
-            LOG.warn("problem sending response: {}", e);
+            LOG.warn("problem sending response: ", e);
         }
     }
 
@@ -196,14 +203,14 @@ public class DataTreeHttpServlet extends HttpServlet {
         }
 
         /**
-         *
-         * @param e database enttity to access
-         * @param tree tree description
-         *   e.g. nodeA           => tree entry for node-id=nodeA
-         *        nodeA/key0      => tree entry for node-id=nodeA and uuid=key0 and tree-level=0
-         *        nodeA/key0/key1 => tree entry for node-id=nodeA and uuid=key1 and tree-level=1
-         *
-         */
+        *
+        * @param e database enttity to access
+        * @param tree tree description
+        *   e.g. nodeA           => tree entry for node-id=nodeA
+        *        nodeA/key0      => tree entry for node-id=nodeA and uuid=key0 and tree-level=0
+        *        nodeA/key0/key1 => tree entry for node-id=nodeA and uuid=key1 and tree-level=1
+        *
+        */
         public EntityWithTree(Entity e, String tree) {
             this.entity = e;
             if (tree != null) {
index 09a81c3..b51d2a6 100644 (file)
@@ -43,7 +43,7 @@ public class UserdataHttpServlet extends HttpServlet {
     private static final String REGEX = "^\\/userdata[\\/]?([a-zA-Z0-9]+)?$";
     private static final Pattern PATTERN = Pattern.compile(REGEX);
     private static final String JWT_PAYLOAD_USERNAME_PROPERTYKEY = "sub";
-    private HtUserdataManager dbUserManager;
+    private static HtUserdataManager dbUserManager;
 
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
@@ -91,47 +91,46 @@ public class UserdataHttpServlet extends HttpServlet {
 
     private void handleGetRequest(HttpServletRequest req, HttpServletResponse resp, String key) {
         final String username = this.getUsername(req);
-        if(username==null) {
+        if (username == null) {
             resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
             return;
         }
         sendJsonResponse(resp,
-                key == null ? this.dbUserManager.getUserdata(username) : this.dbUserManager.getUserdata(username, key));
+                key == null ? dbUserManager.getUserdata(username) : dbUserManager.getUserdata(username, key));
     }
 
 
     private void handlePutRequest(HttpServletRequest req, HttpServletResponse resp, String data, String key) {
         final String username = this.getUsername(req);
-        if(username==null) {
+        if (username == null) {
             resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
             return;
         }
-        boolean success = key == null ? this.dbUserManager.setUserdata(username, data)
-                : this.dbUserManager.setUserdata(username, key, data);
+        boolean success = key == null ? dbUserManager.setUserdata(username, data)
+                : dbUserManager.setUserdata(username, key, data);
         resp.setStatus(success ? HttpServletResponse.SC_OK : HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
     }
 
     private void handleDeleteRequest(HttpServletRequest req, HttpServletResponse resp, String key) {
         final String username = this.getUsername(req);
-        if(username==null) {
+        if (username == null) {
             resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
             return;
         }
-        boolean success = key == null ? this.dbUserManager.removeUserdata(username)
-                : this.dbUserManager.removeUserdata(username, key);
+        boolean success =
+                key == null ? dbUserManager.removeUserdata(username) : dbUserManager.removeUserdata(username, key);
         resp.setStatus(success ? HttpServletResponse.SC_OK : HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
     }
 
     private String getUsername(HttpServletRequest req) {
         final String authHeader = req.getHeader("Authorization");
-        if(authHeader==null) {
+        if (authHeader == null) {
             return null;
         }
         String username = null;
-        if(authHeader.startsWith("Basic")) {
+        if (authHeader.startsWith("Basic")) {
             username = BaseHTTPClient.decodeBasicAuthHeaderUsername(authHeader);
-        }
-        else if(authHeader.startsWith("Bearer")) {
+        } else if (authHeader.startsWith("Bearer")) {
             username = decodeJWTPayloadUsername(authHeader, JWT_PAYLOAD_USERNAME_PROPERTYKEY);
         }
         return username;
@@ -139,16 +138,16 @@ public class UserdataHttpServlet extends HttpServlet {
 
     public static String decodeJWTPayloadUsername(String authHeader, String key) {
         String username = null;
-        if(authHeader.startsWith("Bearer")) {
+        if (authHeader.startsWith("Bearer")) {
             authHeader = authHeader.substring(7);
         }
         String[] tmp = authHeader.split("\\.");
-        if(tmp.length==3) {
+        if (tmp.length == 3) {
             final String decoded = new String(Base64.getDecoder().decode(tmp[1]));
-            JSONObject o  = new JSONObject(decoded);
-            if(o.has(key)) {
+            JSONObject o = new JSONObject(decoded);
+            if (o.has(key)) {
                 username = o.getString(key);
-                if(username!=null && username.contains("@")) {
+                if (username != null && username.contains("@")) {
                     username = username.split("@")[0];
                 }
             }
@@ -168,8 +167,8 @@ public class UserdataHttpServlet extends HttpServlet {
 
     }
 
-    public void setDatabaseClient(HtUserdataManager dbUserManager) {
-        this.dbUserManager = dbUserManager;
+    public void setDatabaseClient(HtUserdataManager dbMgr) {
+        dbUserManager = dbMgr;
     }
 
 }
index 64b5fab..cd75ca2 100644 (file)
@@ -34,8 +34,6 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.apache.http.HttpHeaders;
-//import org.apache.karaf.bundle.core.BundleInfo;
-//import org.apache.karaf.bundle.core.BundleService;
 import org.onap.ccsdk.features.sdnr.wt.common.Resources;
 import org.onap.ccsdk.features.sdnr.wt.common.file.PomFile;
 import org.onap.ccsdk.features.sdnr.wt.common.file.PomPropertiesFile;
@@ -83,8 +81,7 @@ public class AboutHttpServlet extends HttpServlet {
     private final Map<Integer, String> BUNDLESTATE_LUT;
     private final Map<String, String> data;
     private final String readmeContent;
-    // private BundleService bundleService;
-    private String jsonContent;
+    private final String jsonContent;
 
 
     public AboutHttpServlet() {
@@ -114,10 +111,6 @@ public class AboutHttpServlet extends HttpServlet {
         return def;
     }
 
-    // public void setBundleService(BundleService bundleService) {
-    //         this.bundleService = bundleService;
-    // }
-
     /**
      * collect static versioning data
      */
@@ -152,22 +145,11 @@ public class AboutHttpServlet extends HttpServlet {
             resp.setStatus(HttpServletResponse.SC_OK);
             resp.setContentLength(output.length);
             resp.setContentType(ctype.getMimeType());
-            ServletOutputStream os = null;
-            try {
-                os = resp.getOutputStream();
+            try (ServletOutputStream os = resp.getOutputStream()) {
                 os.write(output);
             } catch (IOException e) {
                 LOG.warn("problem writing response for {}: {}", uri, e);
-            } finally {
-                if (os != null) {
-                    try {
-                        os.close();
-                    } catch (IOException e) {
-                        LOG.warn("problem closing response stream: {}", e);
-                    }
-                }
             }
-
         } else {
             this.doGetFile(uri, resp);
         }
@@ -183,7 +165,7 @@ public class AboutHttpServlet extends HttpServlet {
         if (content == null) {
             return def;
         }
-        String lines[] = content.split("\n");
+        String[] lines = content.split("\n");
         for (String line : lines) {
             if (line.startsWith("git.commit.id")) {
                 def = line.substring("git.commit.id=".length());
@@ -207,7 +189,7 @@ public class AboutHttpServlet extends HttpServlet {
             this.data.put(PLACEHOLDER_KARAF_INFO, SystemInfo.get());
             this.data.put(PLACEHOLDER_DEVICEMANAGER_TABLE, this.getDevicemanagerBundles(ctype));
         } catch (Exception e) {
-            LOG.warn("problem collecting system data: {}", e);
+            LOG.warn("problem collecting system data: ", e);
         }
     }
 
@@ -228,7 +210,7 @@ public class AboutHttpServlet extends HttpServlet {
             Attributes attr = manifest.getMainAttributes();
             return attr.getValue(key);
         } catch (IOException e) {
-            LOG.warn("problem reading manifest: {}", e);
+            LOG.warn("problem reading manifest: ", e);
         }
         return null;
 
@@ -282,12 +264,12 @@ public class AboutHttpServlet extends HttpServlet {
         BundleContext context = thisbundle == null ? null : thisbundle.getBundleContext();
         if (context == null) {
             LOG.debug("no bundle context available");
-            return ctype==ContentType.MARKDOWN?"":"[]";
+            return ctype == ContentType.MARKDOWN ? "" : "[]";
         }
         Bundle[] bundles = context.getBundles();
         if (bundles == null || bundles.length <= 0) {
             LOG.debug("no bundles found");
-            return ctype==ContentType.MARKDOWN?NO_DEVICEMANAGERS_RUNNING_MESSAGE:"[]";
+            return ctype == ContentType.MARKDOWN ? NO_DEVICEMANAGERS_RUNNING_MESSAGE : "[]";
         }
         LOG.debug("found {} bundles", bundles.length);
         MarkdownTable table = new MarkdownTable();
@@ -302,10 +284,10 @@ public class AboutHttpServlet extends HttpServlet {
                 continue;
             }
             table.addRow(new String[] {String.valueOf(bundle.getBundleId()), bundle.getVersion().toString(), name,
-                    BUNDLESTATE_LUT.getOrDefault(bundle.getState(), "unknown")});
+                    BUNDLESTATE_LUT.getOrDefault(bundle.getState(), UNKNOWN)});
 
         }
-        return ctype==ContentType.MARKDOWN?table.toMarkDown():table.toJson();
+        return ctype == ContentType.MARKDOWN ? table.toMarkDown() : table.toJson();
     }
 
     /**
@@ -329,7 +311,7 @@ public class AboutHttpServlet extends HttpServlet {
             try {
                 resp.getOutputStream().write(data);
             } catch (IOException e) {
-                LOG.debug("unable to send data : {}", e);
+                LOG.debug("unable to send data", e);
             }
         }
 
@@ -352,7 +334,7 @@ public class AboutHttpServlet extends HttpServlet {
             case "bmp":
                 return "image/" + ext;
             case "json":
-                return "application/json";
+                return MIMETYPE_JSON;
             case "html":
             case "htm":
                 return "text/html";
@@ -382,7 +364,7 @@ public class AboutHttpServlet extends HttpServlet {
      */
     private String render(ContentType ctype, String content) {
         if (content == null) {
-            content = ctype==ContentType.MARKDOWN? this.readmeContent:this.jsonContent;
+            content = ctype == ContentType.MARKDOWN ? this.readmeContent : this.jsonContent;
         }
         if (content == null) {
             return null;
index 1580a0f..e13ca82 100644 (file)
@@ -47,10 +47,20 @@ public class MarkdownTable {
         this.rows.add(values);
     }
 
+    private int getColNumbers() {
+        int cols = 0;
+        if (this.columns != null) {
+            cols = this.columns.length;
+        } else {
+            cols = !this.rows.isEmpty() ? this.rows.get(0).length : 0;
+        }
+        return cols;
+    }
+
     public String toMarkDown() {
         StringBuilder sb = new StringBuilder();
-        final int cols =
-                this.columns != null ? this.columns.length : this.rows.size() > 0 ? this.rows.get(0).length : 0;
+
+        final int cols = this.getColNumbers();
         if (cols > 0) {
             sb.append("|");
             for (int i = 0; i < cols; i++) {
@@ -75,9 +85,8 @@ public class MarkdownTable {
 
     public String toJson() {
         JSONArray a = new JSONArray();
-        final int cols =
-                this.columns != null ? this.columns.length : this.rows.size() > 0 ? this.rows.get(0).length : 0;
-        if (cols > 0) {
+        final int cols = this.getColNumbers();
+        if (cols > 0 && this.columns!=null) {
             for (String[] row : this.rows) {
                 JSONObject o = new JSONObject();
                 for (int i = 0; i < cols; i++) {
index 2bf67fd..5a99c8a 100644 (file)
@@ -45,6 +45,7 @@ import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEsConfig;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.SdnrDbType;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.Keystore;
@@ -136,6 +137,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
     private final HtUserdataManager dbUserManager;
     private final DataBroker dataBroker;
     private final MsServlet mediatorServerServlet;
+
     public DataProviderServiceImpl(final RpcProviderService rpcProviderService, MsServlet mediatorServerServlet,
             DataBroker dataBroker) throws Exception {
         this.configuration = new ConfigurationFileRepresentation(CONFIGURATIONFILE);
@@ -151,7 +153,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
         mediatorServerServlet.setDataProvider(this.dataProvider.getHtDatabaseMediatorServer());
         this.dbUserManager = new HtUserdataManagerImpl(this.dataProvider.getRawClient());
         // Register ourselves as the REST API RPC implementation
-        LOG.info("Register RPC Service " + DataProviderServiceImpl.class.getSimpleName());
+        LOG.info("Register RPC Service {}", DataProviderServiceImpl.class.getSimpleName());
         this.rpcReg = rpcProviderService.registerRpcImplementation(DataProviderService.class, this);
     }
 
@@ -425,11 +427,15 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
 
     private ReadTlsKeyEntryOutputBuilder readTlsKeys(ReadTlsKeyEntryInput input) {
         Optional<Keystore> result = Optional.empty();
-        try {
-            result = this.dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION, KEYSTORE_IIF)
-                    .get();
-        } catch (InterruptedException | ExecutionException e) {
+        try (ReadTransaction transaction = this.dataBroker.newReadOnlyTransaction()) {
+            result = transaction.read(LogicalDatastoreType.CONFIGURATION, KEYSTORE_IIF).get();
+        } catch (ExecutionException e) {
             LOG.warn("problem reading netconf-keystore: ", e);
+
+        } catch (InterruptedException e) {
+            LOG.warn("Interrupted!", e);
+            // Restore interrupted state...
+            Thread.currentThread().interrupt();
         }
         ReadTlsKeyEntryOutputBuilder output = new ReadTlsKeyEntryOutputBuilder();
         if (result.isEmpty()) {
@@ -439,11 +445,12 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab
         if (keyCredential == null) {
             return output.setData(Arrays.asList()).setPagination(EMPTY_PAGINATION);
         }
-        long pageNum = input.getPagination() == null ? DEFAULT_PAGE
-                : input.getPagination().getPage() == null ? DEFAULT_PAGE : input.getPagination().getPage().longValue();
-        long size = input.getPagination() == null ? DEFAULT_PAGESIZE
-                : input.getPagination().getSize() == null ? DEFAULT_PAGESIZE
-                        : input.getPagination().getSize().longValue();
+        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Pagination pagination =
+                input.getPagination();
+        long pageNum = pagination == null ? DEFAULT_PAGE
+                : pagination.getPage() == null ? DEFAULT_PAGE : pagination.getPage().longValue();
+        long size = pagination == null ? DEFAULT_PAGESIZE
+                : pagination.getSize() == null ? DEFAULT_PAGESIZE : pagination.getSize().longValue();
         long from = pageNum > 0 ? (pageNum - 1) * size : 0;
         output.setData(keyCredential.keySet().stream().skip(from).limit(size).map(e -> e.getKeyId())
                 .collect(Collectors.toList()));
index 56973f4..8afc440 100644 (file)
@@ -413,7 +413,7 @@ public class Program {
     }
 
     private static long getTimeoutOptionMillis(CommandLine cmd) throws ParseException {
-        return getOptionOrDefault(cmd, OPTION_DATABASEWAIT_SHORT, DEFAULT_DATABASEWAIT_SECONDS) * 1000;
+        return getOptionOrDefault(cmd, OPTION_DATABASEWAIT_SHORT, DEFAULT_DATABASEWAIT_SECONDS) * 1000L;
     }
 
     /**
index 3cfa8c1..0254f84 100644 (file)
@@ -66,12 +66,13 @@ public class ElasticsearchDataMigrationProvider implements DataMigrationProvider
 
 
     private static final Logger LOG = LoggerFactory.getLogger(ElasticsearchDataMigrationProvider.class);
+    private static final String LOG_DELETING_INDEX = "deleting index {}";
     private final HtDatabaseClient dbClient;
 
     public ElasticsearchDataMigrationProvider(String url, String username, String password, boolean trustAll,
             long timeoutms) throws Exception {
-        dbClient = HtDatabaseClient.getClient(new HostInfo[] {HostInfo.parse(url)}, username, password, trustAll,
-                true, timeoutms);
+        dbClient = HtDatabaseClient.getClient(new HostInfo[] {HostInfo.parse(url)}, username, password, trustAll, true,
+                timeoutms);
     }
 
     @Override
@@ -215,7 +216,7 @@ public class ElasticsearchDataMigrationProvider implements DataMigrationProvider
         }
         List<Release> foundReleases = new ArrayList<>();
         //if there are active aliases reduce indices to the active ones
-        if (aliases != null && aliases.size() > 0) {
+        if (aliases != null && !aliases.isEmpty()) {
             indices = indices.subList(aliases.getLinkedIndices());
         }
         for (Release r : Release.values()) {
@@ -368,7 +369,7 @@ public class ElasticsearchDataMigrationProvider implements DataMigrationProvider
         }
         ReleaseInformation ri = ReleaseInformation.getInstance(release);
         AcknowledgedResponse response;
-        if (entries.size() <= 0) {
+        if (entries.isEmpty()) {
             LOG.info("no aliases to clear");
         } else {
             //check for every component of release if alias exists
@@ -387,10 +388,10 @@ public class ElasticsearchDataMigrationProvider implements DataMigrationProvider
                     }
                 } else {
                     //try to find malformed typed index with alias name
-                    IndicesEntry entry2ToDelete = entries2.findByIndex(aliasToDelete);
+                    IndicesEntry entry2ToDelete = entries2 == null ? null : entries2.findByIndex(aliasToDelete);
                     if (entry2ToDelete != null) {
                         try {
-                            LOG.info("deleting index {}", entry2ToDelete.getName());
+                            LOG.info(LOG_DELETING_INDEX, entry2ToDelete.getName());
                             response = this.dbClient.deleteIndex(new DeleteIndexRequest(entry2ToDelete.getName()));
                             LOG.info(response.isResponseSucceeded() ? "succeeded" : "failed");
                         } catch (IOException e) {
@@ -404,7 +405,7 @@ public class ElasticsearchDataMigrationProvider implements DataMigrationProvider
         if (entries2 == null) {
             return false;
         }
-        if (entries2.size() <= 0) {
+        if (entries2.isEmpty()) {
             LOG.info("no indices to clear");
         } else {
             //check for every component of release if index exists
@@ -413,7 +414,7 @@ public class ElasticsearchDataMigrationProvider implements DataMigrationProvider
                 IndicesEntry entryToDelete = entries2.findByIndex(indexToDelete);
                 if (entryToDelete != null) {
                     try {
-                        LOG.info("deleting index {}", entryToDelete.getName());
+                        LOG.info(LOG_DELETING_INDEX, entryToDelete.getName());
                         response = this.dbClient.deleteIndex(new DeleteIndexRequest(entryToDelete.getName()));
                         LOG.info(response.isResponseSucceeded() ? "succeeded" : "failed");
                     } catch (IOException e) {
@@ -452,7 +453,7 @@ public class ElasticsearchDataMigrationProvider implements DataMigrationProvider
         }
         for (IndicesEntry index : indices) {
             try {
-                LOG.info("deleting index {}", index.getName());
+                LOG.info(LOG_DELETING_INDEX, index.getName());
                 this.dbClient.deleteIndex(new DeleteIndexRequest(index.getName()));
             } catch (IOException e) {
                 LOG.error("problem deleting index {}: {}", index.getName(), e);
index d46fc4e..55ba66b 100644 (file)
@@ -58,6 +58,7 @@ public class MariaDbDataMigrationProvider implements DataMigrationProviderServic
 
     private static final Logger LOG = LoggerFactory.getLogger(MariaDbDataMigrationProvider.class);
     private static final SdnrDbType DBTYPE = SdnrDbType.MARIADB;
+    private static final String LOG_DELETING_INDEX = "deleting index {}";
     private final SqlDBClient dbClient;
 
     public MariaDbDataMigrationProvider(String url, String username, String password, boolean trustAll,
@@ -211,7 +212,7 @@ public class MariaDbDataMigrationProvider implements DataMigrationProviderServic
         }
         List<Release> foundReleases = new ArrayList<>();
         //if there are active aliases reduce indices to the active ones
-        if (aliases != null && aliases.size() > 0) {
+        if (aliases != null && !aliases.isEmpty()) {
             indices = indices.subList(aliases.getLinkedIndices());
         }
         for (Release r : Release.values()) {
@@ -337,7 +338,7 @@ public class MariaDbDataMigrationProvider implements DataMigrationProviderServic
         }
         ReleaseInformation ri = ReleaseInformation.getInstance(release);
         boolean response;
-        if (entries.size() <= 0) {
+        if (entries.isEmpty()) {
             LOG.info("no aliases to clear");
         } else {
             //check for every component of release if alias exists
@@ -358,7 +359,7 @@ public class MariaDbDataMigrationProvider implements DataMigrationProviderServic
                     IndicesEntry entry2ToDelete = entries2.findByIndex(aliasToDelete);
                     if (entry2ToDelete != null) {
                         try {
-                            LOG.info("deleting index {}", entry2ToDelete.getName());
+                            LOG.info(LOG_DELETING_INDEX, entry2ToDelete.getName());
                             response = this.dbClient.deleteTable(entry2ToDelete.getName());
                             LOG.info(response ? "succeeded" : "failed");
                         } catch (SQLException e) {
@@ -372,7 +373,7 @@ public class MariaDbDataMigrationProvider implements DataMigrationProviderServic
         if (entries2 == null) {
             return false;
         }
-        if (entries2.size() <= 0) {
+        if (entries2.isEmpty()) {
             LOG.info("no indices to clear");
         } else {
             //check for every component of release if index exists
@@ -381,7 +382,7 @@ public class MariaDbDataMigrationProvider implements DataMigrationProviderServic
                 IndicesEntry entryToDelete = entries2.findByIndex(indexToDelete);
                 if (entryToDelete != null) {
                     try {
-                        LOG.info("deleting index {}", entryToDelete.getName());
+                        LOG.info(LOG_DELETING_INDEX, entryToDelete.getName());
                         response = this.dbClient.deleteTable(entryToDelete.getName());
                         LOG.info(response ? "succeeded" : "failed");
                     } catch (SQLException e) {
@@ -420,7 +421,7 @@ public class MariaDbDataMigrationProvider implements DataMigrationProviderServic
         }
         for (IndicesEntry index : indices) {
             try {
-                LOG.info("deleting index {}", index.getName());
+                LOG.info(LOG_DELETING_INDEX, index.getName());
                 this.dbClient.deleteTable(index.getName());
             } catch (SQLException e) {
                 LOG.error("problem deleting index {}: {}", index.getName(), e);
index b73602d..41d5c96 100644 (file)
         <dependency>
             <groupId>com.auth0</groupId>
             <artifactId>java-jwt</artifactId>
-            <version>3.11.0</version>
-             <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-databind</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>commons-codec</groupId>
-                    <artifactId>commons-codec</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>com.highstreet-technologies.aaa</groupId>
index a6dff67..3ebc144 100644 (file)
@@ -44,9 +44,9 @@ public class Config {
     private static final String DEFAULT_TOKENSECRET = generateSecret();
     private static final String DEFAULT_REDIRECTURI = "/odlux/index.html#/oauth?token=";
     private static final String DEFAULT_SUPPORTODLUSERS = "true";
+    private static Random random;
     private static Config _instance;
 
-
     private List<OAuthProviderConfig> providers;
     private String redirectUri;
     private String supportOdlUsers;
@@ -166,8 +166,9 @@ public class Config {
     public static String generateSecret(int targetStringLength) {
         int leftLimit = 48; // numeral '0'
         int rightLimit = 122; // letter 'z'
-        Random random = new Random();
-
+        if(random==null) {
+            random = new Random();
+        }
         String generatedString = random.ints(leftLimit, rightLimit + 1)
                 .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)).limit(targetStringLength)
                 .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();
@@ -197,7 +198,7 @@ public class Config {
                         String envvar = mkey.substring(2, mkey.length() - 1);
                         String env = System.getenv(envvar);
                         tmp = tmp.replace(mkey, env == null ? "" : env);
-                        if (env != null && env != "") {
+                        if (env != null && env.isEmpty()) {
                             found = true;
                         }
                     } catch (SecurityException e) {
index 9a9f4fc..85fe1ce 100644 (file)
@@ -75,10 +75,8 @@ public class AuthHttpServlet extends HttpServlet {
     public static final String REDIRECTURI = BASEURI + "/redirect";
     private static final String REDIRECTURI_FORMAT = REDIRECTURI + "/%s";
     private static final String POLICIESURI = BASEURI + "/policies";
-    //private static final String PROVIDERID_REGEX = "^\\" + BASEURI + "\\/providers\\/([^\\/]+)$";
     private static final String REDIRECTID_REGEX = "^\\" + BASEURI + "\\/redirect\\/([^\\/]+)$";
     private static final String LOGIN_REDIRECT_REGEX = "^\\" + LOGINURI + "\\/([^\\/]+)$";
-    //private static final Pattern PROVIDERID_PATTERN = Pattern.compile(PROVIDERID_REGEX);
     private static final Pattern REDIRECTID_PATTERN = Pattern.compile(REDIRECTID_REGEX);
     private static final Pattern LOGIN_REDIRECT_PATTERN = Pattern.compile(LOGIN_REDIRECT_REGEX);
 
@@ -96,13 +94,12 @@ public class AuthHttpServlet extends HttpServlet {
     private final ObjectMapper mapper;
     /* state <=> AuthProviderService> */
     private final Map<String, AuthService> providerStore;
-    private Authenticator odlAuthenticator;
-    private IdMService odlIdentityService;
     private final TokenCreator tokenCreator;
     private final Config config;
-    private ShiroConfiguration shiroConfiguration;
-    private DataBroker dataBroker;
-    private MdSalAuthorizationStore mdsalAuthStore;
+    private static Authenticator odlAuthenticator;
+    private static IdMService odlIdentityService;
+    private static ShiroConfiguration shiroConfiguration;
+    private static MdSalAuthorizationStore mdsalAuthStore;
 
     public AuthHttpServlet() throws IOException {
         this.config = Config.getInstance();
@@ -116,21 +113,20 @@ public class AuthHttpServlet extends HttpServlet {
 
     }
 
-    public void setOdlAuthenticator(Authenticator odlAuthenticator) {
-        this.odlAuthenticator = odlAuthenticator;
+    public void setOdlAuthenticator(Authenticator odlAuthenticator2) {
+        odlAuthenticator = odlAuthenticator2;
     }
 
-    public void setOdlIdentityService(IdMService odlIdentityService) {
-        this.odlIdentityService = odlIdentityService;
+    public void setOdlIdentityService(IdMService odlIdentityService2) {
+        odlIdentityService = odlIdentityService2;
     }
 
-    public void setShiroConfiguration(ShiroConfiguration shiroConfiguration) {
-        this.shiroConfiguration = shiroConfiguration;
+    public void setShiroConfiguration(ShiroConfiguration shiroConfiguration2) {
+        shiroConfiguration = shiroConfiguration2;
     }
 
     public void setDataBroker(DataBroker dataBroker) {
-        this.dataBroker = dataBroker;
-        this.mdsalAuthStore = new MdSalAuthorizationStore(this.dataBroker);
+        mdsalAuthStore = new MdSalAuthorizationStore(dataBroker);
     }
 
     @Override
@@ -152,10 +148,12 @@ public class AuthHttpServlet extends HttpServlet {
         }
 
     }
+
     private void handleLogout(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         this.logout();
-        this.sendResponse(resp, HttpServletResponse.SC_OK,"");
+        this.sendResponse(resp, HttpServletResponse.SC_OK, "");
     }
+
     private void handleLoginRedirect(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         final String uri = req.getRequestURI();
         final Matcher matcher = LOGIN_REDIRECT_PATTERN.matcher(uri);
@@ -163,7 +161,6 @@ public class AuthHttpServlet extends HttpServlet {
             final String id = matcher.group(1);
             AuthService provider = this.providerStore.getOrDefault(id, null);
             if (provider != null) {
-                //provider.setLocalHostUrl(getHost(req));
                 String redirectUrl = getHost(req) + String.format(REDIRECTURI_FORMAT, id);
                 provider.sendLoginRedirectResponse(resp, redirectUrl);
                 return;
@@ -185,7 +182,7 @@ public class AuthHttpServlet extends HttpServlet {
      * @return
      */
     private List<OdlPolicy> getPoliciesForUser(HttpServletRequest req) {
-        List<Urls> urlRules = this.shiroConfiguration.getUrls();
+        List<Urls> urlRules = shiroConfiguration.getUrls();
         UserTokenPayload data = this.getUserInfo(req);
         List<OdlPolicy> policies = new ArrayList<>();
         if (urlRules != null) {
@@ -209,7 +206,7 @@ public class AuthHttpServlet extends HttpServlet {
                         } else if (authClass.equals(CLASSNAME_ODLBEARERANDBASICAUTH)) {
                             policy = this.getTokenBasedPolicy(urlRule, matcher, data);
                         } else if (authClass.equals(CLASSNAME_ODLMDSALAUTH)) {
-                            policy = this.getMdSalBasedPolicy(urlRule, matcher, data);
+                            policy = this.getMdSalBasedPolicy(urlRule, data);
                         }
                         if (policy.isPresent()) {
                             policies.add(policy.get());
@@ -236,13 +233,12 @@ public class AuthHttpServlet extends HttpServlet {
      * extract policy rule for user from MD-SAL not yet supported
      *
      * @param urlRule
-     * @param matcher
      * @param data
      * @return
      */
-    private Optional<OdlPolicy> getMdSalBasedPolicy(Urls urlRule, Matcher matcher, UserTokenPayload data) {
-        if (this.mdsalAuthStore != null) {
-            return data != null ? this.mdsalAuthStore.getPolicy(urlRule.getPairKey(), data.getRoles())
+    private Optional<OdlPolicy> getMdSalBasedPolicy(Urls urlRule, UserTokenPayload data) {
+        if (mdsalAuthStore != null) {
+            return data != null ? mdsalAuthStore.getPolicy(urlRule.getPairKey(), data.getRoles())
                     : Optional.of(OdlPolicy.denyAll(urlRule.getPairKey()));
         }
         return Optional.empty();
@@ -293,8 +289,9 @@ public class AuthHttpServlet extends HttpServlet {
         if ("anon".equals(key)) {
             return null;
         }
+        List<Main> list = shiroConfiguration.getMain();
         Optional<Main> main =
-                this.shiroConfiguration.getMain().stream().filter((e) -> e.getPairKey().equals(key)).findFirst();
+                list == null ? Optional.empty() : list.stream().filter(e -> e.getPairKey().equals(key)).findFirst();
         if (main.isPresent()) {
             return main.get().getPairValue();
         }
@@ -314,7 +311,7 @@ public class AuthHttpServlet extends HttpServlet {
                 if (!username.contains("@")) {
                     username = String.format("%s@%s", username, domain);
                 }
-                List<String> roles = this.odlIdentityService.listRoles(username, domain);
+                List<String> roles = odlIdentityService.listRoles(username, domain);
                 return UserTokenPayload.create(username, roles);
             }
         }
@@ -440,8 +437,8 @@ public class AuthHttpServlet extends HttpServlet {
         }
         HttpServletRequest req = new HeadersOnlyHttpServletRequest(
                 Map.of("Authorization", BaseHTTPClient.getAuthorizationHeaderValue(username, password)));
-        if (this.odlAuthenticator.authenticate(req)) {
-            List<String> roles = this.odlIdentityService.listRoles(username, domain);
+        if (odlAuthenticator.authenticate(req)) {
+            List<String> roles = odlIdentityService.listRoles(username, domain);
             UserTokenPayload data = new UserTokenPayload();
             data.setPreferredUsername(username);
             data.setFamilyName("");
@@ -467,6 +464,7 @@ public class AuthHttpServlet extends HttpServlet {
         os.write(output);
 
     }
+
     private void logout() {
         final Subject subject = SecurityUtils.getSubject();
         try {
index b181af0..293fe33 100644 (file)
@@ -27,6 +27,7 @@ import java.util.concurrent.ExecutionException;
 import org.onap.ccsdk.features.sdnr.wt.oauthprovider.data.OdlPolicy;
 import org.onap.ccsdk.features.sdnr.wt.oauthprovider.data.OdlPolicy.PolicyMethods;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.aaa.rev161214.HttpAuthorization;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.aaa.rev161214.http.authorization.Policies;
@@ -49,17 +50,25 @@ public class MdSalAuthorizationStore {
     public Optional<OdlPolicy> getPolicy(String path, List<String> userRoles) {
         InstanceIdentifier<Policies> iif = InstanceIdentifier.create(HttpAuthorization.class).child(Policies.class);
         Optional<Policies> odata = Optional.empty();
-        try {
-            odata = this.dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION, iif).get();
-        } catch (InterruptedException | ExecutionException e) {
+        try (ReadTransaction transaction = this.dataBroker.newReadOnlyTransaction()) {
+            odata = transaction.read(LogicalDatastoreType.CONFIGURATION, iif).get();
+        } catch (ExecutionException e) {
             LOG.warn("unable to read policies from mdsal: ", e);
+        } catch (InterruptedException e) {
+            LOG.warn("Interrupted!", e);
+            // Restore interrupted state...
+            Thread.currentThread().interrupt();
         }
         if (odata.isEmpty()) {
             return Optional.empty();
         }
-
+        List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.aaa.rev161214.http.authorization.policies.Policies> data =
+                odata.get().getPolicies();
+        if (data == null) {
+            return Optional.empty();
+        }
         Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.aaa.rev161214.http.authorization.policies.Policies> entry =
-                odata.get().getPolicies().stream().filter((e) -> path.equals(e.getResource())).findFirst();
+                data.stream().filter(e -> path.equals(e.getResource())).findFirst();
         if (entry.isEmpty()) {
             return Optional.empty();
         }
@@ -96,7 +105,7 @@ public class MdSalAuthorizationStore {
                     methods.setPatch(true);
                     break;
                 default:
-                    LOG.warn("unknown http method {}",action);
+                    LOG.warn("unknown http method {}", action);
                     break;
             }
         }
index e7e9b72..cf8109e 100644 (file)
@@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory;
 public class TokenCreator {
 
     private static final Logger LOG = LoggerFactory.getLogger(AuthHttpServlet.class.getName());
-    private static final long DEFAULT_TOKEN_LIFETIME_MS = 30 * 60 * 1000;
+    private static final long DEFAULT_TOKEN_LIFETIME_MS = 30 * 60 * 1000L;
     private final String issuer;
     private static TokenCreator _instance;
     private final String secret;
@@ -98,8 +98,8 @@ public class TokenCreator {
         return new Date().getTime() + DEFAULT_TOKEN_LIFETIME_MS;
     }
 
-    public long getDefaultExp(long exp_in) {
-        return new Date().getTime() + exp_in;
+    public long getDefaultExp(long expIn) {
+        return new Date().getTime() + expIn;
     }
 
     public UserTokenPayload decode(HttpServletRequest req) throws JWTDecodeException {
index f6e6c5d..9bc51d4 100644 (file)
@@ -21,7 +21,9 @@
  */
 package org.onap.ccsdk.features.sdnr.wt.websocketmanager.model.data;
 
+import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.Revision;
 
 public class ReducedSchemaInfo {
     private String namespace;
@@ -34,14 +36,23 @@ public class ReducedSchemaInfo {
 
     public ReducedSchemaInfo(QName qname) {
         this.namespace = qname.getNamespace().toString();
-        this.revision = qname.getRevision().isPresent() ? qname.getRevision().get().toString() : null;
+        Optional<Revision> orev = qname.getRevision();
+        this.revision = orev.isPresent() ? orev.get().toString() : null;
         this.type = qname.getLocalName();
     }
 
     public boolean equals(QName obj) {
-        return this.namespace.equals(obj.getNamespace().toString()) && this.type.equals(obj.getLocalName())
-                && ((this.revision == null && obj.getRevision().isEmpty())
-                        || (this.revision.equals(obj.getRevision().get().toString())));
+        Optional<Revision> orev = obj.getRevision();
+        if (this.namespace.equals(obj.getNamespace().toString()) && this.type.equals(obj.getLocalName())) {
+            if (this.revision == null) {
+                return orev.isEmpty();
+            } else if (orev.isEmpty()) {
+                return false;
+            } else {
+                return orev.get().toString().equals(this.revision);
+            }
+        }
+        return false;
     }
 
     public String getNamespace() {
index b920ffe..032659c 100644 (file)
@@ -24,7 +24,9 @@ package org.onap.ccsdk.features.sdnr.wt.websocketmanager.model.data;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.Revision;
 
 public class SchemaInfo {
     private String namespace;
@@ -33,14 +35,18 @@ public class SchemaInfo {
 
     public SchemaInfo() {}
 
-
-
     public SchemaInfo(QName qname) {
-        this(qname.getNamespace().toString(),
-                qname.getRevision().isPresent() ? qname.getRevision().get().toString() : null, new ArrayList<>());
+        this(qname.getNamespace().toString(), getRevision(qname), new ArrayList<>());
         this.notification.add(qname.getLocalName());
     }
 
+    private static String getRevision(QName qname) {
+        Optional<Revision> orev = qname.getRevision();
+        return orev.isPresent() ? orev.get().toString() : null;
+    }
+
+
+
     public SchemaInfo(String namespace, String revision, List<String> notifications) {
         this.namespace = namespace;
         this.revision = revision;
@@ -78,8 +84,7 @@ public class SchemaInfo {
      */
     @JsonIgnore
     public boolean isValid() {
-        return this.namespace != null
-                && (this.notification == null || (this.notification != null && !this.notification.isEmpty()));
+        return this.namespace != null && (this.notification == null || !this.notification.isEmpty());
     }
 
     /**
@@ -95,7 +100,7 @@ public class SchemaInfo {
             return true;
         }
         //if namespace does not match => false
-        if (!this.namespace.equals(schema.getNamespace().toString())) {
+        if (!this.namespace.equals(schema.getNamespace())) {
             return false;
         }
         //if revision of scope is set and it does not match and is not '*' => false
@@ -120,8 +125,9 @@ public class SchemaInfo {
         if (this.revision == null && qname.getRevision().isEmpty()) {
             return true;
         }
+        Optional<Revision> orev = qname.getRevision();
         if (this.revision != null) {
-            return this.revision.equals(qname.getRevision().isEmpty() ? null : qname.getRevision().get().toString());
+            return this.revision.equals(orev.isEmpty() ? null : orev.get().toString());
         }
         return false;
     }
index b30aed1..4368ed5 100644 (file)
@@ -112,7 +112,7 @@ public class Scope {
 
     public static List<Scope> createList(String nodeId, List<QName> qnames) {
         List<Scope> scopes = new ArrayList<>();
-        Optional<Scope> listElem = null;
+        Optional<Scope> listElem;
         for (QName qname : qnames) {
             listElem = scopes.stream().filter(e -> e.schema != null && e.schema.equalsNamespaceAndRevision(qname))
                     .findFirst();
index 7c12c4b..7cc6d72 100644 (file)
@@ -80,8 +80,12 @@ public class WebSocketManagerSocket extends WebSocketAdapter {
                                 .get(SEND_MESSAGE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
                         LOG.info("message sent");
                     }
-                } catch (InterruptedException | ExecutionException | TimeoutException e) {
+                } catch (ExecutionException | TimeoutException e) {
                     LOG.warn("problem pushing message: ", e);
+                } catch (InterruptedException e) {
+                    LOG.warn("Interrupted!", e);
+                    // Restore interrupted state...
+                    Thread.currentThread().interrupt();
                 }
 
                 if (messageQueue.isEmpty()) {
@@ -163,7 +167,7 @@ public class WebSocketManagerSocket extends WebSocketAdapter {
         closed = false;
         this.sendingSyncThread.start();
         clientList.put(String.valueOf(this.hashCode()), this);
-        LOG.debug("client connected from " + this.getRemoteAdr());
+        LOG.debug("client connected from {}", this.getRemoteAdr());
     }
 
     @Override
@@ -171,12 +175,12 @@ public class WebSocketManagerSocket extends WebSocketAdapter {
         clientList.remove(String.valueOf(this.hashCode()));
         this.sendingSyncThread.interrupt();
         closed = true;
-        LOG.debug("client disconnected from " + this.getRemoteAdr());
+        LOG.debug("client disconnected from {}", this.getRemoteAdr());
     }
 
     @Override
     public void onWebSocketError(Throwable cause) {
-        LOG.debug("error caused on " + this.getRemoteAdr() + " :" + cause.getMessage());
+        LOG.debug("error caused on {}: ",this.getRemoteAdr(), cause);
     }
 
     private String getRemoteAdr() {
@@ -212,11 +216,11 @@ public class WebSocketManagerSocket extends WebSocketAdapter {
             }
 
         } catch (JsonProcessingException e) {
-            LOG.warn("problem set scope: " + e.getMessage());
+            LOG.warn("problem set scope: {}" ,e.getMessage());
             try {
                 this.send(mapper.writeValueAsString(ScopeRegistrationResponse.error(e.getMessage())));
             } catch (JsonProcessingException e1) {
-                LOG.warn("problem sending error response via ws: " + e1);
+                LOG.warn("problem sending error response via ws: ", e1);
             }
         }
         return ret;
@@ -232,7 +236,7 @@ public class WebSocketManagerSocket extends WebSocketAdapter {
                 this.sendToAll(notification.getNodeId(), notification.getType(), request);
             }
         } catch (Exception e) {
-            LOG.warn("handle ws request failed:" + e.getMessage());
+            LOG.warn("handle ws request failed:",e);
         }
     }
 
@@ -241,7 +245,9 @@ public class WebSocketManagerSocket extends WebSocketAdapter {
             LOG.trace("sending {}", msg);
             this.messageQueue.put(msg);
         } catch (InterruptedException e) {
-            LOG.warn("problem putting message into sending queue: " + e.getMessage());
+            LOG.warn("problem putting message into sending queue: {}", e.getMessage());
+            // Restore interrupted state...
+            Thread.currentThread().interrupt();
         }
     }
 
@@ -294,8 +300,13 @@ public class WebSocketManagerSocket extends WebSocketAdapter {
     }
 
     public static void broadCast(DOMNotificationOutput domNotificationOutput) {
-        // TODO Auto-generated method stub
-
+        if (clientList.size() > 0) {
+            Set<Entry<String, WebSocketManagerSocket>> e = clientList.entrySet();
+            WebSocketManagerSocket s = e.iterator().next().getValue();
+            if (s != null) {
+                s.sendToAll(domNotificationOutput);
+            }
+        }
     }
 
 }
index 885ded3..ca3d691 100644 (file)
@@ -58,6 +58,16 @@ public class UserScopeTest {
 
     }
 
+    @Test
+    public void testSchemaInfoClass() {
+        ReducedSchemaInfo si = new ReducedSchemaInfo(ProblemNotification.QNAME);
+        assertTrue(si.equals(ProblemNotification.QNAME));
+        assertFalse(si.equals(ObjectCreationNotification.QNAME));
+        si.setRevision(null);
+        assertFalse(si.equals(ProblemNotification.QNAME));
+
+    }
+
     private static final Scope buildScope(String nodeId, String namespace, String revision,
             List<String> notifications) {
         Scope scope = new Scope();