Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2308 mtayler 1
/*
2
 * Created on 24/03/2005
3
 */
4
package DMS;
5
 
6
import javax.servlet.http.HttpServletRequest;
7
import javax.servlet.http.HttpServletResponse;
8
import java.io.PrintWriter;
9
 
10
 
11
/**
12
 * @author mtayler
13
 */
14
 
15
public class htmlGen {
16
 
17
	private HttpServletRequest FRequest;
18
	private HttpServletResponse FResponse;
19
	private templateXML FTemplate;
20
 
21
	private projectItem FDefaultProject;
22
	private templateItem FDefaultTemplate;
23
	private dbTemplateData FTemplateData;
24
 
25
	private static String PROJECT = "filterfieldproject";
26
	private static String PROJECT_LABEL = "Projects";
27
	private static String TEMPLATE = "filterfieldtemplate";
28
	private static String TEMPLATE_LABEL = "Templates";
29
	private static String TEMPLATE_XML = "TEMPLATE_XML";
30
	private static String TEMPLATE_DATA = "TEMPLATE_DATA";
31
 
32
 
33
	public htmlGen(HttpServletRequest request, HttpServletResponse response) {
34
		FRequest=request;
35
		FResponse=response;
36
 
37
		FTemplate = (templateXML)getAttribute(TEMPLATE_XML);
38
		if (FTemplate==null) {
39
			FTemplate = new templateXML();
40
			setAttribute(TEMPLATE_XML,FTemplate);
41
		}
42
 
43
		String sDefaultProject = DMSUtils.NVL(getParameter(PROJECT));		
44
		String sDefaultTemplate = DMSUtils.NVL(getParameter(TEMPLATE));		
45
		FDefaultProject = FTemplate.getProjectByName(sDefaultProject);		
46
		FDefaultTemplate = null;
47
		if (FDefaultProject!=null) {
48
			FDefaultTemplate = FDefaultProject.getTemplateByName(sDefaultTemplate);
49
			if (FDefaultTemplate!=null) {
50
 
51
				FTemplateData = (dbTemplateData)getAttribute(TEMPLATE_DATA);
52
				if (FTemplateData==null || !FTemplateData.getTemplate().equals(FDefaultTemplate)) {
53
					FTemplateData=new dbTemplateData(FDefaultTemplate, FRequest);
54
					setAttribute(TEMPLATE_DATA,FTemplateData);
55
				}
56
				FTemplateData.load(FRequest);//load all data
57
			}			
58
		}	
59
 
60
	}
61
 
62
	private void setAttribute(String key, Object obj) {
63
		if (FRequest!=null) FRequest.getSession(false).setAttribute(key, obj);
64
	}
65
 
66
	private Object getAttribute(String key) {		
67
		if (FRequest!=null) return FRequest.getSession(false).getAttribute(key);
68
		else return null;		
69
	}
70
 
71
	private String getParameter(String key) {
72
		if (FRequest!=null) return FRequest.getParameter(key);
73
		else return null;
74
	}
75
 
76
	private PrintWriter getWriter() {
77
		PrintWriter writer = null;		
78
		try {
79
			writer=FResponse.getWriter();	
80
		} catch (Exception e) {
81
			e.printStackTrace();
82
		}
83
 
84
		return writer;
85
	}
86
 
87
	private void write(String data) {
88
		PrintWriter writer=getWriter(); 
89
 
90
		if (writer!=null) {
91
			writer.println(data);
92
		}
93
	}
94
 
95
	private String genCombo(String name, String label, comboDataItem[] data, String defValue, boolean bSelectAll, boolean bRefresh) {
96
		StringBuffer sb = new StringBuffer();
97
		sb.append ("  ");
98
		sb.append("<span class=comboLabelStyle>").append(DMSUtils.cleanHTMLStr(label)).append("</span>").append("&nbsp;").append("\n");
99
		sb.append ("&nbsp;&nbsp;");
100
		sb.append("<select class=comboStyle name=\"").append(name).append("\" ").append(bRefresh?"onchange=\"javascript:refresh()\"":"").append(" onkeypress=\"if(window.event.keyCode =='13') refresh();\">").append("\n");
101
		if (bSelectAll) {
102
			sb.append("<option value=\"ALL\"").append(defValue!=null&&defValue.equals("ALL")?" selected ":"").append(">").append("\n");
103
			sb.append("All").append("\n");
104
		} else {
105
			sb.append("<option value=\"NONE\"").append(defValue!=null&&defValue.equals("NONE")?" selected ":"").append(">").append("\n");
106
			sb.append(DMSUtils.cleanHTMLStr("<Please select one>")).append("\n");
107
		}
108
		sb.append("</option>").append("\n");			
109
 
110
		for (int i=0;i<data.length;i++) {			
111
			if (data[i].getValue()!=null) {
112
				sb.append("<option value=\"").append(DMSUtils.cleanJStr(data[i].getValue())).append("\"").append(defValue!=null&&defValue.equals(data[i].getValue())?" selected ":"").append(">").append("\n");
113
				sb.append(DMSUtils.cleanHTMLStr(data[i].getDescrip())).append("\n");
114
				sb.append("</option>").append("\n");
115
			}
116
		}
117
		sb.append("</select>").append("\n");				
118
		return sb.toString();		
119
	}
120
 
121
	private String genCombo(String name, String label, comboDataItem[] data, String defValue) {
122
		return genCombo(name, label, data, defValue, true, false);
123
	}
124
 
125
	public String genFilters() {	
126
 
127
		StringBuffer sb = new StringBuffer();
128
 
129
		String[] pnames = DMSUtils.SortArray(FTemplate.getProjectNames());
130
		String sDefaultProject = DMSUtils.NVL(getParameter(PROJECT));
131
		sb.append(genCombo(PROJECT,PROJECT_LABEL,DMSUtils.genComboDataItemArray(pnames,pnames),sDefaultProject, false, true));				
132
 
133
		if (FDefaultProject!=null) {
134
 
135
			String[] tnames = DMSUtils.SortArray(FDefaultProject.getTemplateNames());
136
			String sDefaultTemplate = DMSUtils.NVL(getParameter(TEMPLATE));
137
			sb.append ("&nbsp;&nbsp;");
138
			sb.append(genCombo(TEMPLATE,TEMPLATE_LABEL,DMSUtils.genComboDataItemArray(tnames,tnames),sDefaultTemplate, false, true));			
139
		}	
140
 
141
		sb.append("<br>");
142
		sb.append("<br>");		
143
 
144
		if (FDefaultTemplate!=null) {
145
 
146
			columnList cols = FDefaultTemplate.getColumns();
147
			String[] colNames = cols.getColumnNames();
148
 
149
			sb.append("<table border=0 class=tableStyle>").append("\n");
150
			sb.append("<tr>").append("\n");	
151
			sb.append("<td>").append("\n");	
152
 
153
			for (int i=0;i<colNames.length;i++) {
154
				columnItem col = FDefaultTemplate.getColumnByName(colNames[i]);				
155
				if (col.canFilter() && !col.getDataType().equals("datetime") && !col.getDataType().equals("date")) {					
156
					//generate combo filter
157
					String [] colData = DMSUtils.SortArray(FTemplateData.getDistinctValues(col.getName()));
158
					String defaultValue = DMSUtils.NVL(getParameter("filterfield"+col.getName()));
159
 
160
					sb.append(genCombo("filterfield" + col.getName(),col.getLabel(),DMSUtils.genComboDataItemArray(colData,colData),defaultValue));
161
				}
162
			}						
163
 
164
			for (int i=0;i<colNames.length;i++) {
165
				columnItem col = FDefaultTemplate.getColumnByName(colNames[i]);				
166
				if (col.canFilter()) {
167
					if (col.getDataType().equals("datetime") || col.getDataType().equals("date")) {
168
						sb.append("<br>");
169
						sb.append("<br>");																
170
						//generate date range				
171
						sb.append(genDateRange("daterangefield" + col.getName(),col.getLabel()));
172
					} else if (col.getDataType().equals("int") || col.getDataType().equals("number")|| col.getDataType().equals("integer")|| col.getDataType().equals("bigint")) {
173
						sb.append("<br>");
174
						sb.append("<br>");										
175
						//generate date range				
176
						sb.append(genNumberRange("numberrangefield" + col.getName(),col.getLabel()));						
177
					}
178
				} 
179
			}
180
 
181
			sb.append("</td>").append("\n");			
182
			sb.append("</tr>").append("\n");
183
			sb.append("</table>").append("\n");			
184
 
185
			sb.append("<br>");
186
			sb.append("<input type=button value=\"Filter\" onclick=\"javascript:refresh()\">");			
187
		}
188
 
189
		return sb.toString();
190
	}
191
 
192
 
193
	private String genMonthCombo(String name, String defValue) {
194
		StringBuffer sb = new StringBuffer();
195
		sb.append ("&nbsp;&nbsp;");
196
		sb.append("<select class=comboStyle name=\"").append(name).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">").append("\n");
197
 
198
		sb.append("<option value=\"NONE\"").append(defValue!=null&&defValue.equals("NONE")?" selected ":"").append(">").append("\n");
199
		sb.append("&nbsp;").append("\n");
200
		sb.append("</option>").append("\n");			
201
 
202
		String [] data = {"Jan", "Feb", "Mar", "Apr", "May","Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
203
 
204
		for (int i=0;i<data.length;i++) {			
205
			if (data[i]!=null) {
206
				sb.append("<option value=\"").append(i).append("\"").append(defValue!=null&&defValue.equals(Integer.toString(i))?" selected ":"").append(">").append("\n");
207
				sb.append(DMSUtils.cleanHTMLStr(data[i])).append("\n");
208
				sb.append("</option>").append("\n");
209
			}
210
		}
211
		sb.append("</select>").append("\n");				
212
		return sb.toString();		
213
	}
214
 
215
	public String genDate(String dateFieldName) {
216
		StringBuffer sb = new StringBuffer();
217
 
218
		String nameDay=dateFieldName + "Day";
219
		String nameMonth=dateFieldName + "Month"; 
220
		String nameYear=dateFieldName + "Year";
221
 
222
		String defaultValueDay = DMSUtils.NVL(getParameter(nameDay));
223
		String defaultValueMonth = DMSUtils.NVL(getParameter(nameMonth));
224
		String defaultValueYear = DMSUtils.NVL(getParameter(nameYear));
225
 
226
		sb.append("<input type=text size=2 name=\"").append(nameDay).append("\" value=\"").append(DMSUtils.cleanJStr(defaultValueDay)).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">");
227
 
228
		sb.append ("&nbsp;&nbsp;");
229
 
230
		sb.append(genMonthCombo(nameMonth, defaultValueMonth));
231
 
232
		sb.append ("&nbsp;&nbsp;");
233
 
234
		sb.append("<input type=text size=4 name=\"").append(nameYear).append("\" value=\"").append(DMSUtils.cleanJStr(defaultValueYear)).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">");				
235
 
236
		return sb.toString();
237
	}
238
 
239
	public String genDateRange( String dateRangeFieldName, String label) {		
240
		StringBuffer sb = new StringBuffer();
241
 
242
		sb.append ("&nbsp;&nbsp;");
243
		sb.append("<span class=comboLabelStyle>").append(DMSUtils.cleanHTMLStr(label)).append("(dd-mmm-yyyy)").append("</span>").append("&nbsp;").append("\n");
244
		sb.append ("&nbsp;&nbsp;");
245
 
246
		sb.append(genDate(dateRangeFieldName + "From"));
247
 
248
		sb.append("&nbsp;<span class=comboLabelStyle>").append("to").append("</span>").append("&nbsp;").append("\n");
249
 
250
		sb.append(genDate(dateRangeFieldName + "To"));
251
 
252
		return sb.toString();
253
	}
254
 
255
	public String genNumberRange( String numberRangeFieldName, String label) {		
256
		StringBuffer sb = new StringBuffer();
257
 
258
		sb.append ("&nbsp;&nbsp;");
259
		sb.append("<span class=comboLabelStyle>").append(DMSUtils.cleanHTMLStr(label)).append("</span>").append("&nbsp;").append("\n");
260
		sb.append ("&nbsp;&nbsp;");
261
 
262
		String nameFrom = numberRangeFieldName + "From";
263
		String nameTo = numberRangeFieldName + "To";
264
 
265
		String defaultValueFrom = DMSUtils.NVL(getParameter(nameFrom));
266
		String defaultValueTo = DMSUtils.NVL(getParameter(nameTo));
267
 
268
		sb.append ("<input type=text name=\"").append(nameFrom).append("\" value=\"").append(DMSUtils.cleanJStr(defaultValueFrom)).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">").append("\n");
269
 
270
		sb.append("&nbsp;<span class=comboLabelStyle>").append("to").append("</span>").append("&nbsp;").append("\n");
271
 
272
		sb.append ("<input type=text name=\"").append(nameTo).append("\" value=\"").append(DMSUtils.cleanJStr(defaultValueTo)).append("\" onkeypress=\"if(window.event.keyCode =='13') refresh();\">").append("\n");		
273
 
274
		return sb.toString();
275
	}
276
 
277
 
278
	public String genHighlightLegend() {
279
		StringBuffer sb = new StringBuffer(); 
280
		if (FDefaultTemplate!=null) {
281
			highlightList hList = FDefaultTemplate.getHighlights();
282
			highlightItem[] highlights = hList.getHighlightItems();
283
 
284
			sb.append("<table width=100% border=0 cellspacing=0>").append("\n");
285
			for (int i=0;i<highlights.length;i++) {
286
				sb.append("<tr class=").append(highlights[i].getStyleClass()).append(">").append("\n");				
287
				sb.append("<td>").append("\n");
288
				sb.append("Records that have \"").append(DMSUtils.cleanHTMLStr(highlights[i].getHighlightLogic())).append("\" have this colour").append("\n");
289
				sb.append("</td>").append("\n");				
290
				sb.append("</tr>").append("\n");
291
			}			
292
			sb.append("</table").append("\n");
293
		}
294
		return sb.toString();
295
	}
296
 
297
	public String genData() {
298
		StringBuffer sb = new StringBuffer();
299
		int i, recID;
300
		String sortOrder;
301
 
302
		if (FDefaultTemplate!=null) {
303
			columnList colList = FDefaultTemplate.getColumns();
304
			columnItem[] hiddenCols = colList.getHiddenColumns();
305
			columnItem[] visibleCols = colList.getVisibleColumns();
306
			highlightList hList = FDefaultTemplate.getHighlights();
307
 
308
			for (i=0;i<visibleCols.length;i++) {
309
				if (visibleCols[i].canSort()) {
310
					sortOrder=DMSUtils.NVL(getParameter("sortfield"+visibleCols[i].getName()));
311
					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");
312
				}
313
			}
314
 
315
			sb.append("<table border=1 class=tableStyle>").append("\n");
316
			sb.append("<tr class=headerStyle>").append("\n");
317
			if (hiddenCols.length>0) {				
318
				sb.append("<td width=10 >").append("\n");
319
				sb.append("&nbsp;").append("\n");
320
				sb.append("</td>").append("\n");							
321
			}
322
			for (i=0;i<visibleCols.length;i++) {
323
				sb.append("<td nowrap ");
324
				if (visibleCols[i].canSort()) {
325
					sb.append("onmouseover=\"this.className='headerMouseOverStyle';\" onmouseout=\"this.className='headerStyle';\" onclick=\"sort(sortfield").append(visibleCols[i].getName()).append(");\" ").append("\n");
326
				}
327
				sb.append("style=\"width:").append(visibleCols[i].getWidth()).append("\">").append("\n");
328
				sb.append(DMSUtils.cleanHTMLStr(visibleCols[i].getLabel())).append("\n");
329
				if (visibleCols[i].canSort()) {
330
					sortOrder=DMSUtils.NVL(getParameter("sortfield"+visibleCols[i].getName()));
331
 
332
					if (sortOrder.equals("asc")) {
333
						sb.append("<img id=img").append(visibleCols[i].getName()).append(" src=\"images/SortUpArrow.gif\">").append("\n");		
334
					} else if (sortOrder.equals("desc")) {
335
						sb.append("<img id=img").append(visibleCols[i].getName()).append(" src=\"images/SortDownArrow.gif\">").append("\n");
336
					} else {
337
						sb.append("<img id=img").append(visibleCols[i].getName()).append(" src=\"images/NoSortArrow.gif\">").append("\n");
338
					}
339
				}
340
				sb.append("</td>").append("\n");				
341
			}
342
			sb.append("</tr>").append("\n");
343
 
344
			recID=0;
345
			while (FTemplateData.next()) {
346
 
347
				recID++;
348
				sb.append("<tr  style=\"width:100%\" class=").append(hList.getHighlightStyle(FTemplateData.getRecord())).append(">").append("\n");
349
 
350
				if (hiddenCols.length>0) {
351
					sb.append("<td width=10 onclick=\"toggleButton(TAG").append(recID).append(", BTN").append(recID).append(");\">").append("\n");
352
					sb.append("<img name=collapsed id=BTN").append(recID).append(" src=\"images/collapsed.gif\">").append("\n");
353
					sb.append("</td>").append("\n");
354
				}
355
 
356
				for (i=0;i<visibleCols.length;i++) {
357
					sb.append("<td class=visibleDataStyle style=\"width:").append(visibleCols[i].getWidth()).append("\" ").append(">").append("\n");
358
 
359
					if (visibleCols[i].isLink())
360
						sb.append("<a href=\"").append(DMSUtils.cleanJStr(DMSUtils.replaceParams(visibleCols[i].getLink(), FTemplateData))).append("\">").append("\n");
361
 
362
					sb.append(DMSUtils.cleanHTMLStr(FTemplateData.getFieldValue(visibleCols[i].getName()), true)).append("\n");
363
 
364
					if (visibleCols[i].isLink())
365
						sb.append("</a>").append("\n");
366
					sb.append("</td>").append("\n");
367
				}			
368
				sb.append("</tr>").append("\n");
369
 
370
				if (colList.hasHiddenColumns()) {
371
 
372
					for (i=0;i<hiddenCols.length;i++) {						
373
						sb.append("<tr id=TAG").append(recID).append(" style=\"width:100%\" class=hiddenDataStyle>").append("\n");
374
						sb.append("<td colspan=").append(visibleCols.length+1).append(">").append("\n");
375
						sb.append("<span class=hiddenDataLabelStyle>").append(hiddenCols[i].getLabel()).append(":</span>&nbsp;");
376
						sb.append(DMSUtils.cleanHTMLStr(FTemplateData.getFieldValue(hiddenCols[i].getName()), true)).append("\n");
377
						sb.append("</td>").append("\n");					
378
						sb.append("</tr>").append("\n");
379
					}
380
				}
381
 
382
			}		
383
			sb.append("</table>").append("\n");
384
		}
385
 
386
		return sb.toString(); 		
387
	}
388
 
389
	public projectItem getProject() {
390
		return FDefaultProject;
391
	}
392
 
393
	public templateItem getTemplate() {
394
		return FDefaultTemplate;		
395
	}
396
 
397
	public dbTemplateData getData() {
398
		return FTemplateData;		
399
	}
400
 
401
	private boolean writeCSVField(PrintWriter out, String data, boolean firstColumn) {
402
		if (!firstColumn) {
403
			out.write(",");
404
		} else {
405
			firstColumn = false;
406
		}					
407
		out.write(DMSUtils.cleanCSV(data));
408
 
409
		return firstColumn;
410
	}
411
 
412
 
413
	public void exportData() {
414
		PrintWriter out = null ;
415
		int i;
416
		boolean firstColumn;
417
 
418
		FResponse.setContentType("text/csv");
419
		FResponse.addHeader("Content-disposition","attachment;filename=export.csv");
420
		try {
421
			out = FResponse.getWriter();
422
 
423
			if (FDefaultTemplate!=null) {
424
				columnList colList = FDefaultTemplate.getColumns();
425
 
426
				columnItem[] hiddenCols = colList.getHiddenColumns();
427
				columnItem[] visibleCols = colList.getVisibleColumns();
428
 
429
				// write labels
430
 
431
				firstColumn  = true;
432
				for (i=0;i<visibleCols.length;i++) {
433
					firstColumn = writeCSVField(out, visibleCols[i].getLabel(), firstColumn);
434
				}
435
 
436
				for (i=0;i<hiddenCols.length;i++) {
437
					firstColumn = writeCSVField(out, hiddenCols[i].getLabel(), firstColumn);
438
				}
439
 
440
				out.write("\r\n"); // next line
441
 
442
				while (FTemplateData.next()) {
443
 
444
					firstColumn  = true;
445
					for (i=0;i<visibleCols.length;i++) {
446
						firstColumn = writeCSVField(out, FTemplateData.getFieldValue(visibleCols[i].getName()), firstColumn);
447
					}
448
 
449
					for (i=0;i<hiddenCols.length;i++) {
450
						firstColumn = writeCSVField(out, FTemplateData.getFieldValue(hiddenCols[i].getName()), firstColumn);
451
					}
452
 
453
					out.write("\r\n"); // next line					
454
				}		
455
			}
456
 
457
		} catch (Exception e) {
458
			e.printStackTrace(out);
459
		}
460
 
461
 
462
	}
463
 
464
}