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

io.molr.commons.domain.dto.MissionRepresentationDto Maven / Gradle / Ivy

package io.molr.commons.domain.dto;

import com.google.common.collect.ImmutableMap;
import io.molr.commons.domain.Block;
import io.molr.commons.domain.ImmutableMissionRepresentation;
import io.molr.commons.domain.MissionRepresentation;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toSet;

public class MissionRepresentationDto {

    public final String rootBlockId;
    public final Set blocks;
    public final Map> childrenBlockIds;
    public final Set breakpointBlockIds;
    

    public MissionRepresentationDto(String rootBlockId, Set blocks, Map> childrenBlockIds, Set breakpointBlockIds) {
        this.rootBlockId = rootBlockId;
        this.blocks = blocks;
        this.childrenBlockIds = childrenBlockIds;
        this.breakpointBlockIds = breakpointBlockIds;
    }

    public MissionRepresentationDto() {
        this.rootBlockId = null;
        this.blocks = Collections.emptySet();
        this.childrenBlockIds = Collections.emptyMap();
        this.breakpointBlockIds = Collections.emptySet();
    }

    public static final MissionRepresentationDto from(MissionRepresentation representation) {
        Set allBlocks = representation.allBlocks();
        Set blockDtos = allBlocks.stream().map(BlockDto::from).collect(toSet());
        Set breakpointIds = representation.defaultBreakpoints().stream().map(block -> block.id()).collect(Collectors.toSet());
        
        ImmutableMap.Builder> builder = ImmutableMap.builder();
        for (Block block : allBlocks) {
            List children = representation.childrenOf(block);
            if (!children.isEmpty()) {
                List childrenIds = children.stream().map(Block::id).collect(toList());
                builder.put(block.id(), childrenIds);
            }
        }
        return new MissionRepresentationDto(representation.rootBlock().id(), blockDtos, builder.build(), breakpointIds);
    }

    public MissionRepresentation toMissionRepresentation() {
        Map blockMap = blocks.stream().map(BlockDto::toBlock).collect(Collectors.toMap(Block::id, identity()));
        
        ImmutableMissionRepresentation.Builder builder = ImmutableMissionRepresentation.builder(blockMap.get(rootBlockId));
        for (Block block : blockMap.values()) {
            List childrenIds = childrenBlockIds.get(block.id());
            if (childrenIds != null) {
                childrenIds.stream()
                        .map(blockMap::get)
                        .forEach(child -> builder.parentToChild(block, child));
            }
        }
        
        breakpointBlockIds.stream().map(blockId -> blockMap.get(blockId)).forEach(builder::addDefaultBreakpoint);
        return builder.build();
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy