killbill-memoizeit

util: integrate comments from baa7c200edd14a060c22a299cf0324e6b270a989 Signed-off-by:

1/22/2015 6:28:28 PM

Details

diff --git a/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java b/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
index c0b2f2f..fcd714b 100644
--- a/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
+++ b/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
@@ -20,6 +20,7 @@ package org.killbill.billing.beatrix.extbus;
 
 import java.util.UUID;
 
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Named;
 
@@ -242,11 +243,14 @@ public class BeatrixListener {
                null;
     }
 
-    private UUID getAccountId(final BusInternalEventType eventType, final UUID objectId, final ObjectType objectType, final TenantContext context) {
+    private UUID getAccountId(final BusInternalEventType eventType, @Nullable final UUID objectId, final ObjectType objectType, final TenantContext context) {
         // accountRecord_id is not set for ACCOUNT_CREATE event as we are in the transaction and value is known yet
         if (eventType == BusInternalEventType.ACCOUNT_CREATE) {
             return objectId;
+        } else if (objectId == null) {
+            return null;
+        } else {
+            return internalCallContextFactory.getAccountId(objectId, objectType, context);
         }
-        return internalCallContextFactory.getAccountId(objectId, objectType, context);
     }
 }
diff --git a/util/src/main/java/org/killbill/billing/util/callcontext/InternalCallContextFactory.java b/util/src/main/java/org/killbill/billing/util/callcontext/InternalCallContextFactory.java
index 171aabb..1cc8f98 100644
--- a/util/src/main/java/org/killbill/billing/util/callcontext/InternalCallContextFactory.java
+++ b/util/src/main/java/org/killbill/billing/util/callcontext/InternalCallContextFactory.java
@@ -214,7 +214,7 @@ public class InternalCallContextFactory {
                                                           final CallOrigin callOrigin, final UserType userType, @Nullable final UUID userToken,
                                                           @Nullable final String reasonCode, @Nullable final String comment, final DateTime createdDate,
                                                           final DateTime updatedDate, final TenantContext tenantContext) {
-        final Long tenantRecordId = getTenantRecordIdSafe(objectId, objectType, tenantContext);
+        final Long tenantRecordId = getTenantRecordIdSafe(tenantContext);
         final Long accountRecordId = getAccountRecordIdSafe(objectId, objectType, tenantContext);
         return createInternalCallContext(tenantRecordId, accountRecordId, userName, callOrigin, userType, userToken,
                                          reasonCode, comment, createdDate, updatedDate);
@@ -262,7 +262,7 @@ public class InternalCallContextFactory {
         if (objectBelongsToTheRightTenant(objectId, objectType, context)) {
             return getAccountRecordIdUnsafe(objectId, objectType);
         } else {
-            return null;
+            throw new IllegalStateException(String.format("Object id=%s type=%s doesn't belong to tenant id=%s", objectId, objectType, context.getTenantId()));
         }
     }
 
@@ -270,29 +270,18 @@ public class InternalCallContextFactory {
         if (objectBelongsToTheRightTenant(objectId, objectType, tenantRecordId)) {
             return getAccountRecordIdUnsafe(objectId, objectType);
         } else {
-            return null;
-        }
-    }
-
-    private Long getTenantRecordIdSafe(final UUID objectId, final ObjectType objectType, final TenantContext context) {
-        if (objectBelongsToTheRightTenant(objectId, objectType, context)) {
-            return getTenantRecordIdUnsafe(objectId, objectType);
-        } else {
-            return null;
+            throw new IllegalStateException(String.format("Object id=%s type=%s doesn't belong to tenant recordId=%s", objectId, objectType, tenantRecordId));
         }
     }
 
     private Long getTenantRecordIdSafe(final TenantContext context) {
-        return getTenantRecordIdSafe(context.getTenantId());
-    }
-
-    private Long getTenantRecordIdSafe(final UUID tenantId) {
         // Default to single default tenant (e.g. single tenant mode)
         // TODO Extract this convention (e.g. BusinessAnalyticsBase needs to know about it)
-        if (tenantId == null) {
+        if (context.getTenantId() == null) {
             return INTERNAL_TENANT_RECORD_ID;
         } else {
-            return getTenantRecordIdUnsafe(tenantId, ObjectType.TENANT);
+            // This is always safe (the tenant context was created from the api key and secret)
+            return getTenantRecordIdUnsafe(context.getTenantId(), ObjectType.TENANT);
         }
     }