Add support for different fileready message format 17/14217/3 1.2.0
authoraravind.est <aravindhan.a@est.tech>
Wed, 5 Mar 2025 12:17:06 +0000 (12:17 +0000)
committeraravind.est <aravindhan.a@est.tech>
Fri, 7 Mar 2025 14:39:45 +0000 (14:39 +0000)
New fileready message format added.
Changes made to support existing format by default and new format when the class name is given in the configuration

Change-Id: Ica697fec36ba1a94a722ba062b0b67791532b20a
Signed-off-by: aravind.est <aravindhan.a@est.tech>
13 files changed:
datafilecollector/README.md
datafilecollector/config/application.yaml
datafilecollector/src/main/java/org/oran/datafile/configuration/AppConfig.java
datafilecollector/src/main/java/org/oran/datafile/model/DefaultFileReadyMessage.java [new file with mode: 0644]
datafilecollector/src/main/java/org/oran/datafile/model/FileData.java
datafilecollector/src/main/java/org/oran/datafile/model/FileReadyMessage.java
datafilecollector/src/main/java/org/oran/datafile/model/TS28532FileReadyMessage.java [new file with mode: 0644]
datafilecollector/src/main/java/org/oran/datafile/tasks/CollectAndReportFiles.java
datafilecollector/src/main/java/org/oran/datafile/tasks/FileCollector.java
datafilecollector/src/test/java/org/oran/datafile/Integration.java
datafilecollector/src/test/java/org/oran/datafile/model/DefaultFileReadyMessageTest.java [moved from datafilecollector/src/test/java/org/oran/datafile/model/FileReadyMessageTest.java with 60% similarity]
datafilecollector/src/test/java/org/oran/datafile/model/FileDataTest.java
datafilecollector/src/test/java/org/oran/datafile/tasks/FileCollectorTest.java

index 49e73bb..cd5856c 100644 (file)
@@ -34,11 +34,11 @@ The latest documentation can be found here:
 https://docs.o-ran-sc.org/projects/o-ran-sc-nonrtric-plt-ranpm/en/latest/datafilecollector/index.html
 
 
-The comonent is part of the RAM PM use case, which is described here:
+The component is part of the RAM PM use case, which is described here:
 https://docs.o-ran-sc.org/projects/o-ran-sc-nonrtric-plt-ranpm/en/latest/overview.html#overview
 
 
 ## License
 
-Copyright (C) 2018-2019 NOKIA Intellectual Property, 2018-2023 Nordix Foundation. All rights reserved.
+Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved, Copyright (C) 2018-2019 NOKIA Intellectual Property, 2018-2023 Nordix Foundation. All rights reserved.
 [License](http://www.apache.org/licenses/LICENSE-2.0)
index 5352f1b..c78e3d6 100644 (file)
@@ -32,6 +32,9 @@ app:
    # If specified, and authorization token will be loaded from file and inserted in each HTTP header when using HTTP/HTTPS.
    # If the file name is empty, no authorization token is used
   auth-token-file:
+  # If specified, this value will be used as a class to map the fileready event from kafka
+  # If this is empty, default filereadymessage class will be used
+  file-ready-message-class:
   kafka:
     # KAFKA boostrap servers.
     # several redundant boostrap servers can be specified, separated by a comma ','.
index 6282cd4..c1eb8b6 100644 (file)
@@ -2,6 +2,7 @@
  * ============LICENSE_START======================================================================
  * Copyright (C) 2018, 2020-2022 Nokia. All rights reserved.
  * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved.
+ * Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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
@@ -106,6 +107,10 @@ public class AppConfig {
     @Getter
     private int noOfWorkerThreads;
 
+    @Value("${app.file-ready-message-class:}")
+    @Getter
+    private String fileReadyMessageClass;
+
     @Value("${app.kafka.ssl.key-store-location}")
     private String kafkaKeyStoreLocation;
 
diff --git a/datafilecollector/src/main/java/org/oran/datafile/model/DefaultFileReadyMessage.java b/datafilecollector/src/main/java/org/oran/datafile/model/DefaultFileReadyMessage.java
new file mode 100644 (file)
index 0000000..49753fe
--- /dev/null
@@ -0,0 +1,154 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019-2023 Nordix Foundation.
+ *  Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.oran.datafile.model;
+
+import java.util.List;
+
+import lombok.Builder;
+
+@Builder
+public class DefaultFileReadyMessage implements FileReadyMessage {
+
+    /**
+     * Meta data about a fileReady message.
+     */
+    @Builder
+    public static class MessageMetaData {
+
+        @SuppressWarnings("java:S1104")
+        public String eventId;
+
+        @SuppressWarnings("java:S1104")
+        public String priority;
+
+        @SuppressWarnings("java:S1104")
+        public String version;
+
+        @SuppressWarnings("java:S1104")
+        public String reportingEntityName;
+
+        @SuppressWarnings("java:S1104")
+        public int sequence;
+
+        @SuppressWarnings("java:S1104")
+        public String domain;
+
+        @SuppressWarnings("java:S1104")
+        public String eventName;
+
+        @SuppressWarnings("java:S1104")
+        public String vesEventListenerVersion;
+
+        @SuppressWarnings("java:S1104")
+        public String sourceName;
+
+        @SuppressWarnings("java:S1104")
+        public long lastEpochMicrosec;
+
+        @SuppressWarnings("java:S1104")
+        public long startEpochMicrosec;
+
+        @SuppressWarnings("java:S1104")
+        public String timeZoneOffset;
+
+        @SuppressWarnings("java:S1104")
+        public String changeIdentifier;
+
+        /**
+         * Gets data from the event name. Defined as:
+         * {DomainAbbreviation}_{productName}-{vendorName}_{Description},
+         * example: Noti_RnNode-Ericsson_FileReady
+         *
+         */
+        @SuppressWarnings("java:S6035")
+        public String productName() {
+            String[] eventArray = eventName.split("_|-");
+            if (eventArray.length >= 2) {
+                return eventArray[1];
+            } else {
+                return eventName;
+            }
+        }
+
+        @SuppressWarnings("java:S6035")
+        public String vendorName() {
+            String[] eventArray = eventName.split("_|-");
+            if (eventArray.length >= 3) {
+                return eventArray[2];
+            } else {
+                return eventName;
+            }
+        }
+    }
+
+    @Builder
+    public static class FileInfo {
+        @SuppressWarnings("java:S1104")
+        public String fileFormatType;
+
+        @SuppressWarnings("java:S1104")
+        public String location;
+
+        @SuppressWarnings("java:S1104")
+        public String fileFormatVersion;
+
+        @SuppressWarnings("java:S1104")
+        public String compression;
+    }
+
+    @Builder
+    public static class ArrayOfNamedHashMap {
+        @SuppressWarnings("java:S1104")
+        public String name;
+
+        @SuppressWarnings("java:S1104")
+        public FileInfo hashMap;
+    }
+
+    @Builder
+    public static class NotificationFields {
+        @SuppressWarnings("java:S1104")
+        public String notificationFieldsVersion;
+
+        @SuppressWarnings("java:S1104")
+        public String changeType;
+
+        @SuppressWarnings("java:S1104")
+        public String changeIdentifier;
+
+        @SuppressWarnings("java:S1104")
+        public List<ArrayOfNamedHashMap> arrayOfNamedHashMap;
+    }
+
+    @Builder
+    public static class Event {
+        @SuppressWarnings("java:S1104")
+        public MessageMetaData commonEventHeader;
+
+        @SuppressWarnings("java:S1104")
+        public NotificationFields notificationFields;
+    }
+
+    @SuppressWarnings("java:S1104")
+    public Event event;
+
+}
index 33a9327..72e4cd6 100644 (file)
@@ -2,6 +2,7 @@
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019-2023 Nordix Foundation.
  *  Copyright (C) 2021 Nokia. All rights reserved.
+ *  Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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.
@@ -87,16 +88,34 @@ public class FileData {
     private static final Logger logger = LoggerFactory.getLogger(FileData.class);
 
     @SuppressWarnings("java:S1104")
-    public FileReadyMessage.ArrayOfNamedHashMap fileInfo;
+    public DefaultFileReadyMessage.ArrayOfNamedHashMap defaultFileInfo;
 
     @SuppressWarnings("java:S1104")
-    public FileReadyMessage.MessageMetaData messageMetaData;
+    public TS28532FileReadyMessage.FileInfo ts28532FileInfo;
 
-    public static Iterable<FileData> createFileData(FileReadyMessage msg) {
+    @SuppressWarnings("java:S1104")
+    public DefaultFileReadyMessage.MessageMetaData messageMetaData;
+
+    @SuppressWarnings("java:S1104")
+    public TS28532FileReadyMessage.MessageMetaData ts28532MessageMetaData;
+
+    private String fileReadyMessageClass;
+
+    public static Iterable<FileData> createFileData(FileReadyMessage msg, String fileReadyMessageClass) {
         Collection<FileData> res = new ArrayList<>();
-        for (FileReadyMessage.ArrayOfNamedHashMap arr : msg.event.notificationFields.arrayOfNamedHashMap) {
-            FileData data = FileData.builder().fileInfo(arr).messageMetaData(msg.event.commonEventHeader).build();
-            res.add(data);
+
+        if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) {
+            DefaultFileReadyMessage defaultMsg = (DefaultFileReadyMessage) msg;
+            for (DefaultFileReadyMessage.ArrayOfNamedHashMap arr : defaultMsg.event.notificationFields.arrayOfNamedHashMap) {
+                FileData data = FileData.builder().defaultFileInfo(arr).fileReadyMessageClass(fileReadyMessageClass).messageMetaData(defaultMsg.event.commonEventHeader).build();
+                res.add(data);
+            }
+        } else {
+            TS28532FileReadyMessage ts28532DefaultMsg = (TS28532FileReadyMessage) msg;
+            for (TS28532FileReadyMessage.FileInfo arr : ts28532DefaultMsg.event.stndDefinedFields.data.fileInfoList) {
+                FileData data = FileData.builder().ts28532FileInfo(arr).fileReadyMessageClass(fileReadyMessageClass).ts28532MessageMetaData(ts28532DefaultMsg.event.commonEventHeader).build();
+                res.add(data);
+            }
         }
         return res;
     }
@@ -107,11 +126,19 @@ public class FileData {
      * @return the name of the PNF, must be unique in the network
      */
     public String sourceName() {
-        return messageMetaData.sourceName;
+        if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) {
+            return this.messageMetaData.sourceName;
+        } else {
+            return this.ts28532MessageMetaData.sourceName;
+        }
     }
 
     public String name() {
-        return this.messageMetaData.sourceName + "/" + fileInfo.name;
+        if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) {
+            return this.messageMetaData.sourceName + "/" + defaultFileInfo.name;
+        } else {
+            return this.ts28532MessageMetaData.sourceName + "/" + ts28532FileInfo.fileName();
+        }
     }
 
     /**
@@ -120,11 +147,11 @@ public class FileData {
      * @return the path to the file on the PNF.
      */
     public String remoteFilePath() {
-        return URI.create(fileInfo.hashMap.location).getPath();
+        return getLocationURI().getPath();
     }
 
     public Scheme scheme() {
-        URI uri = URI.create(fileInfo.hashMap.location);
+        URI uri = getLocationURI();
         try {
             return Scheme.getSchemeFromString(uri.getScheme());
         } catch (Exception e) {
@@ -133,13 +160,25 @@ public class FileData {
         }
     }
 
+    private URI getLocationURI() {
+        if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) {
+            return URI.create(defaultFileInfo.hashMap.location);
+        } else {
+            return URI.create(ts28532FileInfo.fileLocation);
+        }
+    }
+
     /**
      * Get the path to the locally stored file.
      *
      * @return the path to the locally stored file.
      */
     public Path getLocalFilePath(AppConfig config) {
-        return Paths.get(config.getCollectedFilesPath(), this.messageMetaData.sourceName, fileInfo.name);
+        if(fileReadyMessageClass == null || fileReadyMessageClass.isEmpty()) {
+            return Paths.get(config.getCollectedFilesPath(), this.messageMetaData.sourceName, defaultFileInfo.name);
+        } else {
+            return Paths.get(config.getCollectedFilesPath(), this.ts28532MessageMetaData.sourceName, ts28532FileInfo.fileName());
+        }
     }
 
     /**
@@ -150,7 +189,7 @@ public class FileData {
      *         from.
      */
     public FileServerData fileServerData() {
-        URI uri = URI.create(fileInfo.hashMap.location);
+        URI uri = getLocationURI();
         Optional<String[]> userInfo = getUserNameAndPasswordIfGiven(uri.getUserInfo());
 
         FileServerDataBuilder builder = FileServerData.builder() //
index 05b55ea..cc76d72 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019-2023 Nordix Foundation.
+ *  Copyright (C) 2025 OpenInfra Foundation Europe. 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.
 
 package org.oran.datafile.model;
 
-import java.util.List;
-
-import lombok.Builder;
-
-@Builder
-public class FileReadyMessage {
-
-    /**
-     * Meta data about a fileReady message.
-     */
-    @Builder
-    public static class MessageMetaData {
-
-        @SuppressWarnings("java:S1104")
-        public String eventId;
-
-        @SuppressWarnings("java:S1104")
-        public String priority;
-
-        @SuppressWarnings("java:S1104")
-        public String version;
-
-        @SuppressWarnings("java:S1104")
-        public String reportingEntityName;
-
-        @SuppressWarnings("java:S1104")
-        public int sequence;
-
-        @SuppressWarnings("java:S1104")
-        public String domain;
-
-        @SuppressWarnings("java:S1104")
-        public String eventName;
-
-        @SuppressWarnings("java:S1104")
-        public String vesEventListenerVersion;
-
-        @SuppressWarnings("java:S1104")
-        public String sourceName;
-
-        @SuppressWarnings("java:S1104")
-        public long lastEpochMicrosec;
-
-        @SuppressWarnings("java:S1104")
-        public long startEpochMicrosec;
-
-        @SuppressWarnings("java:S1104")
-        public String timeZoneOffset;
-
-        @SuppressWarnings("java:S1104")
-        public String changeIdentifier;
-
-        /**
-         * Gets data from the event name. Defined as:
-         * {DomainAbbreviation}_{productName}-{vendorName}_{Description},
-         * example: Noti_RnNode-Ericsson_FileReady
-         *
-         */
-        @SuppressWarnings("java:S6035")
-        public String productName() {
-            String[] eventArray = eventName.split("_|-");
-            if (eventArray.length >= 2) {
-                return eventArray[1];
-            } else {
-                return eventName;
-            }
-        }
-
-        @SuppressWarnings("java:S6035")
-        public String vendorName() {
-            String[] eventArray = eventName.split("_|-");
-            if (eventArray.length >= 3) {
-                return eventArray[2];
-            } else {
-                return eventName;
-            }
-        }
-    }
-
-    @Builder
-    public static class FileInfo {
-        @SuppressWarnings("java:S1104")
-        public String fileFormatType;
-
-        @SuppressWarnings("java:S1104")
-        public String location;
-
-        @SuppressWarnings("java:S1104")
-        public String fileFormatVersion;
-
-        @SuppressWarnings("java:S1104")
-        public String compression;
-    }
-
-    @Builder
-    public static class ArrayOfNamedHashMap {
-        @SuppressWarnings("java:S1104")
-        public String name;
-
-        @SuppressWarnings("java:S1104")
-        public FileInfo hashMap;
-    }
-
-    @Builder
-    public static class NotificationFields {
-        @SuppressWarnings("java:S1104")
-        public String notificationFieldsVersion;
-
-        @SuppressWarnings("java:S1104")
-        public String changeType;
-
-        @SuppressWarnings("java:S1104")
-        public String changeIdentifier;
-
-        @SuppressWarnings("java:S1104")
-        public List<ArrayOfNamedHashMap> arrayOfNamedHashMap;
-    }
-
-    @Builder
-    public static class Event {
-        @SuppressWarnings("java:S1104")
-        public MessageMetaData commonEventHeader;
-
-        @SuppressWarnings("java:S1104")
-        public NotificationFields notificationFields;
-    }
-
-    @SuppressWarnings("java:S1104")
-    public Event event;
-
+public interface FileReadyMessage {
 }
diff --git a/datafilecollector/src/main/java/org/oran/datafile/model/TS28532FileReadyMessage.java b/datafilecollector/src/main/java/org/oran/datafile/model/TS28532FileReadyMessage.java
new file mode 100644 (file)
index 0000000..ccea35f
--- /dev/null
@@ -0,0 +1,213 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2025 OpenInfra Foundation Europe. 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.oran.datafile.model;
+
+import java.util.List;
+
+import lombok.Builder;
+
+@Builder
+public class TS28532FileReadyMessage implements FileReadyMessage {
+
+    @Builder
+    public static class InternalHeaderFields {
+        @SuppressWarnings("java:S1104")
+        public String collectorTimeStamp;
+    }
+
+    /**
+     * Meta data about a fileReady message.
+     */
+    @Builder
+    public static class MessageMetaData {
+
+        @SuppressWarnings("java:S1104")
+        public String sourceId;
+
+        @SuppressWarnings("java:S1104")
+        public String eventId;
+
+        @SuppressWarnings("java:S1104")
+        public String priority;
+
+        @SuppressWarnings("java:S1104")
+        public String version;
+
+        @SuppressWarnings("java:S1104")
+        public String reportingEntityName;
+
+        @SuppressWarnings("java:S1104")
+        public int sequence;
+
+        @SuppressWarnings("java:S1104")
+        public String domain;
+
+        @SuppressWarnings("java:S1104")
+        public String eventName;
+
+        @SuppressWarnings("java:S1104")
+        public String eventType;
+
+        @SuppressWarnings("java:S1104")
+        public String stndDefinedNamespace;
+
+        @SuppressWarnings("java:S1104")
+        public String nfVendorName;
+
+        @SuppressWarnings("java:S1104")
+        public String nfNamingCode;
+
+        @SuppressWarnings("java:S1104")
+        public String vesEventListenerVersion;
+
+        @SuppressWarnings("java:S1104")
+        public String sourceName;
+
+        @SuppressWarnings("java:S1104")
+        public long lastEpochMicrosec;
+
+        @SuppressWarnings("java:S1104")
+        public long startEpochMicrosec;
+
+        @SuppressWarnings("java:S1104")
+        public String timeZoneOffset;
+
+        @SuppressWarnings("java:S1104")
+        public String reportingEntityId;
+
+        @SuppressWarnings("java:S1104")
+        public InternalHeaderFields internalHeaderFields;
+
+        /**
+         * Gets data from the event name. Defined as:
+         * {DomainAbbreviation}_{productName}-{vendorName}_{Description},
+         * example: Noti_RnNode-Ericsson_FileReady
+         */
+        @SuppressWarnings("java:S6035")
+        public String productName() {
+            String[] eventArray = eventName.split("_|-");
+            if (eventArray.length >= 2) {
+                return eventArray[1];
+            } else {
+                return eventName;
+            }
+        }
+
+        @SuppressWarnings("java:S6035")
+        public String vendorName() {
+            String[] eventArray = eventName.split("_|-");
+            if (eventArray.length >= 3) {
+                return eventArray[2];
+            } else {
+                return eventName;
+            }
+        }
+    }
+
+    @Builder
+    public static class FileInfo {
+        @SuppressWarnings("java:S1104")
+        public int fileSize;
+
+        @SuppressWarnings("java:S1104")
+        public String fileLocation;
+
+        @SuppressWarnings("java:S1104")
+        public String fileReadyTime;
+
+        @SuppressWarnings("java:S1104")
+        public String fileFormat;
+
+        @SuppressWarnings("java:S1104")
+        public String fileDataType;
+
+        @SuppressWarnings("java:S1104")
+        public String fileExpirationTime;
+
+        @SuppressWarnings("java:S1104")
+        public String fileCompression;
+
+        @SuppressWarnings("java:S6035")
+        public String fileName() {
+            String[] fileArray = fileLocation.split("/");
+            if (fileArray.length >= 5) {
+                return fileArray[4];
+            } else {
+                return fileLocation;
+            }
+        }
+
+        @SuppressWarnings("java:S6035")
+        public String filePath() {
+            String fileP = fileLocation.substring(0, fileLocation.lastIndexOf('/')) + "/";
+            return fileP;
+        }
+    }
+
+    @Builder
+    public static class DataFields {
+        @SuppressWarnings("java:S1104")
+        public String systemDN;
+
+        @SuppressWarnings("java:S1104")
+        public String additionalText;
+
+        @SuppressWarnings("java:S1104")
+        public String eventTime;
+
+        @SuppressWarnings("java:S1104")
+        public int notificationId;
+
+        @SuppressWarnings("java:S1104")
+        public String href;
+
+        @SuppressWarnings("java:S1104")
+        public String notificationType;
+
+        @SuppressWarnings("java:S1104")
+        public List<FileInfo> fileInfoList;
+    }
+
+    @Builder
+    public static class StandardDefinedFields {
+        @SuppressWarnings("java:S1104")
+        public String stndDefinedFieldsVersion;
+
+        @SuppressWarnings("java:S1104")
+        public String schemaReference;
+
+        @SuppressWarnings("java:S1104")
+        public DataFields data;
+    }
+
+    @Builder
+    public static class Event {
+        @SuppressWarnings("java:S1104")
+        public MessageMetaData commonEventHeader;
+
+        @SuppressWarnings("java:S1104")
+        public StandardDefinedFields stndDefinedFields;
+    }
+
+    @SuppressWarnings("java:S1104")
+    public Event event;
+
+}
index 9ea9d57..ef96b9a 100644 (file)
@@ -1,5 +1,6 @@
 /*-
  * ============LICENSE_START======================================================================
+ * Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved.
  * Copyright (C) 2018, 2020 NOKIA Intellectual Property, 2018-2023 Nordix Foundation. All rights reserved.
  * ===============================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
@@ -39,9 +40,11 @@ import org.oran.datafile.datastore.DataStore.Bucket;
 import org.oran.datafile.exceptions.DatafileTaskException;
 import org.oran.datafile.http.HttpsClientConnectionManagerUtil;
 import org.oran.datafile.model.Counters;
+import org.oran.datafile.model.DefaultFileReadyMessage;
 import org.oran.datafile.model.FileData;
 import org.oran.datafile.model.FilePublishInformation;
 import org.oran.datafile.model.FileReadyMessage;
+import org.oran.datafile.model.TS28532FileReadyMessage;
 import org.oran.datafile.oauth2.SecurityContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -142,7 +145,7 @@ public class CollectAndReportFiles {
             .parallel(noOfWorkerThreads) // Each FileReadyMessage in a separate thread
             .runOn(scheduler) //
             .doOnNext(fileReadyMessage -> counters.threadPoolQueueSize.decrementAndGet()) //
-            .flatMap(fileReadyMessage -> Flux.fromIterable(FileData.createFileData(fileReadyMessage)), true, 1) //
+            .flatMap(fileReadyMessage -> Flux.fromIterable(FileData.createFileData(fileReadyMessage, appConfig.getFileReadyMessageClass())), true, 1) //
             .flatMap(this::filterNotFetched, false, 1, 1) //
             .flatMap(this::fetchFile, false, 1, 1) //
             .flatMap(data -> reportFetchedFile(data, appConfig.getCollectedFileTopic()), false, 1) //
@@ -282,9 +285,15 @@ public class CollectAndReportFiles {
 
     Mono<FileReadyMessage> parseReceivedFileReadyMessage(KafkaTopicListener.DataFromTopic data) {
         try {
-            FileReadyMessage msg = gson.fromJson(data.value, FileReadyMessage.class);
-            logger.debug("Received: {}", msg);
-            return Mono.just(msg);
+            if(appConfig.getFileReadyMessageClass() == null || appConfig.getFileReadyMessageClass().isEmpty()) {
+                DefaultFileReadyMessage msg = gson.fromJson(data.value, DefaultFileReadyMessage.class);
+                logger.debug("Received: {}", msg);
+                return Mono.just(msg);
+            } else {
+                TS28532FileReadyMessage msg = gson.fromJson(data.value, TS28532FileReadyMessage.class);
+                logger.debug("Received: {}", msg);
+                return Mono.just(msg);
+            }
         } catch (Exception e) {
             logger.warn("Could not parse received: {}, reason: {}", data.value, e.getMessage());
             return Mono.empty();
index 999d2e8..b933625 100644 (file)
@@ -1,5 +1,6 @@
 /*-
  * ============LICENSE_START======================================================================
+ * Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved.
  * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved.
  * Copyright (C) 2020-2022 Nokia. All rights reserved.
  * ===============================================================================================
@@ -35,9 +36,10 @@ import org.oran.datafile.http.DfcHttpClient;
 import org.oran.datafile.http.DfcHttpsClient;
 import org.oran.datafile.http.HttpsClientConnectionManagerUtil;
 import org.oran.datafile.model.Counters;
+import org.oran.datafile.model.DefaultFileReadyMessage;
 import org.oran.datafile.model.FileData;
 import org.oran.datafile.model.FilePublishInformation;
-import org.oran.datafile.model.FileReadyMessage;
+import org.oran.datafile.model.TS28532FileReadyMessage;
 import org.oran.datafile.oauth2.SecurityContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -72,7 +74,6 @@ public class FileCollector {
      * @param fileData data about the file to collect.
      * @param numRetries the number of retries if the publishing fails
      * @param firstBackoff the time to delay the first retry
-     * @param contextMap context for logging.
      * @return the data needed to publish the file.
      */
     public Mono<FilePublishInformation> collectFile(FileData fileData, long numRetries, Duration firstBackoff) {
@@ -96,7 +97,13 @@ public class FileCollector {
     }
 
     private Mono<Optional<FilePublishInformation>> tryCollectFile(FileData fileData) {
-        logger.trace("starting to collectFile {}", fileData.fileInfo.name);
+        String fileName;
+        if(appConfig.getFileReadyMessageClass() == null || appConfig.getFileReadyMessageClass().isEmpty()) {
+            fileName = fileData.defaultFileInfo.name;
+        } else {
+            fileName = fileData.ts28532FileInfo.fileName();
+        }
+        logger.trace("starting to collectFile {}", fileName);
 
         final String remoteFile = fileData.remoteFilePath();
         final Path localFile = fileData.getLocalFilePath(this.appConfig);
@@ -109,16 +116,16 @@ public class FileCollector {
             return Mono.just(Optional.of(createFilePublishInformation(fileData)));
         } catch (NonRetryableDatafileTaskException nre) {
             logger.warn("Failed to download file, not retryable: {} {}, reason: {}", fileData.sourceName(),
-                fileData.fileInfo.name, nre.getMessage());
+                fileName, nre.getMessage());
             incFailedAttemptsCounter(fileData);
             return Mono.just(Optional.empty()); // Give up
         } catch (DatafileTaskException e) {
-            logger.warn("Failed to download file: {} {}, reason: {}", fileData.sourceName(), fileData.fileInfo.name,
+            logger.warn("Failed to download file: {} {}, reason: {}", fileData.sourceName(), fileName,
                 e.getMessage());
             incFailedAttemptsCounter(fileData);
             return Mono.error(e);
         } catch (Exception throwable) {
-            logger.warn("Failed to close client: {} {}, reason: {}", fileData.sourceName(), fileData.fileInfo.name,
+            logger.warn("Failed to close client: {} {}, reason: {}", fileData.sourceName(), fileName,
                 throwable.getMessage(), throwable);
             return Mono.just(Optional.of(createFilePublishInformation(fileData)));
         }
@@ -148,21 +155,39 @@ public class FileCollector {
     }
 
     public FilePublishInformation createFilePublishInformation(FileData fileData) {
-        FileReadyMessage.MessageMetaData metaData = fileData.messageMetaData;
-        return FilePublishInformation.builder() //
-            .productName(metaData.productName()) //
-            .vendorName(metaData.vendorName()) //
-            .lastEpochMicrosec(metaData.lastEpochMicrosec) //
-            .sourceName(metaData.sourceName) //
-            .startEpochMicrosec(metaData.startEpochMicrosec) //
-            .timeZoneOffset(metaData.timeZoneOffset) //
-            .name(metaData.sourceName + "/" + fileData.fileInfo.name) //
-            .compression(fileData.fileInfo.hashMap.compression) //
-            .fileFormatType(fileData.fileInfo.hashMap.fileFormatType) //
-            .fileFormatVersion(fileData.fileInfo.hashMap.fileFormatVersion) //
-            .changeIdentifier(fileData.messageMetaData.changeIdentifier) //
-            .objectStoreBucket(this.appConfig.isS3Enabled() ? this.appConfig.getS3Bucket() : null) //
-            .build();
+        if(appConfig.getFileReadyMessageClass() == null || appConfig.getFileReadyMessageClass().isEmpty()) {
+            DefaultFileReadyMessage.MessageMetaData metaData = fileData.messageMetaData;
+            return FilePublishInformation.builder() //
+                    .productName(metaData.productName()) //
+                    .vendorName(metaData.vendorName()) //
+                    .lastEpochMicrosec(metaData.lastEpochMicrosec) //
+                    .sourceName(metaData.sourceName) //
+                    .startEpochMicrosec(metaData.startEpochMicrosec) //
+                    .timeZoneOffset(metaData.timeZoneOffset) //
+                    .name(metaData.sourceName + "/" + fileData.defaultFileInfo.name) //
+                    .compression(fileData.defaultFileInfo.hashMap.compression) //
+                    .fileFormatType(fileData.defaultFileInfo.hashMap.fileFormatType) //
+                    .fileFormatVersion(fileData.defaultFileInfo.hashMap.fileFormatVersion) //
+                    .changeIdentifier(fileData.messageMetaData.changeIdentifier) //
+                    .objectStoreBucket(this.appConfig.isS3Enabled() ? this.appConfig.getS3Bucket() : null) //
+                    .build();
+        } else {
+            TS28532FileReadyMessage.MessageMetaData metaData = fileData.ts28532MessageMetaData;
+            return FilePublishInformation.builder() //
+                    .productName(metaData.productName()) //
+                    .vendorName(metaData.vendorName()) //
+                    .lastEpochMicrosec(metaData.lastEpochMicrosec) //
+                    .sourceName(metaData.sourceName) //
+                    .startEpochMicrosec(metaData.startEpochMicrosec) //
+                    .timeZoneOffset(metaData.timeZoneOffset) //
+                    .name(metaData.sourceName + "/" + fileData.ts28532FileInfo.fileName()) //
+                    .compression(fileData.ts28532FileInfo.fileCompression) //
+                    .fileFormatType(fileData.ts28532FileInfo.fileFormat) //
+                    .fileFormatVersion(fileData.ts28532FileInfo.fileDataType) //
+                    .changeIdentifier(fileData.ts28532MessageMetaData.reportingEntityName) //
+                    .objectStoreBucket(this.appConfig.isS3Enabled() ? this.appConfig.getS3Bucket() : null) //
+                    .build();
+        }
     }
 
     protected SftpClient createSftpClient(FileData fileData) {
index c8ef111..879e3dd 100644 (file)
@@ -2,7 +2,8 @@
  * ========================LICENSE_START=================================
  * O-RAN-SC
  * %%
- * Copyright (C) 2020-2023 NordixFoundation
+ * Copyright (C) 2020-2023 Nordix Foundation
+ * Copyright (C) 2025 OpenInfra Foundation Europe. 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.
@@ -44,10 +45,10 @@ import org.oran.datafile.configuration.AppConfig;
 import org.oran.datafile.datastore.DataStore;
 import org.oran.datafile.datastore.DataStore.Bucket;
 import org.oran.datafile.model.Counters;
+import org.oran.datafile.model.DefaultFileReadyMessage;
 import org.oran.datafile.model.FileData;
 import org.oran.datafile.model.FilePublishInformation;
-import org.oran.datafile.model.FileReadyMessage;
-import org.oran.datafile.model.FileReadyMessage.MessageMetaData;
+import org.oran.datafile.model.DefaultFileReadyMessage.MessageMetaData;
 import org.oran.datafile.oauth2.SecurityContext;
 import org.oran.datafile.tasks.CollectAndReportFiles;
 import org.oran.datafile.tasks.FileCollector;
@@ -297,7 +298,7 @@ class Integration {
         }
     }
 
-    FileReadyMessage.Event event(String fileName) {
+    DefaultFileReadyMessage.Event event(String fileName) {
         MessageMetaData messageMetaData = MessageMetaData.builder() //
             .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
             .sourceName(SOURCE_NAME) //
@@ -306,7 +307,7 @@ class Integration {
             .changeIdentifier(CHANGE_IDENTIFIER) //
             .eventName("Noti_RnNode-Ericsson_FileReady").build();
 
-        FileReadyMessage.FileInfo fileInfo = FileReadyMessage.FileInfo //
+        DefaultFileReadyMessage.FileInfo fileInfo = DefaultFileReadyMessage.FileInfo //
             .builder() //
             .fileFormatType(FILE_FORMAT_TYPE) //
             .location(LOCATION) //
@@ -314,34 +315,34 @@ class Integration {
             .compression(GZIP_COMPRESSION) //
             .build();
 
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = FileReadyMessage.ArrayOfNamedHashMap //
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = DefaultFileReadyMessage.ArrayOfNamedHashMap //
             .builder() //
             .name(fileName) //
             .hashMap(fileInfo) //
             .build();
 
-        List<FileReadyMessage.ArrayOfNamedHashMap> arrayOfNamedHashMapList = new ArrayList<>();
+        List<DefaultFileReadyMessage.ArrayOfNamedHashMap> arrayOfNamedHashMapList = new ArrayList<>();
         arrayOfNamedHashMapList.add(arrayOfNamedHashMap);
 
-        FileReadyMessage.NotificationFields notificationFields = FileReadyMessage.NotificationFields //
+        DefaultFileReadyMessage.NotificationFields notificationFields = DefaultFileReadyMessage.NotificationFields //
             .builder().notificationFieldsVersion("notificationFieldsVersion") //
             .changeType(CHANGE_TYPE).changeIdentifier(CHANGE_IDENTIFIER) //
             .arrayOfNamedHashMap(arrayOfNamedHashMapList) //
             .build();
 
-        return FileReadyMessage.Event.builder() //
+        return DefaultFileReadyMessage.Event.builder() //
             .commonEventHeader(messageMetaData) //
             .notificationFields(notificationFields).build();
     }
 
-    private FileReadyMessage fileReadyMessage(String fileName) {
-        FileReadyMessage message = FileReadyMessage.builder() //
+    private DefaultFileReadyMessage fileReadyMessage(String fileName) {
+        DefaultFileReadyMessage message = DefaultFileReadyMessage.builder() //
             .event(event(fileName)) //
             .build();
         return message;
     }
 
-    private FileReadyMessage fileReadyMessage() {
+    private DefaultFileReadyMessage fileReadyMessage() {
         return fileReadyMessage(PM_FILE_NAME);
     }
 
@@ -1,6 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019-2023 Nordix Foundation.
+ *  Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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.
@@ -24,20 +25,22 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.junit.jupiter.api.Test;
 
-class FileReadyMessageTest {
+class DefaultFileReadyMessageTest {
     @Test
     void testMessageMetaDataProductName() {
         assertEquals("Event Name",
-            (new FileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name",
-                1, "Domain", "Event Name", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).productName());
-        assertEquals("|", (new FileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1,
-            "Domain", "_|-", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).productName());
+                (new DefaultFileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1,
+                        "Domain", "Event Name", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).productName());
+        assertEquals("|",
+                (new DefaultFileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1,
+                        "Domain", "_|-", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).productName());
     }
+
     @Test
     void testMessageMetaDataVendorName() {
         assertEquals("Event Name",
-            (new FileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1, "Domain",
-                "Event Name", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).vendorName());
+                (new DefaultFileReadyMessage.MessageMetaData("42", "Priority", "1.0.2", "Reporting Entity Name", 1,
+                        "Domain", "Event Name", "1.0.2", "Source Name", 1L, 1L, "UTC", "42")).vendorName());
     }
 }
 
index f52cfcc..7da9438 100644 (file)
@@ -1,6 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019-2023 Nordix Foundation.
+ *  Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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.
@@ -52,10 +53,9 @@ class FileDataTest {
 
     @Test
     void testSourceName() {
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
         assertEquals("field8", fileData.sourceName());
@@ -63,45 +63,48 @@ class FileDataTest {
 
     @Test
     void testName() {
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
-        FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "location", "hashMapField", "");
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
-        fileData.fileInfo = arrayOfNamedHashMap;
+        DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name", "location", "hashMapField",
+                "");
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap(
+                "someString", fileInfo);
+        fileData.defaultFileInfo = arrayOfNamedHashMap;
 
         assertEquals("field8/someString", fileData.name());
     }
 
     @Test
     void testRemoteFilePath() {
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
-        FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "ftp://example.com/remote/file.txt", "hashMapField", "");
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
-        fileData.fileInfo = arrayOfNamedHashMap;
+        DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name",
+                "ftp://example.com/remote/file.txt", "hashMapField", "");
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap(
+                "someString", fileInfo);
+        fileData.defaultFileInfo = arrayOfNamedHashMap;
 
         assertEquals("/remote/file.txt", fileData.remoteFilePath());
     }
 
     @Test
     void testScheme() {
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
-        FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com/file.txt", "hashMapField", "");
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
-        fileData.fileInfo = arrayOfNamedHashMap;
+        DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name",
+                "http://example.com/file.txt", "hashMapField", "");
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap(
+                "someString", fileInfo);
+        fileData.defaultFileInfo = arrayOfNamedHashMap;
 
         assertEquals(FileData.Scheme.HTTP, fileData.scheme());
     }
@@ -110,15 +113,16 @@ class FileDataTest {
     void testGetLocalFilePath() {
         AppConfig config = new AppConfig();
         config.setCollectedFilesPath("/local/path");
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
-        FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com/file.txt", "hashMapField", "");
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
-        fileData.fileInfo = arrayOfNamedHashMap;
+        DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name",
+                "http://example.com/file.txt", "hashMapField", "");
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap(
+                "someString", fileInfo);
+        fileData.defaultFileInfo = arrayOfNamedHashMap;
 
         Path expectedPath = Paths.get("/local/path/field8/someString");
         Path actualPath = fileData.getLocalFilePath(config);
@@ -130,15 +134,16 @@ class FileDataTest {
         // Arrange
         AppConfig config = new AppConfig();
         config.setCollectedFilesPath("/local/path");
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
-        FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://username:password@example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
-        fileData.fileInfo = arrayOfNamedHashMap;
+        DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name",
+                "http://username:password@example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap(
+                "someString", fileInfo);
+        fileData.defaultFileInfo = arrayOfNamedHashMap;
 
         // Act
         FileServerData result = fileData.fileServerData();
@@ -153,15 +158,16 @@ class FileDataTest {
         // Arrange
         AppConfig config = new AppConfig();
         config.setCollectedFilesPath("/local/path");
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
-        FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://username@example.com:8080/path?query1=value1&query2=value2#rawFragment", "hashMapField", "");
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
-        fileData.fileInfo = arrayOfNamedHashMap;
+        DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name",
+                "http://username@example.com:8080/path?query1=value1&query2=value2#rawFragment", "hashMapField", "");
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap(
+                "someString", fileInfo);
+        fileData.defaultFileInfo = arrayOfNamedHashMap;
 
         // Act
         FileServerData result = fileData.fileServerData();
@@ -175,15 +181,16 @@ class FileDataTest {
         // Arrange
         AppConfig config = new AppConfig();
         config.setCollectedFilesPath("/local/path");
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
-        FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "http://example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
-        fileData.fileInfo = arrayOfNamedHashMap;
+        DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name",
+                "http://example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap(
+                "someString", fileInfo);
+        fileData.defaultFileInfo = arrayOfNamedHashMap;
 
         FileServerData result = fileData.fileServerData();
         assertEquals("example.com", result.getServerAddress());
@@ -194,15 +201,16 @@ class FileDataTest {
         // Arrange
         AppConfig config = new AppConfig();
         config.setCollectedFilesPath("/local/path");
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
         FileData fileData = FileData.builder().messageMetaData(metaData).build();
 
-        FileReadyMessage.FileInfo fileInfo = new FileReadyMessage.FileInfo("name", "abcxyz://example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new FileReadyMessage.ArrayOfNamedHashMap("someString", fileInfo);
-        fileData.fileInfo = arrayOfNamedHashMap;
+        DefaultFileReadyMessage.FileInfo fileInfo = new DefaultFileReadyMessage.FileInfo("name",
+                "abcxyz://example.com:8080/path?query1=value1&query2=value2", "hashMapField", "");
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = new DefaultFileReadyMessage.ArrayOfNamedHashMap(
+                "someString", fileInfo);
+        fileData.defaultFileInfo = arrayOfNamedHashMap;
 
         // Act
         FileData.Scheme result = fileData.scheme();
@@ -210,45 +218,25 @@ class FileDataTest {
     }
 
     @Test
-    void testCreateFileData(){
-
-        FileReadyMessage.MessageMetaData metaData = new FileReadyMessage.MessageMetaData(
-            "sourceName", "otherField1", "otherField2", "otherField3", 42, "field5", "field6",
-            "field7", "field8", 123456789L, 987654321L, "field11", "field12"
-        );
-
-        FileReadyMessage fileReadyMessage = FileReadyMessage.builder()
-            .event(
-                FileReadyMessage.Event.builder()
-                    .commonEventHeader(metaData)
-                    .notificationFields(
-                        FileReadyMessage.NotificationFields.builder()
-                            .notificationFieldsVersion("1.0")
-                            .changeType("Add")
-                            .changeIdentifier("Change123")
-                            .arrayOfNamedHashMap(
-                                Collections.singletonList(
-                                    FileReadyMessage.ArrayOfNamedHashMap.builder()
-                                        .name("File1")
-                                        .hashMap(
-                                            FileReadyMessage.FileInfo.builder()
-                                                .fileFormatType("Text")
-                                                .location("ftp://example.com/files/file.txt")
-                                                .fileFormatVersion("1.0")
-                                                .compression("None")
-                                                .build()
-                                        )
-                                        .build()
-                                )
-                            )
-                            .build()
-                    )
-                    .build()
-            )
-            .build();
-
-        Iterable<FileData> fileDataIterable = FileData.createFileData(fileReadyMessage);
-        FileReadyMessage.MessageMetaData messageMetaData = fileDataIterable.iterator().next().messageMetaData;
+    void testCreateFileData() {
+
+        DefaultFileReadyMessage.MessageMetaData metaData = new DefaultFileReadyMessage.MessageMetaData("sourceName",
+                "otherField1", "otherField2", "otherField3", 42, "field5", "field6", "field7", "field8", 123456789L,
+                987654321L, "field11", "field12");
+
+        DefaultFileReadyMessage defaultFileReadyMessage = DefaultFileReadyMessage.builder()
+                .event(DefaultFileReadyMessage.Event.builder().commonEventHeader(metaData).notificationFields(
+                        DefaultFileReadyMessage.NotificationFields.builder().notificationFieldsVersion("1.0")
+                                .changeType("Add").changeIdentifier("Change123").arrayOfNamedHashMap(
+                                        Collections.singletonList(
+                                                DefaultFileReadyMessage.ArrayOfNamedHashMap.builder().name("File1").hashMap(
+                                                        DefaultFileReadyMessage.FileInfo.builder().fileFormatType("Text")
+                                                                .location("ftp://example.com/files/file.txt")
+                                                                .fileFormatVersion("1.0").compression("None").build()).build()))
+                                .build()).build()).build();
+
+        Iterable<FileData> fileDataIterable = FileData.createFileData(defaultFileReadyMessage, null);
+        DefaultFileReadyMessage.MessageMetaData messageMetaData = fileDataIterable.iterator().next().messageMetaData;
 
         assertEquals("field8", messageMetaData.sourceName);
     }
index 432e045..9fdf062 100644 (file)
@@ -1,5 +1,6 @@
 /*-
  * ============LICENSE_START======================================================================
+ * Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved.
  * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved.
  * Copyright (C) 2020-2022 Nokia. All rights reserved.
  * ===============================================================================================
@@ -46,9 +47,9 @@ import org.oran.datafile.ftp.SftpClient;
 import org.oran.datafile.http.DfcHttpClient;
 import org.oran.datafile.http.DfcHttpsClient;
 import org.oran.datafile.model.Counters;
+import org.oran.datafile.model.DefaultFileReadyMessage;
 import org.oran.datafile.model.FileData;
 import org.oran.datafile.model.FilePublishInformation;
-import org.oran.datafile.model.FileReadyMessage;
 import org.oran.datafile.oauth2.SecurityContext;
 import reactor.test.StepVerifier;
 
@@ -113,8 +114,8 @@ class FileCollectorTest {
 
     static final SecurityContext securityContext = new SecurityContext("");
 
-    FileReadyMessage.Event event(String location) {
-        FileReadyMessage.MessageMetaData messageMetaData = FileReadyMessage.MessageMetaData.builder() //
+    DefaultFileReadyMessage.Event event(String location) {
+        DefaultFileReadyMessage.MessageMetaData messageMetaData = DefaultFileReadyMessage.MessageMetaData.builder() //
             .lastEpochMicrosec(LAST_EPOCH_MICROSEC) //
             .sourceName(SOURCE_NAME) //
             .startEpochMicrosec(START_EPOCH_MICROSEC) //
@@ -122,7 +123,7 @@ class FileCollectorTest {
             .changeIdentifier(CHANGE_IDENTIFIER) //
             .eventName("Noti_NrRadio-Ericsson_FileReady").build();
 
-        FileReadyMessage.FileInfo fileInfo = FileReadyMessage.FileInfo //
+        DefaultFileReadyMessage.FileInfo fileInfo = DefaultFileReadyMessage.FileInfo //
             .builder() //
             .fileFormatType(FILE_FORMAT_TYPE) //
             .location(location) //
@@ -130,33 +131,33 @@ class FileCollectorTest {
             .compression(GZIP_COMPRESSION) //
             .build();
 
-        FileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = FileReadyMessage.ArrayOfNamedHashMap //
+        DefaultFileReadyMessage.ArrayOfNamedHashMap arrayOfNamedHashMap = DefaultFileReadyMessage.ArrayOfNamedHashMap //
             .builder().name(PM_FILE_NAME) //
             .hashMap(fileInfo).build();
 
-        List<FileReadyMessage.ArrayOfNamedHashMap> arrayOfNamedHashMapList = new ArrayList<>();
+        List<DefaultFileReadyMessage.ArrayOfNamedHashMap> arrayOfNamedHashMapList = new ArrayList<>();
         arrayOfNamedHashMapList.add(arrayOfNamedHashMap);
 
-        FileReadyMessage.NotificationFields notificationFields = FileReadyMessage.NotificationFields //
+        DefaultFileReadyMessage.NotificationFields notificationFields = DefaultFileReadyMessage.NotificationFields //
             .builder().notificationFieldsVersion("notificationFieldsVersion") //
             .changeType(CHANGE_TYPE).changeIdentifier(CHANGE_IDENTIFIER) //
             .arrayOfNamedHashMap(arrayOfNamedHashMapList) //
             .build();
 
-        return FileReadyMessage.Event.builder() //
+        return DefaultFileReadyMessage.Event.builder() //
             .commonEventHeader(messageMetaData) //
             .notificationFields(notificationFields).build();
     }
 
-    private FileReadyMessage fileReadyMessage(String location) {
-        FileReadyMessage message = FileReadyMessage.builder() //
+    private DefaultFileReadyMessage fileReadyMessage(String location) {
+        DefaultFileReadyMessage message = DefaultFileReadyMessage.builder() //
             .event(event(location)) //
             .build();
         return message;
     }
 
     private FileData createFileData(String location) {
-        return FileData.createFileData(fileReadyMessage(location)).iterator().next();
+        return FileData.createFileData(fileReadyMessage(location), null).iterator().next();
     }
 
     private FilePublishInformation createExpectedFilePublishInformation(String location) {