# CycleLoadRuntimeContext.java

    package org.codefilarete.stalactite.engine.runtime.cycle;

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    import java.util.stream.Collectors;

    /**
     * Keep track of relations and entity ids to be loaded during the resolution of a circular bean graph loading.
     * Expected to be used in a {@link ThreadLocal} during whole cycle treatment.
     */
    class CycleLoadRuntimeContext<SRC, TRGTID> {

    	private final Map<String, EntityRelationStorage<SRC, TRGTID>> loadedRelations = new HashMap<>();

    	public void addRelationToInitialize(String relationName, SRC src, TRGTID targetId) {
    		this.loadedRelations.computeIfAbsent(relationName, k -> new EntityRelationStorage<>())
    				.addRelationToInitialize(src, targetId);
    	}

    	public Set<TRGTID> giveIdentifiersToLoad() {
    		return this.loadedRelations.values().stream().flatMap(map -> map.getIdentifiersToLoad().stream()).collect(Collectors.toSet());
    	}

    	public EntityRelationStorage<SRC, TRGTID> getEntitiesToFulFill(String relationName) {
    		return this.loadedRelations.get(relationName);
    	}

    }