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

io.polyglotted.common.model.MapResult Maven / Gradle / Ivy

package io.polyglotted.common.model;

import com.google.common.collect.ImmutableMap;
import io.polyglotted.common.util.MapBuilder;
import io.polyglotted.common.util.MapBuilder.ImmutableMapBuilder;
import io.polyglotted.common.util.MapBuilder.SimpleMapBuilder;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Delegate;

import java.util.LinkedHashMap;
import java.util.Map;

@SuppressWarnings({"unused", "deprecation"})
public interface MapResult extends Map {

    static MapResult immutableResult() { return new ImmutableMapResult(ImmutableMap.of()); }

    static MapResult immutableResult(String k1, Object v1) { return immutableResultBuilder().put(k1, v1).result(); }

    static MapResult immutableResult(String k1, Object v1, String k2, Object v2) { return immutableResultBuilder().put(k1, v1).put(k2, v2).result(); }

    static MapResult immutableResult(String k1, Object v1, String k2, Object v2, String k3, Object v3) {
        return immutableResultBuilder().put(k1, v1).put(k2, v2).put(k3, v3).result();
    }

    static MapResult immutableResult(String k1, Object v1, String k2, Object v2, String k3, Object v3, String k4, Object v4) {
        return immutableResultBuilder().put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).result();
    }

    static MapResult immutableResult(String k1, Object v1, String k2, Object v2, String k3, Object v3, String k4, Object v4, String k5, Object v5) {
        return immutableResultBuilder().put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).put(k5, v5).result();
    }

    static MapResult immutableResult(Map map) { return immutableResultBuilder().putAll(map).result(); }

    static ImmutableMapBuilder immutableResultBuilder() { return MapBuilder.immutableMapBuilder(); }

    static MapResult simpleResult() { return new SimpleMapResult(); }

    static MapResult simpleResult(String k1, Object v1) { return simpleResultBuilder().put(k1, v1).result(); }

    static MapResult simpleResult(String k1, Object v1, String k2, Object v2) { return simpleResultBuilder().put(k1, v1).put(k2, v2).result(); }

    static MapResult simpleResult(String k1, Object v1, String k2, Object v2, String k3, Object v3) {
        return simpleResultBuilder().put(k1, v1).put(k2, v2).put(k3, v3).result();
    }

    static MapResult simpleResult(String k1, Object v1, String k2, Object v2, String k3, Object v3, String k4, Object v4) {
        return simpleResultBuilder().put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).result();
    }

    static MapResult simpleResult(String k1, Object v1, String k2, Object v2, String k3, Object v3, String k4, Object v4, String k5, Object v5) {
        return simpleResultBuilder().put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).put(k5, v5).result();
    }

    static MapResult simpleResult(Map map) { return simpleResultBuilder().putAll(map).result(); }

    static SimpleMapBuilder simpleResultBuilder() { return MapBuilder.simpleMapBuilder(SimpleMapResult::new); }

    @EqualsAndHashCode(callSuper = true)
    @NoArgsConstructor class SimpleMapResult extends LinkedHashMap implements MapResult {
        public SimpleMapResult(Map m) { super(m); }

        @Override public Object put(String key, Object value) { if (value != null) { return super.put(key, value); } return null; }

        @Override public Object putIfAbsent(String key, Object value) { if (value != null) { return super.putIfAbsent(key, value); } return null; }

        @Override public void putAll(Map map) {
            for (Map.Entry e : map.entrySet()) { put(e.getKey(), e.getValue()); }
        }

        @Override public String toString() { return super.toString(); }
    }

    @EqualsAndHashCode @RequiredArgsConstructor class ImmutableMapResult implements MapResult {
        @Delegate(types = MapResult.class) private final ImmutableMap delegate;

        @Override public String toString() { return delegate.toString(); }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy