package edu.ucsb.jpregel.system; import api.MachineGroup; import api.ReservationService; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * * @author charlesmunger */ public abstract class ReservationServiceImpl implements ReservationService { private ExecutorService exec = Executors.newCachedThreadPool(); @Override public Future<MachineGroup<Worker>> reserveWorkers(final String instanceType, final int numberOfWorkers) { return exec.submit(new Callable<MachineGroup<Worker>> () { @Override public MachineGroup<Worker> call() throws Exception { return callWorker(instanceType, numberOfWorkers); } }); } @Override public Future<MachineGroup<ClientToMaster>> reserveMaster(final String instanceType) { return exec.submit(new Callable<MachineGroup<ClientToMaster>> () { @Override public MachineGroup<ClientToMaster> call() throws Exception { return callMaster(instanceType); } }); } public Future<MachineGroup[]> reserveBoth(final String instanceType, final int numberOfWorkers) { return exec.submit(new Callable<MachineGroup[]> () { @Override public MachineGroup[] call() throws Exception { return callBoth(instanceType, numberOfWorkers); } }); } public MachineGroup[] callBoth(String instanceType, int numberOfWorkers){return null; }; public abstract MachineGroup<Worker>callWorker(String instanceType, int numberOfWorkers); public abstract MachineGroup<ClientToMaster>callMaster(String instanceType); }