package org.akaza.openclinica.web.table.scheduledjobs; import org.akaza.openclinica.control.AbstractTableFactory; import org.akaza.openclinica.control.DefaultActionsEditor; import org.akaza.openclinica.dao.ScheduledJobSort; import org.akaza.openclinica.i18n.core.LocaleResolver; import org.akaza.openclinica.i18n.util.ResourceBundleProvider; import org.akaza.openclinica.web.table.sdv.SDVUtil; import org.jmesa.facade.TableFacade; import org.jmesa.limit.Limit; import org.jmesa.limit.Sort; import org.jmesa.limit.SortSet; import org.jmesa.view.component.Row; import org.jmesa.view.html.AbstractHtmlView; import org.jmesa.view.html.HtmlBuilder; import org.jmesa.view.html.HtmlSnippets; import org.jmesa.view.html.component.HtmlTable; import org.jmesa.web.WebContext; import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * View builder for the list of scheduled jobs with an ability to cancel the job * @author jnyayapathi * */ public class ScheduledJobTableFactory extends AbstractTableFactory { private ResourceBundle resword; private int studyId; private String contextPath; @Override protected String getTableName() { return "scheduledJobs"; } @Override public void configureTableFacadeCustomView(TableFacade tableFacade) { tableFacade.setView(new ScheduledJobView(getLocale())); } @Override protected void configureColumns(TableFacade tableFacade, Locale locale) { tableFacade.setColumnProperties( "datasetId", "fireTime", "exportFileName","jobStatus", "action"); // TODO the following is throwing null pointer, check later resword = ResourceBundleProvider.getWordsBundle(locale); Row row = tableFacade.getTable().getRow(); String[] allTitles = new String[] { "DataSet Name", "Fire Time", "Export File","Job Status", "Actions" }; SDVUtil sdvUtil = new SDVUtil();// TODO check if this is viable sdvUtil.setTitles(allTitles, (HtmlTable) tableFacade.getTable()); // HtmlColumn sdvStatus = ((HtmlRow) row).getColumn("checkbox"); // sdvStatus.getFilterRenderer().setFilterEditor(new SdvStatusFilter()); sdvUtil.setHtmlCellEditors(tableFacade, new String[] { "action" }, false); configureColumn(row.getColumn("action"), "Actions", sdvUtil.getCellEditorNoEscapes(), new DefaultActionsEditor(locale), true, false); } /** * Creating table */ @Override public TableFacade createTable(HttpServletRequest request, HttpServletResponse response) { locale = LocaleResolver.getLocale(request); TableFacade tableFacade = getTableFacadeImpl(request, response); tableFacade.setStateAttr("restore"); int maxJobs = (Integer) request.getAttribute("totalJobs"); tableFacade.setTotalRows(maxJobs); Limit limit = tableFacade.getLimit(); List<ScheduledJobs> jobs = (List<ScheduledJobs>) request.getAttribute("jobs"); int rowStart = limit.getRowSelect().getRowStart(); int rowEnd = limit.getRowSelect().getRowEnd(); // Collection<SubjectAggregateContainer> items = // getFilteredItems(studySubjectSDVFilter, studySubjectSDVSort, // rowStart, rowEnd); // setDataAndLimitVariables(tableFacade, jobs); tableFacade.setItems(jobs); configureTableFacade(response, tableFacade); if (!tableFacade.getLimit().isExported()) { configureColumns(tableFacade, locale); tableFacade.setMaxRowsIncrements(getMaxRowIncrements()); configureTableFacadePostColumnConfiguration(tableFacade); configureTableFacadeCustomView(tableFacade); configureUnexportedTable(tableFacade, locale); } else { configureExportColumns(tableFacade, locale); } return tableFacade; } public void setDataAndLimitVariables(TableFacade tableFacade, List<ScheduledJobs> jobs) { Limit limit = tableFacade.getLimit(); WebContext context = tableFacade.getWebContext(); if (context != null) { studyId = Integer.parseInt(context.getParameter("studyId")); contextPath = context.getContextPath(); } ScheduledJobSort scheduledJobSort = getScheduledJobSort(limit); int rowStart = limit.getRowSelect().getRowStart(); int rowEnd = limit.getRowSelect().getRowEnd(); Collection<ScheduledJobs> items = getFilteredItems(jobs, scheduledJobSort, rowStart, rowEnd); } /** * No Filtering * @param jobs * @param scheduledJobSort * @param rowStart * @param rowEnd * @return */ private Collection<ScheduledJobs> getFilteredItems(List<ScheduledJobs> jobs, ScheduledJobSort scheduledJobSort, int rowStart, int rowEnd) { return null; } protected ScheduledJobSort getScheduledJobSort(Limit limit) { ScheduledJobSort scheduledJobSort = new ScheduledJobSort(); SortSet sortSet = limit.getSortSet(); Collection<Sort> sorts = sortSet.getSorts(); for (Sort sort : sorts) { String property = sort.getProperty(); String order = sort.getOrder().toParam(); scheduledJobSort.addSort(property, order); } return scheduledJobSort; } class ScheduledJobView extends AbstractHtmlView { private final ResourceBundle resword; public ScheduledJobView(Locale locale) { resword = ResourceBundleProvider.getWordsBundle(locale); } public Object render() { HtmlSnippets snippets = getHtmlSnippets(); HtmlBuilder html = new HtmlBuilder(); html.append(snippets.themeStart()); html.append(snippets.tableStart()); html.append(snippets.theadStart()); html.append(snippets.toolbar()); // html.append(selectAll()); Not required, not selecting all the jobs html.append(snippets.header()); html.append(snippets.filter()); html.append(snippets.theadEnd()); html.append(snippets.tbodyStart()); html.append(snippets.body()); html.append(snippets.tbodyEnd()); html.append(snippets.footer()); html.append(snippets.statusBar()); html.append(snippets.tableEnd()); html.append(snippets.themeEnd()); html.append(snippets.initJavascriptLimit()); return html.toString(); } String selectAll() { HtmlBuilder html = new HtmlBuilder(); html.tr(1).styleClass("logic").close().td(1).colspan("100%").style("font-size: 12px;").close(); html.append("<b>" + resword.getString("table_sdv_select") + "</b>  "); html.append("<a name='checkSDVAll' href='javascript:selectAllChecks(document.scheduledJobsForm,true)'>" + resword.getString("table_sdv_all")); html.append(",</a>"); html.append("   "); html.append("<a name='checkSDVAll' href='javascript:selectAllChecks(document.scheduledJobsForm,false)'>" + resword.getString("table_sdv_none")); html.append("</a>"); html.tdEnd().trEnd(1); return html.toString(); } } @Override public void setDataAndLimitVariables(TableFacade tableFacade) { // TODO Auto-generated method stub } }