From 1599b5c8bf2f3b02ada54593eee0090ecac1785f Mon Sep 17 00:00:00 2001
From: Julian Len <julian@iovlabs.org>
Date: Thu, 9 Jan 2025 18:24:51 -0300
Subject: [PATCH] feat: changed the tracker for a more generic class

---
 .../FederationStorageProviderImpl.java        | 20 ++++++------
 .../rsk/peg/federation/FederationTracker.java | 27 ----------------
 .../co/rsk/peg/federation/ValueTracker.java   | 31 +++++++++++++++++++
 3 files changed, 41 insertions(+), 37 deletions(-)
 delete mode 100644 rskj-core/src/main/java/co/rsk/peg/federation/FederationTracker.java
 create mode 100644 rskj-core/src/main/java/co/rsk/peg/federation/ValueTracker.java

diff --git a/rskj-core/src/main/java/co/rsk/peg/federation/FederationStorageProviderImpl.java b/rskj-core/src/main/java/co/rsk/peg/federation/FederationStorageProviderImpl.java
index 86dad0d5bc..ad9356a783 100644
--- a/rskj-core/src/main/java/co/rsk/peg/federation/FederationStorageProviderImpl.java
+++ b/rskj-core/src/main/java/co/rsk/peg/federation/FederationStorageProviderImpl.java
@@ -23,8 +23,8 @@
 public class FederationStorageProviderImpl implements FederationStorageProvider {
     private final StorageAccessor bridgeStorageAccessor;
     private final HashMap<DataWord, Optional<Integer>> storageVersionEntries;
-    private final FederationTracker<Federation> oldFederationTracker = new FederationTracker<>();
-    private final FederationTracker<PendingFederation> pendingFederationTracker = new FederationTracker<>();
+    private final ValueTracker<Federation> oldFederationTracker = new ValueTracker<>();
+    private final ValueTracker<PendingFederation> pendingFederationTracker = new ValueTracker<>();
     private List<UTXO> newFederationBtcUTXOs;
     private List<UTXO> oldFederationBtcUTXOs;
     private Federation newFederation;
@@ -139,7 +139,7 @@ public void setNewFederation(Federation federation) {
 
     @Override
     public Federation getOldFederation(FederationConstants federationConstants, ActivationConfig.ForBlock activations) {
-        if (oldFederationTracker.hasBeenSet()) {
+        if (oldFederationTracker.isPresent()) {
             return oldFederationTracker.get();
         }
 
@@ -159,18 +159,18 @@ public Federation getOldFederation(FederationConstants federationConstants, Acti
             }
         );
 
-        oldFederationTracker.set(oldFederation, false);
+        oldFederationTracker.set(oldFederation);
         return oldFederationTracker.get();
     }
 
     @Override
     public void setOldFederation(Federation federation) {
-        oldFederationTracker.set(federation, true);
+        oldFederationTracker.setNew(federation);
     }
 
     @Override
     public PendingFederation getPendingFederation() {
-        if (pendingFederationTracker.hasBeenSet()) {
+        if (pendingFederationTracker.isPresent()) {
             return pendingFederationTracker.get();
         }
 
@@ -190,13 +190,13 @@ public PendingFederation getPendingFederation() {
                 }
             );
 
-        pendingFederationTracker.set(pendingFederation, false);
+        pendingFederationTracker.set(pendingFederation);
         return pendingFederationTracker.get();
     }
 
     @Override
     public void setPendingFederation(PendingFederation federation) {
-        pendingFederationTracker.set(federation, true);
+        pendingFederationTracker.setNew(federation);
     }
 
     @Override
@@ -338,7 +338,7 @@ private void saveOldFederation(ActivationConfig.ForBlock activations) {
     }
 
     private int getOldFederationFormatVersion() {
-        if (!oldFederationTracker.isPresent()) {
+        if (oldFederationTracker.isNull()) {
             // assume it is a standard federation to keep backwards compatibility
             return STANDARD_MULTISIG_FEDERATION.getFormatVersion();
         }
@@ -363,7 +363,7 @@ private void savePendingFederation(ActivationConfig.ForBlock activations) {
 
     @Nullable
     private byte[] serializePendingFederation(ActivationConfig.ForBlock activations) {
-        if (!pendingFederationTracker.isPresent()) {
+        if (pendingFederationTracker.isNull()) {
             return null;
         }
 
diff --git a/rskj-core/src/main/java/co/rsk/peg/federation/FederationTracker.java b/rskj-core/src/main/java/co/rsk/peg/federation/FederationTracker.java
deleted file mode 100644
index d1ab1daa9e..0000000000
--- a/rskj-core/src/main/java/co/rsk/peg/federation/FederationTracker.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package co.rsk.peg.federation;
-
-public class FederationTracker<T> {
-    private T federation;
-    private boolean modified = false;
-
-    public boolean isModified() {
-        return this.modified;
-    }
-
-    public T get() {
-        return this.federation;
-    }
-
-    public boolean isPresent() {
-        return this.federation != null;
-    }
-
-    public boolean hasBeenSet() {
-        return this.isPresent() || this.isModified();
-    }
-
-    public void set(T aFederation, boolean shouldSave) {
-        this.federation = aFederation;
-        this.modified = shouldSave;
-    }
-}
diff --git a/rskj-core/src/main/java/co/rsk/peg/federation/ValueTracker.java b/rskj-core/src/main/java/co/rsk/peg/federation/ValueTracker.java
new file mode 100644
index 0000000000..6403c8dd2c
--- /dev/null
+++ b/rskj-core/src/main/java/co/rsk/peg/federation/ValueTracker.java
@@ -0,0 +1,31 @@
+package co.rsk.peg.federation;
+
+public class ValueTracker<T> {
+    private T value;
+    private boolean modified = false;
+
+    public boolean isModified() {
+        return this.modified;
+    }
+
+    public T get() {
+        return this.value;
+    }
+
+    public boolean isPresent() {
+        return !isNull() || this.isModified();
+    }
+
+    public boolean isNull() {
+        return this.value == null;
+    }
+
+    public void setNew(T aValue) {
+        this.value = aValue;
+        this.modified = true;
+    }
+
+    public void set(T aValue) {
+        this.value = aValue;
+    }
+}