From 87fc08f6bb131248dbb861d178dd8faddb7412ba Mon Sep 17 00:00:00 2001 From: Francis Toth Date: Wed, 29 Apr 2020 11:41:08 -0400 Subject: Refactor CsarUtil::addComponentToCache Signed-off-by: Francis Toth Change-Id: Ib78be78780a97c873e710d805dd26273159d5354 Issue-ID: SDC-2812 --- .../java/org/openecomp/sdc/be/tosca/CsarUtils.java | 57 +++++++++++++++------- 1 file changed, 40 insertions(+), 17 deletions(-) (limited to 'catalog-be/src/main') 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 80441103cf..29c0c13c8e 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 @@ -57,10 +57,10 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutableTriple; import org.apache.commons.lang3.tuple.Triple; import org.onap.sdc.tosca.services.YamlUtil; -import org.openecomp.sdc.be.config.ArtifactConfigManager; import org.openecomp.sdc.be.components.impl.ImportUtils; import org.openecomp.sdc.be.components.impl.ImportUtils.Constants; import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException; +import org.openecomp.sdc.be.config.ArtifactConfigManager; import org.openecomp.sdc.be.config.ArtifactConfiguration; import org.openecomp.sdc.be.config.ComponentType; import org.openecomp.sdc.be.config.ConfigurationManager; @@ -85,7 +85,6 @@ import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter; import org.openecomp.sdc.be.plugins.CsarEntryGenerator; import org.openecomp.sdc.be.resources.data.DAOArtifactData; -import org.openecomp.sdc.be.resources.data.SdcSchemaFilesData; import org.openecomp.sdc.be.tosca.model.ToscaTemplate; import org.openecomp.sdc.be.tosca.utils.OperationArtifactUtil; import org.openecomp.sdc.be.utils.CommonBeUtils; @@ -435,21 +434,26 @@ public class CsarUtils { } } - private Either getZipOutputStreamResponseFormatEither(ZipOutputStream zip, List> dependencies, Map> innerComponentsCache) throws IOException { - String fileName; + private Either getZipOutputStreamResponseFormatEither( + ZipOutputStream zip, + List> dependencies, + Map> innerComponentsCache + ) throws IOException { if (dependencies != null && !dependencies.isEmpty()) { for (Triple d : dependencies) { String cassandraId = d.getMiddle(); Component childComponent = d.getRight(); - Either entryData = getEntryData(cassandraId, childComponent); + + Either entryData = getEntryData(cassandraId, childComponent) + .right().map(x -> componentsUtils.getResponseFormat(x)); if (entryData.isRight()) { - ResponseFormat responseFormat = componentsUtils.getResponseFormat(entryData.right().value()); - return Either.right(responseFormat); + return Either.right(entryData.right().value()); } //fill innerComponentsCache - fileName = d.getLeft(); + String fileName = d.getLeft(); + // TODO: Extract the cache related functions to their own class addComponentToCache(innerComponentsCache, cassandraId, fileName, childComponent); addInnerComponentsToCache(innerComponentsCache, childComponent); } @@ -581,18 +585,37 @@ public class CsarUtils { private void addComponentToCache(Map> componentCache, String id, String fileName, Component component) { - ImmutableTriple cachedComponent = componentCache.get(component.getInvariantUUID()); - if (cachedComponent == null || CommonBeUtils.compareAsdcComponentVersions(component.getVersion(), cachedComponent.getRight().getVersion())) { - componentCache.put(component.getInvariantUUID(), - new ImmutableTriple<>(id, fileName, component)); + String uuid = component.getInvariantUUID(); + String version = component.getVersion(); - if(cachedComponent != null) { - //overwriting component with newer version - log.warn("Overwriting component invariantID {} of version {} with a newer version {}", id, cachedComponent.getRight().getVersion(), component.getVersion()); - } + Supplier> sup = + () -> new ImmutableTriple<>(id, fileName, component); + + componentCache.put(uuid, updateWith(componentCache, uuid, + cc -> overwriteIfSameVersions(id, version, cc, sup), + sup + )); + } + + private static V updateWith(Map kvs, K k, Function f, Supplier orElse) { + return Optional.ofNullable(kvs.get(k)).map(f).orElseGet(orElse); + } + + private ImmutableTriple overwriteIfSameVersions( + String id, String version, + ImmutableTriple cc, + Supplier> newValue + ) { + if (CommonBeUtils.compareAsdcComponentVersions(version, cc.getRight().getVersion())) { + log.warn("Overwriting component invariantID {} of version {} with a newer version {}", id, + cc.getRight().getVersion(), + version); + return newValue.get(); } + return cc; } - private Either writeComponentInterface(Component component, ZipOutputStream zip, + + private Either writeComponentInterface(Component component, ZipOutputStream zip, String fileName, boolean isAssociatedComponent) { try { Either componentInterface = toscaExportUtils -- cgit 1.2.3-korg