aboutsummaryrefslogtreecommitdiffstats
path: root/plans/so/integration-etsi-testing/so-simulators/sdc-simulator/src/main/java/org/onap/so/sdcsimulator/providers/ResourceProviderImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'plans/so/integration-etsi-testing/so-simulators/sdc-simulator/src/main/java/org/onap/so/sdcsimulator/providers/ResourceProviderImpl.java')
-rw-r--r--plans/so/integration-etsi-testing/so-simulators/sdc-simulator/src/main/java/org/onap/so/sdcsimulator/providers/ResourceProviderImpl.java91
1 files changed, 85 insertions, 6 deletions
diff --git a/plans/so/integration-etsi-testing/so-simulators/sdc-simulator/src/main/java/org/onap/so/sdcsimulator/providers/ResourceProviderImpl.java b/plans/so/integration-etsi-testing/so-simulators/sdc-simulator/src/main/java/org/onap/so/sdcsimulator/providers/ResourceProviderImpl.java
index 192ac896..b014d8f6 100644
--- a/plans/so/integration-etsi-testing/so-simulators/sdc-simulator/src/main/java/org/onap/so/sdcsimulator/providers/ResourceProviderImpl.java
+++ b/plans/so/integration-etsi-testing/so-simulators/sdc-simulator/src/main/java/org/onap/so/sdcsimulator/providers/ResourceProviderImpl.java
@@ -20,17 +20,29 @@
package org.onap.so.sdcsimulator.providers;
+import static org.onap.so.sdcsimulator.utils.Constants.CATALOG_URL;
+import static org.onap.so.sdcsimulator.utils.Constants.DOT_CSAR;
+import static org.onap.so.sdcsimulator.utils.Constants.MAIN_RESOURCE_FOLDER;
+import static org.onap.so.sdcsimulator.utils.Constants.WILD_CARD_REGEX;
+import static org.springframework.core.io.support.ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.HashSet;
import java.util.Optional;
+import java.util.Set;
+import org.onap.so.sdcsimulator.models.ResourceArtifact;
import org.onap.so.sdcsimulator.utils.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.stereotype.Service;
import org.springframework.util.StreamUtils;
@@ -44,8 +56,13 @@ public class ResourceProviderImpl implements ResourceProvider {
private final String resourceLocation;
- public ResourceProviderImpl(@Value("${sdc.resource.location:/app/csars/}") final String resourceLocation) {
+ private final ResourcePatternResolver resourcePatternResolver;
+
+ @Autowired
+ public ResourceProviderImpl(@Value("${sdc.resource.location:/app/csars/}") final String resourceLocation,
+ final ResourcePatternResolver resourcePatternResolver) {
this.resourceLocation = resourceLocation;
+ this.resourcePatternResolver = resourcePatternResolver;
}
@Override
@@ -63,15 +80,73 @@ public class ResourceProviderImpl implements ResourceProvider {
}
@Override
- public Optional<InputStream> getInputStream(final String csarId) throws IOException {
- final Path filePath = Paths.get(resourceLocation, csarId + ".csar");
+ public Set<ResourceArtifact> getResource() {
+ final Set<ResourceArtifact> result = new HashSet<>();
+ final Path dir = Paths.get(resourceLocation);
+ if (Files.exists(dir)) {
+ try (final DirectoryStream<Path> stream = Files.newDirectoryStream(dir, WILD_CARD_REGEX + DOT_CSAR)) {
+ for (final Path entry : stream) {
+ final String filename = getFilenameWithoutExtension(entry);
+ final ResourceArtifact artifact = getResourceArtifact(filename);
+ result.add(artifact);
+ LOGGER.info("Found resource on file system: {}", artifact);
+ }
+ } catch (final IOException ioException) {
+ LOGGER.error("Unable to find resources on filesystem", ioException);
+ }
+ }
+ try {
+ final String csarFileLocationPattern =
+ CLASSPATH_ALL_URL_PREFIX + MAIN_RESOURCE_FOLDER + WILD_CARD_REGEX + DOT_CSAR;
+ final Resource[] resources = resourcePatternResolver.getResources(csarFileLocationPattern);
+ if (resources != null) {
+ for (final Resource resource : resources) {
+ final ResourceArtifact artifact =
+ getResourceArtifact(getFilenameWithoutExtension(resource.getFilename()));
+ result.add(artifact);
+ LOGGER.info("Found resource in classpath: {}", artifact);
+ }
+ }
+ } catch (final IOException ioException) {
+ LOGGER.error("Unable to find resources in classpath", ioException);
+ }
+ return result;
+ }
+
+ private ResourceArtifact getResourceArtifact(final String filename) {
+ return new ResourceArtifact().uuid(filename).invariantUuid(filename).name(filename).version("1.0")
+ .toscaModelUrl(CATALOG_URL + "/resources/" + filename + "/toscaModel").category("Generic")
+ .subCategory("Network Service").resourceType("VF").lifecycleState("CERTIFIED")
+ .lastUpdaterUserId("SDC_SIMULATOR");
+ }
+
+ private String getFilenameWithoutExtension(final String filename) {
+ return filename.substring(0, filename.lastIndexOf('.'));
+ }
+
+ private String getFilenameWithoutExtension(final Path file) {
+ return getFilenameWithoutExtension(file.getFileName().toString());
+ }
+
+ private Optional<InputStream> getInputStream(final String csarId) throws IOException {
+ final Path filePath = Paths.get(resourceLocation, csarId + DOT_CSAR);
if (Files.exists(filePath)) {
+ LOGGER.info("Found resource in on file system using path: {}", filePath);
return Optional.of(Files.newInputStream(filePath));
}
- LOGGER.info("Couldn't find file on file system '{}', will return default csar", filePath);
- final ClassPathResource classPathResource = new ClassPathResource(getDefaultCsarPath(), this.getClass());
+ LOGGER.warn("Couldn't find file on file system '{}', will search it in classpath", filePath);
+ final String path = MAIN_RESOURCE_FOLDER + csarId + DOT_CSAR;
+ ClassPathResource classPathResource = getClassPathResource(path);
+ if (classPathResource.exists()) {
+ LOGGER.info("Found resource in classpath using path: {}", path);
+ return Optional.of(classPathResource.getInputStream());
+ }
+
+ LOGGER.warn("Couldn't find file on file system '{}', will return default csar", filePath);
+ classPathResource = getClassPathResource(getDefaultCsarPath());
if (classPathResource.exists()) {
+ LOGGER.info("Found default csar in classpath");
return Optional.of(classPathResource.getInputStream());
}
@@ -79,10 +154,14 @@ public class ResourceProviderImpl implements ResourceProvider {
return Optional.empty();
}
+ private ClassPathResource getClassPathResource(final String path) {
+ return new ClassPathResource(path, this.getClass());
+ }
+
/*
* Used in test
*/
String getDefaultCsarPath() {
return Constants.DEFAULT_CSAR_PATH;
}
-} \ No newline at end of file
+}