package web.multitask.trismegistoservices.singleton; import lombok.Getter; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.stream.IntStream; @Getter @Component public class TokenSingleton { private final JSONArray tokens = new JSONArray(); public boolean consumeToken(String token) { boolean isAvailable = false; for (int i = 0; i < tokens.length(); i++) { if (tokens.getJSONObject(i).getString("token").equals(token)) { if (tokens.getJSONObject(i).getBoolean("available")) { tokens.getJSONObject(i).put("available", false); isAvailable = true; } break; } } return isAvailable; } public void addToken(String token) { tokens.put(new JSONObject().put("token", token).put("available", true)); } public TokenSingleton() { } @Scheduled(fixedRate = 3600000) public void removeUnavailableTokens() { System.out.println("Removing unavailable tokens"); IntStream.range(0, tokens.length()).forEach(i -> { if (!tokens.getJSONObject(i).getBoolean("available")) { tokens.remove(i); } }); } }