Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package hudson.plugins.xvnc;
 
 import java.util.Set;
Manages the display numbers in use.

Author(s):
Kohsuke Kawaguchi
final class DisplayAllocator {
    
Display numbers in use.
    private final Set<IntegerallocatedNumbers = new HashSet<Integer>();
    private final Set<IntegerblacklistedNumbers = new HashSet<Integer>();
    private final int minDisplayNumber;
    private final int maxDisplayNumber;
    public DisplayAllocator(final int minDisplayNumberfinal int maxDisplayNumber) {
        this. = minDisplayNumber;
        this. = maxDisplayNumber;
    }
    private final int getRandomValue() {
        return  + (new Random().nextInt(getRange()));
    }
    private int getRange() {
        return ( + 1) - ;
    }
    public synchronized int allocate() {
        if (noDisplayNumbersLeft()) {
            if (!.isEmpty()) {
                .clear();
            } else {
                throw new RuntimeException("All available display numbers are allocated or " +
                        "blacklisted.\nallocated: " + .toString() +
                        "\nblacklisted: " + .toString());
            }
        }
        int displayNumber;
        do {
            displayNumber = getRandomValue();
        } while(isNotAvailable(displayNumber));
        .add(displayNumber);
        return displayNumber;
    }
    private boolean isNotAvailable(int number) {
        return .contains(number) || .contains(number);
    }
    private boolean noDisplayNumbersLeft() {
        return .size() + .size() >= getRange();
    }
    public synchronized void free(int n) {
        .remove(n);
    }
    public void blacklist(int badDisplay) {
        free(badDisplay);
        .add(badDisplay);
    }
New to GrepCode? Check out our FAQ X