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

com.tvd12.ezyfox.identifier.EzySimpleIdFetchers Maven / Gradle / Ivy

The newest version!
package com.tvd12.ezyfox.identifier;

import com.tvd12.ezyfox.util.EzyLoggable;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class EzySimpleIdFetchers extends EzyLoggable implements EzyIdFetchers {

    protected Map, EzyIdFetcher> entityIdFetchers
        = new ConcurrentHashMap<>();

    protected EzySimpleIdFetchers(Builder builder) {
        this.entityIdFetchers.putAll(builder.entityIdFetchers);
    }

    public static Builder builder() {
        return new Builder();
    }

    @Override
    public EzyIdFetcher getIdFetcher(Class clazz) {
        if (entityIdFetchers.containsKey(clazz)) {
            return entityIdFetchers.get(clazz);
        }
        throw new IllegalArgumentException("has no id fetcher for " + clazz);
    }

    @Override
    public Map, EzyIdFetcher> getIdFetchers() {
        return new HashMap<>(entityIdFetchers);
    }

    public static class Builder
        extends EzyIdEncapsulationBuilder {

        protected Map, EzyIdFetcher> entityIdFetchers
            = new HashMap<>();

        public Builder addIdFetcher(Class clazz, EzyIdFetcher fetcher) {
            this.entityIdFetchers.put(clazz, fetcher);
            return this;
        }

        public Builder addIdFetchers(Map, EzyIdFetcher> fetchers) {
            for (Class key : fetchers.keySet()) {
                this.addIdFetcher(key, fetchers.get(key));
            }
            return this;
        }

        @Override
        protected EzyIdFetchers newProduct() {
            return new EzySimpleIdFetchers(this);
        }

        @Override
        protected void parseEntityClasses() {
            for (Class entityClass : entityClasses) {
                EzyIdFetcher fetcher = newIdFetcher(entityClass);
                entityIdFetchers.put(entityClass, fetcher);
            }
        }

        protected EzyIdFetcher newIdFetcher(Class clazz) {
            EzyIdFetcherImplementer implementer = newIdFetcherImplementer(clazz);
            return implementer.implement();
        }

        protected EzyIdFetcherImplementer newIdFetcherImplementer(Class clazz) {
            return new EzySimpleIdFetcherImplementer(clazz);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy