Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@ public class Main {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Main.class);

Engagement engagement = new Engagement(null, 1, "bucket-name", "customers-folder/customers", "metadata-path/metadata_287934", logger);
Engagement engagement = new Engagement("{\r\n \"EventTypeID\": 14,\r\n \"TimeStamp\": \"2025-01-08 08:58\",\r\n \"CampaignID\": 1111,\r\n \"EngagementID\": 1111,\r\n \"TenantID\": 1111,\r\n \"BucketName\": \"bucketName\",\r\n \"CustomersFolderPath\": \"path\",\r\n \"MetadataFilePath\": \"pathCustomers\",\r\n \"DecryptionKey\": \"some-secret-key\",\r\n \"ChannelID\": 1111\r\n}", logger);

Metadata metadata = engagement.getMetadata();
System.out.println(metadata.getNumberOfFiles());
System.out.println(metadata.getNumberOfBatches());

for (int fileNumber = 1; fileNumber <= metadata.getNumberOfFiles(); fileNumber++) {
for (int fileNumber = 1; fileNumber <= metadata.getNumberOfBatches(); fileNumber++) {
System.out.println("file number: " + fileNumber);

try (DataFileStream<GenericRecord> dataFileReader = engagement.getCustomerBatchById(fileNumber)) {
Expand Down
48 changes: 48 additions & 0 deletions src/main/java/optimove/sdk/engagement/Engagement.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package optimove.sdk.engagement;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.cloud.storage.Blob;
import com.google.cloud.ReadChannel;

Expand All @@ -25,6 +26,53 @@ public Engagement(String decryptionKey, int tenantID, String bucketName, String
this.logger = logger;
}

// Constructor that accepts JSON string and logger
public Engagement(String jsonConfig, Logger logger) {
if (jsonConfig == null || logger == null) {
throw new IllegalArgumentException("Neither jsonConfig nor logger can be null");
}

try {
ObjectMapper mapper = new ObjectMapper();
EngagementConfig config = mapper.readValue(jsonConfig, EngagementConfig.class);
this.settings = createSettingsFromConfig(config);
this.logger = logger;
} catch (IOException e) {
throw new RuntimeException("Failed to parse engagement configuration: " + e.getMessage(), e);
}
}

// Constructor that accepts any object and logger
public Engagement(Object configObject, Logger logger) {
if (configObject == null || logger == null) {
throw new IllegalArgumentException("Neither configObject nor logger can be null");
}

try {
ObjectMapper mapper = new ObjectMapper();
// First convert the object to a JSON string
String jsonString = mapper.writeValueAsString(configObject);
// Then convert it to our EngagementConfig class
EngagementConfig config = mapper.readValue(jsonString, EngagementConfig.class);

this.settings = createSettingsFromConfig(config);
this.logger = logger;
} catch (IOException e) {
throw new RuntimeException("Failed to convert object to engagement configuration: " + e.getMessage(), e);
}
}

// Helper method to create settings from config
private EngagementSettings createSettingsFromConfig(EngagementConfig config) {
return new EngagementSettings(
config.getDecryptionKey(),
config.getTenantID(),
config.getBucketName(),
config.getCustomersFolderPath(),
config.getMetadataFilePath()
);
}

public Metadata getMetadata() {
try {
Blob fileBlob = StorageSingleton.getBlob(this.settings.getBucketName(), this.settings.getMetadataFilePath());
Expand Down
49 changes: 49 additions & 0 deletions src/main/java/optimove/sdk/engagement/EngagementConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package optimove.sdk.engagement;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties(ignoreUnknown = true)
class EngagementConfig {
@JsonProperty("DecryptionKey")
private String decryptionKey;

@JsonProperty("TenantID")
private int tenantID;

@JsonProperty("BucketName")
private String bucketName;

@JsonProperty("CustomersFolderPath")
private String customersFolderPath;

@JsonProperty("MetadataFilePath")
private String metadataFilePath;

@JsonProperty("EventTypeID")
private int eventTypeId;

@JsonProperty("TimeStamp")
private String timestamp;

@JsonProperty("CampaignID")
private int campaignId;

@JsonProperty("EngagementID")
private int engagementId;

@JsonProperty("ChannelID")
private int channelId;

// Getters
public String getDecryptionKey() { return decryptionKey; }
public int getTenantID() { return tenantID; }
public String getBucketName() { return bucketName; }
public String getCustomersFolderPath() { return customersFolderPath; }
public String getMetadataFilePath() { return metadataFilePath; }
public int getEventTypeId() { return eventTypeId; }
public String getTimestamp() { return timestamp; }
public int getCampaignId() { return campaignId; }
public int getEngagementId() { return engagementId; }
public int getChannelId() { return channelId; }
}
2 changes: 1 addition & 1 deletion src/main/java/optimove/sdk/engagement/Metadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public long getNumberOfCustomers() {
return NumberOfCustomers;
}

public long getNumberOfFiles() {
public long getNumberOfBatches() {
return NumberOfFiles;
}

Expand Down
2 changes: 0 additions & 2 deletions src/main/java/optimove/sdk/engagement/StorageSingleton.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,12 @@
public class StorageSingleton {

private static Storage instance = null;
private static final String projectId = "optimoveSDK";

private StorageSingleton() { }

public static Storage getInstance() {
if(instance == null) {
instance = StorageOptions.newBuilder()
.setProjectId(projectId)
.build()
.getService();
}
Expand Down
13 changes: 9 additions & 4 deletions src/main/java/org/example/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,31 @@
import org.apache.avro.file.DataFileStream;
import org.apache.avro.generic.GenericRecord;
import java.io.IOException;
import java.time.Duration;
import java.time.Instant;

import optimove.sdk.engagement.Engagement;
import optimove.sdk.engagement.Metadata;

import org.apache.commons.lang3.time.StopWatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Main.class);

Engagement engagement = new Engagement(null, 1, "bucket-name", "customers-folder/customers", "metadata-path/metadata_287934", logger);
Engagement engagement = new Engagement("{\r\n \"EventTypeID\": 14,\r\n \"TimeStamp\": \"2025-01-08 08:58\",\r\n \"CampaignID\": 1111,\r\n \"EngagementID\": 1111,\r\n \"TenantID\": 1111,\r\n \"BucketName\": \"bucketName\",\r\n \"CustomersFolderPath\": \"path\",\r\n \"MetadataFilePath\": \"pathCustomers\",\r\n \"DecryptionKey\": \"some-secret-key\",\r\n \"ChannelID\": 1111\r\n}", logger);

Metadata metadata = engagement.getMetadata();
System.out.println(metadata.getNumberOfFiles());
System.out.println(metadata.getNumberOfBatches());

for (int fileNumber = 1; fileNumber <= metadata.getNumberOfFiles(); fileNumber++) {
for (int fileNumber = 1; fileNumber <= metadata.getNumberOfBatches(); fileNumber++) {
System.out.println("file number: " + fileNumber);

try (DataFileStream<GenericRecord> dataFileReader = engagement.getCustomerBatchById(fileNumber)) {
DataFileStream<GenericRecord> dataFileReader = null;
try {
dataFileReader = engagement.getCustomerBatchById(fileNumber);
GenericRecord record = null;
while (dataFileReader.hasNext()) {
record = dataFileReader.next(record);
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/EngagementTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public void test_retrieving_metadata_from_valid_bucket_and_file_path() {

// Verify the expected behavior
assertNotNull(metadata);
assumeTrue(metadata.getNumberOfFiles() == 3);
assumeTrue(metadata.getNumberOfBatches() == 3);
assumeTrue(metadata.getNumberOfCustomers() == 300);
assumeTrue(metadata.getCampaignPlanID() == 10);
assumeTrue(metadata.getCampaignID() == 1);
Expand Down