package org.openbakery.racecontrol.gui; import java.util.HashMap; import java.util.Stack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ButtonIdHelper { private static Logger log = LoggerFactory.getLogger(ButtonIdHelper.class); private static ButtonIdHelper instance; private HashMap<Integer, Stack<Byte>> stackMap; private ButtonIdHelper() { stackMap = new HashMap<Integer, Stack<Byte>>(); } public static ButtonIdHelper getInstance() { if (instance == null) { instance = new ButtonIdHelper(); } return instance; } public byte popId(int connectionId) { synchronized (instance) { Stack<Byte> stack = stackMap.get(Integer.valueOf(connectionId)); if (stack == null) { stack = new Stack<Byte>(); if (connectionId == 255) { for (int i = 0; i < 50; i++) { stack.push(Byte.valueOf((byte) i)); } } else { for (int i = 50; i < 239; i++) { stack.push(Byte.valueOf((byte) i)); } } stackMap.put(Integer.valueOf(connectionId), stack); } return stack.pop().byteValue(); } } public synchronized void pushId(int connectionId, byte id) { Stack<Byte> stack = stackMap.get(Integer.valueOf(connectionId)); if (stack != null) { stack.push(Byte.valueOf(id)); } } public void debug() { for (Integer connectionId : stackMap.keySet()) { Stack<Byte> stack = stackMap.get(connectionId); if (connectionId.equals(Integer.valueOf(255))) { for (int i = 0; i < 50; i++) { if (!stack.contains(Byte.valueOf((byte) i))) { log.debug("connectionId {}: in use: {}", connectionId, i); } } } else { for (int i = 50; i < 239; i++) { if (!stack.contains(Byte.valueOf((byte) i))) { log.debug("connectionId {}: in use: {}", connectionId, i); } } } } } }