package org.onap.policy.controlloop.actor.guard;
import java.util.Map;
-import java.util.UUID;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
+import org.onap.policy.controlloop.actorserviceprovider.CallbackManager;
import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
-import org.onap.policy.controlloop.actorserviceprovider.Util;
import org.onap.policy.controlloop.actorserviceprovider.impl.HttpOperation;
import org.onap.policy.controlloop.actorserviceprovider.impl.OperationPartial;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
import org.onap.policy.controlloop.policy.PolicyResult;
import org.onap.policy.models.decisions.concepts.DecisionRequest;
import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Guard Operation. The outcome message is set to the guard response. If the guard is
* </dl>
*/
public class GuardOperation extends HttpOperation<DecisionResponse> {
+ private static final Logger logger = LoggerFactory.getLogger(GuardOperation.class);
// operation name
public static final String NAME = OperationPartial.GUARD_OPERATION_NAME;
}
@Override
- protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
- if (config.isDisabled()) {
- // guard is disabled, thus it is always treated as a success
- return CompletableFuture.completedFuture(params.makeOutcome());
+ public CompletableFuture<OperationOutcome> start() {
+ if (!config.isDisabled()) {
+ // enabled - do full guard operation
+ return super.start();
}
- DecisionRequest request = Util.translate(getName(), makeRequest(), DecisionRequest.class);
+ // guard is disabled, thus it is always treated as a success
+ logger.info("{}: guard disabled, always succeeds for {}", getFullName(), params.getRequestId());
+
+ final Executor executor = params.getExecutor();
+ final CallbackManager callbacks = new CallbackManager();
+
+ return CompletableFuture.completedFuture(params.makeOutcome())
+ .whenCompleteAsync(callbackStarted(callbacks), executor)
+ .whenCompleteAsync(callbackCompleted(callbacks), executor);
+ }
+ @Override
+ protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
+ DecisionRequest request = makeRequest();
Entity<DecisionRequest> entity = Entity.entity(request, MediaType.APPLICATION_JSON);
Map<String, Object> headers = makeHeaders();
headers.put("Accept", MediaType.APPLICATION_JSON);
- String url = makeUrl();
+ String url = getUrl();
logMessage(EventType.OUT, CommInfrastructure.REST, url, request);
// @formatter:off
return handleResponse(outcome, url,
- callback -> getClient().post(callback, makePath(), entity, headers));
+ callback -> getClient().post(callback, getPath(), entity, headers));
// @formatter:on
}
/**
* Makes a request from the payload.
*
- * @return a new request map
+ * @return a new request
*/
- protected Map<String, Object> makeRequest() {
+ protected DecisionRequest makeRequest() {
if (params.getPayload() == null) {
throw new IllegalArgumentException("missing payload");
}
- Map<String, Object> req = config.makeRequest();
- req.putAll(params.getPayload());
- req.computeIfAbsent("requestId", key -> UUID.randomUUID().toString());
+ DecisionRequest req = config.makeRequest();
+ req.setRequestId(getSubRequestId());
+ req.setResource(Map.of("guard", params.getPayload()));
return req;
}