package org.infosec.ismp.agent.winsensor.operation.service.impl;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.infosec.ismp.agent.comm.util.OperationConstant;
import org.infosec.ismp.agent.comm.winsensor.model.operation.Duty;
import org.infosec.ismp.agent.comm.winsensor.model.operation.DutyManager;
import org.infosec.ismp.agent.winsensor.operation.dao.AgentDutyManagerDao;
import org.infosec.ismp.agent.winsensor.operation.entity.AgentDutyBO;
import org.infosec.ismp.agent.winsensor.operation.entity.AgentDutyManagerBO;
import org.infosec.ismp.agent.winsensor.operation.entity.AgentDutyManagerSentHisBO;
import org.infosec.ismp.agent.winsensor.operation.service.AgentDutyManagerService;
/**
* @author Rocky
* @version create time: Jan 11, 2011 7:58:23 PM
*
*/
public class AgentDutyManagerServiceImpl implements AgentDutyManagerService {
private AgentDutyManagerDao dao;
@Override
public void addDutyManager(List<DutyManager> dutyManagers) {
for (DutyManager dutyManager : dutyManagers) {
List<Duty> duties = dutyManager.getDuties();
AgentDutyManagerBO dutyManagerBO = new AgentDutyManagerBO();
List<AgentDutyBO> dutyBOs = new ArrayList<AgentDutyBO>();
for (Duty duty : duties) {
AgentDutyBO dutyBO = new AgentDutyBO();
dutyBO.setRemoteDutyId(duty.getId());
dutyBO.setCreateTime(new Date());
dutyBO.setEmail(duty.getEmail());
dutyBO.setIsManager(duty.getIsManager());
dutyBO.setMobilePhone(duty.getMobilePhone());
dutyBO.setName(duty.getName());
dutyBO.setPhone(duty.getPhone());
dutyBO.setResponsibility(duty.getResponsibility());
dutyBO.setSex(duty.getSex());
dutyBOs.add(dutyBO);
}
dutyManagerBO.setId(Long.valueOf(dutyManager.getId()));
dutyManagerBO.setDuties(dutyBOs);
dutyManagerBO.setDomainId(dutyManager.getDomainId());
dutyManagerBO.setBeginDate(dutyManager.getBeginDate());
dutyManagerBO.setEndDate(dutyManager.getEndDate());
dutyManagerBO.setComplaintNumber(dutyManager.getComplaintNumber());
dutyManagerBO.setExpired(false);
dutyManagerBO.setCreateTime(new Date());
dao.addDutyManager(dutyManagerBO);
}
}
@Override
public List<AgentDutyManagerBO> getAllUnsentDutyManager(
List<AgentDutyManagerSentHisBO> sentHistories) {
List<AgentDutyManagerBO> dutyManagers = new ArrayList<AgentDutyManagerBO>();
for (AgentDutyManagerSentHisBO sentHistory : sentHistories) {
String dutyManagerId = sentHistory.getDutyManagerId();
AgentDutyManagerBO dutyManager = dao.findDutyManagerById(dutyManagerId, false);
//Expired dutyManager, except.
if (dutyManager != null) {
dutyManagers.add(dutyManager);
}
}
return dutyManagers;
}
@Override
public AgentDutyManagerBO getCurrentUsedDutyManager(
List<AgentDutyManagerSentHisBO> sentHistories) {
List<AgentDutyManagerBO> dutyManagers = getAllUnsentDutyManager(sentHistories);
for (AgentDutyManagerBO dutyManager : dutyManagers) {
DateFormat dateFormat = new SimpleDateFormat(OperationConstant.DUTY_MANAGER_DATE_FORMAT);
Date beginDate = null;
Date endDate = null;
Date now = new Date();
try {
beginDate = dateFormat.parse(dutyManager.getBeginDate());
endDate = dateFormat.parse(dutyManager.getEndDate());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (now.after(beginDate) && now.before(endDate)) {
return dutyManager;
}
}
return null;
}
@Override
public List<String> cleanUpExpiredDutyManagers() {
List<AgentDutyManagerBO> dutyManagers = dao.getAllUnsentDutyManager(false);
List<String> dutyManagerIds = new ArrayList<String>();
for (AgentDutyManagerBO dutyManager : dutyManagers) {
SimpleDateFormat format = new SimpleDateFormat(OperationConstant.DUTY_MANAGER_DATE_FORMAT);
Date now = new Date();
Date endDate = null;
try {
endDate = format.parse(dutyManager.getEndDate());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (endDate != null && now.after(endDate)) {
dutyManager.setExpired(true);
dao.updateDutyManager(dutyManager);
dutyManagerIds.add(String.valueOf(dutyManager.getId()));
}
}
return dutyManagerIds;
}
@Override
public List<AgentDutyManagerBO> getAllCurrentUsedDutyManager() {
List<AgentDutyManagerBO> allDutyManagers = dao.getAllUnsentDutyManager(false);
List<AgentDutyManagerBO> dutyManagers = new ArrayList<AgentDutyManagerBO>();
for (AgentDutyManagerBO dutyManager : allDutyManagers) {
SimpleDateFormat format = new SimpleDateFormat(OperationConstant.DUTY_MANAGER_DATE_FORMAT);
Date now = new Date();
Date beginDate = null;
Date endDate = null;
try {
beginDate = format.parse(dutyManager.getBeginDate());
endDate = format.parse(dutyManager.getEndDate());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (now.after(beginDate) && now.before(endDate)) {
dutyManagers.add(dutyManager);
}
}
return dutyManagers;
}
@Override
public void deleteDutyManager(String dutyManagerId) {
dao.deleteDutyManager(dutyManagerId);
}
public void setDao(AgentDutyManagerDao dao) {
this.dao = dao;
}
}