
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