package com.dexels.immutable.api; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.function.Predicate; public interface ImmutableMessage { enum ValueType { STRING, INTEGER, LONG, DOUBLE, FLOAT, BOOLEAN, BINARY_DIGEST, DATE, CLOCKTIME, LIST, BINARY, COORDINATE, MONEY, STOPWATCHTIME, PERCENTAGE, MEMO, IMMUTABLE } public Set columnNames(); /** * Use value(name) instead * @param name * @return */ @Deprecated public Object columnValue(String name); public String columnType(String name); public byte[] toBytes(ImmutableMessageParser c); default public Optional value(String name) { return Optional.ofNullable(columnValue(name)); } public Map types(); public Set subMessageListNames(); public Set subMessageNames(); public Map values(); public Map toTypedDataMap(); public Map> toDataMap(); public Map valueMap(boolean ignoreNull, Set ignore); public Map valueMap(boolean ignoreNull, Set ignore, List currentPath); public Map flatValueMap(boolean ignoreNull, Set ignore, String prefix); public ImmutableMessage merge(ImmutableMessage other, Optional> only); public String toFlatString(ImmutableMessageParser parser); public Optional> subMessages(String field); public Optional subMessage(String field); public Map subMessageMap(); public Map> subMessageListMap(); public ImmutableMessage withAllSubMessageLists(Map> subMessageListMap); public ImmutableMessage withAllSubMessage(Map subMessageMap); public ImmutableMessage withSubMessages(String field, List message); public ImmutableMessage withSubMessage(String field, ImmutableMessage message); public ImmutableMessage withAddedSubMessage(String field, ImmutableMessage message); public ImmutableMessage withoutSubMessageInList(String field, Predicate s); public ImmutableMessage withoutSubMessages(String field); public ImmutableMessage withoutSubMessage(String field); public ImmutableMessage without(String columnName); public ImmutableMessage without(List columns); public ImmutableMessage with(String key, Object value, String type); public ImmutableMessage withOnlyColumns(List columns); public ImmutableMessage withOnlySubMessages(List subMessages); public ImmutableMessage rename(String columnName, String newName); Map flatValueMap(String prefix, Trifunction processType); public static interface Trifunction { Object apply(String key, String type, Object value); } public class TypedData { public final ValueType type; public final Object value; public TypedData(ValueType type, Object value) { this.type = type; this.value = value; } } }