/**
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations under
* the License.
*
* The Original Code is OpenELIS code.
*
* Copyright (C) ITECH, University of Washington, Seattle WA. All Rights Reserved.
*
*/
package us.mn.state.health.lims.dataexchange.aggregatereporting.action;
import java.lang.reflect.InvocationTargetException;
import java.sql.Timestamp;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import us.mn.state.health.lims.common.action.BaseAction;
import us.mn.state.health.lims.common.services.DisplayListService;
import us.mn.state.health.lims.common.services.DisplayListService.ListType;
import us.mn.state.health.lims.common.util.DateUtil;
import us.mn.state.health.lims.common.util.StringUtil;
import us.mn.state.health.lims.dataexchange.aggregatereporting.dao.ReportExternalExportDAO;
import us.mn.state.health.lims.dataexchange.aggregatereporting.daoimpl.ReportExternalExportDAOImpl;
import us.mn.state.health.lims.scheduler.dao.CronSchedulerDAO;
import us.mn.state.health.lims.scheduler.daoimpl.CronSchedulerDAOImpl;
import us.mn.state.health.lims.scheduler.valueholder.CronScheduler;
import us.mn.state.health.lims.siteinformation.dao.SiteInformationDAO;
import us.mn.state.health.lims.siteinformation.daoimpl.SiteInformationDAOImpl;
import us.mn.state.health.lims.siteinformation.valueholder.SiteInformation;
public class TestUsageConfigurationAction extends BaseAction {
private static CronSchedulerDAO cronSchedulerDAO = new CronSchedulerDAOImpl();
private static SiteInformationDAO siteInfoDAO = new SiteInformationDAOImpl();
private static ReportExternalExportDAO reportDAO = new ReportExternalExportDAOImpl();
@Override
protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute(ALLOW_EDITS_KEY, "true");
request.setAttribute(PREVIOUS_DISABLED, "true");
request.setAttribute(NEXT_DISABLED, "true");
request.getSession().setAttribute(SAVE_DISABLED, "false");
DynaActionForm dynaForm = (DynaActionForm)(form);
dynaForm.initialize(mapping);
PropertyUtils.setProperty(dynaForm, "hourList", DisplayListService.getList(ListType.HOURS));
PropertyUtils.setProperty(dynaForm, "minList", DisplayListService.getList(ListType.MINS));
setSchedulerProperties(dynaForm, "sendSiteIndicators", "enableSending", "sendMin", "sendHour");
setSiteProperties(dynaForm, "testUsageAggregationUrl", "url");
setSiteProperties(dynaForm, "testUsageAggregationUserName", "serviceUserName");
setSiteProperties(dynaForm, "testUsageAggregationPassword", "servicePassword");
PropertyUtils.setProperty(dynaForm, "lastAttemptToSend", getLastEvent("sendSiteIndicators"));
PropertyUtils.setProperty(dynaForm, "lastSent", getLastSent());
PropertyUtils.setProperty(dynaForm, "sendStatus", getSendStatus());
return mapping.findForward(FWD_SUCCESS);
}
private Object getLastEvent(String cronJobName) {
CronScheduler scheduler = cronSchedulerDAO.getCronScheduleByJobName(cronJobName);
if( scheduler.getLastRun() != null){
return DateUtil.convertTimestampToStringDateAndTime(scheduler.getLastRun());
}
return StringUtil.getMessageForKey("schedule.never");
}
private String getLastSent() {
Timestamp lastTimestamp = reportDAO.getLastSentTimestamp();
if( lastTimestamp != null){
return DateUtil.convertTimestampToStringDateAndTime(lastTimestamp);
}
return StringUtil.getMessageForKey("schedule.never");
}
private Object getSendStatus() {
SiteInformation sendStatusInfo = siteInfoDAO.getSiteInformationByName("testUsageSendStatus");
return sendStatusInfo == null ? "N/A" : sendStatusInfo.getValue();
}
private void setSiteProperties(DynaActionForm dynaForm, String siteName, String bean) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
SiteInformation site = siteInfoDAO.getSiteInformationByName(siteName);
if( site != null ){
PropertyUtils.setProperty(dynaForm, bean, site.getValue());
}
}
private void setSchedulerProperties(DynaActionForm dynaForm, String indicatorName, String enable, String min, String hour) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
CronScheduler sendScheduler = cronSchedulerDAO.getCronScheduleByJobName(indicatorName);
if( sendScheduler == null ){
PropertyUtils.setProperty(dynaForm, enable, "enable");
}else{
PropertyUtils.setProperty(dynaForm, enable, sendScheduler.getActive() ? "enable" : "disable");
String cronString = sendScheduler.getCronStatement();
if(!"never".equals( cronString)){
String[] cronParts = cronString.split(" ");
int minutes = Integer.parseInt(cronParts[1]);
PropertyUtils.setProperty(dynaForm, min, String.valueOf((int)(minutes/10) * 10));
PropertyUtils.setProperty(dynaForm, hour, cronParts[2]);
}
}
}
@Override
protected String getPageTitleKey() {
return "testusageconfiguration.browse.title";
}
@Override
protected String getPageSubtitleKey() {
return "testusageconfiguration.browse.title";
}
}