From d3da8a4866fb3e53b2342b1cb05357af550fee5f Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Wed, 8 May 2019 07:18:24 +0000 Subject: 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 --- .../collectors/datafile/model/CommonFunctions.java | 63 -------------------- .../datafile/model/FilePublishInformation.java | 14 ++--- .../collectors/datafile/model/JsonSerializer.java | 69 ++++++++++++++++++++++ .../datafile/tasks/DataRouterPublisher.java | 11 +--- .../datafile/model/CommonFunctionsTest.java | 53 ----------------- .../datafile/tasks/DataRouterPublisherTest.java | 8 +-- 6 files changed, 80 insertions(+), 138 deletions(-) delete mode 100644 datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctions.java create mode 100644 datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/JsonSerializer.java delete mode 100644 datafile-app-server/src/test/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctionsTest.java 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/CommonFunctions.java deleted file mode 100644 index c1b4c0dc..00000000 --- a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/CommonFunctions.java +++ /dev/null @@ -1,63 +0,0 @@ -/*- - * ============LICENSE_START====================================================================== - * Copyright (C) 2018 NOKIA Intellectual Property, 2018-2019 Nordix Foundation. 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. - * 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. - * ============LICENSE_END======================================================================== - */ - -package org.onap.dcaegen2.collectors.datafile.model; - -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; - -/** - * Helper class to serialize object. - */ -public class CommonFunctions { - - private static Gson gson = - new GsonBuilder().registerTypeHierarchyAdapter(Path.class, new PathConverter()).serializeNulls().create(); - - private CommonFunctions() { - } - - /** - * Serializes a filePublishInformation. - * - * @param filePublishInformation info to serialize. - * - * @return a string with the serialized info. - */ - public static String createJsonBody(FilePublishInformation filePublishInformation) { - return gson.toJson(filePublishInformation); - } - - /** - * Json serializer that handles Path serializations, since Path does not implement the - * Serializable interface. - */ - public static class PathConverter implements JsonSerializer { - @Override - public JsonElement serialize(Path path, Type type, JsonSerializationContext jsonSerializationContext) { - return new JsonPrimitive(path.toString()); - } - } -} 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 getContext(); } diff --git a/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/JsonSerializer.java b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/JsonSerializer.java new file mode 100644 index 00000000..7081d1ac --- /dev/null +++ b/datafile-app-server/src/main/java/org/onap/dcaegen2/collectors/datafile/model/JsonSerializer.java @@ -0,0 +1,69 @@ +/*- + * ============LICENSE_START====================================================================== + * Copyright (C) 2018 NOKIA Intellectual Property, 2018-2019 Nordix Foundation. 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. + * 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. + * ============LICENSE_END======================================================================== + */ + +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 java.util.Set; + +/** + * Helper class to serialize object. + */ +public abstract class JsonSerializer { + + + private static Gson gson = + new GsonBuilder() // + .serializeNulls() // + .addSerializationExclusionStrategy(new FilePublishInformationExclusionStrategy()) // + .create(); // + + /** + * Serializes a filePublishInformation. + * + * @param filePublishInformation info to serialize. + * + * @return a string with the serialized info. + */ + public static String createJsonBodyForDataRouter(FilePublishInformation filePublishInformation) { + return gson.toJson(filePublishInformation); + } + + private static class FilePublishInformationExclusionStrategy implements ExclusionStrategy { + /** + * Elements in FilePublishInformation to include in the file publishing Json string. + */ + private final Set 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 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()) - .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 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 -- cgit 1.2.3-korg