private void verifyTagDefinitionEvent(final UUID tagDefinitionId, final String tagDefinitionName, final String tagDefinitionDescription, final TagDefinition tagDefinition, final UUID userToken, final TagDefinitionInternalEvent event) { Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId); Assert.assertEquals(event.getTagDefinition(), tagDefinition); Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId); Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName); Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription); Assert.assertEquals(event, event); Assert.assertTrue(event.equals(event)); }
public TagDefinitionModelDao(final TagDefinition tagDefinition) { this(tagDefinition.getId(), tagDefinition.getCreatedDate(), tagDefinition.getUpdatedDate(), tagDefinition.getName(), tagDefinition.getDescription(), JOINER.join(tagDefinition.getApplicableObjectTypes())); }
public TagDefinitionJson(final TagDefinition tagDefinition, @Nullable final List<AuditLog> auditLogs) { this(tagDefinition.getId(), tagDefinition.isControlTag(), tagDefinition.getName(), tagDefinition.getDescription(), tagDefinition.getApplicableObjectTypes(), toAuditLogJson(auditLogs)); }
@AllowConcurrentEvents @Subscribe public void handleTagRemoval(final ControlTagDeletionInternalEvent event) { if (event.getTagDefinition().getName().equals(ControlTagType.OVERDUE_ENFORCEMENT_OFF.toString()) && event.getObjectType() == ObjectType.ACCOUNT) { insertBusEventIntoNotificationQueue(event.getObjectId(), event); } else if (event.getTagDefinition().getName().equals(ControlTagType.WRITTEN_OFF.toString()) && event.getObjectType() == ObjectType.INVOICE) { final UUID accountId = nonEntityDao.retrieveIdFromObject(event.getSearchKey1(), ObjectType.ACCOUNT, objectIdCacheController); insertBusEventIntoNotificationQueue(accountId, event); } }
@TimedResource @GET @Path("/{tagDefinitionId:" + UUID_PATTERN + "}") @Produces(APPLICATION_JSON) @ApiOperation(value = "Retrieve a tag definition", response = TagDefinitionJson.class) @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid tagDefinitionId supplied")}) public Response getTagDefinition(@PathParam("tagDefinitionId") final UUID tagDefId, @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode, @javax.ws.rs.core.Context final HttpServletRequest request) throws TagDefinitionApiException { final TenantContext tenantContext = context.createTenantContextNoAccountId(request); final TagDefinition tagDefinition = tagUserApi.getTagDefinition(tagDefId, tenantContext); final List<AuditLog> auditLogs = auditUserApi.getAuditLogs(tagDefinition.getId(), ObjectType.TAG_DEFINITION, auditMode.getLevel(), tenantContext); final TagDefinitionJson json = new TagDefinitionJson(tagDefinition, auditLogs); return Response.status(Status.OK).entity(json).build(); }
assertListenerStatus(); final TagDefinition tagDefinition2 = tagUserApi.getTagDefinition(tagDefinition.getId(), callContext); assertEquals(tagDefinition2.getApplicableObjectTypes().size(), 2); assertEquals(tagDefinition2.getApplicableObjectTypes().get(0), ObjectType.ACCOUNT); assertEquals(tagDefinition2.getApplicableObjectTypes().get(1), ObjectType.INVOICE); tagUserApi.addTag(invoice.getId(), ObjectType.INVOICE, tagDefinition.getId(), callContext); assertListenerStatus();
@Test(groups = "fast") public void testCreateTagDefinitionWithLowerCase() throws Exception { final String tagDefinitionName = "lowercase"; final TagDefinitionModelDao tagDefinitionModelDao = new TagDefinitionModelDao(); tagDefinitionModelDao.setName(tagDefinitionName); tagDefinitionModelDao.setApplicableObjectTypes(ObjectType.ACCOUNT.name()); Mockito.when(tagDefinitionDao.create(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(InternalCallContext.class))).thenReturn(tagDefinitionModelDao); final TagDefinition tagDefinition = tagUserApi.createTagDefinition(tagDefinitionName, "description", ImmutableSet.<ObjectType>of(ObjectType.ACCOUNT), context); assertEquals(tagDefinitionName, tagDefinition.getName()); } }
@TimedResource @GET @Produces(APPLICATION_JSON) @ApiOperation(value = "List tag definitions", response = TagDefinitionJson.class, responseContainer = "List") @ApiResponses(value = {}) public Response getTagDefinitions(@javax.ws.rs.core.Context final HttpServletRequest request, @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode) { final TenantContext tenantContext = context.createTenantContextNoAccountId(request); final List<TagDefinition> tagDefinitions = tagUserApi.getTagDefinitions(tenantContext); final Collection<TagDefinitionJson> result = new LinkedList<TagDefinitionJson>(); for (final TagDefinition tagDefinition : tagDefinitions) { final List<AuditLog> auditLogs = auditUserApi.getAuditLogs(tagDefinition.getId(), ObjectType.TAG_DEFINITION, auditMode.getLevel(), tenantContext); result.add(new TagDefinitionJson(tagDefinition, auditLogs)); } return Response.status(Status.OK).entity(result).build(); }
private void verifyTagEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final UUID tagDefinitionId, final String tagDefinitionName, final String tagDefinitionDescription, final TagDefinition tagDefinition, final UUID userToken, final TagInternalEvent event) { Assert.assertEquals(event.getTagId(), tagId); Assert.assertEquals(event.getObjectId(), objectId); Assert.assertEquals(event.getObjectType(), objectType); Assert.assertEquals(event.getTagDefinition(), tagDefinition); Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId); Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName); Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription); Assert.assertEquals(event, event); Assert.assertTrue(event.equals(event)); } }
public TagDefinitionModelDao(final TagDefinition tagDefinition) { this(tagDefinition.getId(), tagDefinition.getCreatedDate(), tagDefinition.getUpdatedDate(), tagDefinition.getName(), tagDefinition.getDescription(), JOINER.join(tagDefinition.getApplicableObjectTypes())); }
@AllowConcurrentEvents @Subscribe public void handleTagInsert(final ControlTagCreationInternalEvent event) { if (event.getTagDefinition().getName().equals(ControlTagType.OVERDUE_ENFORCEMENT_OFF.toString()) && event.getObjectType() == ObjectType.ACCOUNT) { final InternalCallContext internalCallContext = createCallContext(event.getUserToken(), event.getSearchKey1(), event.getSearchKey2()); insertBusEventIntoNotificationQueue(event.getObjectId(), OverdueAsyncBusNotificationAction.CLEAR, internalCallContext); } else if (event.getTagDefinition().getName().equals(ControlTagType.WRITTEN_OFF.toString()) && event.getObjectType() == ObjectType.INVOICE) { final UUID accountId = nonEntityDao.retrieveIdFromObject(event.getSearchKey1(), ObjectType.ACCOUNT, objectIdCacheController); insertBusEventIntoNotificationQueue(accountId, event); } }
final Map<UUID, TagDefinition> tagDefinitionsCache = new HashMap<UUID, TagDefinition>(); for (final TagDefinition tagDefinition : tagUserApi.getTagDefinitions(tenantContext)) { tagDefinitionsCache.put(tagDefinition.getId(), tagDefinition);
@Test(groups = "fast") public void testPojo() throws Exception { final UUID tagDefinitionId = UUID.randomUUID(); final String tagDefinitionName = UUID.randomUUID().toString(); final String tagDefinitionDescription = UUID.randomUUID().toString(); final boolean controlTag = false; final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag); final UUID userToken = UUID.randomUUID(); final DefaultUserTagDefinitionDeletionEvent event = new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, 1L, 2L, UUID.randomUUID()); Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_DELETION); Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId); Assert.assertEquals(event.getTagDefinition(), tagDefinition); Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId); Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName); Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription); Assert.assertEquals(event, event); Assert.assertEquals(event, new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, 1L, 2L, UUID.randomUUID())); Assert.assertTrue(event.equals(event)); Assert.assertTrue(event.equals(new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, 1L, 2L, UUID.randomUUID()))); }
@AllowConcurrentEvents @Subscribe public void handleTagRemoval(final ControlTagDeletionInternalEvent event) { if (event.getTagDefinition().getName().equals(ControlTagType.OVERDUE_ENFORCEMENT_OFF.toString()) && event.getObjectType() == ObjectType.ACCOUNT) { insertBusEventIntoNotificationQueue(event.getObjectId(), event); } else if (event.getTagDefinition().getName().equals(ControlTagType.WRITTEN_OFF.toString()) && event.getObjectType() == ObjectType.INVOICE) { final UUID accountId = nonEntityDao.retrieveIdFromObject(event.getSearchKey1(), ObjectType.ACCOUNT, objectIdCacheController); insertBusEventIntoNotificationQueue(accountId, event); } }
@TimedResource @GET @Path("/" + PAGINATION) @Produces(APPLICATION_JSON) @ApiOperation(value = "List tags", response = TagJson.class, responseContainer = "List") @ApiResponses(value = {}) public Response getTags(@QueryParam(QUERY_SEARCH_OFFSET) @DefaultValue("0") final Long offset, @QueryParam(QUERY_SEARCH_LIMIT) @DefaultValue("100") final Long limit, @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode, @javax.ws.rs.core.Context final HttpServletRequest request) throws TagApiException { final TenantContext tenantContext = context.createTenantContextNoAccountId(request); final Pagination<Tag> tags = tagUserApi.getTags(offset, limit, tenantContext); final URI nextPageUri = uriBuilder.nextPage(TagResource.class, "getTags", tags.getNextOffset(), limit, ImmutableMap.<String, String>of(QUERY_AUDIT, auditMode.getLevel().toString())); final Map<UUID, TagDefinition> tagDefinitionsCache = new HashMap<UUID, TagDefinition>(); for (final TagDefinition tagDefinition : tagUserApi.getTagDefinitions(tenantContext)) { tagDefinitionsCache.put(tagDefinition.getId(), tagDefinition); } return buildStreamingPaginationResponse(tags, new Function<Tag, TagJson>() { @Override public TagJson apply(final Tag tag) { final TagDefinition tagDefinition = tagDefinitionsCache.get(tag.getTagDefinitionId()); // TODO Really slow - we should instead try to figure out the account id final List<AuditLog> auditLogs = auditUserApi.getAuditLogs(tag.getId(), ObjectType.TAG, auditMode.getLevel(), tenantContext); return new TagJson(tag, tagDefinition, auditLogs); } }, nextPageUri); }
@Test(groups = "fast") public void testPojo() throws Exception { final UUID tagDefinitionId = UUID.randomUUID(); final String tagDefinitionName = UUID.randomUUID().toString(); final String tagDefinitionDescription = UUID.randomUUID().toString(); final boolean controlTag = false; final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag); final UUID userToken = UUID.randomUUID(); final DefaultControlTagDefinitionCreationEvent event = new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, 1L, 2L, UUID.randomUUID()); Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.CONTROL_TAGDEFINITION_CREATION); Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId); Assert.assertEquals(event.getTagDefinition(), tagDefinition); Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId); Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName); Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription); Assert.assertEquals(event, event); Assert.assertEquals(event, new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, 1L, 2L, UUID.randomUUID())); Assert.assertTrue(event.equals(event)); Assert.assertTrue(event.equals(new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, 1L, 2L, UUID.randomUUID()))); }
@Test(groups = "fast") public void testCreateTagDefinitionWithLowerCase() throws Exception { final String tagDefinitionName = "lowercase"; final TagDefinitionModelDao tagDefinitionModelDao = new TagDefinitionModelDao(); tagDefinitionModelDao.setName(tagDefinitionName); tagDefinitionModelDao.setApplicableObjectTypes(ObjectType.ACCOUNT.name()); Mockito.when(tagDefinitionDao.create(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(InternalCallContext.class))).thenReturn(tagDefinitionModelDao); final TagDefinition tagDefinition = tagUserApi.createTagDefinition(tagDefinitionName, "description", ImmutableSet.<ObjectType>of(ObjectType.ACCOUNT), context); assertEquals(tagDefinitionName, tagDefinition.getName()); } }
@TimedResource @POST @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) @ApiOperation(value = "Create a tag definition", response = TagDefinitionJson.class) @ApiResponses(value = {@ApiResponse(code = 201, message = "Tag definition created successfully"), @ApiResponse(code = 400, message = "Invalid name or description supplied")}) public Response createTagDefinition(final TagDefinitionJson json, @HeaderParam(HDR_CREATED_BY) final String createdBy, @HeaderParam(HDR_REASON) final String reason, @HeaderParam(HDR_COMMENT) final String comment, @javax.ws.rs.core.Context final HttpServletRequest request, @javax.ws.rs.core.Context final UriInfo uriInfo) throws TagDefinitionApiException { // Checked as the database layer as well, but bail early and return 400 instead of 500 verifyNonNullOrEmpty(json, "TagDefinitionJson body should be specified"); verifyNonNullOrEmpty(json.getName(), "TagDefinition name needs to be set", json.getDescription(), "TagDefinition description needs to be set"); Preconditions.checkArgument(json.getApplicableObjectTypes() != null && !json.getApplicableObjectTypes().isEmpty(), "Applicable object types must be set"); final TagDefinition createdTagDef = tagUserApi.createTagDefinition(json.getName(), json.getDescription(), json.getApplicableObjectTypes(), context.createCallContextNoAccountId(createdBy, reason, comment, request)); return uriBuilder.buildResponse(uriInfo, TagDefinitionResource.class, "getTagDefinition", createdTagDef.getId(), request); }
@Test(groups = "fast") public void testPojo() throws Exception { final UUID tagId = UUID.randomUUID(); final UUID objectId = UUID.randomUUID(); final ObjectType objectType = ObjectType.ACCOUNT_EMAIL; final UUID tagDefinitionId = UUID.randomUUID(); final String tagDefinitionName = UUID.randomUUID().toString(); final String tagDefinitionDescription = UUID.randomUUID().toString(); final boolean controlTag = false; final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag); final UUID userToken = UUID.randomUUID(); final DefaultUserTagDeletionEvent event = new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, 1L, 2L, UUID.randomUUID()); Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAG_DELETION); Assert.assertEquals(event.getTagId(), tagId); Assert.assertEquals(event.getObjectId(), objectId); Assert.assertEquals(event.getObjectType(), objectType); Assert.assertEquals(event.getTagDefinition(), tagDefinition); Assert.assertEquals(event.getTagDefinition().getId(), tagDefinitionId); Assert.assertEquals(event.getTagDefinition().getName(), tagDefinitionName); Assert.assertEquals(event.getTagDefinition().getDescription(), tagDefinitionDescription); Assert.assertEquals(event, event); Assert.assertEquals(event, new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, 1L, 2L, UUID.randomUUID())); Assert.assertTrue(event.equals(event)); Assert.assertTrue(event.equals(new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, 1L, 2L, UUID.randomUUID()))); }