Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package io.nexusrpc.client;

import io.nexusrpc.Link;
import java.time.Instant;
import java.util.List;
import java.util.Map;

/** CompleteOperationOptions are options for the CompleteOperation client and server APIs. */
public class CompleteOperationOptions {
public static Builder newBuilder() {
return new Builder();
}

private final Map<String, String> headers;
private final Instant startTime;
private final List<Link> links;

private CompleteOperationOptions(
Map<String, String> headers, Instant startTime, List<Link> links) {
this.headers = headers;
this.startTime = startTime;
this.links = links;
}

public List<Link> getLinks() {
return links;
}

public Instant getStartTime() {
return startTime;
}

public Map<String, String> getHeaders() {
return headers;
}

public static class Builder {
private Map<String, String> headers;
private Instant startTime;
private List<Link> links;

public Builder setHeaders(Map<String, String> headers) {
this.headers = headers;
return this;
}

public Builder setStartTime(Instant startTime) {
this.startTime = startTime;
return this;
}

public Builder setLinks(List<Link> links) {
this.links = links;
return this;
}

public CompleteOperationOptions build() {
return new CompleteOperationOptions(headers, startTime, links);
}
}
}
70 changes: 70 additions & 0 deletions nexus-sdk/src/main/java/io/nexusrpc/client/CompletionClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package io.nexusrpc.client;

import io.nexusrpc.OperationException;
import io.nexusrpc.client.transport.Transport;

/** CompletionClient is used to complete or fail async operations. */
public class CompletionClient {
private final Transport transport;

// TODO take CompleteOperationOptions as a parameter?
public CompletionClient(Transport transport) {
this.transport = transport;
}

/**
* Complete an operation identified with the given token and result.
*
* @param token the operation token
* @param result the result of the operation
*/
void completeOperation(String token, Object result) {
completeOperation(token, result, CompleteOperationOptions.newBuilder().build());
}

/**
* Complete an operation identified with the given token and result.
*
* @param token the operation token
* @param result the result of the operation
* @param options additional options for completing the operation
*/
void completeOperation(String token, Object result, CompleteOperationOptions options) {
transport.completeOperation(
token,
io.nexusrpc.client.transport.CompleteOperationOptions.newBuilder()
.setResult(result)
.setOperationToken(token)
.setLinks(options.getLinks())
.setStartTime(options.getStartTime())
.build());
}

/**
* Fail an operation identified with the given token and result.
*
* @param token the operation token
* @param error the error that caused the operation to fail
*/
void failOperation(String token, OperationException error) {
failOperation(token, error, CompleteOperationOptions.newBuilder().build());
}

/**
* Fail an operation identified with the given token and result.
*
* @param token the operation token
* @param error the error that caused the operation to fail
* @param options additional options for failing the operation
*/
void failOperation(String token, OperationException error, CompleteOperationOptions options) {
transport.completeOperation(
token,
io.nexusrpc.client.transport.CompleteOperationOptions.newBuilder()
.setError(error)
.setOperationToken(token)
.setLinks(options.getLinks())
.setStartTime(options.getStartTime())
.build());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package io.nexusrpc.client.transport;

import io.nexusrpc.Experimental;
import io.nexusrpc.Link;
import io.nexusrpc.OperationException;
import java.time.Instant;
import java.util.List;
import java.util.Map;

@Experimental
public class CompleteOperationOptions {
public static Builder newBuilder() {
return new Builder();
}

private final Map<String, String> headers;
private final Object result;
private final OperationException error;
private final String operationToken;
private final Instant startTime;
private final List<Link> links;

private CompleteOperationOptions(
Map<String, String> headers,
Object result,
OperationException error,
String operationToken,
Instant startTime,
List<Link> links) {
this.headers = headers;
this.result = result;
this.error = error;
this.operationToken = operationToken;
this.startTime = startTime;
this.links = links;
}

public String getOperationToken() {
return operationToken;
}

public List<Link> getLinks() {
return links;
}

public Instant getStartTime() {
return startTime;
}

public OperationException getError() {
return error;
}

public Object getResult() {
return result;
}

public Map<String, String> getHeaders() {
return headers;
}

public static class Builder {
private Map<String, String> headers;
private Object result;
private OperationException error;
private String operationToken;
private Instant startTime;
private List<Link> links;

public Builder setHeaders(Map<String, String> headers) {
this.headers = headers;
return this;
}

public Builder setResult(Object result) {
this.result = result;
return this;
}

public Builder setError(OperationException error) {
this.error = error;
return this;
}

public Builder setOperationToken(String operationToken) {
this.operationToken = operationToken;
return this;
}

public Builder setStartTime(Instant startTime) {
this.startTime = startTime;
return this;
}

public Builder setLinks(List<Link> links) {
this.links = links;
return this;
}

public CompleteOperationOptions build() {
return new CompleteOperationOptions(headers, result, error, operationToken, startTime, links);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package io.nexusrpc.client.transport;

import io.nexusrpc.Experimental;

@Experimental
public class CompleteOperationResponse {}
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
package io.nexusrpc.client.transport;

import io.nexusrpc.Experimental;
import io.nexusrpc.OperationException;
import io.nexusrpc.OperationStillRunningException;
import java.util.concurrent.CompletableFuture;

/** Transport interface for Nexus RPC operations. */
@Experimental
public interface Transport {
StartOperationResponse startOperation(
String operationName, String serviceName, StartOperationOptions options);
String operationName, String serviceName, Object input, StartOperationOptions options)
throws OperationException;

GetOperationResultResponse getOperationResult(
String operationName,
String serviceName,
String operationToken,
GetOperationResultOptions options);
GetOperationResultOptions options)
throws OperationException, OperationStillRunningException;

GetOperationInfoResponse getOperationInfo(
String operationName,
Expand All @@ -24,6 +31,9 @@ CancelOperationResponse cancelOperation(
String operationToken,
CancelOperationOptions options);

CompleteOperationResponse completeOperation(
String operationToken, CompleteOperationOptions options);

CompletableFuture<StartOperationResponse> startOperationAsync(
String operationName,
String serviceName,
Expand All @@ -47,4 +57,7 @@ CompletableFuture<CancelOperationResponse> cancelOperationAsync(
String serviceName,
String operationToken,
CancelOperationOptions options);

CompletableFuture<CompleteOperationResponse> completeOperationAsync(
String operationToken, CompleteOperationOptions options);
}
Loading