Response.java

package org.vlaskin.moexiss.response;

import org.vlaskin.moexiss.entity.base.BasicEntity;
import org.vlaskin.moexiss.entity.base.EntityType;
import org.vlaskin.moexiss.entity.base.TypedField;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Response
{
    private final Map<EntityType<? extends BasicEntity<?>, ? extends Enum<?>>, List<? extends BasicEntity<?>>> data;

    public Response(Map<EntityType<? extends BasicEntity<?>, ? extends Enum<?>>, List<? extends BasicEntity<?>>> data)
    {
        Map<EntityType<? extends BasicEntity<?>, ? extends Enum<?>>, List<? extends BasicEntity<?>>> copy =
                new HashMap<>();
        data.forEach((type, entities) -> copy.put(type, List.copyOf(entities)));
        this.data = Map.copyOf(copy);
    }

    @SuppressWarnings("unchecked")
    final <T extends BasicEntity<E>, E extends Enum<?> & TypedField> List<T> get(EntityType<T, E> entityType)
    {
        return (List<T>) data.getOrDefault(entityType, List.of());
    }
}