killbill-aplcache
Changes
pom.xml 2(+1 -1)
Details
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
index ad85ec7..6447a94 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
@@ -22,6 +22,7 @@ import java.net.URI;
import java.util.List;
import java.util.UUID;
+import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
@@ -55,6 +56,8 @@ import org.killbill.clock.Clock;
import org.killbill.commons.metrics.TimedResource;
import com.google.common.base.Function;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -109,6 +112,47 @@ public class CustomFieldResource extends JaxRsResourceBase {
nextPageUri);
}
+
+ @TimedResource
+ @GET
+ @Path("/" + SEARCH )
+ @Produces(APPLICATION_JSON)
+ @ApiOperation(value = "Search custom fields by type, name and optional value", response = CustomFieldJson.class, responseContainer = "List")
+ @ApiResponses(value = {})
+ public Response searchCustomFieldsByTypeName(@QueryParam("objectType") final String objectType,
+ @QueryParam("fieldName") final String fieldName,
+ @Nullable @QueryParam("fieldValue") final String fieldValue,
+ @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) {
+
+ Preconditions.checkNotNull(objectType);
+ Preconditions.checkNotNull(fieldName);
+
+ final TenantContext tenantContext = context.createTenantContextNoAccountId(request);
+ final Pagination<CustomField> customFields = fieldValue != null ?
+ customFieldUserApi.searchCustomFields(fieldName, fieldValue, ObjectType.valueOf(objectType), offset, limit, tenantContext) :
+ customFieldUserApi.searchCustomFields(fieldName, ObjectType.valueOf(objectType), offset, limit, tenantContext);
+
+ final URI nextPageUri = uriBuilder.nextPage(CustomFieldResource.class, "searchCustomFields", customFields.getNextOffset(), limit, ImmutableMap.<String, String>of("objectType", objectType,
+ "fieldName", fieldName,
+ "fieldValue", MoreObjects.firstNonNull(fieldValue, ""),
+ 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 + "}")
@@ -136,6 +180,8 @@ public class CustomFieldResource extends JaxRsResourceBase {
nextPageUri);
}
+
+
@TimedResource
@GET
@Path("/{customFieldId:" + UUID_PATTERN + "}/" + AUDIT_LOG_WITH_HISTORY)
pom.xml 2(+1 -1)
diff --git a/pom.xml b/pom.xml
index 1cebe3f..75d763c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>killbill-oss-parent</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.143.11</version>
+ <version>0.143.12</version>
</parent>
<artifactId>killbill</artifactId>
<version>0.20.7-SNAPSHOT</version>
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCustomField.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCustomField.java
index 96cbb8b..d96d583 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCustomField.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCustomField.java
@@ -106,12 +106,30 @@ public class TestCustomField extends TestJaxrsBase {
doSearchCustomField(customField.getValue(), customField);
}
+ // Search by key
final CustomFields customFields = customFieldApi.searchCustomFields(ObjectType.ACCOUNT.toString(), requestOptions);
Assert.assertEquals(customFields.size(), 5);
Assert.assertEquals(customFields.getPaginationCurrentOffset(), 0);
Assert.assertEquals(customFields.getPaginationTotalNbRecords(), 5);
Assert.assertEquals(customFields.getPaginationMaxNbRecords(), 5);
+
+ // Search by type, name
+ final CustomFields customFields2 = customFieldApi.searchCustomFieldsByTypeName(ObjectType.ACCOUNT.toString(), input.get(0).getName(), null, requestOptions);
+ Assert.assertEquals(customFields2.size(), 1);
+ Assert.assertEquals(customFields2.getPaginationCurrentOffset(), 0);
+ Assert.assertEquals(customFields2.getPaginationTotalNbRecords(), 1);
+ Assert.assertEquals(customFields2.getPaginationMaxNbRecords(), 5);
+
+
+ // Search by type, name, value
+ final CustomFields customFields3 = customFieldApi.searchCustomFieldsByTypeName(ObjectType.ACCOUNT.toString(), input.get(0).getName(), input.get(0).getValue(), requestOptions);
+ Assert.assertEquals(customFields3.size(), 1);
+ Assert.assertEquals(customFields3.getPaginationCurrentOffset(), 0);
+ Assert.assertEquals(customFields3.getPaginationTotalNbRecords(), 1);
+ Assert.assertEquals(customFields3.getPaginationMaxNbRecords(), 5);
+
+
final CustomFields allAccountCustomFields = accountApi.getAllCustomFields(account.getAccountId(), null, AuditLevel.FULL, requestOptions);
Assert.assertEquals(allAccountCustomFields.size(), 5);