@TimedResource @GET @Path("/{accountId:" + UUID_PATTERN + "}/" + ALL_CUSTOM_FIELDS) @Produces(APPLICATION_JSON) @ApiOperation(value = "Retrieve account customFields", response = CustomFieldJson.class, responseContainer = "List") @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid account id supplied"), @ApiResponse(code = 404, message = "Account not found")}) public Response getAllCustomFields(@PathParam(ID_PARAM_NAME) final UUID accountId, @QueryParam(QUERY_OBJECT_TYPE) final ObjectType objectType, @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode, @javax.ws.rs.core.Context final HttpServletRequest request) { final TenantContext tenantContext = context.createTenantContextWithAccountId(accountId, request); final List<CustomField> customFields = objectType != null ? customFieldUserApi.getCustomFieldsForAccountType(accountId, objectType, tenantContext) : customFieldUserApi.getCustomFieldsForAccount(accountId, tenantContext); return createCustomFieldResponse(customFields, auditMode, tenantContext); }
final List<CustomField> fields = customFieldUserApi.getCustomFieldsForObject(id, getObjectType(), context); customFieldUserApi.removeCustomFields(input, context);
@TimedResource @GET @Path("/{customFieldId:" + UUID_PATTERN + "}/" + AUDIT_LOG_WITH_HISTORY) @Produces(APPLICATION_JSON) @ApiOperation(value = "Retrieve custom field audit logs with history by id", response = AuditLogJson.class, responseContainer = "List") @ApiResponses(value = {@ApiResponse(code = 404, message = "Account not found")}) public Response getCustomFieldAuditLogsWithHistory(@PathParam("customFieldId") final UUID customFieldId, @javax.ws.rs.core.Context final HttpServletRequest request) throws AccountApiException { final TenantContext tenantContext = context.createTenantContextNoAccountId(request); final List<AuditLogWithHistory> auditLogWithHistory = customFieldUserApi.getCustomFieldAuditLogsWithHistoryForId(customFieldId, AuditLevel.FULL, tenantContext); return Response.status(Status.OK).entity(getAuditLogsWithHistory(auditLogWithHistory)).build(); } }
@Test(groups = "slow") public void testCustomFieldForAccount() throws CustomFieldApiException { addCustomField("name1", "value1", account.getId(), ObjectType.ACCOUNT, clock.getUTCNow()); addCustomField("name2", "value2", account.getId(), ObjectType.ACCOUNT, clock.getUTCNow()); List<CustomField> fields = customFieldApi.getCustomFieldsForAccount(account.getId(), callContext); Assert.assertEquals(fields.size(), 2); fields = customFieldApi.getCustomFieldsForAccountType(account.getId(), ObjectType.ACCOUNT, callContext); Assert.assertEquals(fields.size(), 2); fields = customFieldApi.getCustomFieldsForObject(account.getId(), ObjectType.ACCOUNT, callContext); Assert.assertEquals(fields.size(), 2); }
protected Collection<CustomField> getFieldsForAccount(final UUID accountId, final TenantContext context) throws OSGIServiceNotAvailable { final CustomFieldUserApi tagUserApi = getCustomFieldUserApi(); return tagUserApi.getCustomFieldsForAccount(accountId, context); }
protected Response createCustomFields(final UUID id, final List<CustomFieldJson> customFields, final CallContext context, final UriInfo uriInfo, final HttpServletRequest request) throws CustomFieldApiException { final LinkedList<CustomField> input = new LinkedList<CustomField>(); for (final CustomFieldJson cur : customFields) { verifyNonNullOrEmpty(cur.getName(), "CustomFieldJson name needs to be set"); verifyNonNullOrEmpty(cur.getValue(), "CustomFieldJson value needs to be set"); input.add(new StringCustomField(cur.getName(), cur.getValue(), getObjectType(), id, context.getCreatedDate())); } customFieldUserApi.addCustomFields(input, context); return uriBuilder.buildResponse(uriInfo, this.getClass(), "getCustomFields", id, request); }
protected Response getCustomFields(final UUID id, final AuditMode auditMode, final TenantContext context) { final List<CustomField> fields = customFieldUserApi.getCustomFieldsForObject(id, getObjectType(), context); return createCustomFieldResponse(fields, auditMode, context); }
@TimedResource @GET @Path("/" + PAGINATION) @Produces(APPLICATION_JSON) @ApiOperation(value = "List custom fields", response = CustomFieldJson.class, responseContainer = "List") @ApiResponses(value = {}) public Response getCustomFields(@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 CustomFieldApiException { final TenantContext tenantContext = context.createTenantContextNoAccountId(request); final Pagination<CustomField> customFields = customFieldUserApi.getCustomFields(offset, limit, tenantContext); final URI nextPageUri = uriBuilder.nextPage(CustomFieldResource.class, "getCustomFields", customFields.getNextOffset(), limit, ImmutableMap.<String, String>of(QUERY_AUDIT, auditMode.getLevel().toString())); return buildStreamingPaginationResponse(customFields, new Function<CustomField, CustomFieldJson>() { @Override public CustomFieldJson apply(final CustomField customField) { // TODO Really slow - we should instead try to figure out the account id final List<AuditLog> auditLogs = auditUserApi.getAuditLogs(customField.getId(), ObjectType.CUSTOM_FIELD, auditMode.getLevel(), tenantContext); return new CustomFieldJson(customField, auditLogs); } }, nextPageUri); }
@TimedResource @GET @Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}") @Produces(APPLICATION_JSON) @ApiOperation(value = "Search custom fields", response = CustomFieldJson.class, responseContainer = "List") @ApiResponses(value = {}) public Response searchCustomFields(@PathParam("searchKey") final String searchKey, @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 CustomFieldApiException { final TenantContext tenantContext = context.createTenantContextNoAccountId(request); final Pagination<CustomField> customFields = customFieldUserApi.searchCustomFields(searchKey, offset, limit, tenantContext); final URI nextPageUri = uriBuilder.nextPage(CustomFieldResource.class, "searchCustomFields", customFields.getNextOffset(), limit, ImmutableMap.<String, String>of("searchKey", searchKey, QUERY_AUDIT, auditMode.getLevel().toString())); return buildStreamingPaginationResponse(customFields, new Function<CustomField, CustomFieldJson>() { @Override public CustomFieldJson apply(final CustomField customField) { // TODO Really slow - we should instead try to figure out the account id final List<AuditLog> auditLogs = auditUserApi.getAuditLogs(customField.getId(), ObjectType.CUSTOM_FIELD, auditMode.getLevel(), tenantContext); return new CustomFieldJson(customField, auditLogs); } }, nextPageUri); }
protected Response modifyCustomFields(final UUID id, final List<CustomFieldJson> customFields, final CallContext context) throws CustomFieldApiException { final LinkedList<CustomField> input = new LinkedList<CustomField>(); for (final CustomFieldJson cur : customFields) { verifyNonNullOrEmpty(cur.getCustomFieldId(), "CustomFieldJson id needs to be set"); verifyNonNullOrEmpty(cur.getValue(), "CustomFieldJson value needs to be set"); input.add(new StringCustomField(cur.getCustomFieldId(), cur.getName(), cur.getValue(), getObjectType(), id, context.getCreatedDate())); } customFieldUserApi.updateCustomFields(input, context); return Response.status(Status.NO_CONTENT).build(); }
addCustomField("name2", "value2", invoice.getId(), ObjectType.INVOICE, clock.getUTCNow()); List<CustomField> fields = customFieldApi.getCustomFieldsForAccount(invoice.getId(), callContext); Assert.assertEquals(fields.size(), 2); fields = customFieldApi.getCustomFieldsForAccountType(invoice.getId(), ObjectType.INVOICE, callContext); Assert.assertEquals(fields.size(), 2); fields = customFieldApi.getCustomFieldsForObject(invoice.getId(), ObjectType.INVOICE, callContext); Assert.assertEquals(fields.size(), 2); fields = customFieldApi.getCustomFieldsForAccount(invoice.getId(), callContext); Assert.assertEquals(fields.size(), 3); fields = customFieldApi.getCustomFieldsForAccountType(invoice.getId(), ObjectType.INVOICE, callContext); Assert.assertEquals(fields.size(), 2); fields = customFieldApi.getCustomFieldsForObject(invoice.getId(), ObjectType.INVOICE, callContext); Assert.assertEquals(fields.size(), 2);
private void addCustomField(String name, String value, UUID objectId, ObjectType type, DateTime createdDate) throws CustomFieldApiException { CustomField f = new StringCustomField(name, value, type, objectId, clock.getUTCNow()); busHandler.pushExpectedEvents(NextEvent.CUSTOM_FIELD); List<CustomField> fields = new ArrayList<CustomField>(); fields.add(f); customFieldApi.addCustomFields(fields, callContext); assertListenerStatus(); } }