Revisions made to the Model Loader to use Babel
[aai/model-loader.git] / src / main / java / org / onap / aai / modelloader / notification / EventCallback.java
index fde4826..827ff81 100644 (file)
  */
 package org.onap.aai.modelloader.notification;
 
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.aai.cl.api.Logger;
+import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.aai.cl.mdc.MdcContext;
+import org.onap.aai.modelloader.config.ModelLoaderConfig;
+import org.onap.aai.modelloader.entity.Artifact;
+import org.onap.aai.modelloader.extraction.ArtifactInfoExtractor;
+import org.onap.aai.modelloader.service.ModelLoaderMsgs;
 import org.openecomp.sdc.api.IDistributionClient;
-import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
 import org.openecomp.sdc.api.consumer.INotificationCallback;
 import org.openecomp.sdc.api.notification.IArtifactInfo;
 import org.openecomp.sdc.api.notification.INotificationData;
-import org.openecomp.sdc.api.notification.IResourceInstance;
-import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;
-import org.openecomp.sdc.api.results.IDistributionClientResult;
-import org.openecomp.sdc.utils.ArtifactTypeEnum;
-import org.openecomp.sdc.utils.DistributionActionResultEnum;
-import org.openecomp.sdc.utils.DistributionStatusEnum;
-import org.onap.aai.modelloader.config.ModelLoaderConfig;
-import org.onap.aai.modelloader.entity.Artifact;
-import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifact;
-import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifactHandler;
-import org.onap.aai.modelloader.entity.model.IModelParser;
-import org.onap.aai.modelloader.entity.model.ModelArtifactHandler;
-import org.onap.aai.modelloader.entity.model.ModelParserFactory;
-import org.onap.aai.modelloader.service.ModelLoaderMsgs;
-import org.onap.aai.cl.api.Logger;
-import org.onap.aai.cl.eelf.LoggerFactory;
-import org.onap.aai.cl.mdc.MdcContext;
-import org.onap.aai.cl.mdc.MdcOverride;
 import org.slf4j.MDC;
 
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-
 public class EventCallback implements INotificationCallback {
+    private static Logger logger = LoggerFactory.getInstance().getLogger(EventCallback.class.getName());
+    private static Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(EventCallback.class.getName());
 
-  private IDistributionClient client;
-  private ModelLoaderConfig config;
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(EventCallback.class.getName());
-  private static Logger auditLogger = LoggerFactory.getInstance()
-      .getAuditLogger(EventCallback.class.getName());
-  private static Logger metricsLogger = LoggerFactory.getInstance()
-      .getMetricsLogger(EventCallback.class.getName());
-
-  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(
-      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
-
-  public EventCallback(IDistributionClient client, ModelLoaderConfig config) {
-    this.client = client;
-    this.config = config;
-  }
-
-  @Override
-  public void activateCallback(INotificationData data) {
-    // Init MDC
-    MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", "");
-
-    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Received distribution " + data.getDistributionID());
-
-    boolean success = true;
-    List<IArtifactInfo> artifacts = getArtifacts(data);
-    List<Artifact> modelArtifacts = new ArrayList<Artifact>();
-    List<Artifact> catalogArtifacts = new ArrayList<Artifact>();
-
-    for (IArtifactInfo artifact : artifacts) {
-      // Grab the current time so we can measure the download time for the
-      // metrics log
-      long startTimeInMs = System.currentTimeMillis();
-      MdcOverride override = new MdcOverride();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      // Download Artifact
-      IDistributionClientDownloadResult downloadResult = client.download(artifact);
-
-      // Generate metrics log
-      metricsLogger.info(ModelLoaderMsgs.DOWNLOAD_COMPLETE, null, override,
-          artifact.getArtifactName(), downloadResult.getDistributionActionResult().toString());
-
-      if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-        publishDownloadFailure(data, artifact, downloadResult.getDistributionMessageResult());
-        success = false;
-        break;
-      }
+    private ArtifactDeploymentManager artifactDeploymentManager;
+    private ArtifactDownloadManager artifactDownloadManager;
+    private IDistributionClient client;
+    private ModelLoaderConfig config;
 
-      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-               "Downloaded artifact: " + artifact.getArtifactName() + "  Payload:\n" + new String(downloadResult.getArtifactPayload()));
-      
-      publishDownloadSuccess(data, artifact, downloadResult);
-
-      if ((artifact.getArtifactType().compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)
-          || (artifact.getArtifactType().compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {
-        IModelParser parser = ModelParserFactory.createModelParser(downloadResult.getArtifactPayload(), downloadResult.getArtifactName());
-        List<Artifact> parsedArtifacts = parser.parse(downloadResult.getArtifactPayload(), downloadResult.getArtifactName());
-        if (parsedArtifacts != null && !parsedArtifacts.isEmpty()) {
-          modelArtifacts.addAll(parsedArtifacts);
-        } else {
-          success = false;
-          publishDeployFailure(data, artifact);
-          break;
-        }
-      } else if (artifact.getArtifactType()
-          .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {
-        catalogArtifacts
-            .add(new VnfCatalogArtifact(new String(downloadResult.getArtifactPayload())));
-      }
+    public EventCallback(IDistributionClient client, ModelLoaderConfig config) {
+        this.client = client;
+        this.config = config;
     }
 
-    String statusString = "SUCCESS";
-    if (success) {
-      ModelArtifactHandler modelHandler = new ModelArtifactHandler(config);
-      boolean modelDeploySuccess = modelHandler.pushArtifacts(modelArtifacts,
-          data.getDistributionID());
+    @Override
+    public void activateCallback(INotificationData data) {
+        MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", "");
+        logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received distribution " + data.getDistributionID());
 
-      VnfCatalogArtifactHandler catalogHandler = new VnfCatalogArtifactHandler(config);
-      boolean catalogDeploySuccess = catalogHandler.pushArtifacts(catalogArtifacts,
-          data.getDistributionID());
+        List<IArtifactInfo> artifacts = new ArtifactInfoExtractor().extract(data);
+        List<Artifact> catalogArtifacts = new ArrayList<>();
+        List<Artifact> modelArtifacts = new ArrayList<>();
 
-      for (IArtifactInfo artifact : artifacts) {
-        if ((artifact.getArtifactType()
-            .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)
-            || (artifact.getArtifactType()
-                .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {
-          if (modelDeploySuccess) {
-            publishDeploySuccess(data, artifact);
-          } else {
-            publishDeployFailure(data, artifact);
-            statusString = "FAILURE";
-          }
-        } else if (artifact.getArtifactType()
-            .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {
-          if (catalogDeploySuccess) {
-            publishDeploySuccess(data, artifact);
-          } else {
-            publishDeployFailure(data, artifact);
-            statusString = "FAILURE";
-          }
-        }
-      }
-    } else {
-      statusString = "FAILURE";
-    }
+        boolean success = getArtifactDownloadManager()
+                .downloadArtifacts(data, artifacts, modelArtifacts, catalogArtifacts);
 
-    auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Processed distribution " + data.getDistributionID() + "  (" + statusString + ")");
-    MDC.clear();
-  }
-
-  private List<IArtifactInfo> getArtifacts(INotificationData data) {
-    List<IArtifactInfo> artifacts = new ArrayList<IArtifactInfo>();
-    List<IResourceInstance> resources = data.getResources();
-
-    if (data.getServiceArtifacts() != null) {
-      artifacts.addAll(data.getServiceArtifacts());
-    }
-
-    if (resources != null) {
-      for (IResourceInstance resource : resources) {
-        if (resource.getArtifacts() != null) {
-          artifacts.addAll(resource.getArtifacts());
+        if (success) {
+            success = getArtifactDeploymentManager().deploy(data, artifacts, modelArtifacts, catalogArtifacts);
         }
-      }
-    }
-
-    return artifacts;
-  }
-
-  private void publishDownloadFailure(INotificationData data, IArtifactInfo artifact,
-      String errorMessage) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_ERROR));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download failure",
-        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());
-
-    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish download failure status: "
-              + sendDownloadStatus.getDistributionMessageResult());
-    }
-
-    logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-        "Failed to download artifact " + artifact.getArtifactName() + ": " + errorMessage);
-  }
-
-  private void publishDownloadSuccess(INotificationData data, IArtifactInfo artifact,
-      IDistributionClientDownloadResult downloadResult) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_OK));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download success",
-        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());
 
-    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish download success status: "
-              + sendDownloadStatus.getDistributionMessageResult());
+        String statusString = success ? "SUCCESS" : "FAILURE";
+        auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
+                "Processed distribution " + data.getDistributionID() + "  (" + statusString + ")");
+        MDC.clear();
     }
 
-    if (logger.isDebugEnabled()) {
-      StringBuilder sb = new StringBuilder();
-      sb.append("Downloaded artifact:\n");
-      sb.append("ArtInfo_Art_Name: " + artifact.getArtifactName());
-      sb.append("\nArtInfo_Art_description: " + artifact.getArtifactDescription());
-      sb.append("\nArtInfo_Art_CheckSum: " + artifact.getArtifactChecksum());
-      sb.append("\nArtInfo_Art_Url: " + artifact.getArtifactURL());
-      sb.append("\nArtInfo_Art_Type: " + artifact.getArtifactType());
-      sb.append("\nArtInfo_Serv_description: " + data.getServiceDescription());
-      sb.append("\nArtInfo_Serv_Name: " + data.getServiceName());
-      sb.append("\nGet_serviceVersion: " + data.getServiceVersion());
-      sb.append("\nGet_Service_UUID: " + data.getServiceUUID());
-      sb.append("\nArtInfo_DistributionId: " + data.getDistributionID());
-      logger.debug(sb.toString());
-    }
-  }
-
-  private void publishDeployFailure(INotificationData data, IArtifactInfo artifact) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendStatus = client.sendDeploymentStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_ERROR));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy failure",
-        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
+    private ArtifactDeploymentManager getArtifactDeploymentManager() {
+        if (artifactDeploymentManager == null) {
+            artifactDeploymentManager = new ArtifactDeploymentManager(client, config);
+        }
 
-    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish deploy failure status: " + sendStatus.getDistributionMessageResult());
+        return artifactDeploymentManager;
     }
-  }
-
-  private void publishDeploySuccess(INotificationData data, IArtifactInfo artifact) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
 
-    IDistributionClientResult sendStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_OK));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy success",
-        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
+    private ArtifactDownloadManager getArtifactDownloadManager() {
+        if (artifactDownloadManager == null) {
+            artifactDownloadManager = new ArtifactDownloadManager(client, config);
+        }
 
-    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish deploy success status: " + sendStatus.getDistributionMessageResult());
+        return artifactDownloadManager;
     }
-  }
-
-  private IDistributionStatusMessage buildStatusMessage(IDistributionClient client,
-      INotificationData data, IArtifactInfo artifact, DistributionStatusEnum status) {
-    IDistributionStatusMessage statusMessage = new DistributionStatusMsg(status,
-        data.getDistributionID(), client.getConfiguration().getConsumerID(),
-        artifact.getArtifactURL());
-
-    return statusMessage;
-  }
-
 }