Bleeding: Add access API to check execution history for if an action

would get executed.
This commit is contained in:
asofold 2012-10-21 06:51:11 +02:00
parent f9788d162f
commit 318372b000
2 changed files with 57 additions and 6 deletions

View File

@ -123,6 +123,18 @@ public class DataManager implements Listener, INotifyReload, INeedConfig{
instance.executionHistories.put(type, histories);
}
/**
* Access method to the the execution history for check type for a player.
* @param type
* @param playerName Exact case for player name.
* @return null if not present.
*/
public static ExecutionHistory getExecutionHistory(final CheckType type, final String playerName){
final Map<String, ExecutionHistory> map = instance.executionHistories.get(type);
if (map != null) return map.get(playerName);
return null;
}
public static boolean removeExecutionHistory(final CheckType type, final String playerName){
boolean removed = false;
// TODO: design ...

View File

@ -52,7 +52,7 @@ public class ExecutionHistory {
* @param monitoredTimeFrame
* the monitored time frame
*/
private ExecutionHistoryEntry(final int monitoredTimeFrame) {
public ExecutionHistoryEntry(final int monitoredTimeFrame) {
executionTimes = new int[monitoredTimeFrame];
}
@ -62,16 +62,24 @@ public class ExecutionHistory {
* @param time
* the time
*/
private void addCounter(final long time) {
public void addCounter(final long time) {
// Clear out now outdated values from the array.
checkCounter(time);
executionTimes[(int) (time % executionTimes.length)]++;
totalEntries++;
}
/**
* Access method to adjust state to point of time.
* @param time
*/
public void checkCounter(final long time){
if (time - lastClearedTime > 0) {
// Clear the next few fields of the array.
clearTimes(lastClearedTime + 1, time - lastClearedTime);
lastClearedTime = time + 1;
}
executionTimes[(int) (time % executionTimes.length)]++;
totalEntries++;
}
/**
@ -82,7 +90,7 @@ public class ExecutionHistory {
* @param length
* the length
*/
private void clearTimes(final long start, long length) {
protected void clearTimes(final long start, long length) {
if (length <= 0)
// Nothing to do (yet).
return;
@ -174,4 +182,35 @@ public class ExecutionHistory {
return false;
}
/**
* Access API to check if the aciton would get executed.
* @param violationData
* @param action
* @param time
* @return
*/
public boolean wouldExecute(final ViolationData violationData, final Action action, final long time) {
ExecutionHistoryEntry entry = entries.get(action);
if (entry == null) {
return action.delay <= 0;
}
// Update entry (not adding).
entry.checkCounter(time);
if (entry.getCounter() + 1 > action.delay){
if (entry.getLastExecution() <= time - action.repeat) return true;
}
return false;
}
/**
* Access method.
* @param action
* @return
*/
public ExecutionHistoryEntry getEntry(final Action action){
return entries.get(action);
}
}