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

io.polyglotted.esmodel.api.Sleeve Maven / Gradle / Ivy

package io.polyglotted.esmodel.api;

import com.google.common.base.Function;
import lombok.RequiredArgsConstructor;
import lombok.ToString;

import java.util.List;
import java.util.Objects;

import static com.google.common.collect.Lists.transform;
import static io.polyglotted.esmodel.api.ModelUtil.jsonEquals;

@RequiredArgsConstructor
@ToString(includeFieldNames = false, doNotUseGetters = true)
public final class Sleeve {
    public final IndexKey key;
    public final T source;
    public final String ancestor;
    public final boolean stored;

    public static  Sleeve create(IndexKey key, T source) {
        return new Sleeve<>(key, source, null, true);
    }

    public static  List> createSleeves(List objects, Function> newSleeveFunction) {
        return transform(objects, newSleeveFunction);
    }

    public static  Sleeve newSleeve(T object, Function keyFunction) {
        return create(keyFunction.apply(object), object);
    }

    public static  Sleeve newSleeveNotStored(T object, Function keyFunction) {
        return new Sleeve<>(keyFunction.apply(object), object, null, false);
    }

    public static  List> deleteSleeves(List keys) {
        return transform(keys, Sleeve::deleteSleeve);
    }

    public static  Sleeve deleteSleeve(IndexKey key) {
        return new Sleeve<>(key.delete(), null, key.uniqueId(), true);
    }

    public IndexKey key() {
        return key;
    }

    public String id() {
        return key.id;
    }

    public String index() {
        return key.index;
    }

    public T source() {
        return source;
    }

    public boolean isNew() {
        return key.version <= 0;
    }

    public boolean isDelete() {
        return key.delete;
    }

    public Sleeve delete() {
        return new Sleeve<>(key.delete(), null, key.uniqueId(), stored);
    }

    public Sleeve update(T update) {
        return new Sleeve<>(key, update, key.uniqueId(), stored);
    }

    public Sleeve update(Function updateFunction) {
        return update(updateFunction.apply(source));
    }

    @Override
    public boolean equals(Object o) {
        return jsonEquals(this, o);
    }

    @Override
    public int hashCode() {
        return Objects.hash(key, source);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy