summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java86
1 files changed, 56 insertions, 30 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java
index cba6b4f308..8a8fff797f 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java
@@ -241,47 +241,30 @@ public class CsarUtils {
.getToscaArtifacts()
.get(ToscaExportHandler.ASSET_TOSCA_TEMPLATE);
- LifecycleStateEnum lifecycleState = component.getLifecycleState();
- // Assigning to null is a bad practice but in order to keep the refactoring small enough we keep this for now.
- Either<MainYamlWithDependencies, ResponseFormat> result = null;
- if (getFromCS || !(lifecycleState == LifecycleStateEnum.NOT_CERTIFIED_CHECKIN || lifecycleState == LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT)) {
- result = getArtifactFromCassandra(artifactDef);
- } else {
- result = exportComponent(component);
- }
+ Either<MainYamlWithDependencies, ResponseFormat> toscaRepresentation =
+ fetchToscaRepresentation(component, getFromCS, artifactDef);
+ // This should not be done but in order to keep the refactoring small enough we stop here.
// TODO: Refactor the rest of this function
byte[] mainYaml;
- List<Triple<String, String, Component>> dependencies = null;
- // This should not be done but in order to keep the refactoring small enough we stop here.
- if(result.isLeft()) {
- mainYaml = result.left().value().mainYaml;
- dependencies = result.left().value().dependencies.orElse(null);
+ List<Triple<String, String, Component>> dependencies;
+ if(toscaRepresentation.isLeft()) {
+ mainYaml = toscaRepresentation.left().value().mainYaml;
+ dependencies = toscaRepresentation.left().value().dependencies.orElse(null);
} else {
- return Either.right(result.right().value());
+ return Either.right(toscaRepresentation.right().value());
}
String fileName = artifactDef.getArtifactName();
zip.putNextEntry(new ZipEntry(DEFINITIONS_PATH + fileName));
zip.write(mainYaml);
+
//US798487 - Abstraction of complex types
if (!ModelConverter.isAtomicComponent(component)){
log.debug("Component {} is complex - generating abstract type for it..", component.getName());
writeComponentInterface(component, zip, fileName, false);
}
- if (dependencies == null) {
- Either<ToscaTemplate, ToscaError> dependenciesRes = toscaExportUtils.getDependencies(component);
- if (dependenciesRes.isRight()) {
- log.debug("Failed to retrieve dependencies for component {}, error {}", component.getUniqueId(),
- dependenciesRes.right().value());
- ActionStatus convertFromToscaError = componentsUtils.convertFromToscaError(dependenciesRes.right().value());
- ResponseFormat responseFormat = componentsUtils.getResponseFormat(convertFromToscaError);
- return Either.right(responseFormat);
- }
- dependencies = dependenciesRes.left().value().getDependencies();
- }
-
//UID <cassandraId,filename,component>
Map<String, ImmutableTriple<String,String, Component>> innerComponentsCache = new HashMap<>();
@@ -322,20 +305,59 @@ public class CsarUtils {
return writeAllFilesToCsar(component, collectedComponentCsarDefinition.left().value(), zip, isInCertificationRequest);
}
- private Either<MainYamlWithDependencies, ResponseFormat> exportComponent(Component component) {
+ private Either<MainYamlWithDependencies, ResponseFormat> fetchToscaRepresentation(
+ Component component,
+ boolean getFromCS,
+ ArtifactDefinition artifactDef
+ ) {
+ LifecycleStateEnum lifecycleState = component.getLifecycleState();
+
+ boolean shouldBeFetchedFromCassandra = getFromCS ||
+ !(lifecycleState == LifecycleStateEnum.NOT_CERTIFIED_CHECKIN ||
+ lifecycleState == LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
+
+ Either<MainYamlWithDependencies, ResponseFormat> toscaRepresentation =
+ shouldBeFetchedFromCassandra ?
+ fetchToscaRepresentation(artifactDef) :
+ generateToscaRepresentation(component);
+
+ return toscaRepresentation.left().bind(iff(
+ myd -> !myd.dependencies.isPresent(),
+ myd -> fetchToscaTemplateDependencies(myd.mainYaml, component)
+ ));
+ }
+
+ private static <L, R> F<L, Either<L, R>> iff(Predicate<L> p, Function<L, Either<L, R>> ifTrue) {
+ return l -> p.test(l) ? ifTrue.apply(l) : Either.left(l);
+ }
+
+ private Either<MainYamlWithDependencies, ResponseFormat> fetchToscaTemplateDependencies(
+ byte[] mainYml,
+ Component component
+ ) {
+ return toscaExportUtils.getDependencies(component).right().map(toscaError -> {
+ log.debug("Failed to retrieve dependencies for component {}, error {}",
+ component.getUniqueId(), toscaError);
+ return componentsUtils.getResponseFormat(componentsUtils.convertFromToscaError(toscaError));
+ }).left().map(tt -> MainYamlWithDependencies.make(mainYml, tt));
+ }
+
+ private Either<MainYamlWithDependencies, ResponseFormat> generateToscaRepresentation(Component component) {
return toscaExportUtils.exportComponent(component).right().map(toscaError -> {
log.debug("exportComponent failed", toscaError);
return componentsUtils.getResponseFormat(componentsUtils.convertFromToscaError(toscaError));
}).left().map(MainYamlWithDependencies::make);
}
- private Either<MainYamlWithDependencies, ResponseFormat> getArtifactFromCassandra(ArtifactDefinition artifactDef) {
+ private Either<MainYamlWithDependencies, ResponseFormat> fetchToscaRepresentation(ArtifactDefinition artifactDef) {
return getFromCassandra(artifactDef.getEsId()).right().map(as -> {
log.debug(ARTIFACT_NAME_UNIQUE_ID, artifactDef.getArtifactName(), artifactDef.getUniqueId());
return componentsUtils.getResponseFormat(as);
}).left().map(MainYamlWithDependencies::make);
}
+ // TODO: Refactor the ToscaRepresentation class in order to remove the following one
+ // This will be done in a separate change
private static class MainYamlWithDependencies {
private final byte[] mainYaml;
@@ -347,13 +369,17 @@ public class CsarUtils {
this.dependencies = dependencies;
}
- static public MainYamlWithDependencies make(byte[] mainYaml) {
+ public static MainYamlWithDependencies make(byte[] mainYaml) {
return new MainYamlWithDependencies(mainYaml, Optional.empty());
}
- static public MainYamlWithDependencies make(ToscaRepresentation tr) {
+ public static MainYamlWithDependencies make(ToscaRepresentation tr) {
return new MainYamlWithDependencies(tr.getMainYaml().getBytes(), Optional.ofNullable(tr.getDependencies()));
}
+
+ public static MainYamlWithDependencies make(byte[] mainYaml, ToscaTemplate tt) {
+ return new MainYamlWithDependencies(mainYaml, Optional.ofNullable(tt.getDependencies()));
+ }
}
/**