/* * Created on 24/03/2005 */ package DMS; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; /** * @author mtayler */ public class htmlGen { private HttpServletRequest FRequest; private HttpServletResponse FResponse; private templateXML FTemplate; private projectItem FDefaultProject; private templateItem FDefaultTemplate; private dbTemplateData FTemplateData; private static String PROJECT = "filterfieldproject"; private static String PROJECT_LABEL = "Projects"; private static String TEMPLATE = "filterfieldtemplate"; private static String TEMPLATE_LABEL = "Templates"; private static String TEMPLATE_XML = "TEMPLATE_XML"; private static String TEMPLATE_DATA = "TEMPLATE_DATA"; public htmlGen(HttpServletRequest request, HttpServletResponse response) { FRequest=request; FResponse=response; FTemplate = (templateXML)getAttribute(TEMPLATE_XML); if (FTemplate==null) { FTemplate = new templateXML(); setAttribute(TEMPLATE_XML,FTemplate); } String sDefaultProject = DMSUtils.NVL(getParameter(PROJECT)); String sDefaultTemplate = DMSUtils.NVL(getParameter(TEMPLATE)); FDefaultProject = FTemplate.getProjectByName(sDefaultProject); FDefaultTemplate = null; if (FDefaultProject!=null) { FDefaultTemplate = FDefaultProject.getTemplateByName(sDefaultTemplate); if (FDefaultTemplate!=null) { FTemplateData = (dbTemplateData)getAttribute(TEMPLATE_DATA); if (FTemplateData==null || !FTemplateData.getTemplate().equals(FDefaultTemplate)) { FTemplateData=new dbTemplateData(FDefaultTemplate, FRequest); setAttribute(TEMPLATE_DATA,FTemplateData); } FTemplateData.load(FRequest);//load all data } } } private void setAttribute(String key, Object obj) { if (FRequest!=null) FRequest.getSession(false).setAttribute(key, obj); } private Object getAttribute(String key) { if (FRequest!=null) return FRequest.getSession(false).getAttribute(key); else return null; } private String getParameter(String key) { if (FRequest!=null) return FRequest.getParameter(key); else return null; } private PrintWriter getWriter() { PrintWriter writer = null; try { writer=FResponse.getWriter(); } catch (Exception e) { e.printStackTrace(); } return writer; } private void write(String data) { PrintWriter writer=getWriter(); if (writer!=null) { writer.println(data); } } private String genCombo(String name, String label, comboDataItem[] data, String defValue, boolean bSelectAll, boolean bRefresh) { StringBuffer sb = new StringBuffer(); sb.append ("  "); sb.append("").append(DMSUtils.cleanHTMLStr(label)).append("").append(" ").append("\n"); sb.append ("  "); sb.append("").append("\n"); return sb.toString(); } private String genCombo(String name, String label, comboDataItem[] data, String defValue) { return genCombo(name, label, data, defValue, true, false); } public String genFilters() { StringBuffer sb = new StringBuffer(); String[] pnames = DMSUtils.SortArray(FTemplate.getProjectNames()); String sDefaultProject = DMSUtils.NVL(getParameter(PROJECT)); sb.append(genCombo(PROJECT,PROJECT_LABEL,DMSUtils.genComboDataItemArray(pnames,pnames),sDefaultProject, false, true)); if (FDefaultProject!=null) { String[] tnames = DMSUtils.SortArray(FDefaultProject.getTemplateNames()); String sDefaultTemplate = DMSUtils.NVL(getParameter(TEMPLATE)); sb.append ("  "); sb.append(genCombo(TEMPLATE,TEMPLATE_LABEL,DMSUtils.genComboDataItemArray(tnames,tnames),sDefaultTemplate, false, true)); } sb.append("
"); sb.append("
"); if (FDefaultTemplate!=null) { columnList cols = FDefaultTemplate.getColumns(); String[] colNames = cols.getColumnNames(); sb.append("").append("\n"); sb.append("").append("\n"); sb.append("").append("\n"); sb.append("").append("\n"); sb.append("
").append("\n"); for (int i=0;i"); sb.append("
"); //generate date range sb.append(genDateRange("daterangefield" + col.getName(),col.getLabel())); } else if (col.getDataType().equals("int") || col.getDataType().equals("number")|| col.getDataType().equals("integer")|| col.getDataType().equals("bigint")) { sb.append("
"); sb.append("
"); //generate date range sb.append(genNumberRange("numberrangefield" + col.getName(),col.getLabel())); } } } sb.append("
").append("\n"); sb.append("
"); sb.append(""); } return sb.toString(); } private String genMonthCombo(String name, String defValue) { StringBuffer sb = new StringBuffer(); sb.append ("  "); sb.append("").append("\n"); return sb.toString(); } public String genDate(String dateFieldName) { StringBuffer sb = new StringBuffer(); String nameDay=dateFieldName + "Day"; String nameMonth=dateFieldName + "Month"; String nameYear=dateFieldName + "Year"; String defaultValueDay = DMSUtils.NVL(getParameter(nameDay)); String defaultValueMonth = DMSUtils.NVL(getParameter(nameMonth)); String defaultValueYear = DMSUtils.NVL(getParameter(nameYear)); sb.append(""); sb.append ("  "); sb.append(genMonthCombo(nameMonth, defaultValueMonth)); sb.append ("  "); sb.append(""); return sb.toString(); } public String genDateRange( String dateRangeFieldName, String label) { StringBuffer sb = new StringBuffer(); sb.append ("  "); sb.append("").append(DMSUtils.cleanHTMLStr(label)).append("(dd-mmm-yyyy)").append("").append(" ").append("\n"); sb.append ("  "); sb.append(genDate(dateRangeFieldName + "From")); sb.append(" ").append("to").append("").append(" ").append("\n"); sb.append(genDate(dateRangeFieldName + "To")); return sb.toString(); } public String genNumberRange( String numberRangeFieldName, String label) { StringBuffer sb = new StringBuffer(); sb.append ("  "); sb.append("").append(DMSUtils.cleanHTMLStr(label)).append("").append(" ").append("\n"); sb.append ("  "); String nameFrom = numberRangeFieldName + "From"; String nameTo = numberRangeFieldName + "To"; String defaultValueFrom = DMSUtils.NVL(getParameter(nameFrom)); String defaultValueTo = DMSUtils.NVL(getParameter(nameTo)); sb.append ("").append("\n"); sb.append(" ").append("to").append("").append(" ").append("\n"); sb.append ("").append("\n"); return sb.toString(); } public String genHighlightLegend() { StringBuffer sb = new StringBuffer(); if (FDefaultTemplate!=null) { highlightList hList = FDefaultTemplate.getHighlights(); highlightItem[] highlights = hList.getHighlightItems(); sb.append("").append("\n"); for (int i=0;i").append("\n"); sb.append("").append("\n"); sb.append("").append("\n"); } sb.append("").append("\n"); } } sb.append("
").append("\n"); sb.append("Records that have \"").append(DMSUtils.cleanHTMLStr(highlights[i].getHighlightLogic())).append("\" have this colour").append("\n"); sb.append("
").append("\n"); sb.append("").append("\n"); if (hiddenCols.length>0) { sb.append("").append("\n"); } for (i=0;i").append("\n"); sb.append(DMSUtils.cleanHTMLStr(visibleCols[i].getLabel())).append("\n"); if (visibleCols[i].canSort()) { sortOrder=DMSUtils.NVL(getParameter("sortfield"+visibleCols[i].getName())); if (sortOrder.equals("asc")) { sb.append("").append("\n"); } else if (sortOrder.equals("desc")) { sb.append("").append("\n"); } else { sb.append("").append("\n"); } } sb.append("").append("\n"); } sb.append("").append("\n"); recID=0; while (FTemplateData.next()) { recID++; sb.append("").append("\n"); if (hiddenCols.length>0) { sb.append("").append("\n"); } for (i=0;i").append("\n"); if (visibleCols[i].isLink()) sb.append("").append("\n"); sb.append(DMSUtils.cleanHTMLStr(FTemplateData.getFieldValue(visibleCols[i].getName()), true)).append("\n"); if (visibleCols[i].isLink()) sb.append("").append("\n"); sb.append("").append("\n"); } sb.append("").append("\n"); if (colList.hasHiddenColumns()) { for (i=0;i").append("\n"); sb.append("").append("\n"); sb.append("").append("\n"); } } } sb.append("
").append("\n"); sb.append(" ").append("\n"); sb.append("
").append("\n"); sb.append("").append("\n"); sb.append("
").append("\n"); sb.append("").append(hiddenCols[i].getLabel()).append(": "); sb.append(DMSUtils.cleanHTMLStr(FTemplateData.getFieldValue(hiddenCols[i].getName()), true)).append("\n"); sb.append("
").append("\n"); } return sb.toString(); } public projectItem getProject() { return FDefaultProject; } public templateItem getTemplate() { return FDefaultTemplate; } public dbTemplateData getData() { return FTemplateData; } private boolean writeCSVField(PrintWriter out, String data, boolean firstColumn) { if (!firstColumn) { out.write(","); } else { firstColumn = false; } out.write(DMSUtils.cleanCSV(data)); return firstColumn; } public void exportData() { PrintWriter out = null ; int i; boolean firstColumn; FResponse.setContentType("text/csv"); FResponse.addHeader("Content-disposition","attachment;filename=export.csv"); try { out = FResponse.getWriter(); if (FDefaultTemplate!=null) { columnList colList = FDefaultTemplate.getColumns(); columnItem[] hiddenCols = colList.getHiddenColumns(); columnItem[] visibleCols = colList.getVisibleColumns(); // write labels firstColumn = true; for (i=0;i