aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancis Toth <francis.toth@yoppworks.com>2020-05-05 12:44:59 -0400
committerOfir Sonsino <ofir.sonsino@intl.att.com>2020-05-18 10:58:06 +0000
commit0ff3fcba8b7d645e497a7300776bde86590ec70c (patch)
tree3a8fbde6f7aa063d76bdc47c63e2f2a728a507a0
parentcbf02a29680b79b0cdc19b2002e642de949dffca (diff)
Refactor tosca representation retrieval in CsarUtils::populateZip
This commit aims to simplify CsarUtils::populateZip by extracting how a tosca representation is fetched to another function. this enables to reduce the overall cyclomatic complexity of the function. Some additional work still needs to be done especially regarding the ToscaRepresentation and MainYamlWithDependencies classes (These happen to be really similar). This will be done in another change in the near future. Signed-off-by: Francis Toth <francis.toth@yoppworks.com> Change-Id: I93600d0752565de523cf2285b1fa2ba43a96334f Issue-ID: SDC-2812
-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()));
+ }
}
/**