diff options
author | PatrikBuhr <patrik.buhr@est.tech> | 2019-05-08 07:18:24 +0000 |
---|---|---|
committer | PatrikBuhr <patrik.buhr@est.tech> | 2019-05-08 07:18:24 +0000 |
commit | d3da8a4866fb3e53b2342b1cb05357af550fee5f (patch) | |
tree | 5e9c62ee24bcb217c7c744dfee5c737876a6407d /datafile-app-server | |
parent | f43d5f564435fa79d13d6876f5cf438b51a95ff3 (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>
Diffstat (limited to 'datafile-app-server')
-rw-r--r-- | datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java | 14 | ||||
-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.java | 11 | ||||
-rw-r--r-- | datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctionsTest.java | 53 | ||||
-rw-r--r-- | datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/DataRouterPublisherTest.java | 8 |
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 |