jalse.entities.methods.ScheduleForActorMethod Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JALSE Show documentation
Show all versions of JALSE Show documentation
Java Artificial Life Simulation Engine
package jalse.entities.methods;
import jalse.actions.Action;
import jalse.actions.ActionScheduler;
import jalse.entities.Entity;
import jalse.entities.annotations.ScheduleForActor;
import jalse.entities.functions.ScheduleForActorFunction;
import java.lang.reflect.Constructor;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* This is used for mapping calls to
* {@link ActionScheduler#scheduleForActor(Action, long, long, TimeUnit)}.
*
* @author Elliot Ford
*
* @see ScheduleForActor
* @see ScheduleForActorFunction
*
*/
public class ScheduleForActorMethod implements EntityMethod {
private final Constructor> constructor;
private final long initialDelay;
private final long period;
private final TimeUnit unit;
/**
* Creates a schedule actor method.
*
* @param constructor
* Action constructor.
*
* @param initialDelay
* Initial delay before running action.
* @param period
* Period repeat.
* @param unit
* Time unit for action.
*/
public ScheduleForActorMethod(final Constructor> constructor, final long initialDelay, final long period,
final TimeUnit unit) {
this.constructor = Objects.requireNonNull(constructor);
this.initialDelay = initialDelay;
this.period = period;
this.unit = Objects.requireNonNull(unit);
if (initialDelay < 0L || period < 0L) {
throw new IllegalArgumentException();
}
}
/**
* Gets the action constructor
*
* @return Action constructor.
*/
public Constructor> getConstructor() {
return constructor;
}
/**
* Gets the initial delay.
*
* @return Initial delay.
*/
public long getInitialDelay() {
return initialDelay;
}
/**
* Gets the period.
*
* @return Period.
*/
public long getPeriod() {
return period;
}
/**
* Gets the time unit.
*
* @return time unit.
*/
public TimeUnit getUnit() {
return unit;
}
@Override
public Object invoke(final Object proxy, final Entity entity, final Object[] args) throws Throwable {
// Get new action.
@SuppressWarnings("unchecked")
final Action action = (Action) constructor.newInstance();
// Schedule
return entity.scheduleForActor(action, initialDelay, period, unit);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy