killbill-memoizeit

Details

diff --git a/api/src/main/java/com/ning/billing/payment/api/PaymentProviderAccount.java b/api/src/main/java/com/ning/billing/payment/api/PaymentProviderAccount.java
index 34d4248..553d6a2 100644
--- a/api/src/main/java/com/ning/billing/payment/api/PaymentProviderAccount.java
+++ b/api/src/main/java/com/ning/billing/payment/api/PaymentProviderAccount.java
@@ -16,6 +16,8 @@
 
 package com.ning.billing.payment.api;
 
+import com.google.common.base.Objects;
+
 public class PaymentProviderAccount {
     private final String id;
     private final String accountNumber;
@@ -55,4 +57,68 @@ public class PaymentProviderAccount {
         return defaultPaymentMethodId;
     }
 
+    public static class Builder {
+        private String id;
+        private String accountNumber;
+        private String accountName;
+        private String phoneNumber;
+        private String defaultPaymentMethodId;
+
+        public Builder setId(String id) {
+            this.id = id;
+            return this;
+        }
+
+        public Builder setAccountNumber(String accountNumber) {
+            this.accountNumber = accountNumber;
+            return this;
+        }
+
+        public Builder setAccountName(String accountName) {
+            this.accountName = accountName;
+            return this;
+        }
+
+        public Builder setPhoneNumber(String phoneNumber) {
+            this.phoneNumber = phoneNumber;
+            return this;
+        }
+
+        public Builder setDefaultPaymentMethod(String defaultPaymentMethod) {
+            this.defaultPaymentMethodId = defaultPaymentMethod;
+            return this;
+        }
+
+        public PaymentProviderAccount build() {
+            return new PaymentProviderAccount(id, accountNumber, accountName, phoneNumber, defaultPaymentMethodId);
+        }
+
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(id,
+                                accountNumber,
+                                accountName,
+                                phoneNumber,
+                                defaultPaymentMethodId);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (getClass() == obj.getClass()) {
+            PaymentProviderAccount other = (PaymentProviderAccount)obj;
+            if (obj == other) {
+                return true;
+            }
+            else {
+                return Objects.equal(id, other.id) &&
+                       Objects.equal(accountNumber, other.accountNumber) &&
+                       Objects.equal(phoneNumber, other.phoneNumber) &&
+                       Objects.equal(defaultPaymentMethodId, other.defaultPaymentMethodId);
+            }
+        }
+        return false;
+    }
+
 }