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

io.github.atkawa7.refreshable.RefreshableEnvironmentContext Maven / Gradle / Ivy

The newest version!
package io.github.atkawa7.refreshable;

import org.jetbrains.annotations.NotNull;

import java.util.*;

public interface RefreshableEnvironmentContext {
    static RefreshableEnvironmentContext createRefreshableEnvironmentContext(
            RefreshableEnvironment refreshableEnvironment
    ) {
        return new Wrapper(refreshableEnvironment);
    }

    @NotNull
    Map getRefreshableEnvironmentMap();

    @NotNull
    Map getLookUpPrefixes();

    @NotNull
    RefreshableEnvironment getRefreshableEnvironment();

    default String addPrefix(final String key, final String value) {
        Objects.requireNonNull(key);
        Objects.requireNonNull(value);
        Objects.requireNonNull(getLookUpPrefixes()).put(key, value);
        return key;
    }

    default void add(final Refreshable  refreshable) {
        Objects.requireNonNull(refreshable);
        Objects.requireNonNull(getRefreshableEnvironmentMap()).put(refreshable.get(), refreshable);
    }

    default void refreshByKey(@NotNull final String key) {
        Objects.requireNonNull(key);
        final Refreshable refreshable = Objects.requireNonNull(this.getRefreshableEnvironmentMap())
                .get(key);
        if (refreshable != null) {
            refreshable.accept(this);
        }
    }

    default void refreshContext(final @NotNull Set keys) {
        Objects.requireNonNull(keys);
        final Set newKeys = new HashSet<>();
        final Map lookUpPrefixes = Objects
                .requireNonNull(getLookUpPrefixes());
        for (final String key : keys) {
            final String prefix = lookUpPrefixes.get(key);
            if (prefix != null) {
                newKeys.add(prefix);
            } else {
                newKeys.add(key);
            }
        }
        for (final String key : newKeys) {
            refreshByKey(key);
        }
    }

    default void refreshAll() {
        for (final Refreshable value : Objects.requireNonNull(
                this.getRefreshableEnvironmentMap()).values()) {
            value.accept(this);
        }
    }

    class Wrapper implements RefreshableEnvironmentContext {
        private final Map refreshableEnvironmentMap;
        private final RefreshableEnvironment refreshableEnvironment;
        private final Map lookUpPrefixes;

        private Wrapper(RefreshableEnvironment refreshableEnvironment) {
            this.refreshableEnvironment = Objects.requireNonNull(refreshableEnvironment);
            this.refreshableEnvironmentMap = new HashMap<>();
            this.lookUpPrefixes = new HashMap<>();
        }

        @Override
        public @NotNull Map getLookUpPrefixes() {
            return lookUpPrefixes;
        }


        @Override
        public @NotNull Map getRefreshableEnvironmentMap() {
            return refreshableEnvironmentMap;
        }


        @Override
        public @NotNull RefreshableEnvironment getRefreshableEnvironment() {
            return refreshableEnvironment;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy