Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Complete the rest of the LROs
  • Loading branch information
Minnie Liu committed Feb 11, 2021
commit 4347c30b3dc7b30f33f28d353069a7f50f31a89d
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,14 @@

import com.azure.communication.phonenumbers.implementation.PhoneNumberAdminClientImpl;
import com.azure.communication.phonenumbers.implementation.PhoneNumbersImpl;
import com.azure.communication.phonenumbers.implementation.models.PhoneNumbersPurchasePhoneNumbersResponse;
import com.azure.communication.phonenumbers.implementation.models.PhoneNumberPurchaseRequest;
import com.azure.communication.phonenumbers.implementation.models.PhoneNumbersSearchAvailablePhoneNumbersResponse;
import com.azure.communication.phonenumbers.implementation.models.PhoneNumbersReleasePhoneNumberResponse;
import com.azure.communication.phonenumbers.implementation.models.PhoneNumbersUpdateCapabilitiesResponse;
import com.azure.communication.phonenumbers.models.AcquiredPhoneNumber;
import com.azure.communication.phonenumbers.models.PhoneNumberCapabilitiesRequest;
import com.azure.communication.phonenumbers.models.PhoneNumberOperationResult;
import com.azure.communication.phonenumbers.models.PhoneNumberOperation;
import com.azure.communication.phonenumbers.models.PhoneNumberOperationStatus;
import com.azure.communication.phonenumbers.models.PhoneNumberSearchRequest;
import com.azure.communication.phonenumbers.models.PhoneNumberSearchResult;
Expand All @@ -17,6 +21,7 @@
import com.azure.core.annotation.ServiceMethod;
import com.azure.core.http.rest.PagedFlux;
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;
import com.azure.core.util.CoreUtils;
import com.azure.core.util.logging.ClientLogger;
import com.azure.core.util.polling.LongRunningOperationStatus;
Expand All @@ -31,6 +36,7 @@
import java.util.function.Function;

import static com.azure.core.util.FluxUtil.monoError;
import static com.azure.core.util.FluxUtil.withContext;

/**
* Asynchronous client for Communication service phone number operations
Expand Down Expand Up @@ -138,39 +144,49 @@ public Mono<AcquiredPhoneNumber> updatePhoneNumber(String phoneNumber, PhoneNumb
*
* @param countryCode The ISO 3166-2 country code.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May be we can add a link for ISO spec 'https://www.iso.org/standard/72483.html' if it helps developer.

* @param searchRequest {@link PhoneNumberSearchRequest} specifying the search request
* @param pollInterval The time our long running operation will keep on polling
* until it gets a result from the server
* @return A {@link PollerFlux} object with the reservation result
*/
@ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
public PollerFlux<PhoneNumberOperationResult, PhoneNumberSearchResult> beginSearchAvailablePhoneNumbers(
String countryCode, PhoneNumberSearchRequest searchRequest, Duration pollInterval) {
Objects.requireNonNull(countryCode, "'countryCode' cannot be null.");
Objects.requireNonNull(searchRequest, "'searchRequest' cannot be null.");

if (pollInterval == null) {
pollInterval = defaultPollInterval;
}
public PollerFlux<PhoneNumberOperation, PhoneNumberSearchResult> beginSearchAvailablePhoneNumbers(
String countryCode, PhoneNumberSearchRequest searchRequest) {
return beginSearchAvailablePhoneNumbers(countryCode, searchRequest, null);
}

PollerFlux<PhoneNumberOperation, PhoneNumberSearchResult> beginSearchAvailablePhoneNumbers(
String countryCode, PhoneNumberSearchRequest searchRequest, Context context) {
try {
Objects.requireNonNull(countryCode, "'countryCode' cannot be null.");
Objects.requireNonNull(searchRequest, "'searchRequest' cannot be null.");

return new PollerFlux<>(pollInterval,
searchAvailableNumbersInitOperation(countryCode, searchRequest),
searchAvailableNumbersPollOperation(),
cancelOperation(),
fetchFinalResultOperation());
return new PollerFlux<>(defaultPollInterval,
searchAvailableNumbersInitOperation(countryCode, searchRequest, context),
pollOperation(),
cancelOperation(),
searchAvailableNumbersFetchFinalResultOperation());

} catch (RuntimeException ex) {
return PollerFlux.error(ex);
}
}

private Function<PollingContext<PhoneNumberOperationResult>, Mono<PhoneNumberOperationResult>>
searchAvailableNumbersInitOperation(String countryCode, PhoneNumberSearchRequest searchRequest) {
private Function<PollingContext<PhoneNumberOperation>, Mono<PhoneNumberOperation>>
searchAvailableNumbersInitOperation(String countryCode, PhoneNumberSearchRequest searchRequest, Context context) {
return (pollingContext) -> {
return client.searchAvailablePhoneNumbersWithResponseAsync(countryCode, searchRequest)
return withContext(contextValue -> {
if (context != null) {
contextValue = context;
}
return client.searchAvailablePhoneNumbersWithResponseAsync(countryCode, searchRequest, contextValue)
.flatMap((PhoneNumbersSearchAvailablePhoneNumbersResponse response) -> {
pollingContext.setData("operationId", parseIdFromUrl(response.getDeserializedHeaders().getOperationLocation()));
pollingContext.setData("searchId", parseIdFromUrl(response.getDeserializedHeaders().getLocation()));
return client.getOperationAsync(pollingContext.getData("operationId"))
.flatMap((PhoneNumberOperationResult result) -> {
.flatMap((PhoneNumberOperation result) -> {
return Mono.just(result);
});
});
});
};
}

Expand All @@ -180,8 +196,8 @@ private String parseIdFromUrl(String url) {
return id.substring(0, id.indexOf("?"));
}

private Function<PollingContext<PhoneNumberOperationResult>, Mono<PollResponse<PhoneNumberOperationResult>>>
searchAvailableNumbersPollOperation() {
private Function<PollingContext<PhoneNumberOperation>, Mono<PollResponse<PhoneNumberOperation>>>
pollOperation() {
return (pollingContext) -> {
return client.getOperationAsync(pollingContext.getData("operationId"))
.flatMap(operation -> {
Expand All @@ -200,8 +216,8 @@ private String parseIdFromUrl(String url) {
};
}

private BiFunction<PollingContext<PhoneNumberOperationResult>,
PollResponse<PhoneNumberOperationResult>, Mono<PhoneNumberOperationResult>>
private BiFunction<PollingContext<PhoneNumberOperation>,
PollResponse<PhoneNumberOperation>, Mono<PhoneNumberOperation>>
cancelOperation() {
return (pollingContext, firstResponse) -> {
if (firstResponse == null || firstResponse.getValue() == null) {
Expand All @@ -217,8 +233,8 @@ private String parseIdFromUrl(String url) {
};
}

private Function<PollingContext<PhoneNumberOperationResult>, Mono<PhoneNumberSearchResult>>
fetchFinalResultOperation() {
private Function<PollingContext<PhoneNumberOperation>, Mono<PhoneNumberSearchResult>>
searchAvailableNumbersFetchFinalResultOperation() {
return (pollingContext) -> {
return client.getSearchResultAsync(pollingContext.getData("searchId"));
};
Expand All @@ -231,9 +247,40 @@ private String parseIdFromUrl(String url) {
* @return A {@link PollerFlux} object.
*/
@ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
public PollerFlux<Void, Void> beginPurchasePhoneNumbers(String searchId) {
Objects.requireNonNull(searchId, "'searchId' can not be null.");
return null;
public PollerFlux<PhoneNumberOperation, Void> beginPurchasePhoneNumbers(String searchId) {
return beginPurchasePhoneNumbers(searchId, null);
}

PollerFlux<PhoneNumberOperation, Void> beginPurchasePhoneNumbers(String searchId, Context context) {
try {
Objects.requireNonNull(searchId, "'searchId' cannot be null.");
return new PollerFlux<>(defaultPollInterval,
purchaseNumbersInitOperation(searchId, context),
pollOperation(),
(pollingContext, firstResponse) -> Mono.error(logger.logExceptionAsError(new RuntimeException("Cancellation is not supported"))),
(pollingContext) -> Mono.empty());
} catch (RuntimeException ex) {
return PollerFlux.error(ex);
}
}

private Function<PollingContext<PhoneNumberOperation>, Mono<PhoneNumberOperation>>
purchaseNumbersInitOperation(String searchId, Context context) {
return (pollingContext) -> {
return withContext(contextValue -> {
if (context != null) {
contextValue = context;
}
return client.purchasePhoneNumbersWithResponseAsync(new PhoneNumberPurchaseRequest().setSearchId(searchId), contextValue)
.flatMap((PhoneNumbersPurchasePhoneNumbersResponse response) -> {
pollingContext.setData("operationId", parseIdFromUrl(response.getDeserializedHeaders().getOperationLocation()));
return client.getOperationAsync(pollingContext.getData("operationId"))
.flatMap((PhoneNumberOperation result) -> {
return Mono.just(result);
});
});
});
};
}

/**
Expand All @@ -248,9 +295,40 @@ public PollerFlux<Void, Void> beginPurchasePhoneNumbers(String searchId) {
* @return A {@link PollerFlux} object.
*/
@ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
public PollerFlux<Void, Void> beginReleasePhoneNumber(String phoneNumber) {
Objects.requireNonNull(phoneNumber, "'phoneNumbers' cannot be null.");
return null;
public PollerFlux<PhoneNumberOperation, Void> beginReleasePhoneNumber(String phoneNumber) {
return beginReleasePhoneNumber(phoneNumber, null);
}

PollerFlux<PhoneNumberOperation, Void> beginReleasePhoneNumber(String phoneNumber, Context context) {
try {
Objects.requireNonNull(phoneNumber, "'phoneNumber' cannot be null.");
return new PollerFlux<>(defaultPollInterval,
releaseNumberInitOperation(phoneNumber, context),
pollOperation(),
(pollingContext, firstResponse) -> Mono.error(logger.logExceptionAsError(new RuntimeException("Cancellation is not supported"))),
(pollingContext) -> Mono.empty());
} catch (RuntimeException ex) {
return PollerFlux.error(ex);
}
}

private Function<PollingContext<PhoneNumberOperation>, Mono<PhoneNumberOperation>>
releaseNumberInitOperation(String phoneNumber, Context context) {
return (pollingContext) -> {
return withContext(contextValue -> {
if (context != null) {
contextValue = context;
}
return client.releasePhoneNumberWithResponseAsync(phoneNumber, contextValue)
.flatMap((PhoneNumbersReleasePhoneNumberResponse response) -> {
pollingContext.setData("operationId", parseIdFromUrl(response.getDeserializedHeaders().getOperationLocation()));
return client.getOperationAsync(pollingContext.getData("operationId"))
.flatMap((PhoneNumberOperation result) -> {
return Mono.just(result);
});
});
});
};
}

/**
Expand All @@ -261,8 +339,51 @@ public PollerFlux<Void, Void> beginReleasePhoneNumber(String phoneNumber) {
* @return A {@link PollerFlux} object
*/
@ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
public PollerFlux<AcquiredPhoneNumber, AcquiredPhoneNumber> beginUpdatePhoneNumberCapabilities(String phoneNumber, PhoneNumberCapabilitiesRequest capabilitiesUpdateRequest) {
Objects.requireNonNull(phoneNumber, "'phoneNumbers' cannot be null.");
return null;
public PollerFlux<PhoneNumberOperation, AcquiredPhoneNumber>
beginUpdatePhoneNumberCapabilities(String phoneNumber, PhoneNumberCapabilitiesRequest capabilitiesUpdateRequest) {
return beginUpdatePhoneNumberCapabilities(phoneNumber, capabilitiesUpdateRequest, null);
}

PollerFlux<PhoneNumberOperation, AcquiredPhoneNumber>
beginUpdatePhoneNumberCapabilities(String phoneNumber, PhoneNumberCapabilitiesRequest capabilitiesUpdateRequest, Context context) {
try {
Objects.requireNonNull(phoneNumber, "'phoneNumber' cannot be null.");
Objects.requireNonNull(capabilitiesUpdateRequest, "'capabilitiesUpdateRequest' cannot be null.");

return new PollerFlux<>(defaultPollInterval,
updateNumberCapabilitiesInitOperation(phoneNumber, capabilitiesUpdateRequest, context),
pollOperation(),
(pollingContext, firstResponse) -> Mono.error(logger.logExceptionAsError(new RuntimeException("Cancellation is not supported"))),
updateNumberCapabilitiesFetchFinalResultOperation(phoneNumber));
} catch (RuntimeException ex) {
return PollerFlux.error(ex);
}
}

private Function<PollingContext<PhoneNumberOperation>, Mono<PhoneNumberOperation>>
updateNumberCapabilitiesInitOperation(String phoneNumber, PhoneNumberCapabilitiesRequest capabilitiesUpdateRequest, Context context) {
return (pollingContext) -> {
return withContext(contextValue -> {
if (context != null) {
contextValue = context;
}
return client.updateCapabilitiesWithResponseAsync(phoneNumber, capabilitiesUpdateRequest, contextValue)
.flatMap((PhoneNumbersUpdateCapabilitiesResponse response) -> {
pollingContext.setData("operationId", parseIdFromUrl(response.getDeserializedHeaders().getOperationLocation()));
return client.getOperationAsync(pollingContext.getData("operationId"))
.flatMap((PhoneNumberOperation result) -> {
return Mono.just(result);
});
});
});
};
}

private Function<PollingContext<PhoneNumberOperation>, Mono<AcquiredPhoneNumber>>
updateNumberCapabilitiesFetchFinalResultOperation(String phoneNumber) {
return (pollingContext) -> {
return client.getByNumberAsync(phoneNumber);
};
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@
// Licensed under the MIT License.
package com.azure.communication.phonenumbers;

import java.time.Duration;
import java.util.Objects;

import com.azure.communication.phonenumbers.implementation.PhoneNumberAdminClientImpl;
import com.azure.communication.phonenumbers.implementation.PhoneNumbersImpl;
import com.azure.communication.phonenumbers.models.AcquiredPhoneNumber;
import com.azure.communication.phonenumbers.models.PhoneNumberCapabilitiesRequest;
import com.azure.communication.phonenumbers.models.PhoneNumberOperationResult;
import com.azure.communication.phonenumbers.models.PhoneNumberOperation;
import com.azure.communication.phonenumbers.models.PhoneNumberSearchRequest;
import com.azure.communication.phonenumbers.models.PhoneNumberSearchResult;
import com.azure.communication.phonenumbers.models.PhoneNumberUpdateRequest;
Expand Down Expand Up @@ -116,14 +115,13 @@ public Response<AcquiredPhoneNumber> updatePhoneNumberWithResponse(String phoneN
*
* @param countryCode The ISO 3166-2 country code.
* @param searchRequest The search request
* @param searchRequest The search request

* @param context A {@link Context} representing the request context.
* @return A {@link SyncPoller} object with the reservation result
*/
@ServiceMethod(returns = ReturnType.SINGLE)
public SyncPoller<PhoneNumberOperationResult, PhoneNumberSearchResult> beginSearchAvailablePhoneNumbers(
String countryCode, PhoneNumberSearchRequest searchRequest, Duration pollInterval) {
return asyncClient.beginSearchAvailablePhoneNumbers(countryCode, searchRequest, pollInterval).getSyncPoller();
public SyncPoller<PhoneNumberOperation, PhoneNumberSearchResult> beginSearchAvailablePhoneNumbers(
String countryCode, PhoneNumberSearchRequest searchRequest, Context context) {
return asyncClient.beginSearchAvailablePhoneNumbers(countryCode, searchRequest, context).getSyncPoller();
}

/**
Expand All @@ -133,11 +131,12 @@ public SyncPoller<PhoneNumberOperationResult, PhoneNumberSearchResult> beginSear
* operation is complete.
*
* @param searchId ID of the search
* @param context A {@link Context} representing the request context.
* @return A {@link SyncPoller} object.
*/
@ServiceMethod(returns = ReturnType.SINGLE)
public SyncPoller<PhoneNumberOperationResult, Void> beginPurchasePhoneNumbers(String searchId) {
return null;
public SyncPoller<PhoneNumberOperation, Void> beginPurchasePhoneNumbers(String searchId, Context context) {
return asyncClient.beginPurchasePhoneNumbers(searchId, context).getSyncPoller();
}

/**
Expand All @@ -149,11 +148,12 @@ public SyncPoller<PhoneNumberOperationResult, Void> beginPurchasePhoneNumbers(St
*
* @param phoneNumber The phone number id in E.164 format. The leading plus can be either + or encoded
* as %2B.
* @param context A {@link Context} representing the request context.
* @return A {@link SyncPoller} object.
*/
@ServiceMethod(returns = ReturnType.SINGLE)
public SyncPoller<PhoneNumberOperationResult, Void> beginReleasePhoneNumbers(String phoneNumber) {
return null;
public SyncPoller<PhoneNumberOperation, Void> beginReleasePhoneNumbers(String phoneNumber, Context context) {
return asyncClient.beginReleasePhoneNumber(phoneNumber).getSyncPoller();
}

/**
Expand All @@ -164,10 +164,11 @@ public SyncPoller<PhoneNumberOperationResult, Void> beginReleasePhoneNumbers(Str
* @param phoneNumber The phone number id in E.164 format. The leading plus can be either + or encoded
* as %2B.
* @param capabilitiesUpdateRequest Update capabilities of an acquired phone number.
* @param context A {@link Context} representing the request context.
* @return A {@link SyncPoller} object
*/
@ServiceMethod(returns = ReturnType.SINGLE)
public SyncPoller<PhoneNumberOperationResult, AcquiredPhoneNumber> beginUpdatePhoneNumberCapabilities(String phoneNumber, PhoneNumberCapabilitiesRequest capabilitiesUpdateRequest) {
return null;
public SyncPoller<PhoneNumberOperation, AcquiredPhoneNumber> beginUpdatePhoneNumberCapabilities(String phoneNumber, PhoneNumberCapabilitiesRequest capabilitiesUpdateRequest, Context context) {
return asyncClient.beginUpdatePhoneNumberCapabilities(phoneNumber, capabilitiesUpdateRequest, context).getSyncPoller();
}
}
Loading