use of org.killbill.billing.events.BroadcastInternalEvent in project killbill by killbill.
the class DefaultBroadcastApi method broadcast.
@Override
public void broadcast(final String serviceName, final String type, final String event, final DateTime createdDate, final String createdBy, final boolean localNodeOnly) {
// If localNodeOnly, this is not really a broadcast api anymore, but we still rely on that broadcast bus event to notify the local node
if (localNodeOnly) {
final BroadcastInternalEvent busEvent = new DefaultBroadcastInternalEvent(serviceName, type, event);
try {
eventBus.post(busEvent);
} catch (final EventBusException e) {
logger.warn("Failed to post event {}", event, e);
}
} else {
final BroadcastModelDao modelDao = new BroadcastModelDao(serviceName, type, event, createdDate, createdBy);
dao.create(modelDao);
}
}
use of org.killbill.billing.events.BroadcastInternalEvent 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.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 (EntitlementService.ENTITLEMENT_SERVICE_NAME.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 metaDataObj = new BlockingStateMetadata(realEventBS.getBlockableId(), realEventBS.getService(), realEventBS.getStateName(), realEventBS.getBlockingType(), realEventBS.getEffectiveDate(), realEventBS.isTransitionedToBlockedBilling(), realEventBS.isTransitionedToUnblockedBilling(), realEventBS.isTransitionedToBlockedEntitlement(), realEventBS.isTransitionedToUnblockedEntitlement());
metaData = objectMapper.writeValueAsString(metaDataObj);
}
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;
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;
break;
case INVOICE_PAYMENT_ERROR:
final InvoicePaymentErrorInternalEvent realEventInvPayErr = (InvoicePaymentErrorInternalEvent) event;
objectType = ObjectType.INVOICE;
objectId = realEventInvPayErr.getInvoiceId();
eventBusType = ExtBusEventType.INVOICE_PAYMENT_FAILED;
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;
break;
case CONTROL_TAG_CREATION:
final ControlTagCreationInternalEvent realTagEventCr = (ControlTagCreationInternalEvent) event;
objectType = ObjectType.TAG;
objectId = realTagEventCr.getTagId();
eventBusType = ExtBusEventType.TAG_CREATION;
break;
case USER_TAG_DELETION:
final UserTagDeletionInternalEvent realUserTagEventDel = (UserTagDeletionInternalEvent) event;
objectType = ObjectType.TAG;
objectId = realUserTagEventDel.getTagId();
eventBusType = ExtBusEventType.TAG_DELETION;
break;
case CONTROL_TAG_DELETION:
final ControlTagDeletionInternalEvent realTagEventDel = (ControlTagDeletionInternalEvent) event;
objectType = ObjectType.TAG;
objectId = realTagEventDel.getTagId();
eventBusType = ExtBusEventType.TAG_DELETION;
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 metaDataObj = new BroadcastMetadata(realBroadcastEvent.getServiceName(), realBroadcastEvent.getType(), realBroadcastEvent.getJsonEvent());
metaData = objectMapper.writeValueAsString(metaDataObj);
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;
}
use of org.killbill.billing.events.BroadcastInternalEvent in project killbill by killbill.
the class TestDefaultBroadcastInternalEvent method testBasic.
@Test(groups = "fast")
public void testBasic() throws Exception {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JodaModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
final String eventJson = "\"{\"pluginName\":\"foo\",\"pluginVersion\":\"1.2.3\",\"properties\":[{\"key\":\"something\",\"value\":\"nothing\"}]}\"";
final BroadcastInternalEvent broadcastEvent = new DefaultBroadcastInternalEvent("service", "PLUGIN_INSTALL", eventJson);
final String broadcastEventStr = objectMapper.writeValueAsString(broadcastEvent);
final BroadcastInternalEvent res = objectMapper.readValue(broadcastEventStr, DefaultBroadcastInternalEvent.class);
Assert.assertEquals(res.getServiceName(), "service");
Assert.assertEquals(res.getType(), "PLUGIN_INSTALL");
Assert.assertEquals(res.getJsonEvent(), eventJson);
}
Aggregations