summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ComponentCache.java
diff options
context:
space:
mode:
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.java101
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();
+ }
+ }
}