/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.segmentation.server.blackboard.message;
/**
*
*/
public class LevelManager {
private final Level[] levels;
private IndexFinder finder = new IndexFinder();
public LevelManager(Level... levels) {
this.levels = levels;
}
public int indexOf(Level level) {
int index = level.acceptVisitor(finder);
if (index >= levels.length) {
return -1;
}
return index;
}
public Level getLevel(int index) {
if (index >= levels.length || index < 0) {
return null;
}
return levels[index];
}
public Level getLastLevel() {
return levels[levels.length - 1];
}
private class IndexFinder implements LevelVisitor {
public int visit(Level level) {
return findLevelIndex(level);
}
public int visit(NextLevel level) {
int index = level.getCurrent().acceptVisitor(this);
if (index == -1) {
return -1;
}
return index + 1;
}
private int findLevelIndex(Level level) {
for (int i = 0; i < levels.length; i++) {
if (level.equals(levels[i])) {
return i;
}
}
return -1;
}
}
}