2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.controlloop.actorserviceprovider;
23 import java.time.Instant;
25 import lombok.NoArgsConstructor;
26 import lombok.NonNull;
27 import org.onap.policy.controlloop.ControlLoopOperation;
28 import org.onap.policy.controlloop.ControlLoopResponse;
29 import org.onap.policy.controlloop.policy.PolicyResult;
32 * Outcome from an operation. Objects of this type are passed from one stage to the next.
36 public class OperationOutcome {
38 private String operation;
39 private String target;
40 private Instant start;
42 private String subRequestId;
43 private PolicyResult result = PolicyResult.SUCCESS;
44 private String message;
45 private boolean finalOutcome;
46 private Object response;
47 private ControlLoopResponse controlLoopResponse;
52 * @param source source object from which to copy
54 public OperationOutcome(OperationOutcome source) {
55 this.actor = source.actor;
56 this.operation = source.operation;
57 this.target = source.target;
58 this.start = source.start;
59 this.end = source.end;
60 this.subRequestId = source.subRequestId;
61 this.result = source.result;
62 this.message = source.message;
63 this.finalOutcome = source.finalOutcome;
64 this.response = source.response;
65 this.controlLoopResponse = source.controlLoopResponse;
69 * Creates a {@link ControlLoopOperation}, populating all fields with the values from
70 * this object. Sets the outcome field to the string representation of this object's
75 public ControlLoopOperation toControlLoopOperation() {
76 ControlLoopOperation clo = new ControlLoopOperation();
79 clo.setOperation(operation);
80 clo.setTarget(target);
83 clo.setSubRequestId(subRequestId);
84 clo.setOutcome(result.toString());
85 clo.setMessage(message);
90 @SuppressWarnings("unchecked")
91 public <T> T getResponse() {
96 * Determines if this outcome is for the given actor and operation.
98 * @param actor actor name
99 * @param operation operation name
100 * @return {@code true} if this outcome is for the given actor and operation
102 public boolean isFor(@NonNull String actor, @NonNull String operation) {
103 // do the operation check first, as it's most likely to be unique
104 return (operation.equals(this.operation) && actor.equals(this.actor));
108 * Determines if an outcome is for the given actor and operation.
110 * @param outcome outcome to be examined, or {@code null}
111 * @param actor actor name
112 * @param operation operation name
113 * @return {@code true} if this outcome is for the given actor and operation,
114 * {@code false} it is {@code null} or not for the actor/operation
116 public static boolean isFor(OperationOutcome outcome, String actor, String operation) {
117 return (outcome != null && outcome.isFor(actor, operation));
123 * @param result new result
125 public void setResult(@NonNull PolicyResult result) {
126 this.result = result;