killbill-uncached

Fixing NPEs in account

12/27/2011 7:27:20 PM

Details

diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeNotification.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeNotification.java
index 6bcc634..178100f 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeNotification.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeNotification.java
@@ -50,40 +50,44 @@ public class DefaultAccountChangeNotification implements AccountChangeNotificati
     }
 
     private List<ChangedField> calculateChangedFields(Account oldData, Account newData) {
-        List<ChangedField> changedFields = new ArrayList<ChangedField>();
 
-        if (!newData.getExternalKey().equals(oldData.getExternalKey())) {
-            changedFields.add(new DefaultChangedField("externalKey", oldData.getExternalKey(), newData.getExternalKey()));
-        }
-        if (!newData.getEmail().equals(oldData.getEmail())) {
-            changedFields.add(new DefaultChangedField("email", oldData.getEmail(), newData.getEmail()));
-        }
-        if (!newData.getName().equals(oldData.getName())) {
-            changedFields.add(new DefaultChangedField("firstName", oldData.getName(), newData.getName()));
-        }
-        if (!newData.getPhone().equals(oldData.getPhone())) {
-            changedFields.add(new DefaultChangedField("phone", oldData.getPhone(), newData.getPhone()));
-        }
-        if (!newData.getCurrency().equals(oldData.getCurrency())) {
-            changedFields.add(new DefaultChangedField("currency", oldData.getCurrency().toString(), newData.getCurrency().toString()));
-        }
-        if (newData.getBillCycleDay() != oldData.getBillCycleDay()) {
-            changedFields.add(new DefaultChangedField("billCycleDay", Integer.toString(oldData.getBillCycleDay()),
-                                                               Integer.toString(newData.getBillCycleDay())));
-        }
+        List<ChangedField> tmpChangedFields = new ArrayList<ChangedField>();
 
-        String oldProviderName = oldData.getPaymentProviderName();
-        String newProviderName = newData.getPaymentProviderName();
+        addIfValueChanged(tmpChangedFields, "externalKey",
+                oldData.getExternalKey(), newData.getExternalKey());
 
-        if ((newProviderName == null) && (oldProviderName == null)) {
-        } else if ((newProviderName == null) && (oldProviderName != null)) {
-            changedFields.add((new DefaultChangedField("paymentProviderName", oldProviderName, newProviderName)));
-        } else if ((newProviderName != null) && (oldProviderName == null)) {
-            changedFields.add((new DefaultChangedField("paymentProviderName", oldProviderName, newProviderName)));
-        } else if (!newProviderName.equals(oldProviderName)) {
-            changedFields.add((new DefaultChangedField("paymentProviderName", oldProviderName, newProviderName)));
-        }
+        addIfValueChanged(tmpChangedFields, "email",
+                oldData.getEmail(), newData.getEmail());
 
-        return changedFields;
+        addIfValueChanged(tmpChangedFields, "firstName",
+                oldData.getName(), newData.getName());
+
+        addIfValueChanged(tmpChangedFields, "phone",
+                oldData.getPhone(), newData.getPhone());
+
+        addIfValueChanged(tmpChangedFields, "currency",
+                (oldData.getCurrency() != null) ? oldData.getCurrency().toString() : null,
+                 (newData.getCurrency() != null) ? newData.getCurrency().toString() : null);
+
+        addIfValueChanged(tmpChangedFields,
+                "billCycleDay",
+                Integer.toString(oldData.getBillCycleDay()), Integer.toString(newData.getBillCycleDay()));
+
+        addIfValueChanged(tmpChangedFields,"paymentProviderName",
+                oldData.getPaymentProviderName(), newData.getPaymentProviderName());
+        return tmpChangedFields;
+    }
+
+    private void addIfValueChanged(List<ChangedField> inputList, String key, String oldData, String newData) {
+        // If both null => no changes
+        if (newData == null && oldData == null) {
+            return;
+        // If only one is null
+        } else if (newData == null || oldData == null) {
+            inputList.add(new DefaultChangedField(key, oldData, newData));
+        // If non are null we can safely compare values
+        } else if (!newData.equals(oldData)) {
+            inputList.add(new DefaultChangedField(key, oldData, newData));
+        }
     }
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/migration/EntitlementMigrationApi.java b/api/src/main/java/com/ning/billing/entitlement/api/migration/EntitlementMigrationApi.java
index b4f13a8..9498c6f 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/migration/EntitlementMigrationApi.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/migration/EntitlementMigrationApi.java
@@ -57,11 +57,10 @@ public interface EntitlementMigrationApi {
      * The semantics is 'all or nothing' (atomic operation)
      *
      * @param toBeMigrated all the bundles and associated subscription that should be migrated for the account
-
      *
      */
     public void migrate(EntitlementAccountMigration toBeMigrated)
-    throws EntitlementMigrationApiException;
+        throws EntitlementMigrationApiException;
 
     /**
      * Remove all the data pertaining to that acount