diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ComponentCache.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ComponentCache.java | 101 |
1 files changed, 48 insertions, 53 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ComponentCache.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ComponentCache.java index 7871176dab..57ebcf6822 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ComponentCache.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ComponentCache.java @@ -17,7 +17,6 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - package org.openecomp.sdc.be.tosca; import static org.openecomp.sdc.be.utils.CommonBeUtils.compareAsdcComponentVersions; @@ -35,11 +34,11 @@ import org.openecomp.sdc.be.model.Component; * Provides caching abilities for components */ public final class ComponentCache { - // TODO: Make this final whenever possible. The current code using the class + + private final BinaryOperator<CacheEntry> merge; // does not allow this. private Map<String, CacheEntry> entries = HashMap.empty(); - private final BinaryOperator<CacheEntry> merge; private ComponentCache(BinaryOperator<CacheEntry> merge) { this.merge = merge; @@ -47,6 +46,7 @@ public final class ComponentCache { /** * Creates an overwritable cache based on a merging strategy + * * @param merge The strategy used to merge two values which keys are the same */ public static ComponentCache overwritable(BinaryOperator<CacheEntry> merge) { @@ -55,8 +55,9 @@ public final class ComponentCache { /** * Creates a cached entry - * @param id The id of the entry - * @param fileName the filename of the entry + * + * @param id The id of the entry + * @param fileName the filename of the entry * @param component the cached component */ public static CacheEntry entry(String id, String fileName, Component component) { @@ -65,57 +66,22 @@ public final class ComponentCache { /** * Decorate the cache with a listener called whenever a value is merged + * * @param bc the consumer called when a value is merged */ public ComponentCache onMerge(BiConsumer<CacheEntry, CacheEntry> bc) { return new ComponentCache((oldValue, newValue) -> { CacheEntry value = merge.apply(oldValue, newValue); - if(value.equals(newValue)) { + if (value.equals(newValue)) { bc.accept(oldValue, newValue); } return value; }); } - public interface MergeStrategy { - - /** - * A strategy designed to favour the latest component version when merging two cached entries - */ - static BinaryOperator<CacheEntry> overwriteIfSameVersions() { - return (oldValue, newValue) -> - compareAsdcComponentVersions(newValue.getComponentVersion(), oldValue.getComponentVersion()) ? - newValue : oldValue; - } - } - - /** - * Entry stored by the cache - */ - @EqualsAndHashCode - public static final class CacheEntry { - final String id; - - final String fileName; - - final Component component; - CacheEntry(String id, String fileName, Component component) { - this.id = id; - this.fileName = fileName; - this.component = component; - } - - public String getComponentVersion() { - return component.getVersion(); - } - } - - // TODO: Encapsulate the cache and expose functions to interact with it // For now we'll keep this as is, to prevent the refactoring to be too big public Iterable<ImmutableTriple<String, String, Component>> iterable() { - return all().map(e -> - new ImmutableTriple<>(e.id, e.fileName, e.component) - ); + return all().map(e -> new ImmutableTriple<>(e.id, e.fileName, e.component)); } /** @@ -124,9 +90,11 @@ public final class ComponentCache { public Stream<CacheEntry> all() { return entries.values().toStream(); } + // TODO: Encapsulate the cache and expose functions to interact with it /** * Tells if an entry has been cached for a specific key + * * @param key The key used to index the entry */ public boolean notCached(String key) { @@ -134,23 +102,50 @@ public final class ComponentCache { } /** - * Store an entry in the cache. Keep in mind that currently this mutates the cache and does not work in a - * referentially transparent way (This should be fixed whenever possible). + * Store an entry in the cache. Keep in mind that currently this mutates the cache and does not work in a referentially transparent way (This + * should be fixed whenever possible). * - * @param id The id of the entry - * @param fileName the filename of the entry + * @param id The id of the entry + * @param fileName the filename of the entry * @param component the cached component */ - public ComponentCache put( - String id, - String fileName, - Component component - ) { + public ComponentCache put(String id, String fileName, Component component) { String uuid = component.getInvariantUUID(); CacheEntry entry = new CacheEntry(id, fileName, component); // TODO: Make the entries final whenever possible. The current code using the class does not allow this entries = entries.put(uuid, entry, merge); - return this; } + + public interface MergeStrategy { + + /** + * A strategy designed to favour the latest component version when merging two cached entries + */ + static BinaryOperator<CacheEntry> overwriteIfSameVersions() { + return (oldValue, newValue) -> compareAsdcComponentVersions(newValue.getComponentVersion(), oldValue.getComponentVersion()) ? newValue + : oldValue; + } + } + + /** + * Entry stored by the cache + */ + @EqualsAndHashCode + public static final class CacheEntry { + + final String id; + final String fileName; + final Component component; + + CacheEntry(String id, String fileName, Component component) { + this.id = id; + this.fileName = fileName; + this.component = component; + } + + public String getComponentVersion() { + return component.getVersion(); + } + } } |