X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Faai%2Fmodelloader%2Fservice%2FModelController.java;h=09219828cfd9be5e2897cd85e722e0a204f7643b;hb=refs%2Fheads%2Fmaster;hp=0ca2c0299e5b66673d8c973d2b57f16807510e4d;hpb=ea65a8ab0b5f2f75d56ddddf8f2b436fa4666785;p=aai%2Fmodel-loader.git diff --git a/src/main/java/org/onap/aai/modelloader/service/ModelController.java b/src/main/java/org/onap/aai/modelloader/service/ModelController.java index 0ca2c02..233f2ab 100644 --- a/src/main/java/org/onap/aai/modelloader/service/ModelController.java +++ b/src/main/java/org/onap/aai/modelloader/service/ModelController.java @@ -23,27 +23,24 @@ package org.onap.aai.modelloader.service; import java.io.IOException; import java.util.ArrayList; import java.util.Base64; -import java.util.Date; import java.util.List; -import java.util.Timer; -import java.util.TimerTask; - -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.onap.aai.cl.api.Logger; import org.onap.aai.cl.eelf.LoggerFactory; import org.onap.aai.modelloader.config.ModelLoaderConfig; import org.onap.aai.modelloader.entity.Artifact; +import org.onap.aai.modelloader.entity.ArtifactType; import org.onap.aai.modelloader.notification.ArtifactDownloadManager; -import org.onap.aai.modelloader.notification.EventCallback; import org.onap.aai.modelloader.notification.NotificationDataImpl; import org.onap.aai.modelloader.notification.NotificationPublisher; import org.onap.sdc.api.IDistributionClient; import org.onap.sdc.api.notification.IArtifactInfo; -import org.onap.sdc.api.results.IDistributionClientResult; -import org.onap.sdc.utils.DistributionActionResultEnum; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -53,110 +50,53 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequestMapping("/services/model-loader/v1/model-service") -public class ModelController implements ModelLoaderInterface { +public class ModelController { - private static final Logger logger = LoggerFactory.getInstance().getLogger(ModelController.class.getName()); + private static final Logger logger = LoggerFactory.getInstance().getLogger(ModelController.class); private final IDistributionClient client; private final ModelLoaderConfig config; - private final EventCallback eventCallback; - private final BabelServiceClientFactory babelClientFactory; + private final ArtifactDeploymentManager artifactDeploymentManager; + private final ArtifactDownloadManager artifactDownloadManager; - public ModelController(IDistributionClient client, ModelLoaderConfig config, EventCallback eventCallback, - BabelServiceClientFactory babelClientFactory) { + public ModelController(IDistributionClient client, ModelLoaderConfig config, ArtifactDeploymentManager artifactDeploymentManager, ArtifactDownloadManager artifactDownloadManager) { this.client = client; this.config = config; - this.eventCallback = eventCallback; - this.babelClientFactory = babelClientFactory; + this.artifactDeploymentManager = artifactDeploymentManager; + this.artifactDownloadManager = artifactDownloadManager; } - /** - * Responsible for stopping the connection to the distribution client before the resource is destroyed. - */ - public void preShutdownOperations() { - logger.info(ModelLoaderMsgs.STOPPING_CLIENT); - if (client != null) { - client.stop(); - } + @GetMapping(value = "/loadModel/{modelid}", produces = "application/json") + public ResponseEntity loadModel(@PathVariable String modelid) { + return ResponseEntity.ok("{\"model_loaded\":\"" + modelid + "\"}"); } - /** - * Responsible for loading configuration files, initializing model distribution clients, and starting them. - */ - protected void initSdcClient() { - // Initialize distribution client - logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client..."); - IDistributionClientResult initResult = client.init(config, eventCallback); - - if (initResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) { - // Start distribution client - logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client..."); - IDistributionClientResult startResult = client.start(); - if (startResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) { - logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established"); - } else { - String errorMsg = "Failed to start distribution client: " + startResult.getDistributionMessageResult(); - logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); - - // Kick off a timer to retry the SDC connection - Timer timer = new Timer(); - TimerTask task = new SdcConnectionJob(client, config, eventCallback, timer); - timer.schedule(task, new Date(), 60000); - } - } else { - String errorMsg = "Failed to initialize distribution client: " + initResult.getDistributionMessageResult(); - logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); - - // Kick off a timer to retry the SDC connection - Timer timer = new Timer(); - TimerTask task = new SdcConnectionJob(client, config, eventCallback, timer); - timer.schedule(task, new Date(), 60000); - } - - Runtime.getRuntime().addShutdownHook(new Thread(this::preShutdownOperations)); - } - - /** - * (non-Javadoc) - * - * @see org.onap.aai.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String) - */ - @Override - public Response loadModel(@PathVariable String modelid) { - return Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build(); + @PutMapping(value = "/saveModel/{modelid}/{modelname}", produces = "application/json") + public ResponseEntity saveModel(@PathVariable String modelid, @PathVariable String modelname) { + return ResponseEntity.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}"); } - /** - * (non-Javadoc) - * - * @see org.onap.aai.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String) - */ - @Override - public Response saveModel(@PathVariable String modelid, @PathVariable String modelname) { - return Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}").build(); - } - - @Override - public Response ingestModel(@PathVariable String modelName, @PathVariable String modelVersion, + @PostMapping(value = "/ingestModel/{modelName}/{modelVersion}", produces = "application/json") + public ResponseEntity ingestModel(@PathVariable String modelName, @PathVariable String modelVersion, @RequestBody String payload) throws IOException { - Response response; + ResponseEntity response; if (config.getIngestSimulatorEnabled()) { response = processTestArtifact(modelName, modelVersion, payload); } else { logger.debug("Simulation interface disabled"); - response = Response.serverError().build(); + response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } return response; } - private Response processTestArtifact(String modelName, String modelVersion, String payload) { + private ResponseEntity processTestArtifact(String modelName, String modelVersion, String payload) { IArtifactInfo artifactInfo = new ArtifactInfoImpl(); ((ArtifactInfoImpl) artifactInfo).setArtifactName(modelName); ((ArtifactInfoImpl) artifactInfo).setArtifactVersion(modelVersion); - Response response; + ResponseEntity response; try { logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact " + modelName + " " + modelVersion); @@ -164,11 +104,16 @@ public class ModelController implements ModelLoaderInterface { logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Generating XML models from test artifact"); + List artifacts = artifactDownloadManager.processToscaArtifacts(csarFile, artifactInfo, "test-transaction-id", modelVersion); List modelArtifacts = new ArrayList<>(); List catalogArtifacts = new ArrayList<>(); - - new ArtifactDownloadManager(client, config, babelClientFactory).processToscaArtifacts(modelArtifacts, - catalogArtifacts, csarFile, artifactInfo, "test-transaction-id", modelVersion); + for(Artifact artifact : artifacts) { + if(artifact.getType().equals(ArtifactType.MODEL)) { + modelArtifacts.add(artifact); + } else { + catalogArtifacts.add(artifact); + } + } logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Loading xml models from test artifacts: " + modelArtifacts.size() + " model(s) and " + catalogArtifacts.size() + " catalog(s)"); @@ -176,9 +121,9 @@ public class ModelController implements ModelLoaderInterface { NotificationDataImpl notificationData = new NotificationDataImpl(); notificationData.setDistributionID("TestDistributionID"); boolean success = - new ArtifactDeploymentManager(config).deploy(notificationData, modelArtifacts, catalogArtifacts); + artifactDeploymentManager.deploy(notificationData.getDistributionID(), modelArtifacts, catalogArtifacts); logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Deployment success was " + success); - response = success ? Response.ok().build() : Response.serverError().build(); + response = success ? ResponseEntity.ok().build() : ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } catch (Exception e) { String responseMessage = e.getMessage(); logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Exception handled: " + responseMessage); @@ -188,7 +133,7 @@ public class ModelController implements ModelLoaderInterface { } else { responseMessage += "\nSDC publishing is enabled but has been bypassed"; } - response = Response.serverError().entity(responseMessage).type(MediaType.APPLICATION_XML).build(); + response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseMessage); } return response; }