Skip to content

Commit

Permalink
Setting selector filter (#6693)
Browse files Browse the repository at this point in the history
Allowed user to define KeyFilter and LabelFilter
  • Loading branch information
mssfang authored Dec 13, 2019
1 parent f5bfce5 commit 9f9a455
Show file tree
Hide file tree
Showing 11 changed files with 103 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -585,11 +585,11 @@ private Mono<PagedResponse<ConfigurationSetting>> listFirstPageSettings(SettingS
.doOnError(error -> logger.warning("Failed to list all ConfigurationSetting", error));
}

String fields = CoreUtils.arrayToString(selector.getFields(), SettingFields::toStringMapper);
String keys = CoreUtils.arrayToString(selector.getKeys(), key -> key);
String labels = CoreUtils.arrayToString(selector.getLabels(), label -> label);
final String fields = CoreUtils.arrayToString(selector.getFields(), SettingFields::toStringMapper);
final String keyFilter = selector.getKeyFilter();
final String labelFilter = selector.getLabelFilter();

return service.listKeyValues(serviceEndpoint, keys, labels, apiVersion, fields,
return service.listKeyValues(serviceEndpoint, keyFilter, labelFilter, apiVersion, fields,
selector.getAcceptDateTime(), context)
.doOnSubscribe(ignoredValue -> logger.info("Listing ConfigurationSettings - {}", selector))
.doOnSuccess(response -> logger.info("Listed ConfigurationSettings - {}", selector))
Expand Down Expand Up @@ -633,12 +633,12 @@ Mono<PagedResponse<ConfigurationSetting>> listRevisionsFirstPage(SettingSelector
Mono<PagedResponse<ConfigurationSetting>> result;

if (selector != null) {
String fields = CoreUtils.arrayToString(selector.getFields(), SettingFields::toStringMapper);
String keys = CoreUtils.arrayToString(selector.getKeys(), key -> key);
String labels = CoreUtils.arrayToString(selector.getLabels(), label -> label);
final String fields = CoreUtils.arrayToString(selector.getFields(), SettingFields::toStringMapper);
final String keyFilter = selector.getKeyFilter();
final String labelFilter = selector.getLabelFilter();

result = service.listKeyValueRevisions(
serviceEndpoint, keys, labels, apiVersion, fields, selector.getAcceptDateTime(), null, context)
result = service.listKeyValueRevisions(serviceEndpoint, keyFilter, labelFilter, apiVersion, fields,
selector.getAcceptDateTime(), null, context)
.doOnRequest(ignoredValue -> logger.info("Listing ConfigurationSetting revisions - {}", selector))
.doOnSuccess(response -> logger.info("Listed ConfigurationSetting revisions - {}", selector))
.doOnError(error ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
package com.azure.data.appconfiguration.models;

import com.azure.core.annotation.Fluent;
import com.azure.data.appconfiguration.ConfigurationAsyncClient;
import com.azure.core.util.CoreUtils;
import com.azure.data.appconfiguration.ConfigurationAsyncClient;

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
Expand All @@ -15,8 +15,8 @@
*
* <ul>
* <li>
* Providing {@link #getLabels() labels} will filter {@link ConfigurationSetting ConfigurationSettings} that match any
* label name in conjunction with the keys that are passed in to the service request.
* Providing {@link #getLabelFilter() labelFilter} will filter {@link ConfigurationSetting ConfigurationSettings} that
* match any label name in conjunction with the keys that are passed in to the service request.
* </li>
* <li>
* Providing {@link #getAcceptDateTime() acceptDateTime} will return the representation of matching {@link
Expand All @@ -32,8 +32,8 @@
*/
@Fluent
public class SettingSelector {
private String[] keys;
private String[] labels;
private String keyFilter;
private String labelFilter;
private SettingFields[] fields;
private String acceptDatetime;

Expand All @@ -49,17 +49,18 @@ public SettingSelector() {
*
* <p>
* Examples:
* <ol>
* <li>If keys = "*", settings with any key are returned.</li>
* <li>If keys = "abc1234", settings with a key equal to "abc1234" are returned.</li>
* <li>If keys = "abc*", settings with a key starting with "abc" are returned.</li>
* <li>If keys = "*abc*", settings with a key containing "abc" are returned.</li>
* </ol>
* <ul>
* <li>If {@code keyFilter = "*"}, settings with any key are returned.</li>
* <li>If {@code keyFilter = "abc1234"}, settings with a key equal to "abc1234" are returned.</li>
* <li>If {@code keyFilter = "abc*"}, settings with a key starting with "abc" are returned.</li>
* <li>If {@code keyFilter = "*abc*"}, settings with a key containing "abc" are returned.</li>
* <li>If {@code keyFilter = "abc,def"}, settings with a key equal to "abc" or "def" are returned.</li>
* </ul>
*
* @return The expressions to filter ConfigurationSetting keys on.
*/
public String[] getKeys() {
return keys == null ? new String[0] : CoreUtils.clone(keys);
public String getKeyFilter() {
return keyFilter;
}

/**
Expand All @@ -68,18 +69,18 @@ public String[] getKeys() {
* <p>
* Examples:
* <ul>
* <li>If {@code keys = "*"}, settings with any key are returned.</li>
* <li>If {@code keys = "abc1234"}, settings with a key equal to "abc1234" are returned.</li>
* <li>If {@code keys = "abc*"}, settings with a key starting with "abc" are returned.</li>
* <li>If {@code keys = "*abc*"}, settings with a key containing "abc" are returned.</li>
* <li>If {@code keys = "abc,def"}, settings with a key equal to "abc" or "def" are returned.</li>
* <li>If {@code keyFilter = "*"}, settings with any key are returned.</li>
* <li>If {@code keyFilter = "abc1234"}, settings with a key equal to "abc1234" are returned.</li>
* <li>If {@code keyFilter = "abc*"}, settings with a key starting with "abc" are returned.</li>
* <li>If {@code keyFilter = "*abc*"}, settings with a key containing "abc" are returned.</li>
* <li>If {@code keyFilter = "abc,def"}, settings with a key equal to "abc" or "def" are returned.</li>
* </ul>
*
* @param keys The expressions to filter ConfigurationSetting keys on.
* @param keyFilter The expressions to filter ConfigurationSetting keys on.
* @return The updated SettingSelector object
*/
public SettingSelector setKeys(String... keys) {
this.keys = keys;
public SettingSelector setKeyFilter(String keyFilter) {
this.keyFilter = keyFilter;
return this;
}

Expand All @@ -93,42 +94,42 @@ public SettingSelector setKeys(String... keys) {
* <p>
* Examples:
* <ul>
* <li>If {@code labels = "*"}, settings with any label are returned.</li>
* <li>If {@code labels = "\0"}, settings without any label are returned.</li>
* <li>If {@code labels = ""}, settings without any label are returned.</li>
* <li>If {@code labels = null}, settings without any label are returned.</li>
* <li>If {@code labels = "abc1234"}, settings with a label equal to "abc1234" are returned.</li>
* <li>If {@code labels = "abc*"}, settings with a label starting with "abc" are returned.</li>
* <li>If {@code labels = "*abc*"}, settings with a label containing "abc" are returned.</li>
* <li>If {@code labels = "abc,def"}, settings with labels "abc" or "def" are returned.</li>
* <li>If {@code labelFilter = "*"}, settings with any label are returned.</li>
* <li>If {@code labelFilter = "\0"}, settings without any label are returned.</li>
* <li>If {@code labelFilter = ""}, settings without any label are returned.</li>
* <li>If {@code labelFilter = null}, settings without any label are returned.</li>
* <li>If {@code labelFilter = "abc1234"}, settings with a label equal to "abc1234" are returned.</li>
* <li>If {@code labelFilter = "abc*"}, settings with a label starting with "abc" are returned.</li>
* <li>If {@code labelFilter = "*abc*"}, settings with a label containing "abc" are returned.</li>
* <li>If {@code labelFilter = "abc,def"}, settings with labels "abc" or "def" are returned.</li>
* </ul>
*
* @return labels The labels used to filter GET requests from the service.
*/
public String[] getLabels() {
return labels == null ? new String[0] : CoreUtils.clone(labels);
public String getLabelFilter() {
return labelFilter;
}

/**
* Sets the query to match {@link ConfigurationSetting#getLabel() labels} in the service.
* Sets the expression to filter {@link ConfigurationSetting#getLabel() labels} on for the request.
*
* <p>
* Examples:
* <ul>
* <li>If {@code labels = "*"}, settings with any label are returned.</li>
* <li>If {@code labels = "\0"}, settings without any label are returned. (This is the default label.)</li>
* <li>If {@code labels = "abc1234"}, settings with a label equal to "abc1234" are returned.</li>
* <li>If {@code labels = "abc*"}, settings with a label starting with "abc" are returned.</li>
* <li>If {@code labels = "*abc*"}, settings with a label containing "abc" are returned.</li>
* <li>If {@code labels = "abc,def"}, settings with labels "abc" or "def" are returned.</li>
* <li>If {@code labelFilter = "*"}, settings with any label are returned.</li>
* <li>If {@code labelFilter = "\0"}, settings without any label are returned. (This is the default label.)</li>
* <li>If {@code labelFilter = "abc1234"}, settings with a label equal to "abc1234" are returned.</li>
* <li>If {@code labelFilter = "abc*"}, settings with a label starting with "abc" are returned.</li>
* <li>If {@code labelFilter = "*abc*"}, settings with a label containing "abc" are returned.</li>
* <li>If {@code labelFilter = "abc,def"}, settings with labels "abc" or "def" are returned.</li>
* </ul>
*
* @param labels The ConfigurationSetting labels to match. If the provided value is {@code null} or {@code ""}, all
* ConfigurationSettings will be returned regardless of their label.
* @param labelFilter The expressions to filter ConfigurationSetting labels on. If the provided value is
* {@code null} or {@code ""}, all ConfigurationSettings will be returned regardless of their label.
* @return SettingSelector The updated SettingSelector object.
*/
public SettingSelector setLabels(String... labels) {
this.labels = labels;
public SettingSelector setLabelFilter(String labelFilter) {
this.labelFilter = labelFilter;
return this;
}

Expand Down Expand Up @@ -187,10 +188,7 @@ public String toString() {
fields = CoreUtils.arrayToString(this.fields, SettingFields::toStringMapper);
}

return String.format("SettingSelector(keys=%s, labels=%s, acceptDateTime=%s, fields=%s)",
CoreUtils.arrayToString(this.keys, key -> key),
CoreUtils.arrayToString(this.labels, label -> label),
this.acceptDatetime,
fields);
return String.format("SettingSelector(keyFilter=%s, labelFilter=%s, acceptDateTime=%s, fields=%s)",
this.keyFilter, this.labelFilter, this.acceptDatetime, fields);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ public void unlockSettingsCodeSnippet() {
public void listSettingCodeSnippet() {
ConfigurationAsyncClient client = getAsyncClient();
// BEGIN: com.azure.data.appconfiguration.configurationasyncclient.listsettings
client.listConfigurationSettings(new SettingSelector().setKeys("prodDBConnection"))
client.listConfigurationSettings(new SettingSelector().setKeyFilter("prodDBConnection"))
.subscriberContext(Context.of(key1, value1, key2, value2))
.subscribe(setting ->
System.out.printf("Key: %s, Value: %s", setting.getKey(), setting.getValue()));
Expand All @@ -226,7 +226,7 @@ public void listSettingCodeSnippet() {
public void listRevisionsCodeSnippet() {
ConfigurationAsyncClient client = getAsyncClient();
// BEGIN: com.azure.data.appconfiguration.configurationasyncclient.listsettingrevisions
client.listRevisions(new SettingSelector().setKeys("prodDBConnection"))
client.listRevisions(new SettingSelector().setKeyFilter("prodDBConnection"))
.subscriberContext(Context.of(key1, value1, key2, value2))
.subscribe(setting ->
System.out.printf("Key: %s, Value: %s", setting.getKey(), setting.getValue()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ public void unlockSettingsCodeSnippet() {
public void listConfigurationSettings() {
ConfigurationClient configurationClient = createSyncConfigurationClient();
// BEGIN: com.azure.data.applicationconfig.configurationclient.listConfigurationSettings#settingSelector
SettingSelector settingSelector = new SettingSelector().setKeys("prodDBConnection");
SettingSelector settingSelector = new SettingSelector().setKeyFilter("prodDBConnection");
configurationClient.listConfigurationSettings(settingSelector).forEach(setting -> {
System.out.printf("Key: %s, Value: %s", setting.getKey(), setting.getValue());
});
Expand All @@ -267,7 +267,7 @@ public void listConfigurationSettings() {
public void listConfigurationSettingsContext() {
ConfigurationClient configurationClient = createSyncConfigurationClient();
// BEGIN: com.azure.data.applicationconfig.configurationclient.listConfigurationSettings#settingSelector-context
SettingSelector settingSelector = new SettingSelector().setKeys("prodDBConnection");
SettingSelector settingSelector = new SettingSelector().setKeyFilter("prodDBConnection");
Context ctx = new Context(key2, value2);
configurationClient.listConfigurationSettings(settingSelector, ctx).forEach(setting -> {
System.out.printf("Key: %s, Value: %s", setting.getKey(), setting.getValue());
Expand All @@ -281,7 +281,7 @@ public void listConfigurationSettingsContext() {
public void listRevisions() {
ConfigurationClient client = createSyncConfigurationClient();
// BEGIN: com.azure.data.applicationconfig.configurationclient.listRevisions#settingSelector
SettingSelector settingSelector = new SettingSelector().setKeys("prodDBConnection");
SettingSelector settingSelector = new SettingSelector().setKeyFilter("prodDBConnection");
client.listRevisions(settingSelector).streamByPage().forEach(resp -> {
System.out.printf("Response headers are %s. Url %s and status code %d %n", resp.getHeaders(),
resp.getRequest().getUrl(), resp.getStatusCode());
Expand All @@ -298,7 +298,7 @@ public void listRevisions() {
public void listRevisionsContext() {
ConfigurationClient configurationClient = createSyncConfigurationClient();
// BEGIN: com.azure.data.applicationconfig.configurationclient.listRevisions#settingSelector-context
SettingSelector settingSelector = new SettingSelector().setKeys("prodDBConnection");
SettingSelector settingSelector = new SettingSelector().setKeyFilter("prodDBConnection");
Context ctx = new Context(key2, value2);
configurationClient.listRevisions(settingSelector, ctx).forEach(setting -> {
System.out.printf("Key: %s, Value: %s", setting.getKey(), setting.getValue());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public static void main(String[] args) throws IOException {

// For your services, you can select settings with "beta" or "production" label, depending on what you want your
// services to communicate with. The sample below fetches all of the "beta" settings.
SettingSelector selector = new SettingSelector().setLabels(BETA);
SettingSelector selector = new SettingSelector().setLabelFilter(BETA);

client.listConfigurationSettings(selector).toStream().forEach(setting -> {
System.out.println("Key: " + setting.getKey());
Expand All @@ -83,7 +83,7 @@ public static void main(String[] args) throws IOException {
// For the BETA and PRODUCTION sets, we fetch all of the settings we created in each set, and delete them.
// Blocking so that the program does not exit before these tasks have completed.
Flux.fromArray(new String[]{BETA, PRODUCTION})
.flatMap(set -> client.listConfigurationSettings(new SettingSelector().setLabels(set)))
.flatMap(set -> client.listConfigurationSettings(new SettingSelector().setLabelFilter(set)))
.map(setting -> client.deleteConfigurationSettingWithResponse(setting, false))
.blockLast();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public static void main(String[] args) {
final List<ConfigurationSetting> settings = Flux.concat(
client.addConfigurationSetting("hello", null, "world"),
client.setConfigurationSetting("newSetting", null, "newValue"))
.then(client.listConfigurationSettings(new SettingSelector().setKeys("*")).collectList())
.then(client.listConfigurationSettings(new SettingSelector().setKeyFilter("*")).collectList())
.block();

// Cleaning up after ourselves by deleting the values.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public static void main(String[] args) {
final List<ConfigurationSetting> settings = Flux.concat(
client.addConfigurationSetting(key, null, "world"),
client.setConfigurationSetting(key, null, "newValue"))
.then(client.listRevisions(new SettingSelector().setKeys(key)).collectList())
.then(client.listRevisions(new SettingSelector().setKeyFilter(key)).collectList())
.block();

// Cleaning up after ourselves by deleting the values.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public static void main(String[] args) {
final List<ConfigurationSetting> settings = Flux.concat(
client.addConfigurationSetting(key, null, "world"),
client.setConfigurationSetting(key, null, "newValue"))
.then(client.listRevisions(new SettingSelector().setKeys(key)).collectList())
.then(client.listRevisions(new SettingSelector().setKeyFilter(key)).collectList())
.block();

// Cleaning up after ourselves by deleting the values.
Expand Down
Loading

0 comments on commit 9f9a455

Please sign in to comment.