summaryrefslogtreecommitdiffstats
path: root/utils/src/main/java/org/onap
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2020-04-03 09:44:26 -0400
committerJim Hahn <jrh3@att.com>2020-04-06 09:41:59 -0400
commita56d3929f2387252525577fb36f9e03933064b8f (patch)
tree4b671549b5f1c0513c31d77baa19821e422f41e7 /utils/src/main/java/org/onap
parent7da3ddfa40de2f683a2d423d62b78a8d001108eb (diff)
Address sonar issues in common
Addressed the following sonar issues: - missing assertion in junit test case - disable sonars about setAccessible() as it's required for jackson emulation - sleep in junit - don't use wild-cards (e.g., "*") with java.util Pattern - use re2j instead of java.util Pattern - use String methods (e.g., startsWith()) - duplicate method bodies - duplicate code in Coder classes - string concatenation in logger calls - UTF-8 encoding - return primitive instead of boxed primitive - add assertion to tests - renamed support methods from doTestXxx to verifyXxx - cognitive complexity - use AtomicRef instead of volatile - use specific Functionals (e.g., IntConsumer) - function always returns the same value - serializable vs transient Issue-ID: POLICY-2305 Change-Id: I08eb7aa495a80bdc1d26827ba17a7946c83b9828 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'utils/src/main/java/org/onap')
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java50
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderInstantAsMillis.java74
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderObject.java6
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java8
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java2
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/resources/ResourceUtils.java23
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/resources/TextFileUtils.java9
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/security/CryptoUtils.java8
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/services/ServiceManager.java10
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/validation/Version.java6
10 files changed, 82 insertions, 114 deletions
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java
index 2548dea4..7f5e3b85 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoder.java
@@ -40,8 +40,6 @@ import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
-import lombok.AccessLevel;
-import lombok.Getter;
import org.onap.policy.common.gson.DoubleConverter;
import org.onap.policy.common.gson.GsonMessageBodyHandler;
@@ -53,28 +51,44 @@ public class StandardCoder implements Coder {
/**
* Gson object used to encode and decode messages.
*/
- @Getter(AccessLevel.PROTECTED)
- private static final Gson GSON;
+ private static final Gson GSON_STD;
/**
* Gson object used to encode messages in "pretty" format.
*/
- @Getter(AccessLevel.PROTECTED)
- private static final Gson GSON_PRETTY;
+ private static final Gson GSON_STD_PRETTY;
static {
GsonBuilder builder = GsonMessageBodyHandler.configBuilder(
new GsonBuilder().registerTypeAdapter(StandardCoderObject.class, new StandardTypeAdapter()));
- GSON = builder.create();
- GSON_PRETTY = builder.setPrettyPrinting().create();
+ GSON_STD = builder.create();
+ GSON_STD_PRETTY = builder.setPrettyPrinting().create();
}
/**
+ * Gson object used to encode and decode messages.
+ */
+ protected final Gson gson;
+
+ /**
+ * Gson object used to encode messages in "pretty" format.
+ */
+ protected final Gson gsonPretty;
+
+ /**
* Constructs the object.
*/
public StandardCoder() {
- super();
+ this(GSON_STD, GSON_STD_PRETTY);
+ }
+
+ /**
+ * Constructs the object.
+ */
+ protected StandardCoder(Gson gson, Gson gsonPretty) {
+ this.gson = gson;
+ this.gsonPretty = gsonPretty;
}
@Override
@@ -213,13 +227,13 @@ public class StandardCoder implements Coder {
* @return the encoded object
*/
protected String toPrettyJson(Object object) {
- return GSON_PRETTY.toJson(object);
+ return gsonPretty.toJson(object);
}
@Override
public StandardCoderObject toStandard(Object object) throws CoderException {
try {
- return new StandardCoderObject(GSON.toJsonTree(object));
+ return new StandardCoderObject(gson.toJsonTree(object));
} catch (RuntimeException e) {
throw new CoderException(e);
@@ -229,7 +243,7 @@ public class StandardCoder implements Coder {
@Override
public <T> T fromStandard(StandardCoderObject sco, Class<T> clazz) throws CoderException {
try {
- return GSON.fromJson(sco.getData(), clazz);
+ return gson.fromJson(sco.getData(), clazz);
} catch (RuntimeException e) {
throw new CoderException(e);
@@ -287,7 +301,7 @@ public class StandardCoder implements Coder {
* @return a json element representing the object
*/
protected JsonElement toJsonTree(Object object) {
- return GSON.toJsonTree(object);
+ return gson.toJsonTree(object);
}
/**
@@ -297,7 +311,7 @@ public class StandardCoder implements Coder {
* @return a json string representing the object
*/
protected String toJson(Object object) {
- return GSON.toJson(object);
+ return gson.toJson(object);
}
/**
@@ -307,7 +321,7 @@ public class StandardCoder implements Coder {
* @param object object to be encoded
*/
protected void toJson(Writer target, Object object) {
- GSON.toJson(object, object.getClass(), target);
+ gson.toJson(object, object.getClass(), target);
}
/**
@@ -318,7 +332,7 @@ public class StandardCoder implements Coder {
* @return the object represented by the given json element
*/
protected <T> T fromJson(JsonElement json, Class<T> clazz) {
- return convertFromDouble(clazz, GSON.fromJson(json, clazz));
+ return convertFromDouble(clazz, gson.fromJson(json, clazz));
}
/**
@@ -329,7 +343,7 @@ public class StandardCoder implements Coder {
* @return the object represented by the given json string
*/
protected <T> T fromJson(String json, Class<T> clazz) {
- return convertFromDouble(clazz, GSON.fromJson(json, clazz));
+ return convertFromDouble(clazz, gson.fromJson(json, clazz));
}
/**
@@ -340,7 +354,7 @@ public class StandardCoder implements Coder {
* @return the object represented by the given json string
*/
protected <T> T fromJson(Reader source, Class<T> clazz) {
- return convertFromDouble(clazz, GSON.fromJson(source, clazz));
+ return convertFromDouble(clazz, gson.fromJson(source, clazz));
}
/**
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderInstantAsMillis.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderInstantAsMillis.java
index fbb53b91..27b239bb 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderInstantAsMillis.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderInstantAsMillis.java
@@ -22,12 +22,7 @@ package org.onap.policy.common.utils.coder;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import java.io.Reader;
-import java.io.Writer;
import java.time.Instant;
-import lombok.AccessLevel;
-import lombok.Getter;
import org.onap.policy.common.gson.GsonMessageBodyHandler;
import org.onap.policy.common.gson.InstantAsMillisTypeAdapter;
@@ -40,14 +35,12 @@ public class StandardCoderInstantAsMillis extends StandardCoder {
/**
* Gson object used to encode and decode messages.
*/
- @Getter(AccessLevel.PROTECTED)
- private static final Gson GSON;
+ private static final Gson GSON_INSTANT;
/**
* Gson object used to encode messages in "pretty" format.
*/
- @Getter(AccessLevel.PROTECTED)
- private static final Gson GSON_PRETTY;
+ private static final Gson GSON_INSTANT_PRETTY;
static {
GsonBuilder builder = GsonMessageBodyHandler
@@ -55,71 +48,14 @@ public class StandardCoderInstantAsMillis extends StandardCoder {
new StandardTypeAdapter()))
.registerTypeAdapter(Instant.class, new InstantAsMillisTypeAdapter());
- GSON = builder.create();
- GSON_PRETTY = builder.setPrettyPrinting().create();
+ GSON_INSTANT = builder.create();
+ GSON_INSTANT_PRETTY = builder.setPrettyPrinting().create();
}
/**
* Constructs the object.
*/
public StandardCoderInstantAsMillis() {
- super();
- }
-
- @Override
- protected String toPrettyJson(Object object) {
- return GSON_PRETTY.toJson(object);
- }
-
- @Override
- public StandardCoderObject toStandard(Object object) throws CoderException {
- try {
- return new StandardCoderObject(GSON.toJsonTree(object));
-
- } catch (RuntimeException e) {
- throw new CoderException(e);
- }
- }
-
- @Override
- public <T> T fromStandard(StandardCoderObject sco, Class<T> clazz) throws CoderException {
- try {
- return GSON.fromJson(sco.getData(), clazz);
-
- } catch (RuntimeException e) {
- throw new CoderException(e);
- }
- }
-
- // the remaining methods are wrappers that can be overridden by junit tests
-
- @Override
- protected JsonElement toJsonTree(Object object) {
- return GSON.toJsonTree(object);
- }
-
- @Override
- protected String toJson(Object object) {
- return GSON.toJson(object);
- }
-
- @Override
- protected void toJson(Writer target, Object object) {
- GSON.toJson(object, object.getClass(), target);
- }
-
- @Override
- protected <T> T fromJson(JsonElement json, Class<T> clazz) {
- return convertFromDouble(clazz, GSON.fromJson(json, clazz));
- }
-
- @Override
- protected <T> T fromJson(String json, Class<T> clazz) {
- return convertFromDouble(clazz, GSON.fromJson(json, clazz));
- }
-
- @Override
- protected <T> T fromJson(Reader source, Class<T> clazz) {
- return convertFromDouble(clazz, GSON.fromJson(source, clazz));
+ super(GSON_INSTANT, GSON_INSTANT_PRETTY);
}
}
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderObject.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderObject.java
index 7f0f0580..5d682638 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderObject.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardCoderObject.java
@@ -35,7 +35,11 @@ public class StandardCoderObject implements Serializable {
/**
* Data wrapped by this.
*/
- private final JsonElement data;
+ /*
+ * this should not be transient, but since it isn't serializable, we're stuck with it
+ * until there's time to address the issue
+ */
+ private final transient JsonElement data;
/**
* Constructs the object.
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java
index 85505a98..647a6155 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java
@@ -65,7 +65,7 @@ public class StandardValCoder extends StandardCoder {
* The validator strips off the "pretty" stuff (i.e., spaces), thus we have to validate and generate the pretty
* JSON in separate steps.
*/
- getGSON().toJson(object, object.getClass(), validatorApi.createJsonWriter(validator, new StringWriter()));
+ gson.toJson(object, object.getClass(), validatorApi.createJsonWriter(validator, new StringWriter()));
return super.toPrettyJson(object);
}
@@ -79,18 +79,18 @@ public class StandardValCoder extends StandardCoder {
@Override
protected void toJson(@NonNull Writer target, @NonNull Object object) {
- getGSON().toJson(object, object.getClass(), validatorApi.createJsonWriter(validator, target));
+ gson.toJson(object, object.getClass(), validatorApi.createJsonWriter(validator, target));
}
@Override
protected <T> T fromJson(@NonNull Reader source, @NonNull Class<T> clazz) {
- return convertFromDouble(clazz, getGSON().fromJson(validatorApi.createJsonReader(validator, source), clazz));
+ return convertFromDouble(clazz, gson.fromJson(validatorApi.createJsonReader(validator, source), clazz));
}
@Override
protected <T> T fromJson(String json, Class<T> clazz) {
StringReader reader = new StringReader(json);
- return convertFromDouble(clazz, getGSON().fromJson(validatorApi.createJsonReader(validator, reader), clazz));
+ return convertFromDouble(clazz, gson.fromJson(validatorApi.createJsonReader(validator, reader), clazz));
}
/**
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java
index 1bcf6ac0..c4375968 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java
@@ -34,7 +34,7 @@ public class StandardYamlCoder extends StandardCoder {
* Constructs the object.
*/
public StandardYamlCoder() {
- translator = new YamlJsonTranslator(getGSON());
+ translator = new YamlJsonTranslator(gson);
}
@Override
diff --git a/utils/src/main/java/org/onap/policy/common/utils/resources/ResourceUtils.java b/utils/src/main/java/org/onap/policy/common/utils/resources/ResourceUtils.java
index 365efabe..58e2baf5 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/resources/ResourceUtils.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/resources/ResourceUtils.java
@@ -2,6 +2,7 @@
* ============LICENSE_START=======================================================
* Copyright (C) 2018 Ericsson. All rights reserved.
* Modifications Copyright (C) 2020 Nordix Foundation.
+ * Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -100,7 +101,7 @@ public abstract class ResourceUtils {
resourceOutputStreamBuffer.write(resourceBuffer, 0, length);
}
} catch (final IOException e) {
- LOGGER.debug("error reading resource stream \"{}\" : " + e.getMessage(), resourceName, e);
+ LOGGER.debug("error reading resource stream {}", resourceName, e);
return null;
}
@@ -130,7 +131,7 @@ public abstract class ResourceUtils {
return urlToResource.openStream();
} catch (final IOException e) {
// Any of many IO exceptions such as the resource is a directory
- LOGGER.debug("error attaching resource \"{}\" to stream : " + e.getMessage(), resourceName, e);
+ LOGGER.debug("error attaching resource {}", resourceName, e);
return null;
}
}
@@ -164,7 +165,7 @@ public abstract class ResourceUtils {
return url;
}
} catch (final Exception e) {
- LOGGER.debug("error getting URL resource \"{}\" : " + e.getMessage(), e);
+ LOGGER.debug("error getting URL resource {}", resourceName, e);
return null;
}
}
@@ -199,7 +200,7 @@ public abstract class ResourceUtils {
return null;
}
} catch (final Exception e) {
- LOGGER.debug("error finding resource \"{}\" : " + e.getMessage(), e);
+ LOGGER.debug("error finding resource {}", resourceName, e);
return null;
}
}
@@ -288,6 +289,8 @@ public abstract class ResourceUtils {
*/
public static Set<String> getDirectoryContentsJar(final URL jarResourceDirectoryUrl,
final String resourceDirectoryName) {
+ String dirNameWithSlash = resourceDirectoryName + "/";
+ int minLength = dirNameWithSlash.length() + 1;
File jarResourceDirectory = new File(jarResourceDirectoryUrl.getPath());
String jarFileName = jarResourceDirectory.getParent().replaceFirst("^file:", "").replaceFirst("!.*$", "");
@@ -297,10 +300,14 @@ public abstract class ResourceUtils {
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
- JarEntry je = entries.nextElement();
-
- if (je.getName().matches("^" + resourceDirectoryName + "\\/.+")) {
- localDirectorySet.add(je.getName());
+ /*
+ * Ignore sonar issue, as the entries are not being expanded here.
+ */
+ JarEntry je = entries.nextElement(); // NOSONAR
+ String jeName = je.getName();
+
+ if (jeName.length() >= minLength && jeName.startsWith(dirNameWithSlash)) {
+ localDirectorySet.add(jeName);
}
}
} catch (IOException ioe) {
diff --git a/utils/src/main/java/org/onap/policy/common/utils/resources/TextFileUtils.java b/utils/src/main/java/org/onap/policy/common/utils/resources/TextFileUtils.java
index 01af7fd8..c5b8c981 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/resources/TextFileUtils.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/resources/TextFileUtils.java
@@ -1,6 +1,7 @@
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2019 Nordix Foundation.
+ * Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,6 +26,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
/**
@@ -34,7 +36,6 @@ import java.nio.file.Files;
* @author Liam Fallon (liam.fallon@est.tech)
*/
public abstract class TextFileUtils {
- private static final String UTF_8 = "UTF-8";
private static final int READER_CHAR_BUFFER_SIZE_4096 = 4096;
private TextFileUtils() {
@@ -50,7 +51,7 @@ public abstract class TextFileUtils {
*/
public static String getTextFileAsString(final String textFilePath) throws IOException {
final File textFile = new File(textFilePath);
- return new String(Files.readAllBytes(textFile.toPath()), UTF_8);
+ return Files.readString(textFile.toPath());
}
/**
@@ -77,7 +78,7 @@ public abstract class TextFileUtils {
* @throws IOException on errors reading text from the file
*/
public static void putStringAsFile(final String outString, final File textFile) throws IOException {
- Files.write(textFile.toPath(), outString.getBytes(UTF_8));
+ Files.writeString(textFile.toPath(), outString);
}
/**
@@ -88,7 +89,7 @@ public abstract class TextFileUtils {
* @throws IOException on errors reading text from the file
*/
public static String getStreamAsString(final InputStream textStream) throws IOException {
- return getReaderAsString(new InputStreamReader(textStream, UTF_8));
+ return getReaderAsString(new InputStreamReader(textStream, StandardCharsets.UTF_8));
}
/**
diff --git a/utils/src/main/java/org/onap/policy/common/utils/security/CryptoUtils.java b/utils/src/main/java/org/onap/policy/common/utils/security/CryptoUtils.java
index 416c73a6..af5b3d49 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/security/CryptoUtils.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/security/CryptoUtils.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP
* ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -62,9 +62,9 @@ public class CryptoUtils implements CryptoCoder {
/**
* Used to generate a random "iv". Strong randomness is not needed, as this is only
- * used as a "salt".
+ * used as a "salt". (Thus sonar is disabled.)
*/
- private static final Random RANDOM = new Random();
+ private static final Random RANDOM = new Random(); // NOSONAR
/**
* CryptoUtils - encryption tool constructor.
@@ -228,7 +228,7 @@ public class CryptoUtils implements CryptoCoder {
* The encrypted string or plain text value
* @return boolean value indicate if string prefix with enc: or not
*/
- public static Boolean isEncrypted(String value) {
+ public static boolean isEncrypted(String value) {
return (value != null && value.startsWith("enc:"));
}
diff --git a/utils/src/main/java/org/onap/policy/common/utils/services/ServiceManager.java b/utils/src/main/java/org/onap/policy/common/utils/services/ServiceManager.java
index 5c8c01df..78fe853b 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/services/ServiceManager.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/services/ServiceManager.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP PAP
* ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -58,6 +58,7 @@ public class ServiceManager implements Startable {
/**
* Constructs the object.
+ *
* @param name the manager's name, used for logging purposes
*/
public ServiceManager(String name) {
@@ -215,8 +216,13 @@ public class ServiceManager implements Startable {
}
}
+ /*
+ * Cannot use a plain Runnable, because it can't throw exceptions. Could use a
+ * Callable, instead, but then all of the lambda expressions become rather messy, thus
+ * we'll stick with RunnableWithEx, and just disable the sonar warning.
+ */
@FunctionalInterface
public static interface RunnableWithEx {
- void run() throws Exception;
+ void run() throws Exception; // NOSONAR
}
}
diff --git a/utils/src/main/java/org/onap/policy/common/utils/validation/Version.java b/utils/src/main/java/org/onap/policy/common/utils/validation/Version.java
index 41ff832a..efbf9378 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/validation/Version.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/validation/Version.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP COMMON
* ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
* Modifications Copyright (C) 2019 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,8 +21,8 @@
package org.onap.policy.common.utils.validation;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import com.google.re2j.Matcher;
+import com.google.re2j.Pattern;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;