+ boolean containsValidArtifactDefinition(MultipartFile multipartFile) {
+ String asdLocation = getAsdDefinitionLocation(multipartFile);
+ if (asdLocation != null && !asdLocation.isEmpty() && isFileExistsInCsar(multipartFile, asdLocation)) {
+ try {
+ String asdContent = getFileFromCsar(multipartFile, asdLocation).toString();
+ String asdJsonContent = new Gson().toJsonTree(new Yaml().load(asdContent)).toString();
+ JsonNode jsonNode = objectMapper.readTree(asdJsonContent);
+ List<String> artifactFileList =
+ jsonNode.at("/topology_template/node_templates/applicationServiceDescriptor/artifacts")
+ .findValuesAsText("file");
+ return artifactFileList.stream()
+ .allMatch(artifactFile -> isFileExistsInCsar(multipartFile, artifactFile));
+ } catch (RappHandlerException e) {
+ throw e;
+ } catch (Exception e) {
+ logger.warn("Unable to validate artifact definition", e);
+ throw new RappHandlerException(HttpStatus.BAD_REQUEST, "ASD definition in rApp package is invalid.");
+ }
+ }
+ throw new RappHandlerException(HttpStatus.BAD_REQUEST, "ASD definition in rApp package is invalid.");
+ }
+
+ String getAsdDefinitionLocation(final MultipartFile multipartFile) {
+ String asdLocation = "";
+ final ByteArrayOutputStream fileContent = getFileFromCsar(multipartFile, TOSCA_METADATA_LOCATION);
+ if (fileContent != null) {
+ final String toscaMetadata = fileContent.toString();
+ if (!toscaMetadata.isEmpty()) {
+ final String entry =
+ filter(on("\n").split(toscaMetadata), line -> line.contains(ENTRY_DEFINITIONS_INDEX)).iterator()
+ .next();
+ asdLocation = entry.replace(ENTRY_DEFINITIONS_INDEX + ":", "").trim();
+ }
+ }
+ return asdLocation;
+ }
+