Search in sources :

Example 1 with ExtBusEventType

use of org.killbill.billing.notification.plugin.api.ExtBusEventType in project killbill by killbill.

the class TestEventJson method testBusExternalEvent.

@Test(groups = "fast")
public void testBusExternalEvent() throws Exception {
    final UUID objectId = UUID.randomUUID();
    final UUID accountId = UUID.randomUUID();
    final UUID tenantId = UUID.randomUUID();
    final ObjectType objectType = ObjectType.ACCOUNT;
    final ExtBusEventType extBusEventType = ExtBusEventType.ACCOUNT_CREATION;
    final DefaultBusExternalEvent e = new DefaultBusExternalEvent(objectId, objectType, extBusEventType, accountId, tenantId, null, 1L, 2L, UUID.randomUUID());
    final String json = mapper.writeValueAsString(e);
    final Class<?> claz = Class.forName(DefaultBusExternalEvent.class.getName());
    final ExtBusEvent obj = (ExtBusEvent) mapper.readValue(json, claz);
    Assert.assertEquals(obj.getAccountId(), accountId);
    Assert.assertEquals(obj.getObjectId(), objectId);
    Assert.assertEquals(obj.getTenantId(), tenantId);
    Assert.assertEquals(obj.getObjectType(), objectType);
    Assert.assertEquals(obj.getEventType(), extBusEventType);
}
Also used : ObjectType(org.killbill.billing.ObjectType) ExtBusEvent(org.killbill.billing.notification.plugin.api.ExtBusEvent) UUID(java.util.UUID) ExtBusEventType(org.killbill.billing.notification.plugin.api.ExtBusEventType) Test(org.testng.annotations.Test)

Example 2 with ExtBusEventType

use of org.killbill.billing.notification.plugin.api.ExtBusEventType in project killbill by killbill.

the class BeatrixListener method computeExtBusEventEntryFromBusInternalEvent.

private BusEvent computeExtBusEventEntryFromBusInternalEvent(final BusInternalEvent event, final InternalCallContext context) throws JsonProcessingException {
    ObjectType objectType = null;
    UUID objectId = null;
    ExtBusEventType eventBusType = null;
    String metaData = null;
    UUID accountId = null;
    switch(event.getBusEventType()) {
        case ACCOUNT_CREATE:
            final AccountCreationInternalEvent realEventACR = (AccountCreationInternalEvent) event;
            objectType = ObjectType.ACCOUNT;
            objectId = realEventACR.getId();
            eventBusType = ExtBusEventType.ACCOUNT_CREATION;
            break;
        case ACCOUNT_CHANGE:
            final AccountChangeInternalEvent realEventACH = (AccountChangeInternalEvent) event;
            objectType = ObjectType.ACCOUNT;
            objectId = realEventACH.getAccountId();
            eventBusType = ExtBusEventType.ACCOUNT_CHANGE;
            break;
        case SUBSCRIPTION_TRANSITION:
            final SubscriptionInternalEvent realEventST = (SubscriptionInternalEvent) event;
            objectType = ObjectType.SUBSCRIPTION;
            objectId = realEventST.getSubscriptionId();
            if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.CREATE || realEventST.getTransitionType() == SubscriptionBaseTransitionType.TRANSFER) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_CREATION;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.CANCEL) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_CANCEL;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.PHASE) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_PHASE;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.CHANGE) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_CHANGE;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.UNDO_CHANGE) {
                // We map UNDO_CHANGE as a SUBSCRIPTION_CHANGE as we don't have such ext event
                eventBusType = ExtBusEventType.SUBSCRIPTION_CHANGE;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.UNCANCEL) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_UNCANCEL;
            } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.BCD_CHANGE) {
                eventBusType = ExtBusEventType.SUBSCRIPTION_BCD_CHANGE;
            }
            SubscriptionMetadata.ActionType actionType = (event instanceof EffectiveSubscriptionInternalEvent) ? ActionType.EFFECTIVE : ActionType.REQUESTED;
            final SubscriptionMetadata subscriptionMetadataObj = new SubscriptionMetadata(actionType, realEventST.getBundleExternalKey());
            metaData = objectMapper.writeValueAsString(subscriptionMetadataObj);
            break;
        case BLOCKING_STATE:
            final BlockingTransitionInternalEvent realEventBS = (BlockingTransitionInternalEvent) event;
            if (realEventBS.getBlockingType() == BlockingStateType.ACCOUNT) {
                objectType = ObjectType.ACCOUNT;
            } else if (realEventBS.getBlockingType() == BlockingStateType.SUBSCRIPTION_BUNDLE) {
                objectType = ObjectType.BUNDLE;
            } else if (realEventBS.getBlockingType() == BlockingStateType.SUBSCRIPTION) {
                objectType = ObjectType.SUBSCRIPTION;
            }
            objectId = realEventBS.getBlockableId();
            if (KILLBILL_SERVICES.ENTITLEMENT_SERVICE.getServiceName().equals(realEventBS.getService())) {
                if (DefaultEntitlementApi.ENT_STATE_START.equals(realEventBS.getStateName())) {
                    eventBusType = ExtBusEventType.ENTITLEMENT_CREATION;
                } else if (DefaultEntitlementApi.ENT_STATE_BLOCKED.equals(realEventBS.getStateName())) {
                    eventBusType = ExtBusEventType.BUNDLE_PAUSE;
                } else if (DefaultEntitlementApi.ENT_STATE_CLEAR.equals(realEventBS.getStateName())) {
                    eventBusType = ExtBusEventType.BUNDLE_RESUME;
                } else if (DefaultEntitlementApi.ENT_STATE_CANCELLED.equals(realEventBS.getStateName())) {
                    eventBusType = ExtBusEventType.ENTITLEMENT_CANCEL;
                }
            } else {
                eventBusType = ExtBusEventType.BLOCKING_STATE;
                final BlockingStateMetadata blockingStateMetadata = new BlockingStateMetadata(realEventBS.getBlockableId(), realEventBS.getService(), realEventBS.getStateName(), realEventBS.getBlockingType(), realEventBS.getEffectiveDate(), realEventBS.isTransitionedToBlockedBilling(), realEventBS.isTransitionedToUnblockedBilling(), realEventBS.isTransitionedToBlockedEntitlement(), realEventBS.isTransitionedToUnblockedEntitlement());
                metaData = objectMapper.writeValueAsString(blockingStateMetadata);
            }
            break;
        case INVOICE_CREATION:
            final InvoiceCreationInternalEvent realEventInv = (InvoiceCreationInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = realEventInv.getInvoiceId();
            eventBusType = ExtBusEventType.INVOICE_CREATION;
            break;
        case INVOICE_NOTIFICATION:
            final InvoiceNotificationInternalEvent realEventInvNotification = (InvoiceNotificationInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = null;
            // has to be set here because objectId is null with a dryRun Invoice
            accountId = realEventInvNotification.getAccountId();
            eventBusType = ExtBusEventType.INVOICE_NOTIFICATION;
            final InvoiceNotificationMetadata invoiceNotificationMetadata = new InvoiceNotificationMetadata(realEventInvNotification.getTargetDate(), realEventInvNotification.getAmountOwed(), realEventInvNotification.getCurrency());
            metaData = objectMapper.writeValueAsString(invoiceNotificationMetadata);
            break;
        case INVOICE_ADJUSTMENT:
            final InvoiceAdjustmentInternalEvent realEventInvAdj = (InvoiceAdjustmentInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = realEventInvAdj.getInvoiceId();
            eventBusType = ExtBusEventType.INVOICE_ADJUSTMENT;
            break;
        case INVOICE_PAYMENT_INFO:
            final InvoicePaymentInfoInternalEvent realEventInvPay = (InvoicePaymentInfoInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = realEventInvPay.getInvoiceId();
            eventBusType = ExtBusEventType.INVOICE_PAYMENT_SUCCESS;
            final InvoicePaymentMetadata invoicePaymentInfoMetaDataObj = new InvoicePaymentMetadata(realEventInvPay.getPaymentId(), realEventInvPay.getPaymentAttemptId(), realEventInvPay.getType(), realEventInvPay.getPaymentDate(), realEventInvPay.getAmount(), realEventInvPay.getCurrency(), realEventInvPay.getLinkedInvoicePaymentId(), realEventInvPay.getPaymentCookieId(), realEventInvPay.getProcessedCurrency());
            metaData = objectMapper.writeValueAsString(invoicePaymentInfoMetaDataObj);
            break;
        case INVOICE_PAYMENT_ERROR:
            final InvoicePaymentErrorInternalEvent realEventInvPayErr = (InvoicePaymentErrorInternalEvent) event;
            objectType = ObjectType.INVOICE;
            objectId = realEventInvPayErr.getInvoiceId();
            eventBusType = ExtBusEventType.INVOICE_PAYMENT_FAILED;
            final InvoicePaymentMetadata invoicePaymentErrorMetaDataObj = new InvoicePaymentMetadata(realEventInvPayErr.getPaymentId(), realEventInvPayErr.getPaymentAttemptId(), realEventInvPayErr.getType(), realEventInvPayErr.getPaymentDate(), realEventInvPayErr.getAmount(), realEventInvPayErr.getCurrency(), realEventInvPayErr.getLinkedInvoicePaymentId(), realEventInvPayErr.getPaymentCookieId(), realEventInvPayErr.getProcessedCurrency());
            metaData = objectMapper.writeValueAsString(invoicePaymentErrorMetaDataObj);
            break;
        case PAYMENT_INFO:
            final PaymentInfoInternalEvent realEventPay = (PaymentInfoInternalEvent) event;
            objectType = ObjectType.PAYMENT;
            objectId = realEventPay.getPaymentId();
            eventBusType = ExtBusEventType.PAYMENT_SUCCESS;
            final PaymentMetadata paymentInfoMetaDataObj = new PaymentMetadata(realEventPay.getPaymentTransactionId(), realEventPay.getAmount(), realEventPay.getCurrency(), realEventPay.getStatus(), realEventPay.getTransactionType(), realEventPay.getEffectiveDate());
            metaData = objectMapper.writeValueAsString(paymentInfoMetaDataObj);
            break;
        case PAYMENT_ERROR:
            final PaymentErrorInternalEvent realEventPayErr = (PaymentErrorInternalEvent) event;
            objectType = ObjectType.PAYMENT;
            objectId = realEventPayErr.getPaymentId();
            eventBusType = ExtBusEventType.PAYMENT_FAILED;
            accountId = realEventPayErr.getAccountId();
            final PaymentMetadata paymentErrorMetaDataObj = new PaymentMetadata(realEventPayErr.getPaymentTransactionId(), realEventPayErr.getAmount(), realEventPayErr.getCurrency(), realEventPayErr.getStatus(), realEventPayErr.getTransactionType(), realEventPayErr.getEffectiveDate());
            metaData = objectMapper.writeValueAsString(paymentErrorMetaDataObj);
            break;
        case PAYMENT_PLUGIN_ERROR:
            final PaymentPluginErrorInternalEvent realEventPayPluginErr = (PaymentPluginErrorInternalEvent) event;
            objectType = ObjectType.PAYMENT;
            objectId = realEventPayPluginErr.getPaymentId();
            eventBusType = ExtBusEventType.PAYMENT_FAILED;
            final PaymentMetadata pluginErrorMetaDataObj = new PaymentMetadata(realEventPayPluginErr.getPaymentTransactionId(), realEventPayPluginErr.getAmount(), realEventPayPluginErr.getCurrency(), realEventPayPluginErr.getStatus(), realEventPayPluginErr.getTransactionType(), realEventPayPluginErr.getEffectiveDate());
            metaData = objectMapper.writeValueAsString(pluginErrorMetaDataObj);
            break;
        case OVERDUE_CHANGE:
            final OverdueChangeInternalEvent realEventOC = (OverdueChangeInternalEvent) event;
            objectType = ObjectType.ACCOUNT;
            objectId = realEventOC.getOverdueObjectId();
            eventBusType = ExtBusEventType.OVERDUE_CHANGE;
            break;
        case USER_TAG_CREATION:
            final UserTagCreationInternalEvent realUserTagEventCr = (UserTagCreationInternalEvent) event;
            objectType = ObjectType.TAG;
            objectId = realUserTagEventCr.getTagId();
            eventBusType = ExtBusEventType.TAG_CREATION;
            metaData = realUserTagEventCr.getTagDefinition().getName();
            break;
        case CONTROL_TAG_CREATION:
            final ControlTagCreationInternalEvent realTagEventCr = (ControlTagCreationInternalEvent) event;
            objectType = ObjectType.TAG;
            objectId = realTagEventCr.getTagId();
            eventBusType = ExtBusEventType.TAG_CREATION;
            metaData = realTagEventCr.getTagDefinition().getName();
            break;
        case USER_TAG_DELETION:
            final UserTagDeletionInternalEvent realUserTagEventDel = (UserTagDeletionInternalEvent) event;
            objectType = ObjectType.TAG;
            objectId = realUserTagEventDel.getTagId();
            eventBusType = ExtBusEventType.TAG_DELETION;
            metaData = realUserTagEventDel.getTagDefinition().getName();
            break;
        case CONTROL_TAG_DELETION:
            final ControlTagDeletionInternalEvent realTagEventDel = (ControlTagDeletionInternalEvent) event;
            objectType = ObjectType.TAG;
            objectId = realTagEventDel.getTagId();
            eventBusType = ExtBusEventType.TAG_DELETION;
            metaData = realTagEventDel.getTagDefinition().getName();
            break;
        case CUSTOM_FIELD_CREATION:
            final CustomFieldCreationEvent realCustomFieldEventCr = (CustomFieldCreationEvent) event;
            objectType = ObjectType.CUSTOM_FIELD;
            objectId = realCustomFieldEventCr.getCustomFieldId();
            eventBusType = ExtBusEventType.CUSTOM_FIELD_CREATION;
            break;
        case CUSTOM_FIELD_DELETION:
            final CustomFieldDeletionEvent realCustomFieldEventDel = (CustomFieldDeletionEvent) event;
            objectType = ObjectType.CUSTOM_FIELD;
            objectId = realCustomFieldEventDel.getCustomFieldId();
            eventBusType = ExtBusEventType.CUSTOM_FIELD_DELETION;
            break;
        case TENANT_CONFIG_CHANGE:
            final TenantConfigChangeInternalEvent realTenantConfigEventChg = (TenantConfigChangeInternalEvent) event;
            objectType = ObjectType.TENANT_KVS;
            objectId = realTenantConfigEventChg.getId();
            eventBusType = ExtBusEventType.TENANT_CONFIG_CHANGE;
            metaData = realTenantConfigEventChg.getKey();
            break;
        case TENANT_CONFIG_DELETION:
            final TenantConfigDeletionInternalEvent realTenantConfigEventDel = (TenantConfigDeletionInternalEvent) event;
            objectType = ObjectType.TENANT_KVS;
            objectId = null;
            eventBusType = ExtBusEventType.TENANT_CONFIG_DELETION;
            metaData = realTenantConfigEventDel.getKey();
            break;
        case BROADCAST_SERVICE:
            final BroadcastInternalEvent realBroadcastEvent = (BroadcastInternalEvent) event;
            objectType = ObjectType.SERVICE_BROADCAST;
            objectId = null;
            eventBusType = ExtBusEventType.BROADCAST_SERVICE;
            final BroadcastMetadata broadcastMetadata = new BroadcastMetadata(realBroadcastEvent.getServiceName(), realBroadcastEvent.getType(), realBroadcastEvent.getJsonEvent());
            metaData = objectMapper.writeValueAsString(broadcastMetadata);
            break;
        default:
    }
    final TenantContext tenantContext = internalCallContextFactory.createTenantContext(context);
    // See #275
    accountId = (accountId == null) ? getAccountId(event.getBusEventType(), objectId, objectType, tenantContext) : accountId;
    return eventBusType != null ? new DefaultBusExternalEvent(objectId, objectType, eventBusType, accountId, tenantContext.getTenantId(), metaData, context.getAccountRecordId(), context.getTenantRecordId(), context.getUserToken()) : null;
}
Also used : BlockingStateMetadata(org.killbill.billing.notification.plugin.api.BlockingStateMetadata) CustomFieldDeletionEvent(org.killbill.billing.events.CustomFieldDeletionEvent) InvoicePaymentInfoInternalEvent(org.killbill.billing.events.InvoicePaymentInfoInternalEvent) PaymentInfoInternalEvent(org.killbill.billing.events.PaymentInfoInternalEvent) CustomFieldCreationEvent(org.killbill.billing.events.CustomFieldCreationEvent) TenantContext(org.killbill.billing.util.callcontext.TenantContext) PaymentMetadata(org.killbill.billing.notification.plugin.api.PaymentMetadata) InvoicePaymentMetadata(org.killbill.billing.notification.plugin.api.InvoicePaymentMetadata) EffectiveSubscriptionInternalEvent(org.killbill.billing.events.EffectiveSubscriptionInternalEvent) SubscriptionInternalEvent(org.killbill.billing.events.SubscriptionInternalEvent) BroadcastMetadata(org.killbill.billing.notification.plugin.api.BroadcastMetadata) BlockingTransitionInternalEvent(org.killbill.billing.events.BlockingTransitionInternalEvent) InvoiceNotificationMetadata(org.killbill.billing.notification.plugin.api.InvoiceNotificationMetadata) ObjectType(org.killbill.billing.ObjectType) UserTagCreationInternalEvent(org.killbill.billing.events.UserTagCreationInternalEvent) BroadcastInternalEvent(org.killbill.billing.events.BroadcastInternalEvent) UUID(java.util.UUID) InvoiceAdjustmentInternalEvent(org.killbill.billing.events.InvoiceAdjustmentInternalEvent) TenantConfigChangeInternalEvent(org.killbill.billing.events.TenantConfigChangeInternalEvent) AccountCreationInternalEvent(org.killbill.billing.events.AccountCreationInternalEvent) TenantConfigDeletionInternalEvent(org.killbill.billing.events.TenantConfigDeletionInternalEvent) ActionType(org.killbill.billing.notification.plugin.api.SubscriptionMetadata.ActionType) AccountChangeInternalEvent(org.killbill.billing.events.AccountChangeInternalEvent) InvoicePaymentInfoInternalEvent(org.killbill.billing.events.InvoicePaymentInfoInternalEvent) UserTagDeletionInternalEvent(org.killbill.billing.events.UserTagDeletionInternalEvent) EffectiveSubscriptionInternalEvent(org.killbill.billing.events.EffectiveSubscriptionInternalEvent) InvoicePaymentErrorInternalEvent(org.killbill.billing.events.InvoicePaymentErrorInternalEvent) OverdueChangeInternalEvent(org.killbill.billing.events.OverdueChangeInternalEvent) ControlTagCreationInternalEvent(org.killbill.billing.events.ControlTagCreationInternalEvent) ExtBusEventType(org.killbill.billing.notification.plugin.api.ExtBusEventType) InvoicePaymentMetadata(org.killbill.billing.notification.plugin.api.InvoicePaymentMetadata) ControlTagDeletionInternalEvent(org.killbill.billing.events.ControlTagDeletionInternalEvent) PaymentPluginErrorInternalEvent(org.killbill.billing.events.PaymentPluginErrorInternalEvent) SubscriptionMetadata(org.killbill.billing.notification.plugin.api.SubscriptionMetadata) PaymentErrorInternalEvent(org.killbill.billing.events.PaymentErrorInternalEvent) InvoicePaymentErrorInternalEvent(org.killbill.billing.events.InvoicePaymentErrorInternalEvent) InvoiceCreationInternalEvent(org.killbill.billing.events.InvoiceCreationInternalEvent) InvoiceNotificationInternalEvent(org.killbill.billing.events.InvoiceNotificationInternalEvent)

Example 3 with ExtBusEventType

use of org.killbill.billing.notification.plugin.api.ExtBusEventType in project killbill by killbill.

the class CallbackServlet method assertEqualsNicely.

private synchronized void assertEqualsNicely(final ExtBusEventType received) {
    boolean foundIt = false;
    final Iterator<ExtBusEventType> it = nextExpectedEvent.iterator();
    while (it.hasNext()) {
        final ExtBusEventType ev = it.next();
        if (ev == received) {
            it.remove();
            foundIt = true;
            log.info("Found expected event: {}; remaining expected events [{}]", received, SPACE_JOINER.join(nextExpectedEvent));
            break;
        }
    }
    if (!foundIt) {
        final String errorMsg = "CallbackServlet: received unexpected event " + received + "; remaining expected events [" + SPACE_JOINER.join(nextExpectedEvent) + "]";
        log.error(errorMsg);
        failed(errorMsg);
    }
}
Also used : ExtBusEventType(org.killbill.billing.notification.plugin.api.ExtBusEventType)

Aggregations

ExtBusEventType (org.killbill.billing.notification.plugin.api.ExtBusEventType)3 UUID (java.util.UUID)2 ObjectType (org.killbill.billing.ObjectType)2 AccountChangeInternalEvent (org.killbill.billing.events.AccountChangeInternalEvent)1 AccountCreationInternalEvent (org.killbill.billing.events.AccountCreationInternalEvent)1 BlockingTransitionInternalEvent (org.killbill.billing.events.BlockingTransitionInternalEvent)1 BroadcastInternalEvent (org.killbill.billing.events.BroadcastInternalEvent)1 ControlTagCreationInternalEvent (org.killbill.billing.events.ControlTagCreationInternalEvent)1 ControlTagDeletionInternalEvent (org.killbill.billing.events.ControlTagDeletionInternalEvent)1 CustomFieldCreationEvent (org.killbill.billing.events.CustomFieldCreationEvent)1 CustomFieldDeletionEvent (org.killbill.billing.events.CustomFieldDeletionEvent)1 EffectiveSubscriptionInternalEvent (org.killbill.billing.events.EffectiveSubscriptionInternalEvent)1 InvoiceAdjustmentInternalEvent (org.killbill.billing.events.InvoiceAdjustmentInternalEvent)1 InvoiceCreationInternalEvent (org.killbill.billing.events.InvoiceCreationInternalEvent)1 InvoiceNotificationInternalEvent (org.killbill.billing.events.InvoiceNotificationInternalEvent)1 InvoicePaymentErrorInternalEvent (org.killbill.billing.events.InvoicePaymentErrorInternalEvent)1 InvoicePaymentInfoInternalEvent (org.killbill.billing.events.InvoicePaymentInfoInternalEvent)1 OverdueChangeInternalEvent (org.killbill.billing.events.OverdueChangeInternalEvent)1 PaymentErrorInternalEvent (org.killbill.billing.events.PaymentErrorInternalEvent)1 PaymentInfoInternalEvent (org.killbill.billing.events.PaymentInfoInternalEvent)1