package org.playorm.cron.bindings; import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import org.playorm.cron.api.CronServiceFactory; import org.playorm.cron.impl.Config; import org.playorm.cron.impl.CurrentTime; import org.playorm.cron.impl.CurrentTimeImpl; import org.playorm.cron.impl.HashGenerator; import org.playorm.cron.impl.HashGeneratorImpl; import com.google.inject.Binder; import com.google.inject.Module; public class CronProdBindings implements Module { public static final String SCHEDULER = "org.playorm.monitor.scheduler"; public static final String HASH_GENERATOR = "org.playorm.monitor.hashGenerator"; public static final String CURRENT_TIME = "org.playorm.monitor.currentTime"; private ScheduledExecutorService svc; private long rate; private Config config; private HashGenerator generator; private CurrentTime time; public CronProdBindings(Map<String, Object> properties) { Object obj = properties.get(SCHEDULER); if(obj == null) svc = Executors.newScheduledThreadPool(1); else svc = (ScheduledExecutorService) obj; Object ttt = properties.get(CURRENT_TIME); if(ttt == null) time = new CurrentTimeImpl(); else time = (CurrentTime) ttt; Object rateObj = properties.get(CronServiceFactory.SCAN_RATE_MILLIS); if(!(rateObj instanceof String)) throw new IllegalArgumentException("SCAN_RATE_MILLIS must be a long as a String"); String rateStr = (String) rateObj; rate = Long.parseLong(rateStr); String host = (String) properties.get(CronServiceFactory.HOST_UNIQUE_NAME); config = new Config(rate, host); generator = (HashGenerator)properties.get(HASH_GENERATOR); if(generator == null) generator = new HashGeneratorImpl(); } @Override public void configure(Binder binder) { binder.bind(ScheduledExecutorService.class).toInstance(svc); binder.bind(HashGenerator.class).toInstance(generator); binder.bind(Config.class).toInstance(config ); binder.bind(CurrentTime.class).toInstance(time); } }