package io.pcp.parfait.dxm; import java.util.HashSet; import java.util.Map; import java.util.Set; import com.google.common.collect.Sets; public class FixedValueIdentifierSource implements IdentifierSource { private final Map<String, Integer> reservedIds; private final IdentifierSource fallback; public FixedValueIdentifierSource(Map<String, Integer> reservedIds, IdentifierSource fallback) { this.reservedIds = reservedIds; this.fallback = fallback; } @Override public int calculateId(String name, Set<Integer> usedIds) { Integer reservedId = reservedIds.get(name); if (reservedId == null || usedIds.contains(reservedId)) { return fallback.calculateId(name, Sets.union(usedIds, new HashSet<Integer>(reservedIds .values()))); } return reservedId; } }