@Test(groups = "slow", description = "Test Account DAO: custom fields") public void testCustomFields() throws CustomFieldApiException { final UUID accountId = UUID.randomUUID(); final String fieldName = UUID.randomUUID().toString().substring(0, 4); final String fieldValue = UUID.randomUUID().toString(); customFieldDao.create(new CustomFieldModelDao(internalCallContext.getCreatedDate(), fieldName, fieldValue, accountId, ObjectType.ACCOUNT), internalCallContext); final List<CustomFieldModelDao> customFieldMap = customFieldDao.getCustomFieldsForObject(accountId, ObjectType.ACCOUNT, internalCallContext); Assert.assertEquals(customFieldMap.size(), 1); final CustomFieldModelDao customField = customFieldMap.get(0); Assert.assertEquals(customField.getFieldName(), fieldName); Assert.assertEquals(customField.getFieldValue(), fieldValue); }
public StringCustomField(final CustomFieldModelDao input) { this(input.getId(), input.getFieldName(), input.getFieldValue(), input.getObjectType(), input.getObjectId(), input.getCreatedDate()); }
@Override public boolean apply(final CustomFieldModelDao existingCustomField) { return entity.isSame(existingCustomField); } },
private void validateCustomField(final CustomFieldModelDao input, @Nullable CustomFieldModelDao existing) throws CustomFieldApiException { if (existing == null) { throw new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_DOES_NOT_EXISTS_FOR_ID, input.getId()); } if (input.getObjectId() != null & !input.getObjectId().equals(existing.getObjectId())) { throw new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_INVALID_UPDATE, input.getId(), input.getObjectId(), "ObjectId"); } if (input.getObjectType() != null && input.getObjectType() != existing.getObjectType()) { throw new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_INVALID_UPDATE, input.getId(), input.getObjectType(), "ObjectType"); } if (input.getFieldName() != null && !input.getFieldName().equals(existing.getFieldName())) { throw new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_INVALID_UPDATE, input.getId(), input.getFieldName(), "FieldName"); } }
@Override public Void inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception { final CustomFieldSqlDao sqlDao = entitySqlDaoWrapperFactory.become(CustomFieldSqlDao.class); for (final CustomFieldModelDao cur : customFieldIds) { final CustomFieldModelDao customField = sqlDao.getById(cur.getId().toString(), context); validateCustomField(cur, customField); sqlDao.updateValue(cur.getId().toString(), cur.getFieldValue(), context); postBusEventFromTransaction(customField, customField, ChangeType.UPDATE, entitySqlDaoWrapperFactory, context); } return null; } });
@Override public CustomFieldModelDao apply(final CustomField input) { // Respect user-specified ID // TODO See https://github.com/killbill/killbill/issues/35 if (input.getId() != null) { return new CustomFieldModelDao(input.getId(), context.getCreatedDate(), context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType()); } else { return new CustomFieldModelDao(context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType()); } } });
@Override protected void postBusEventFromTransaction(final CustomFieldModelDao customField, final CustomFieldModelDao savedCustomField, final ChangeType changeType, final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory, final InternalCallContext context) throws BillingExceptionBase { BusInternalEvent customFieldEvent = null; switch (changeType) { case INSERT: customFieldEvent = new DefaultCustomFieldCreationEvent(customField.getId(), customField.getObjectId(), customField.getObjectType(), context.getAccountRecordId(), context.getTenantRecordId(), context.getUserToken()); break; case DELETE: customFieldEvent = new DefaultCustomFieldDeletionEvent(customField.getId(), customField.getObjectId(), customField.getObjectType(), context.getAccountRecordId(), context.getTenantRecordId(), context.getUserToken()); break; default: return; } try { bus.postFromTransaction(customFieldEvent, entitySqlDaoWrapperFactory.getHandle().getConnection()); } catch (final PersistentBus.EventBusException e) { log.warn("Failed to post tag event for customFieldId='{}'", customField.getId().toString(), e); } }
@Override public List<CustomFieldModelDao> getCustomFieldsForObject(final UUID objectId, final ObjectType objectType, final InternalTenantContext context) { final List<CustomFieldModelDao> result = new ArrayList<CustomFieldModelDao>(); final Iterable<CustomFieldModelDao> all = getAll(context); for (final CustomFieldModelDao cur : all) { if (cur.getObjectId().equals(objectId) && cur.getObjectType() == objectType) { result.add(cur); } } return result; }
@Override public boolean apply(@Nullable final CustomFieldModelDao input) { return input.getObjectType() == objectType; } }));
@Override protected CustomFieldApiException generateAlreadyExistsException(final CustomFieldModelDao entity, final InternalCallContext context) { return new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_ALREADY_EXISTS, entity.getId()); }
private void validateCustomField(final CustomFieldModelDao input, @Nullable CustomFieldModelDao existing) throws CustomFieldApiException { if (existing == null) { throw new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_DOES_NOT_EXISTS_FOR_ID, input.getId()); } if (input.getObjectId() != null & !input.getObjectId().equals(existing.getObjectId())) { throw new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_INVALID_UPDATE, input.getId(), input.getObjectId(), "ObjectId"); } if (input.getObjectType() != null && input.getObjectType() != existing.getObjectType()) { throw new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_INVALID_UPDATE, input.getId(), input.getObjectType(), "ObjectType"); } if (input.getFieldName() != null && !input.getFieldName().equals(existing.getFieldName())) { throw new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_INVALID_UPDATE, input.getId(), input.getFieldName(), "FieldName"); } }
@Override public CustomFieldModelDao apply(final CustomField input) { return new CustomFieldModelDao(input.getId(), internalCallContext.getCreatedDate(), internalCallContext.getUpdatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType()); } });
@Override protected void postBusEventFromTransaction(final CustomFieldModelDao customField, final CustomFieldModelDao savedCustomField, final ChangeType changeType, final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory, final InternalCallContext context) throws BillingExceptionBase { BusInternalEvent customFieldEvent = null; switch (changeType) { case INSERT: customFieldEvent = new DefaultCustomFieldCreationEvent(customField.getId(), customField.getObjectId(), customField.getObjectType(), context.getAccountRecordId(), context.getTenantRecordId(), context.getUserToken()); break; case DELETE: customFieldEvent = new DefaultCustomFieldDeletionEvent(customField.getId(), customField.getObjectId(), customField.getObjectType(), context.getAccountRecordId(), context.getTenantRecordId(), context.getUserToken()); break; default: return; } try { bus.postFromTransaction(customFieldEvent, entitySqlDaoWrapperFactory.getHandle().getConnection()); } catch (final PersistentBus.EventBusException e) { log.warn("Failed to post tag event for customFieldId='{}'", customField.getId().toString(), e); } }
@Override public List<CustomFieldModelDao> getCustomFieldsForObject(final UUID objectId, final ObjectType objectType, final InternalTenantContext context) { final List<CustomFieldModelDao> result = new ArrayList<CustomFieldModelDao>(); final Iterable<CustomFieldModelDao> all = getAll(context); for (final CustomFieldModelDao cur : all) { if (cur.getObjectId().equals(objectId) && cur.getObjectType() == objectType) { result.add(cur); } } return result; }
@Override public Void inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception { final CustomFieldSqlDao sqlDao = entitySqlDaoWrapperFactory.become(CustomFieldSqlDao.class); for (final CustomFieldModelDao cur : customFieldIds) { final CustomFieldModelDao customField = sqlDao.getById(cur.getId().toString(), context); validateCustomField(cur, customField); sqlDao.updateValue(cur.getId().toString(), cur.getFieldValue(), context); postBusEventFromTransaction(customField, customField, ChangeType.UPDATE, entitySqlDaoWrapperFactory, context); } return null; } });
@Override public boolean apply(@Nullable final CustomFieldModelDao input) { return input.getObjectType() == objectType; } }));
@Override protected CustomFieldApiException generateAlreadyExistsException(final CustomFieldModelDao entity, final InternalCallContext context) { return new CustomFieldApiException(ErrorCode.CUSTOM_FIELD_ALREADY_EXISTS, entity.getId()); }
public StringCustomField(final CustomFieldModelDao input) { this(input.getId(), input.getFieldName(), input.getFieldValue(), input.getObjectType(), input.getObjectId(), input.getCreatedDate()); }
@Test(groups = "slow") public void testCreateCustomField() throws CustomFieldApiException { final UUID id = UUID.randomUUID(); final ObjectType objectType = ObjectType.ACCOUNT; String fieldName = "TestField1"; String fieldValue = "Kitty Hawk"; eventsListener.pushExpectedEvent(NextEvent.CUSTOM_FIELD); customFieldDao.create(new CustomFieldModelDao(internalCallContext.getCreatedDate(), fieldName, fieldValue, id, objectType), internalCallContext); assertListenerStatus(); fieldName = "TestField2"; fieldValue = "Cape Canaveral"; eventsListener.pushExpectedEvent(NextEvent.CUSTOM_FIELD); customFieldDao.create(new CustomFieldModelDao(internalCallContext.getCreatedDate(), fieldName, fieldValue, id, objectType), internalCallContext); assertListenerStatus(); } }
@Override public boolean apply(final CustomFieldModelDao existingCustomField) { return entity.isSame(existingCustomField); } },