/* TickerOffsettingTrackerWrapper.java created 2007-12-05
*
*/
package org.signalml.method.iterator;
import java.util.Arrays;
import org.signalml.method.MethodExecutionTracker;
/** TickerOffsettingTrackerWrapper
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class TickerOffsettingTrackerWrapper implements MethodExecutionTracker {
private MethodExecutionTracker wrappedTracker;
private int offset;
public TickerOffsettingTrackerWrapper(MethodExecutionTracker wrappedTracker) {
this(wrappedTracker, 1);
}
public TickerOffsettingTrackerWrapper(MethodExecutionTracker wrappedTracker, int offset) {
if (wrappedTracker == null) {
throw new NullPointerException("No wrapped tracker");
}
if (offset <= 0) {
throw new IllegalArgumentException("Bad offset [" + offset + "]");
}
this.wrappedTracker = wrappedTracker;
this.offset = offset;
}
public MethodExecutionTracker getWrappedTracker() {
return wrappedTracker;
}
public int getOffset() {
return offset;
}
@Override
public String getMessage() {
return wrappedTracker.getMessage();
}
@Override
public void setMessage(String message) {
wrappedTracker.setMessage(message);
}
@Override
public boolean isRequestingAbort() {
return wrappedTracker.isRequestingAbort();
}
@Override
public boolean isRequestingSuspend() {
return wrappedTracker.isRequestingSuspend();
}
@Override
public Integer getExpectedSecondsUntilComplete(int index) {
return wrappedTracker.getExpectedSecondsUntilComplete(index+offset);
}
@Override
public int[] getTickerLimits() {
int[] limits = wrappedTracker.getTickerLimits();
return Arrays.copyOfRange(limits, offset, limits.length);
}
@Override
public int[] getTickers() {
int[] tickers = wrappedTracker.getTickers();
return Arrays.copyOfRange(tickers, offset, tickers.length);
}
@Override
public void resetTickers() {
int[] tickers = wrappedTracker.getTickers();
Arrays.fill(tickers, offset, tickers.length, 0);
wrappedTracker.setTickers(tickers);
}
@Override
public void setTicker(int index, int value) {
wrappedTracker.setTicker(index+offset, value);
}
@Override
public void setTickerLimit(int index, int limit) {
wrappedTracker.setTickerLimit(index+offset, limit);
}
@Override
public void setTickerLimits(int[] initial) {
int[] limits = wrappedTracker.getTickerLimits();
for (int i=0; (i<initial.length && (i+offset)<limits.length); i++) {
limits[offset+i] = initial[i];
}
wrappedTracker.setTickerLimits(limits);
}
@Override
public void setTickers(int[] current) {
int[] tickers = wrappedTracker.getTickers();
for (int i=0; (i<current.length && (i+offset)<tickers.length); i++) {
tickers[offset+i] = current[i];
}
wrappedTracker.setTickers(tickers);
}
@Override
public void tick(int index, int step) {
wrappedTracker.tick(index+offset, step);
}
@Override
public void tick(int index) {
wrappedTracker.tick(index+offset);
}
}