package hamaster.gradesign.daemon;
import hamaster.gradesign.IBECSR;
import hamaster.gradesign.dao.IDRequestDAO;
import hamaster.gradesign.entity.IDRequest;
import hamaster.gradesign.idmgmt.IdentityDescriptionBean;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class IBERequestHandlerDaemon implements Runnable {
private Logger logger = LoggerFactory.getLogger(getClass());
final private static long YEAR = 31536000000l;
private IDRequestDAO idRequestDAO;
private IdentityDescriptionBean identityDescriptionBean;
/**
* 处理请求间隔 单位毫秒
*/
private long interval;
/**
* 每次处理的请求数量
*/
private int batchSize;
private volatile boolean running;
public IBERequestHandlerDaemon() {
running = true;
}
@Override
public void run() {
logger.info("Daemod started at:" + new Date().toString());
while (running) {
try {
Thread.sleep(interval);
} catch (InterruptedException e) {}
List<IDRequest> userWork = idRequestDAO.listUnhandledRequests(batchSize);
if (userWork.size() == 0)
continue;
List<IBECSR> work = new ArrayList<IBECSR>(userWork.size());
for (IDRequest idRequest : userWork) {
IBECSR csr = convert(idRequest);
work.add(csr);
}
Future<Map<String, Integer>> future = identityDescriptionBean.generateIdentityDescriptions(work);
try {
Map<String, Integer> results = future.get();
idRequestDAO.requestHandled(results);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
private IBECSR convert(IDRequest request) {
IBECSR csr = new IBECSR();
csr.setApplicationDate(request.getApplicationDate());
csr.setIbeSystemId(request.getIbeSystemId());
csr.setIdentityString(request.getIdentityString());
csr.setPassword(request.getPassword());
csr.setPeriod(YEAR); // TODO a year
csr.setRequestId(request.getRequestId());
return csr;
}
public void stopHandler() {
this.running = false;
}
public long getInterval() {
return interval;
}
public void setInterval(long interval) {
this.interval = interval;
}
public IDRequestDAO getIdRequestDAO() {
return idRequestDAO;
}
public void setIdRequestDAO(IDRequestDAO idRequestDAO) {
this.idRequestDAO = idRequestDAO;
}
public IdentityDescriptionBean getIdentityDescriptionBean() {
return identityDescriptionBean;
}
public void setIdentityDescriptionBean(IdentityDescriptionBean identityDescriptionBean) {
this.identityDescriptionBean = identityDescriptionBean;
}
public int getBatchSize() {
return batchSize;
}
public void setBatchSize(int batchSize) {
this.batchSize = batchSize;
}
}