aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrikBuhr <patrik.buhr@est.tech>2019-05-08 07:18:24 +0000
committerPatrikBuhr <patrik.buhr@est.tech>2019-05-08 07:18:24 +0000
commitd3da8a4866fb3e53b2342b1cb05357af550fee5f (patch)
tree5e9c62ee24bcb217c7c744dfee5c737876a6407d
parentf43d5f564435fa79d13d6876f5cf438b51a95ff3 (diff)
Code improvement, FilePublishInformation serializing
Updated serializer of FilePublishInformation so that only elements that should be part of publishing is included. Change-Id: If5632af8bf9fd26f8bc96b25d8bfbccf63dfec2f Issue-ID: DCAEGEN2-1488 Signed-off-by: PatrikBuhr <patrik.buhr@est.tech>
-rw-r--r--datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java14
-rw-r--r--datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/JsonSerializer.java (renamed from datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctions.java)44
-rw-r--r--datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisher.java11
-rw-r--r--datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctionsTest.java53
-rw-r--r--datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisherTest.java8
5 files changed, 36 insertions, 94 deletions
diff --git a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java
index 066402b2..63ed0daa 100644
--- a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java
+++ b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java
@@ -23,7 +23,6 @@ import java.util.Map;
import org.immutables.gson.Gson;
import org.immutables.value.Value;
-import org.onap.dcaegen2.services.sdk.rest.services.model.DmaapModel;
/**
* Information needed to publish a file to DataRouter.
@@ -34,7 +33,7 @@ import org.onap.dcaegen2.services.sdk.rest.services.model.DmaapModel;
@Value.Immutable
@Gson.TypeAdapters
-public interface FilePublishInformation extends DmaapModel {
+public interface FilePublishInformation {
@SerializedName("productName")
String getProductName();
@@ -54,15 +53,9 @@ public interface FilePublishInformation extends DmaapModel {
@SerializedName("timeZoneOffset")
String getTimeZoneOffset();
- @SerializedName("name")
- String getName();
-
@SerializedName("location")
String getLocation();
- @SerializedName("internalLocation")
- Path getInternalLocation();
-
@SerializedName("compression")
String getCompression();
@@ -72,6 +65,9 @@ public interface FilePublishInformation extends DmaapModel {
@SerializedName("fileFormatVersion")
String getFileFormatVersion();
- @SerializedName("context")
+ Path getInternalLocation();
+
+ String getName();
+
Map<String, String> getContext();
}
diff --git a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctions.java b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/JsonSerializer.java
index c1b4c0dc..7081d1ac 100644
--- a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctions.java
+++ b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/JsonSerializer.java
@@ -18,26 +18,25 @@
package org.onap.dcaegen2.collectors.datafile.model;
+import com.google.common.collect.Sets;
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
-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.nio.file.Path;
+import java.util.Set;
/**
* Helper class to serialize object.
*/
-public class CommonFunctions {
+public abstract class JsonSerializer {
- private static Gson gson =
- new GsonBuilder().registerTypeHierarchyAdapter(Path.class, new PathConverter()).serializeNulls().create();
- private CommonFunctions() {
- }
+ private static Gson gson =
+ new GsonBuilder() //
+ .serializeNulls() //
+ .addSerializationExclusionStrategy(new FilePublishInformationExclusionStrategy()) //
+ .create(); //
/**
* Serializes a <code>filePublishInformation</code>.
@@ -46,18 +45,25 @@ public class CommonFunctions {
*
* @return a string with the serialized info.
*/
- public static String createJsonBody(FilePublishInformation filePublishInformation) {
+ public static String createJsonBodyForDataRouter(FilePublishInformation filePublishInformation) {
return gson.toJson(filePublishInformation);
}
- /**
- * Json serializer that handles Path serializations, since <code>Path</code> does not implement the
- * <code>Serializable</code> interface.
- */
- public static class PathConverter implements JsonSerializer<Path> {
+ private static class FilePublishInformationExclusionStrategy implements ExclusionStrategy {
+ /**
+ * Elements in FilePublishInformation to include in the file publishing Json string.
+ */
+ private final Set<String> inclusions =
+ Sets.newHashSet("productName", "vendorName", "lastEpochMicrosec", "sourceName", "startEpochMicrosec",
+ "timeZoneOffset", "location", "compression", "fileFormatType", "fileFormatVersion");
+ @Override
+ public boolean shouldSkipField(FieldAttributes f) {
+ return !inclusions.contains(f.getName());
+ }
+
@Override
- public JsonElement serialize(Path path, Type type, JsonSerializationContext jsonSerializationContext) {
- return new JsonPrimitive(path.toString());
+ public boolean shouldSkipClass(Class<?> clazz) {
+ return false;
}
}
}
diff --git a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisher.java b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisher.java
index 4028ac3f..e5dd01e9 100644
--- a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisher.java
+++ b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisher.java
@@ -34,8 +34,8 @@ import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.ByteArrayEntity;
import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig;
-import org.onap.dcaegen2.collectors.datafile.model.CommonFunctions;
import org.onap.dcaegen2.collectors.datafile.model.FilePublishInformation;
+import org.onap.dcaegen2.collectors.datafile.model.JsonSerializer;
import org.onap.dcaegen2.collectors.datafile.model.logging.MappedDiagnosticContext;
import org.onap.dcaegen2.collectors.datafile.service.HttpUtils;
import org.onap.dcaegen2.collectors.datafile.service.producer.DmaapProducerHttpClient;
@@ -58,9 +58,6 @@ import reactor.core.publisher.Mono;
public class DataRouterPublisher {
private static final String X_DMAAP_DR_META = "X-DMAAP-DR-META";
private static final String CONTENT_TYPE = "application/octet-stream";
- private static final String NAME_JSON_TAG = "name";
- private static final String INTERNAL_LOCATION_JSON_TAG = "internalLocation";
- private static final String CONTEXT_JSON_TAG = "context";
private static final String PUBLISH_TOPIC = "publish";
private static final String DEFAULT_FEED_ID = "1";
@@ -112,11 +109,7 @@ public class DataRouterPublisher {
private void prepareHead(FilePublishInformation publishInfo, HttpPut put) {
put.addHeader(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE);
- JsonElement metaData = new JsonParser().parse(CommonFunctions.createJsonBody(publishInfo));
- metaData.getAsJsonObject().remove(NAME_JSON_TAG).getAsString();
- metaData.getAsJsonObject().remove(INTERNAL_LOCATION_JSON_TAG);
- metaData.getAsJsonObject().remove(CONTEXT_JSON_TAG);
-
+ JsonElement metaData = new JsonParser().parse(JsonSerializer.createJsonBodyForDataRouter(publishInfo));
put.addHeader(X_DMAAP_DR_META, metaData.toString());
put.setURI(getPublishUri(publishInfo.getName()));
MappedDiagnosticContext.appendTraceInfo(put);
diff --git a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctionsTest.java b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctionsTest.java
deleted file mode 100644
index 90237c9d..00000000
--- a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctionsTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2019 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.dcaegen2.collectors.datafile.model;
-
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.nio.file.Paths;
-import java.util.HashMap;
-
-import org.junit.jupiter.api.Test;
-
-public class CommonFunctionsTest {
- @Test
- public void createJsonBody_success() {
- ImmutableFilePublishInformation filePublishInformation = ImmutableFilePublishInformation //
- .builder() //
- .productName("") //
- .vendorName("") //
- .lastEpochMicrosec("") //
- .sourceName("") //
- .startEpochMicrosec("") //
- .timeZoneOffset("") //
- .name("") //
- .location("") //
- .internalLocation(Paths.get("internalLocation")) //
- .compression("") //
- .fileFormatType("") //
- .fileFormatVersion("") //
- .context(new HashMap<String,String>())
- .build();
- String actualBody = CommonFunctions.createJsonBody(filePublishInformation);
-
- assertTrue(actualBody.contains("\"internalLocation\":\"internalLocation\""));
- }
-}
diff --git a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisherTest.java b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisherTest.java
index 03122ea2..8f768d38 100644
--- a/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisherTest.java
+++ b/datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisherTest.java
@@ -149,10 +149,6 @@ class DataRouterPublisherTest {
Header[] metaHeaders = actualPut.getHeaders(X_DMAAP_DR_META);
Map<String, String> metaHash = getMetaDataAsMap(metaHeaders);
- // Note that the following line checks the number of properties that are sent to the data router.
- // This should be 10 unless the API is updated. The class DataRouterPublisher removes
- // info that should not be reported.
- assertEquals(10, metaHash.size());
assertEquals(PRODUCT_NAME, metaHash.get("productName"));
assertEquals(VENDOR_NAME, metaHash.get("vendorName"));
assertEquals(LAST_EPOCH_MICROSEC, metaHash.get("lastEpochMicrosec"));
@@ -163,6 +159,10 @@ class DataRouterPublisherTest {
assertEquals(FTPES_ADDRESS, metaHash.get("location"));
assertEquals(FILE_FORMAT_TYPE, metaHash.get("fileFormatType"));
assertEquals(FILE_FORMAT_VERSION, metaHash.get("fileFormatVersion"));
+
+ // Note that the following line checks the number of properties that are sent to the data router.
+ // This should be 10 unless the API is updated (which is the fields checked above)
+ assertEquals(10, metaHash.size());
}
@Test