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

com.mercateo.common.rest.schemagen.parameter.CallContext Maven / Gradle / Ivy

There is a newer version: 0.20.0
Show newest version
package com.mercateo.common.rest.schemagen.parameter;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Objects.requireNonNull;

public class CallContext {

    private final Map> parameters = new IdentityHashMap<>();

    private final Map, Set> additionalObjects = new HashMap<>();

    public static CallContext create() {
        return new CallContext();
    }

    public  Parameter.Builder builderFor(Class parameterClass) {
        return new Parameter.Builder<>(parameterClass, this);
    }

    public boolean isEmpty() {
        return parameters.isEmpty();
    }

    public boolean hasParameter(Object value) {
        return parameters.containsKey(value);
    }

    public Parameter getParameter(Object value) {
        return parameters.get(value);
    }

     void addParameter(T value, Parameter parameter) {
        parameters.put(value, parameter);
    }

    @SuppressWarnings("unchecked")
    public  CallContext addAdditionalObjects(Class clazz, T... objects) {
        requireNonNull(clazz);

        final Set set = Arrays.stream(objects != null ? objects : (T[]) new Object[0])
                .filter(Objects::nonNull)
                .collect(Collectors.toSet());

        if (!set.isEmpty()) {
            if (additionalObjects.containsKey(clazz)) {
                Set setInMap = (Set) additionalObjects.get(clazz);
                setInMap.addAll(set);
            } else {
                additionalObjects.put(clazz, set);
            }
        }

        return this;
    }

    @SuppressWarnings("unchecked")
    public  Optional> getAdditionalObjectsFor(Class clazz) {
        checkNotNull(clazz);
        Set set = (Set) additionalObjects.get(clazz);
        if (set != null) {
            return Optional.of(new HashSet<>(set));
        }
        return Optional.empty();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy