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;
 
  30  * Outcome from an operation. Objects of this type are passed from one stage to the next.
 
  34 public class OperationOutcome {
 
  36     private String operation;
 
  37     private String target;
 
  38     private Instant start;
 
  40     private String subRequestId;
 
  41     private OperationResult result = OperationResult.SUCCESS;
 
  42     private String message;
 
  43     private boolean finalOutcome;
 
  44     private Object response;
 
  49      * @param source source object from which to copy
 
  51     public OperationOutcome(OperationOutcome source) {
 
  52         this.actor = source.actor;
 
  53         this.operation = source.operation;
 
  54         this.target = source.target;
 
  55         this.start = source.start;
 
  56         this.end = source.end;
 
  57         this.subRequestId = source.subRequestId;
 
  58         this.result = source.result;
 
  59         this.message = source.message;
 
  60         this.finalOutcome = source.finalOutcome;
 
  61         this.response = source.response;
 
  65      * Creates a {@link ControlLoopOperation}, populating all fields with the values from
 
  66      * this object. Sets the outcome field to the string representation of this object's
 
  69      * @return ControlLoopOperation
 
  71     public ControlLoopOperation toControlLoopOperation() {
 
  72         ControlLoopOperation clo = new ControlLoopOperation();
 
  75         clo.setOperation(operation);
 
  76         clo.setTarget(target);
 
  79         clo.setSubRequestId(subRequestId);
 
  80         clo.setOutcome(result.toString());
 
  81         clo.setMessage(message);
 
  86     @SuppressWarnings("unchecked")
 
  87     public <T> T getResponse() {
 
  92      * Determines if this outcome is for the given actor and operation.
 
  94      * @param actor actor name
 
  95      * @param operation operation name
 
  96      * @return {@code true} if this outcome is for the given actor and operation
 
  98     public boolean isFor(@NonNull String actor, @NonNull String operation) {
 
  99         // do the operation check first, as it's most likely to be unique
 
 100         return (operation.equals(this.operation) && actor.equals(this.actor));
 
 104      * Determines if an outcome is for the given actor and operation.
 
 106      * @param outcome outcome to be examined, or {@code null}
 
 107      * @param actor actor name
 
 108      * @param operation operation name
 
 109      * @return {@code true} if this outcome is for the given actor and operation,
 
 110      *         {@code false} it is {@code null} or not for the actor/operation
 
 112     public static boolean isFor(OperationOutcome outcome, String actor, String operation) {
 
 113         return (outcome != null && outcome.isFor(actor, operation));
 
 119      * @param result new result
 
 121     public void setResult(@NonNull OperationResult result) {
 
 122         this.result = result;