final FileContentHandler licenseArtifacts = licenseArtifactsService
.createLicenseArtifacts(vspDetails.getId(), vspDetails.getVendorId(), vlmVersion, vspDetails.getFeatureGroups());
final ETSIService etsiService = new ETSIServiceImpl();
- if (etsiService.isSol004WithToscaMetaDirectory(toscaServiceModel.getArtifactFiles())) {
+ if (etsiService.hasEtsiSol261Metadata(toscaServiceModel.getArtifactFiles())) {
final FileContentHandler handler = toscaServiceModel.getArtifactFiles();
final Manifest manifest = etsiService.getManifest(handler);
final Optional<Map<String, Path>> fromToMovedPaths = etsiService.moveNonManoFileToArtifactFolder(handler);
*/
public Validator getValidator(final FileContentHandler fileContentHandler) throws IOException {
final ETSIService etsiService = new ETSIServiceImpl(null);
- if (!etsiService.isSol004WithToscaMetaDirectory(fileContentHandler)) {
- return new ONAPCsarValidator();
+ if (!etsiService.hasEtsiSol261Metadata(fileContentHandler)) {
+ return etsiService.isEtsiPackage(fileContentHandler) ? new EtsiSol004Version251Validator() : new ONAPCsarValidator();
}
if (!etsiService.getHighestCompatibleSpecificationVersion(fileContentHandler).isLowerThan(ETSI_VERSION_2_7_1)) {
if (etsiService.hasCnfEnhancements(fileContentHandler)) {
import org.openecomp.sdc.vendorsoftwareproduct.factory.CandidateServiceFactory;
import org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.OrchestrationUtil;
import org.openecomp.sdc.vendorsoftwareproduct.services.filedatastructuremodule.CandidateService;
+import org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi.ETSIService;
import org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi.ETSIServiceImpl;
import org.openecomp.sdc.vendorsoftwareproduct.types.OrchestrationTemplateActionResponse;
import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
private static final String EXT_SEPARATOR = ".";
private final CandidateService candidateService = CandidateServiceFactory.getInstance().createInterface();
private final ToscaTreeManager toscaTreeManager = new ToscaTreeManager();
+ private final ETSIService etsiService;
+
+ public OrchestrationTemplateProcessCsarHandler() {
+ etsiService = new ETSIServiceImpl();
+ }
@Override
public OrchestrationTemplateActionResponse process(VspDetails vspDetails, OrchestrationTemplateCandidateData candidateData) {
if (CollectionUtils.isNotEmpty(modelList)) {
return handleToscaModelConversion(modelList, fileContentHandler, candidateData);
}
- if (new ETSIServiceImpl().isSol004WithToscaMetaDirectory(fileContentHandler)) {
+ if (etsiService.isEtsiPackage(fileContentHandler)) {
return getToscaServiceModelSol004(fileContentHandler, candidateData);
}
return new ToscaConverterImpl().convert(fileContentHandler);
private ToscaServiceModel getToscaServiceModelSol004(final FileContentHandler fileContentHandler,
final OrchestrationTemplateCandidateData candidateData) throws IOException {
addOriginalOnboardedPackage(fileContentHandler, candidateData);
- final ResourceTypeEnum resourceType = new ETSIServiceImpl().getResourceType(fileContentHandler);
+ final ResourceTypeEnum resourceType = etsiService.getResourceType(fileContentHandler);
return instantiateToscaConverterFor(resourceType).convert(fileContentHandler);
}
@Test
void testGivenEmptyBlock0_thenONAPCsarValidatorIsReturned() throws IOException {
- handler.addFile(TOSCA_META_PATH_FILE_NAME, " ".getBytes(StandardCharsets.UTF_8));
+ handler.addFile(TOSCA_META_PATH_FILE_NAME, "onap_csar: true".getBytes(StandardCharsets.UTF_8));
handler.addFile(TOSCA_DEFINITION_FILEPATH, "".getBytes());
handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
handler.addFile(TOSCA_MANIFEST_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
@Test
void testGivenNonSOL004MetaDirectoryCompliantMetaFile_thenONAPCSARValidatorIsReturned() throws IOException {
metaFile = metaFile +
- ENTRY_DEFINITIONS.getName() + ATTRIBUTE_VALUE_SEPARATOR.getToken() + TOSCA_DEFINITION_FILEPATH;
+ ENTRY_DEFINITIONS.getName() + ATTRIBUTE_VALUE_SEPARATOR.getToken() + TOSCA_DEFINITION_FILEPATH + "\nonap_csar: true";
handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
assertEquals(ONAPCsarValidator.class, validatorFactory.getValidator(handler).getClass());
* @return true if all condition matched, false otherwise
* @throws IOException when TOSCA.meta file is invalid
*/
- boolean isSol004WithToscaMetaDirectory(FileContentHandler handler) throws IOException;
+ boolean hasEtsiSol261Metadata(FileContentHandler handler) throws IOException;
+
+ /**
+ * Checks if the package is a ETSI package.
+ *
+ * @param fileContentHandler the CSAR file handler
+ * @return {@code true} if the package is a ETSI package, {@code false} otherwise.
+ * @throws IOException when it was not able to parse the TOSCA.meta file
+ */
+ boolean isEtsiPackage(final FileContentHandler fileContentHandler) throws IOException;
/**
* Update file structure. Moves non mano files to the correct folder based on the manifest non mano type.
* @return true if manifest files has onap_cnf_helm non mano entry
*/
boolean hasCnfEnhancements(final FileContentHandler fileContentHandler) throws IOException;
+
}
import static org.openecomp.sdc.tosca.csar.CSARConstants.MANIFEST_PNF_METADATA;
import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ORIG_PATH_FILE_NAME;
import static org.openecomp.sdc.tosca.csar.ManifestTokenType.COMPATIBLE_SPECIFICATION_VERSIONS;
+import static org.openecomp.sdc.tosca.csar.ToscaMetaEntryVersion251.ENTRY_MANIFEST;
import static org.openecomp.sdc.tosca.csar.ToscaMetaEntryVersion261.ENTRY_DEFINITIONS;
import static org.openecomp.sdc.tosca.csar.ToscaMetaEntryVersion261.ETSI_ENTRY_CHANGE_LOG;
import static org.openecomp.sdc.tosca.csar.ToscaMetaEntryVersion261.ETSI_ENTRY_MANIFEST;
import org.openecomp.sdc.be.config.NonManoConfigurationManager;
import org.openecomp.sdc.be.config.NonManoFolderType;
import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
+import org.openecomp.sdc.common.CommonConfigurationManager;
import org.openecomp.sdc.logging.api.Logger;
import org.openecomp.sdc.logging.api.LoggerFactory;
import org.openecomp.sdc.tosca.csar.Manifest;
private static final Logger LOGGER = LoggerFactory.getLogger(ETSIServiceImpl.class);
private final NonManoConfiguration nonManoConfiguration;
+ private final String ONAP_CSAR = "onap_csar";
public ETSIServiceImpl() {
nonManoConfiguration = NonManoConfigurationManager.getInstance().getNonManoConfiguration();
}
@Override
- public boolean isSol004WithToscaMetaDirectory(FileContentHandler handler) throws IOException {
+ public boolean hasEtsiSol261Metadata(FileContentHandler handler) throws IOException {
final Map<String, byte[]> templates = handler.getFiles();
return isMetaFilePresent(templates) && hasMetaMandatoryEntries(getMetadata(handler));
}
+ @Override
+ public boolean isEtsiPackage(final FileContentHandler fileContentHandler) throws IOException {
+ return hasEtsiSol261Metadata(fileContentHandler) || !hasOnapCsarMetadata(fileContentHandler)
+ && !ONAP_CSAR.equalsIgnoreCase(getDefaultCsarFormat());
+ }
+
+ private boolean hasOnapCsarMetadata(final FileContentHandler fileContentHandler) throws IOException {
+ if (fileContentHandler.containsFile(TOSCA_META_PATH_FILE_NAME)){
+ final ToscaMetadata metadata =
+ OnboardingToscaMetadata.parseToscaMetadataFile(fileContentHandler.getFileContentAsStream(TOSCA_META_PATH_FILE_NAME));
+ return metadata.hasEntry(ONAP_CSAR);
+ }
+ return false;
+ }
+
+ private String getDefaultCsarFormat() {
+ return CommonConfigurationManager.getInstance().getConfigValue("csarFormat", "default", ONAP_CSAR);
+ }
+
@Override
public Optional<Map<String, Path>> moveNonManoFileToArtifactFolder(final FileContentHandler handler) throws IOException {
final Manifest manifest = loadManifest(handler);
public ResourceTypeEnum getResourceType(FileContentHandler handler) throws IOException {
ToscaMetadata metadata = getMetadata(handler);
- Manifest manifest = getManifest(handler, metadata.getMetaEntries().get(ETSI_ENTRY_MANIFEST.getName()));
+ Manifest manifest = getManifest(handler, getEntryManifestLocation(metadata));
return getResourceType(manifest);
}
public Manifest getManifest(FileContentHandler handler) throws IOException {
ToscaMetadata metadata = getMetadata(handler);
- return getManifest(handler, metadata.getMetaEntries().get(ETSI_ENTRY_MANIFEST.getName()));
+ return getManifest(handler, getEntryManifestLocation(metadata));
+ }
+
+ private String getEntryManifestLocation(final ToscaMetadata metadata) {
+ return metadata.getMetaEntries().containsKey(ETSI_ENTRY_MANIFEST.getName()) ?
+ metadata.getMetaEntries().get(ETSI_ENTRY_MANIFEST.getName()):
+ metadata.getMetaEntries().get(ENTRY_MANIFEST.getName());
}
private Manifest getManifest(FileContentHandler handler, String manifestLocation) throws IOException {
public Path getOriginalManifestPath(final FileContentHandler handler) throws IOException {
final ToscaMetadata metadata = getOriginalMetadata(handler);
- final String originalMetadataPath = metadata.getMetaEntries().get(ETSI_ENTRY_MANIFEST.getName());
+ final String originalMetadataPath = getEntryManifestLocation(metadata);
final Path path = Paths.get(originalMetadataPath);
return path.getParent() == null ? Paths.get("") : path.getParent();
}
public NonManoConfiguration getConfiguration() {
return nonManoConfiguration;
}
+
}
FileContentHandler fileContentHandler = new FileContentHandler();
fileContentHandler
.addFile("TOSCA-Metadata/TOSCA.meta.original", sol004MetaFile.getBytes(StandardCharsets.UTF_8));
- assertTrue(etsiService.isSol004WithToscaMetaDirectory(fileContentHandler));
+ assertTrue(etsiService.hasEtsiSol261Metadata(fileContentHandler));
}
@Test
public void testIsSol004True() throws IOException {
FileContentHandler fileContentHandler = new FileContentHandler();
fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta", sol004MetaFile.getBytes(StandardCharsets.UTF_8));
- assertTrue(etsiService.isSol004WithToscaMetaDirectory(fileContentHandler));
+ assertTrue(etsiService.hasEtsiSol261Metadata(fileContentHandler));
}
@Test
public void testIsSol004False() throws IOException {
FileContentHandler fileContentHandler = new FileContentHandler();
fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta.original", metaFile.getBytes(StandardCharsets.UTF_8));
- assertFalse(etsiService.isSol004WithToscaMetaDirectory(fileContentHandler));
+ assertFalse(etsiService.hasEtsiSol261Metadata(fileContentHandler));
}
@Test
public void testIsSol004FalseWithNull() throws IOException {
FileContentHandler fileContentHandler = new FileContentHandler();
- assertFalse(etsiService.isSol004WithToscaMetaDirectory(fileContentHandler));
+ assertFalse(etsiService.hasEtsiSol261Metadata(fileContentHandler));
}
@Test