All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.qdesrame.openapi.diff.compare.ReferenceDiffCache Maven / Gradle / Ivy

There is a newer version: 1.2.0
Show newest version
package com.qdesrame.openapi.diff.compare;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

/**
 * Created by adarsh.sharma on 07/01/18.
 */
public abstract class ReferenceDiffCache {
    private Map> refDiffMap;

    public ReferenceDiffCache() {
        this.refDiffMap = new HashMap<>();
    }

    private Optional getFromCache(String leftRef, String rightRef) {
        Optional> changedSchemaMap = Optional.ofNullable(refDiffMap.get(leftRef));
        if (changedSchemaMap.isPresent()) {
            return Optional.ofNullable(changedSchemaMap.get().get(rightRef));
        }
        return Optional.empty();
    }

    private void addToCache(String leftRef, String rightRef, D changed) {
        Map changedSchemaMap = refDiffMap.computeIfAbsent(leftRef, k -> new HashMap<>());
        changedSchemaMap.put(rightRef, changed);
    }

    public Optional cachedDiff(C left, C right, String leftRef, String rightRef) {
        boolean areBothRefParameters = leftRef != null && rightRef != null;
        if (areBothRefParameters) {
            Optional changedFromRef = getFromCache(leftRef, rightRef);
            if (changedFromRef.isPresent()) {
                return changedFromRef;
            }
        }

        Optional changed = computeDiff(left, right);

        if(areBothRefParameters) {
            addToCache(leftRef, rightRef, changed.isPresent()? changed.get(): null);
        }

        return changed;
    }

    protected abstract Optional computeDiff(C left, C right);

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy