Blame | Last modification | View Log | RSS feed
/** 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("<span class=comboLabelStyle>").append(DMSUtils.cleanHTMLStr(label)).append("</span>").append(" ").append("\n");sb.append (" ");sb.append("<select class=comboStyle name=\"").append(name).append("\" ").append(bRefresh?"onchange=\"javascript:refresh()\"":"").append(" onkeypress=\"if(window.event.keyCode =='13') refresh();\">").append("\n");if (bSelectAll) {sb.append("<option value=\"ALL\"").append(defValue!=null&&defValue.equals("ALL")?" selected ":"").append(">").append("\n");sb.append("All").append("\n");} else {sb.append("<option value=\"NONE\"").append(defValue!=null&&defValue.equals("NONE")?" selected ":"").append(">").append("\n");sb.append(DMSUtils.cleanHTMLStr("<Please select one>")).append("\n");}sb.append("</option>").append("\n");for (int i=0;i<data.length;i++) {if (data[i].getValue()!=null) {sb.append("<option value=\"").append(DMSUtils.cleanJStr(data[i].getValue())).append("\"").append(defValue!=null&&defValue.equals(data[i].getValue())?" selected ":"").append(">").append("\n");sb.append(DMSUtils.cleanHTMLStr(data[i].getDescrip())).append("\n");sb.append("</option>").append("\n");}}sb.append("</select>").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("<br>");sb.append("<br>");if (FDefaultTemplate!=null) {columnList cols = FDefaultTemplate.getColumns();String[] colNames = cols.getColumnNames();sb.append("<table border=0 class=tableStyle>").append("\n");sb.append("<tr>").append("\n");sb.append("<td>").append("\n");for (int i=0;i<colNames.length;i++) {columnItem col = FDefaultTemplate.getColumnByName(colNames[i]);if (col.canFilter() && !col.getDataType().equals("datetime") && !col.getDataType().equals("date")) {//generate combo filterString [] colData = DMSUtils.SortArray(FTemplateData.getDistinctValues(col.getName()));String defaultValue = DMSUtils.NVL(getParameter("filterfield"+col.getName()));sb.append(genCombo("filterfield" + col.getName(),col.getLabel(),DMSUtils.genComboDataItemArray(colData,colData),defaultValue));}}for (int i=0;i<colNames.length;i++) {columnItem col = FDefaultTemplate.getColumnByName(colNames[i]);if (col.canFilter()) {if (col.getDataType().equals("datetime") || col.getDataType().equals("date")) {sb.append("<br>");sb.append("<br>");//generate date rangesb.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("<br>");sb.append("<br>");//generate date rangesb.append(genNumberRange("numberrangefield" + col.getName(),col.getLabel()));}}}sb.append("</td>").append("\n");sb.append("</tr>").append("\n");sb.append("</table>").append("\n");sb.append("<br>");sb.append("<input type=button value=\"Filter\" onclick=\"javascript:refresh()\">");}return sb.toString();}private String genMonthCombo(String name, String defValue) {StringBuffer sb = new StringBuffer();sb.append (" ");sb.append("<select class=comboStyle name=\"").append(name).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">").append("\n");sb.append("<option value=\"NONE\"").append(defValue!=null&&defValue.equals("NONE")?" selected ":"").append(">").append("\n");sb.append(" ").append("\n");sb.append("</option>").append("\n");String [] data = {"Jan", "Feb", "Mar", "Apr", "May","Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};for (int i=0;i<data.length;i++) {if (data[i]!=null) {sb.append("<option value=\"").append(i).append("\"").append(defValue!=null&&defValue.equals(Integer.toString(i))?" selected ":"").append(">").append("\n");sb.append(DMSUtils.cleanHTMLStr(data[i])).append("\n");sb.append("</option>").append("\n");}}sb.append("</select>").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("<input type=text size=2 name=\"").append(nameDay).append("\" value=\"").append(DMSUtils.cleanJStr(defaultValueDay)).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">");sb.append (" ");sb.append(genMonthCombo(nameMonth, defaultValueMonth));sb.append (" ");sb.append("<input type=text size=4 name=\"").append(nameYear).append("\" value=\"").append(DMSUtils.cleanJStr(defaultValueYear)).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">");return sb.toString();}public String genDateRange( String dateRangeFieldName, String label) {StringBuffer sb = new StringBuffer();sb.append (" ");sb.append("<span class=comboLabelStyle>").append(DMSUtils.cleanHTMLStr(label)).append("(dd-mmm-yyyy)").append("</span>").append(" ").append("\n");sb.append (" ");sb.append(genDate(dateRangeFieldName + "From"));sb.append(" <span class=comboLabelStyle>").append("to").append("</span>").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("<span class=comboLabelStyle>").append(DMSUtils.cleanHTMLStr(label)).append("</span>").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 ("<input type=text name=\"").append(nameFrom).append("\" value=\"").append(DMSUtils.cleanJStr(defaultValueFrom)).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">").append("\n");sb.append(" <span class=comboLabelStyle>").append("to").append("</span>").append(" ").append("\n");sb.append ("<input type=text name=\"").append(nameTo).append("\" value=\"").append(DMSUtils.cleanJStr(defaultValueTo)).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">").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("<table width=100% border=0 cellspacing=0>").append("\n");for (int i=0;i<highlights.length;i++) {sb.append("<tr class=").append(highlights[i].getStyleClass()).append(">").append("\n");sb.append("<td>").append("\n");sb.append("Records that have \"").append(DMSUtils.cleanHTMLStr(highlights[i].getHighlightLogic())).append("\" have this colour").append("\n");sb.append("</td>").append("\n");sb.append("</tr>").append("\n");}sb.append("</table").append("\n");}return sb.toString();}public String genData() {StringBuffer sb = new StringBuffer();int i, recID;String sortOrder;if (FDefaultTemplate!=null) {columnList colList = FDefaultTemplate.getColumns();columnItem[] hiddenCols = colList.getHiddenColumns();columnItem[] visibleCols = colList.getVisibleColumns();highlightList hList = FDefaultTemplate.getHighlights();for (i=0;i<visibleCols.length;i++) {if (visibleCols[i].canSort()) {sortOrder=DMSUtils.NVL(getParameter("sortfield"+visibleCols[i].getName()));sb.append("<input type=hidden id=sortfield").append(visibleCols[i].getName()).append(" name=sortfield").append(visibleCols[i].getName()).append(" value=\"").append(sortOrder).append("\">").append("\n");}}sb.append("<table border=1 class=tableStyle>").append("\n");sb.append("<tr class=headerStyle>").append("\n");if (hiddenCols.length>0) {sb.append("<td width=10 >").append("\n");sb.append(" ").append("\n");sb.append("</td>").append("\n");}for (i=0;i<visibleCols.length;i++) {sb.append("<td nowrap ");if (visibleCols[i].canSort()) {sb.append("onmouseover=\"this.className='headerMouseOverStyle';\" onmouseout=\"this.className='headerStyle';\" onclick=\"sort(sortfield").append(visibleCols[i].getName()).append(");\" ").append("\n");}sb.append("style=\"width:").append(visibleCols[i].getWidth()).append("\">").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("<img id=img").append(visibleCols[i].getName()).append(" src=\"images/SortUpArrow.gif\">").append("\n");} else if (sortOrder.equals("desc")) {sb.append("<img id=img").append(visibleCols[i].getName()).append(" src=\"images/SortDownArrow.gif\">").append("\n");} else {sb.append("<img id=img").append(visibleCols[i].getName()).append(" src=\"images/NoSortArrow.gif\">").append("\n");}}sb.append("</td>").append("\n");}sb.append("</tr>").append("\n");recID=0;while (FTemplateData.next()) {recID++;sb.append("<tr style=\"width:100%\" class=").append(hList.getHighlightStyle(FTemplateData.getRecord())).append(">").append("\n");if (hiddenCols.length>0) {sb.append("<td width=10 onclick=\"toggleButton(TAG").append(recID).append(", BTN").append(recID).append(");\">").append("\n");sb.append("<img name=collapsed id=BTN").append(recID).append(" src=\"images/collapsed.gif\">").append("\n");sb.append("</td>").append("\n");}for (i=0;i<visibleCols.length;i++) {sb.append("<td class=visibleDataStyle style=\"width:").append(visibleCols[i].getWidth()).append("\" ").append(">").append("\n");if (visibleCols[i].isLink())sb.append("<a href=\"").append(DMSUtils.cleanJStr(DMSUtils.replaceParams(visibleCols[i].getLink(), FTemplateData))).append("\">").append("\n");sb.append(DMSUtils.cleanHTMLStr(FTemplateData.getFieldValue(visibleCols[i].getName()), true)).append("\n");if (visibleCols[i].isLink())sb.append("</a>").append("\n");sb.append("</td>").append("\n");}sb.append("</tr>").append("\n");if (colList.hasHiddenColumns()) {for (i=0;i<hiddenCols.length;i++) {sb.append("<tr id=TAG").append(recID).append(" style=\"width:100%\" class=hiddenDataStyle>").append("\n");sb.append("<td colspan=").append(visibleCols.length+1).append(">").append("\n");sb.append("<span class=hiddenDataLabelStyle>").append(hiddenCols[i].getLabel()).append(":</span> ");sb.append(DMSUtils.cleanHTMLStr(FTemplateData.getFieldValue(hiddenCols[i].getName()), true)).append("\n");sb.append("</td>").append("\n");sb.append("</tr>").append("\n");}}}sb.append("</table>").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 labelsfirstColumn = true;for (i=0;i<visibleCols.length;i++) {firstColumn = writeCSVField(out, visibleCols[i].getLabel(), firstColumn);}for (i=0;i<hiddenCols.length;i++) {firstColumn = writeCSVField(out, hiddenCols[i].getLabel(), firstColumn);}out.write("\r\n"); // next linewhile (FTemplateData.next()) {firstColumn = true;for (i=0;i<visibleCols.length;i++) {firstColumn = writeCSVField(out, FTemplateData.getFieldValue(visibleCols[i].getName()), firstColumn);}for (i=0;i<hiddenCols.length;i++) {firstColumn = writeCSVField(out, FTemplateData.getFieldValue(hiddenCols[i].getName()), firstColumn);}out.write("\r\n"); // next line}}} catch (Exception e) {e.printStackTrace(out);}}}