Use type adapters from common 13/117813/1
authorJim Hahn <jrh3@att.com>
Fri, 12 Feb 2021 15:11:53 +0000 (10:11 -0500)
committerJim Hahn <jrh3@att.com>
Fri, 12 Feb 2021 17:50:11 +0000 (12:50 -0500)
Addressed the following sonar issue:
- remove duplicate code by using gson type adapters from common

Issue-ID: POLICY-2905
Change-Id: I7a832ce3e15387ed25061caec3e057f150828dad
Signed-off-by: Jim Hahn <jrh3@att.com>
models-interactions/model-impl/appc/src/main/java/org/onap/policy/appc/util/Serialization.java
models-interactions/model-impl/appc/src/test/java/org/onap/policy/appc/util/SerializationTest.java
models-interactions/model-impl/appclcm/src/main/java/org/onap/policy/appclcm/util/Serialization.java
models-interactions/model-impl/events/src/main/java/org/onap/policy/controlloop/util/Serialization.java
models-interactions/model-impl/sdnr/src/main/java/org/onap/policy/sdnr/util/Serialization.java

index 008c769..9fa5031 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * appc
  * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019, 2021 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,25 +23,18 @@ package org.onap.policy.appc.util;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import java.lang.reflect.Type;
 import java.time.Instant;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.onap.policy.common.gson.InstantAsMillisTypeAdapter;
+import org.onap.policy.common.gson.ZonedDateTimeTypeAdapter;
 
 public final class Serialization {
     public static final DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSxxx");
 
     public static final Gson gsonPretty = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
-            .registerTypeAdapter(ZonedDateTime.class, new GsonUtcAdapter())
-            .registerTypeAdapter(Instant.class, new GsonInstantAdapter())
+            .registerTypeAdapter(ZonedDateTime.class, new ZonedDateTimeTypeAdapter(format))
+            .registerTypeAdapter(Instant.class, new InstantAsMillisTypeAdapter())
             // .registerTypeAdapter(CommonHeader1607.class, new gsonCommonHeaderInstance())
             // .registerTypeAdapter(ResponseStatus1607.class, new gsonResponseStatus())
             .create();
@@ -49,38 +42,4 @@ public final class Serialization {
     private Serialization() {
         // Private constructor to prevent subclassing
     }
-
-    public static class GsonUtcAdapter implements JsonSerializer<ZonedDateTime>, JsonDeserializer<ZonedDateTime> {
-        private static final Logger logger = LoggerFactory.getLogger(GsonUtcAdapter.class);
-
-        @Override
-        public ZonedDateTime deserialize(JsonElement element, Type type, JsonDeserializationContext context) {
-            try {
-                return ZonedDateTime.parse(element.getAsString(), format);
-            } catch (Exception e) {
-                logger.error("deserialize threw: ", e);
-            }
-            return null;
-        }
-
-        @Override
-        public JsonElement serialize(ZonedDateTime datetime, Type type, JsonSerializationContext context) {
-            return new JsonPrimitive(datetime.format(format));
-        }
-    }
-
-    public static class GsonInstantAdapter implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
-
-        @Override
-        public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
-            return Instant.ofEpochMilli(json.getAsLong());
-        }
-
-        @Override
-        public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
-            return new JsonPrimitive(src.toEpochMilli());
-        }
-
-    }
-
 }
index 965a409..93c3c9e 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * appc
  * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019, 2021 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
 
 package org.onap.policy.appc.util;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 
+import com.google.gson.JsonParseException;
 import java.time.Instant;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
@@ -51,6 +52,7 @@ public class SerializationTest {
         ZonedDateTime outZdt = Serialization.gsonPretty.fromJson(zdtString, ZonedDateTime.class);
         assertEquals(zdt.getDayOfWeek(), outZdt.getDayOfWeek());
 
-        assertNull(Serialization.gsonPretty.fromJson("oz time is weird", ZonedDateTime.class));
+        assertThatThrownBy(() -> Serialization.gsonPretty.fromJson("oz time is weird", ZonedDateTime.class))
+                        .isInstanceOf(JsonParseException.class);
     }
 }
index 54f9782..7dd6e46 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * appclcm
  * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019, 2021 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,55 +23,21 @@ package org.onap.policy.appclcm.util;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import java.lang.reflect.Type;
 import java.time.Instant;
+import org.onap.policy.common.gson.InstantAsMillisTypeAdapter;
+import org.onap.policy.common.gson.InstantTypeAdapter;
 
 public final class Serialization {
     public static final Gson gsonPretty = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
-            .registerTypeAdapter(Instant.class, new InstantAdapter()).create();
+            .registerTypeAdapter(Instant.class, new InstantTypeAdapter()).create();
 
-    public static final Gson gson =
-            new GsonBuilder().disableHtmlEscaping().registerTypeAdapter(Instant.class, new InstantAdapter()).create();
+    public static final Gson gson = new GsonBuilder().disableHtmlEscaping()
+                    .registerTypeAdapter(Instant.class, new InstantTypeAdapter()).create();
 
     public static final Gson gsonJunit = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
-            .registerTypeAdapter(Instant.class, new InstantJunitAdapter()).create();
+            .registerTypeAdapter(Instant.class, new InstantAsMillisTypeAdapter()).create();
 
     private Serialization() {
         // Private constructor to prevent subclassing
     }
-
-    public static class InstantAdapter implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
-
-        @Override
-        public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
-            return Instant.parse(json.getAsString());
-        }
-
-        @Override
-        public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
-            return new JsonPrimitive(src.toString());
-        }
-
-    }
-
-    public static class InstantJunitAdapter implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
-
-        @Override
-        public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
-            return Instant.ofEpochMilli(json.getAsLong());
-        }
-
-        @Override
-        public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
-            return new JsonPrimitive(src.toEpochMilli());
-        }
-
-    }
-
 }
index 5992ce2..5f12413 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * controlloop
  * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019, 2021 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -33,24 +33,26 @@ import java.lang.reflect.Type;
 import java.time.Instant;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
+import org.onap.policy.common.gson.InstantAsMillisTypeAdapter;
+import org.onap.policy.common.gson.ZonedDateTimeTypeAdapter;
 import org.onap.policy.controlloop.ControlLoopNotificationType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public final class Serialization {
-    public static final Gson gson =
-            new GsonBuilder().disableHtmlEscaping().registerTypeAdapter(ZonedDateTime.class, new GsonUtcAdapter())
-                    .registerTypeAdapter(Instant.class, new GsonInstantAdapter())
+    public static final DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSxxx");
+
+    public static final Gson gson = new GsonBuilder().disableHtmlEscaping()
+                    .registerTypeAdapter(ZonedDateTime.class, new ZonedDateTimeTypeAdapter(format))
+                    .registerTypeAdapter(Instant.class, new InstantAsMillisTypeAdapter())
                     .registerTypeAdapter(ControlLoopNotificationType.class, new NotificationTypeAdapter()).create();
 
     public static final Gson gsonPretty = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
-            .registerTypeAdapter(ZonedDateTime.class, new GsonUtcAdapter())
-            .registerTypeAdapter(Instant.class, new GsonInstantAdapter())
+            .registerTypeAdapter(ZonedDateTime.class, new ZonedDateTimeTypeAdapter(format))
+            .registerTypeAdapter(Instant.class, new InstantAsMillisTypeAdapter())
             .registerTypeAdapter(ControlLoopNotificationType.class, new NotificationTypeAdapter()).create();
 
     public static final Gson gsonJunit = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
-            .registerTypeAdapter(ZonedDateTime.class, new GsonUtcAdapter())
-            .registerTypeAdapter(Instant.class, new GsonInstantAdapter()).create();
+            .registerTypeAdapter(ZonedDateTime.class, new ZonedDateTimeTypeAdapter(format))
+            .registerTypeAdapter(Instant.class, new InstantAsMillisTypeAdapter()).create();
 
     private Serialization() {
         // Private constructor to prevent subclassing
@@ -70,39 +72,4 @@ public final class Serialization {
             return ControlLoopNotificationType.toType(json.getAsString());
         }
     }
-
-    public static class GsonUtcAdapter implements JsonSerializer<ZonedDateTime>, JsonDeserializer<ZonedDateTime> {
-        private static final Logger logger = LoggerFactory.getLogger(GsonUtcAdapter.class);
-        public static final DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSxxx");
-
-        @Override
-        public ZonedDateTime deserialize(JsonElement element, Type type, JsonDeserializationContext context) {
-            try {
-                return ZonedDateTime.parse(element.getAsString(), format);
-            } catch (Exception e) {
-                logger.error(e.getMessage(), e);
-            }
-            return null;
-        }
-
-        @Override
-        public JsonElement serialize(ZonedDateTime datetime, Type type, JsonSerializationContext context) {
-            return new JsonPrimitive(datetime.format(format));
-        }
-    }
-
-    public static class GsonInstantAdapter implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
-
-        @Override
-        public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
-            return Instant.ofEpochMilli(json.getAsLong());
-        }
-
-        @Override
-        public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
-            return new JsonPrimitive(src.toEpochMilli());
-        }
-
-    }
-
 }
index 429b131..a5e4336 100644 (file)
@@ -4,7 +4,7 @@
  * ================================================================================
  * Copyright (C) 2018 Wipro Limited Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
- * Modifications Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2018, 2021 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.
@@ -28,24 +28,25 @@ import com.google.gson.JsonDeserializationContext;
 import com.google.gson.JsonDeserializer;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
 import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;
 import java.lang.reflect.Type;
 import java.time.Instant;
+import org.onap.policy.common.gson.InstantAsMillisTypeAdapter;
+import org.onap.policy.common.gson.InstantTypeAdapter;
 import org.onap.policy.sdnr.PciRequest;
 import org.onap.policy.sdnr.PciResponse;
 
 public final class Serialization {
     public static final Gson gsonPretty = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
-            .registerTypeAdapter(Instant.class, new InstantAdapter()).create();
+            .registerTypeAdapter(Instant.class, new InstantTypeAdapter()).create();
 
     public static final Gson gson = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
             .registerTypeAdapter(PciRequest.class, new RequestAdapter())
             .registerTypeAdapter(PciResponse.class, new ResponseAdapter()).create();
 
     public static final Gson gsonJunit = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
-            .registerTypeAdapter(Instant.class, new InstantJunitAdapter()).create();
+            .registerTypeAdapter(Instant.class, new InstantAsMillisTypeAdapter()).create();
 
     private Serialization() {
         // Private constructor to prevent subclassing
@@ -83,33 +84,4 @@ public final class Serialization {
             return gsonPretty.fromJson(json.getAsJsonObject().get("output"), PciResponse.class);
         }
     }
-
-    public static class InstantAdapter implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
-
-        @Override
-        public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
-            return Instant.parse(json.getAsString());
-        }
-
-        @Override
-        public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
-            return new JsonPrimitive(src.toString());
-        }
-
-    }
-
-    public static class InstantJunitAdapter implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
-
-        @Override
-        public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
-            return Instant.ofEpochMilli(json.getAsLong());
-        }
-
-        @Override
-        public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
-            return new JsonPrimitive(src.toEpochMilli());
-        }
-
-    }
-
 }