Make targetEntity a property
[policy/models.git] / models-interactions / model-actors / actor.aai / src / main / java / org / onap / policy / controlloop / actor / aai / AaiGetOperation.java
index b527abc..3fb978d 100644 (file)
 
 package org.onap.policy.controlloop.actor.aai;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import javax.ws.rs.client.Invocation.Builder;
 import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
+import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.impl.HttpOperation;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
@@ -49,16 +46,7 @@ public class AaiGetOperation extends HttpOperation<StandardCoderObject> {
 
     public static final int DEFAULT_RETRY = 3;
 
-    // operation names
-    public static final String TENANT = "Tenant";
-
-    // property prefixes
-    private static final String TENANT_KEY_PREFIX = AaiConstants.CONTEXT_PREFIX + TENANT + ".";
-
-    /**
-     * Operation names supported by this operator.
-     */
-    public static final Set<String> OPERATIONS = Set.of(TENANT);
+    private static final List<String> PROPERTY_NAMES = List.of(OperationProperties.AAI_TARGET_ENTITY);
 
 
     /**
@@ -74,50 +62,26 @@ public class AaiGetOperation extends HttpOperation<StandardCoderObject> {
      * @param config configuration for this operation
      */
     public AaiGetOperation(ControlLoopOperationParams params, HttpConfig config) {
-        super(params, config, StandardCoderObject.class);
+        super(params, config, StandardCoderObject.class, PROPERTY_NAMES);
         this.propertyPrefix = getFullName() + ".";
     }
 
-    /**
-     * Gets the "context key" for the tenant query response associated with the given
-     * target entity.
-     *
-     * @param targetEntity target entity
-     * @return the "context key" for the response associated with the given target
-     */
-    public static String getTenantKey(String targetEntity) {
-        return (TENANT_KEY_PREFIX + targetEntity);
-    }
-
     @Override
-    protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
-
-        Map<String, Object> headers = makeHeaders();
-
-        headers.put("Accept", MediaType.APPLICATION_JSON);
-
-        StringBuilder str = new StringBuilder(getClient().getBaseUrl());
-
-        String path = getPath();
-        WebTarget web = getClient().getWebTarget().path(path);
-        str.append(path);
-
-        web = addQuery(web, str, "?", "search-node-type", "vserver");
-        web = addQuery(web, str, "&", "filter", "vserver-name:EQUALS:" + params.getTargetEntity());
-
-        Builder webldr = web.request();
-        for (Entry<String, Object> header : headers.entrySet()) {
-            webldr.header(header.getKey(), header.getValue());
-        }
-
-        String url = str.toString();
-
-        logMessage(EventType.OUT, CommInfrastructure.REST, url, null);
-
-        return handleResponse(outcome, url, callback -> webldr.async().get(callback));
+    public void generateSubRequestId(int attempt) {
+        setSubRequestId(String.valueOf(attempt));
     }
 
-    private WebTarget addQuery(WebTarget web, StringBuilder str, String separator, String name, String value) {
+    /**
+     * Adds a query parameter to a web target.
+     *
+     * @param web target to which the parameter should be added
+     * @param str the separator and parameter are appended here, for logging purposes
+     * @param separator separator to be added to "str"; that's its only use
+     * @param name parameter name
+     * @param value parameter value
+     * @return "web"
+     */
+    protected WebTarget addQuery(WebTarget web, StringBuilder str, String separator, String name, String value) {
         str.append(separator);
         str.append(name);
         str.append('=');
@@ -126,6 +90,18 @@ public class AaiGetOperation extends HttpOperation<StandardCoderObject> {
         return web.queryParam(name, value);
     }
 
+    /**
+     * Adds headers to the web builder.
+     *
+     * @param webldr builder to which the headers should be added
+     * @param headers headers to be added
+     */
+    protected void addHeaders(Builder webldr, Map<String, Object> headers) {
+        for (Entry<String, Object> header : headers.entrySet()) {
+            webldr.header(header.getKey(), header.getValue());
+        }
+    }
+
     @Override
     protected Map<String, Object> makeHeaders() {
         return AaiUtil.makeHeaders(params);
@@ -137,11 +113,12 @@ public class AaiGetOperation extends HttpOperation<StandardCoderObject> {
     @Override
     protected CompletableFuture<OperationOutcome> postProcessResponse(OperationOutcome outcome, String url,
                     Response rawResponse, StandardCoderObject response) {
-        String entity = params.getTargetEntity();
 
-        logger.info("{}: caching response of {} for {}", getFullName(), entity, params.getRequestId());
-
-        params.getContext().setProperty(propertyPrefix + entity, response);
+        if (params.getContext() != null) {
+            String entity = getTargetEntity();
+            logger.info("{}: caching response of {} for {}", getFullName(), entity, params.getRequestId());
+            params.getContext().setProperty(propertyPrefix + entity, response);
+        }
 
         return super.postProcessResponse(outcome, url, rawResponse, response);
     }