To complement the data export tool here is a data import solution:
Steps
1. upload a preformated* spreadsheet file (ms xl or similar)
2. [data gets populated into a clearing/holding table for validation and corrections if any]
3. click Commit to execute an PL sql function (that processes the data from the holding table into the relevant table(s)
Requirements
1. temporary table to hold the imported data
2. a preformated XL file
3. PF componenets (datatable and fileupload)
4. ActionListeners
5. pl/sql function to process data from the holding table into the necessary table(s)
Mabura Ze Guru
Experiences of an OpenSource developer.. "Everyday trying to get closer to the metal".
Tuesday, October 14, 2014
Wednesday, September 10, 2014
Programaticaly creating/initializing Primefaces Gridform
Another one for you Mike,
This should guide you on how to dynamicaly create p:gridform
This should guide you on how to dynamicaly create p:gridform
1: public static HtmlPanelGrid buildGridForm(XMLElement pg, LazyModel _model, DataSource d, HashMap<String,String> _props, int _userId, int _orgId){
2: setDs(d);
3: FacesContext fc = FacesContext.getCurrentInstance();
4: Application application = fc.getApplication();
5: ExpressionFactory ef = application.getExpressionFactory();
6: ELContext elc = fc.getELContext();
7: HtmlPanelGrid pGrid = new HtmlPanelGrid();
8: boolean embedded = false;
9: String user = pg.getAttribute("user");
10: if(user != null){
11: log.info("Building GRIDFORM.. user=" + user + ",_userId = " + _userId);
12: _props.put(user,"" + _userId + "");
13: }
14: if(_model != null)
15: embedded = true;
16: if(embedded) //if xpandable
17: pGrid.setId("xgf" + pg.getAttribute("key","x") + pg.getAttribute("keyfield","kf").replace("_",""));
18: else
19: pGrid.setId("gf" + pg.getAttribute("key","x") + pg.getAttribute("keyfield","kf").replace("_",""));
20: pGrid.setColumns(Integer.parseInt(pg.getAttribute("columns","4")));
21: pGrid.setTitle(pg.getAttribute("title","NO TITLE"));
22: pGrid.setStyle(pg.getAttribute("style","font-size:11px; text-align:left; padding-right:0px"));
23: pGrid.setStyleClass(pg.getAttribute("styleclass",""));
24: pGrid.setCellpadding(pg.getAttribute("cellpadding","0 px"));
25: pGrid.setCellspacing(pg.getAttribute("cellspacing","5 px"));
26: pGrid.setRendered(Boolean.parseBoolean(pg.getAttribute("visible","true")));
27: LazyModel parentModel = null;
28: boolean isChild = false; //linked to another datatable
29: //boolean isInput = false; //gets input from another datatable
30: //boolean isNested = false; //has nested children table within a table
31: //boolean isNew = Boolean.parseBoolean(pg.getAttribute("new","false"));
32: String link = pg.getAttribute("link","");
33: String input = pg.getAttribute("input","");
34: if(!link.equals("")){ //if a child
35: //log.info("PARENT for FORM link = " + link);
36: DataTable parent = (DataTable)FacesAccessor.getUIComponent("mainForm:dt" + link.split(":")[0] + (link.split(":")[1]).replace("_",""));
37: //log.info("FOUND parent id = " + parent.getId()); //
38: isChild = true;
39: parentModel = (LazyModel)parent.getValue();
40: }
41: else if(!input.equals("")){ //if a child
42: //log.info("PARENT for FORM link = " + link);
43: DataTable parent = (DataTable)FacesAccessor.getUIComponent("mainForm:dt" + input.split(":")[0] + (input.split(":")[1]).replace("_",""));
44: //log.info("FOUND parent id = " + parent.getId()); //
45: //isChild = true;
46: parentModel = (LazyModel)parent.getValue();
47: }
48: //activiti task variables
49: Map<String,Object> tVars = new HashMap<String, Object>();
50: for(XMLElement el : pg.getElements()) {
51: //label first
52: OutputLabel label = new OutputLabel();
53: label.setId("lbl" + pGrid.getId() + "_" + el.getValue());
54: label.setValue(el.getAttribute("title"));
55: pGrid.getChildren().add(label);
56: boolean isInput = false;
57: if(el.getAttribute("input","false").equals("true"))
58: isInput = true;
59: //activiti task variables
60: if(!el.getAttribute("var","").equals("")){
61: //get XML ELEMENTS marked with var="true" and use as Activiti Task Variables
62: tVars.put(el.getAttribute("var"),"");
63: }
64: // if(el.getName().equals("USERFIELD")){
65: // InputText txtUser = new InputText();
66: // txtUser.setId("txt" + pGrid.getId() + "_" + el.getValue());
67: // txtUser.setValue("loggedInUser");
68: // }
69: // else if(el.getName().equals("DEFAULT")){
70: // InputText txtDefault = new InputText();
71: // txtDefault.setId("txt" + pGrid.getId() + "_" + el.getValue());
72: // txtUser.setValue("loggedInUser");
73: // }
74: String defaultVal = el.getAttribute("defaultvalue");
75: if(el.getName().equals("TEXTFIELD")){
76: if(embedded){
77: InputText txt = new InputText();
78: txt.setId("txt" + pGrid.getId() + "_" + el.getValue());
79: txt.setSize(Integer.parseInt(el.getAttribute("w","25")));
80: //ValueExpression embVE = FacesAccessor.createValueExpression(elc, "#{item[" + _model.getDataIndex(el.getValue()) + "]}", String.class);
81: ValueExpression embVE = FacesAccessor.createValueExpression(elc, "#{item[" + _model.getDataIndex(el.getValue()) + "]}", String.class);
82: txt.setValueExpression("value",embVE);
83: txt.addClientBehavior("save", EventsManager.createAjaxBehaviour("inplaceUpdate","@parent"));
84: //txt.addClientBehavior("cancel", EventsManager.createAjaxBehaviour("inPlaceSave","@none"));
85: if(!el.getAttribute("tooltip","").equals(""))
86: txt.setTitle(el.getAttribute("tooltip"));
87: //txt.setValidator();
88: if(!el.getAttribute("requiredmessage","").equals("")){ //if there is a requiredmessage
89: txt.setRequired(true);
90: txt.setRequiredMessage(el.getAttribute("requiredmessage"));
91: }
92: label.setFor("txt" + pGrid.getId() + "_" + el.getValue());
93: Inplace inp = new Inplace();
94: //inp.setLabel(el.getAttribute("title","No Title"));
95: //inp.setValueExpression("label",FacesAccessor.createValueExpression(elc, "#{item[" + _model.getDataIndex(el.getValue()) + "]}", String.class));
96: inp.setValueExpression("label",FacesAccessor.createValueExpression(elc, "#{item[" + _model.getDataIndex(el.getValue()) + "]}", String.class));
97: inp.setEmptyLabel("EMPTY");
98: inp.setEditor(true);
99: inp.setSaveLabel("Save");
100: inp.setCancelLabel("Cancel");
101: inp.setEvent(el.getAttribute("event","click"));
102: inp.setToggleable(true);
103: inp.getChildren().add(txt);
104: pGrid.getChildren().add(inp);
105: }
106: else if(el.getAttribute("inline","false").equals("false")){
107: //log.info("FOUND TEXTFIELD value = " + el.getValue());
108: InputText txt = new InputText();
109: txt.setId("txt" + pGrid.getId() + "_" + el.getValue());
110: txt.setSize(Integer.parseInt(el.getAttribute("w","20")));
111: if (isChild || isInput){ //CORRECTION NEEDED HERE... if isInput i need to use onNewValue event
112: txt.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", String.class));
113: txt.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onValueChange","@none"));
114: //if isInput look for mechanism to inject the value directly to newDataMap in DashboardBacker
115: }
116: else{ //means new
117: txt.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onNewValue","@none"));
118: if (defaultVal != null){
119: txt.setValue(defaultVal);
120: }
121: }
122: if(!el.getAttribute("tooltip","").equals(""))
123: txt.setTitle(el.getAttribute("tooltip"));
124: //txt.setValidator();
125: if(!el.getAttribute("requiredmessage","").equals("")){ //if there is a requiredmessage
126: txt.setRequired(true);
127: txt.setRequiredMessage(el.getAttribute("requiredmessage"));
128: }
129: label.setFor("txt" + pGrid.getId() + "_" + el.getValue());
130: // attach message component
131: // Message msg = new Message();
132: // msg.setId("msg_" + pGrid.getId() + "_" + el.getValue());
133: // msg.setFor("txt" + pGrid.getId() + "_" + el.getValue());
134: // pGrid.getChildren().add(msg);
135: pGrid.getChildren().add(txt);
136: }
137: else{ //if inline .. this is only usable when EDITING
138: InputText txt = new InputText();
139: txt.setId("txt" + pGrid.getId() + "_" + el.getValue());
140: txt.setSize(Integer.parseInt(el.getAttribute("w","20")));
141: if (isChild || isInput){
142: txt.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", String.class));
143: txt.addClientBehavior("save", EventsManager.createAjaxBehaviour("inplaceUpdate","@parent"));
144: }
145: //txt.setValidator();
146: if(!el.getAttribute("requiredmessage","").equals("")){ //if there is a requiredmessage
147: txt.setRequired(true);
148: txt.setRequiredMessage(el.getAttribute("requiredmessage"));
149: }
150: label.setFor("txt" + pGrid.getId() + "_" + el.getValue());
151: Inplace inp = new Inplace();
152: //inp.setLabel(el.getAttribute("title","No Title"));
153: inp.setValueExpression("label",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", String.class));
154: inp.setEmptyLabel("EMPTY");
155: inp.setEditor(Boolean.parseBoolean(el.getAttribute("editorbuttons","false")));
156: inp.setSaveLabel("Save");
157: inp.setCancelLabel("Cancel");
158: inp.setEvent(el.getAttribute("event","click"));
159: inp.setToggleable(true);
160: inp.getChildren().add(txt);
161: pGrid.getChildren().add(inp);
162: }
163: }
164: else if(el.getName().equals("AUTOCOMPLETE")){
165: log.info("FOUND AUTOCOMPLETE");
166: //AutoComplete autoComp = new AutoComplete();
167: //MyAutoComplete autoComp = new MyAutoComplete(); //my implementation
168: AutoComplete autoComp = new AutoComplete();
169: autoComp.setId("ac" + pGrid.getId() + "_" + el.getValue());
170: autoComp.setForceSelection(true);
171: autoComp.setRequired(true);
172: autoComp.setRequiredMessage(el.getAttribute("requiredmessage","Required"));
173: autoComp.setMinQueryLength(Integer.parseInt(el.getAttribute("querylength","3")));
174: autoComp.setMaxlength(Integer.parseInt(el.getAttribute("maxlength","10")));
175: autoComp.setMultiple(Boolean.parseBoolean(el.getAttribute("multiple","false")));
176: autoComp.setQueryDelay(Integer.parseInt(el.getAttribute("delay","500")));
177: //autoComp.setDropdown(true);
178: //autoComp.setConverter(el.getAttribute("converter","org.elegance.primetime.util.DefaultConverter"));
179: //autoComp.setValueChangeListener()
180: //autoComp.setVar("obj");
181: //autoComp.setItemLabel("#{obj.toString()}");
182: //autoComp.setItemValue("#{obj}");
183: //autoComp.setProcess();
184: //autoComp.setValue("testvalue");
185: //autoComp.setLptable(el.getAttribute("lptable"));
186: //autoComp.setLpfield(el.getAttribute("lpfield"));
187: //autoComp.setLpkey(el.getAttribute("lpkey"));
188: //MethodExpression cME = FacesAccessor.createMethodExpression("#{eventManager.onComplete(\"" + autoComp.getValue() + "\",\"" + el.getAttribute("lptable") + "\",\"" + el.getAttribute("lpfield") + "\")}",List.class, String.class);
189: MethodExpression cME = FacesAccessor.createMethodExpression("#{eventManager.onComplete}",List.class, String.class);
190: autoComp.setCompleteMethod(cME);
191: // MethodExpression cVE = FacesAccessor.createMethodActionListener("#{eventManager.onValueChange}",Void.class, String.class);
192: // autoComp.setValueChangeListener(cVE);
193: //ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{imageBean.getImageBytes(\"select " + el.getValue() + " from " + pg.getAttribute("table","table") + " where " + pg.getAttribute("keyfield","kf") + " = ?\")}", DefaultStreamedContent.class);
194: //START TESTING params
195: // UIParameter paramTable = new UIParameter();
196: // UIParameter paramField = new UIParameter();
197: // UIParameter paramKey = new UIParameter();
198: //
199: // paramTable.setName("lptable");
200: // //paramTable.setValue(el.getAttribute("lptable"));
201: // paramTable.setValue("p_entity");
202: //
203: // paramField.setName("lpfield");
204: // paramField.setValue(el.getAttribute("lpfield"));
205: //
206: // paramKey.setName("lpkey");
207: // paramKey.setValue(el.getAttribute("lpkey"));
208: //
209: // autoComp.getChildren().add(paramTable);
210: // autoComp.getChildren().add(paramField);
211: // autoComp.getChildren().add(paramKey);
212: //END TESTING params
213: label.setFor("ac" + pGrid.getId() + "_" + el.getValue());
214: // if (isChild || isInput){ //CORRECTION NEEDED HERE... if isInput i need to use onNewValue event
215: // autoComp.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", String.class));
216: // autoComp.addClientBehavior("itemSelect", EventsManager.createAjaxBehaviour("onValueChange","@none"));
217: // }
218: // else{
219: // autoComp.addClientBehavior("itemSelect", EventsManager.createAjaxBehaviour("onNewValue","@none"));
220: // }
221: pGrid.getChildren().add(autoComp);
222: }
223: else if(el.getName().equals("TEXTAREA")){
224: InputTextarea txtA = new InputTextarea();
225: txtA.setId("txtA" + pGrid.getId() + "_" + el.getValue());
226: txtA.setLabel("INLINE LABEL");
227: if (isChild || isInput){
228: txtA.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", String.class));
229: txtA.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onValueChange","@parent"));
230: }
231: else{ //means new
232: txtA.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onNewValue","@form"));
233: //TESTING ROBOT.. WORKS PERFECTLY
234: //txtA.addClientBehavior("focus", EventsManager.createAjaxBehaviour("runRobot","@this"));
235: if (defaultVal != null){
236: txtA.setValue(defaultVal);
237: }
238: }
239: txtA.setRows(Integer.parseInt(el.getAttribute("rows","5")));
240: txtA.setCols(Integer.parseInt(el.getAttribute("cols","25")));
241: //txtA.setRendered(Boolean.parseBoolean(el.getAttribute("visible","true")));
242: label.setFor("txtA" + pGrid.getId() + "_" + el.getValue());
243: pGrid.getChildren().add(txtA);
244: }
245: else if(el.getName().equals("CHECKBOX")){
246: SelectBooleanCheckbox chk = new SelectBooleanCheckbox();
247: chk.setId("chk" + pGrid.getId() + "_" + el.getValue());
248: chk.setLabel("INLINE LABEL");
249: if (isChild || isInput){
250: chk.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", String.class));
251: chk.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onValueChange","@parent"));
252: }
253: else{ //means new
254: chk.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onNewValue","@form"));
255: //TESTING ROBOT.. WORKS PERFECTLY
256: //txtA.addClientBehavior("focus", EventsManager.createAjaxBehaviour("runRobot","@this"));
257: if (defaultVal != null){
258: chk.setValue(defaultVal);
259: }
260: }
261: label.setFor("chk" + pGrid.getId() + "_" + el.getValue());
262: pGrid.getChildren().add(chk);
263: }
264: else if(el.getName().equals("TEXTDECIMAL")){
265: InputText txtD = new InputText();
266: txtD.setId("txtD" + pGrid.getId() + "_" + el.getValue());
267: txtD.setType("number");
268: txtD.setSize(Integer.parseInt(el.getAttribute("w","20")));
269: txtD.setStyle(el.getAttribute("style","text-align: right"));
270: if(!el.getAttribute("tooltip","").equals(""))
271: txtD.setTitle(el.getAttribute("tooltip"));
272: if (isChild || isInput){
273: txtD.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", Double.class));
274: txtD.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onValueChange","@form"));
275: }
276: else{ //means new
277: txtD.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onNewValue","@none"));
278: if (defaultVal != null){
279: txtD.setValue(defaultVal);
280: }
281: }
282: if(!el.getAttribute("requiredmessage","").equals("")){ //if there is a requiredmessage
283: txtD.setRequired(true);
284: txtD.setRequiredMessage(el.getAttribute("requiredmessage"));
285: }
286: txtD.setRendered(Boolean.parseBoolean(el.getAttribute("visible","true")));
287: label.setFor("txtD" + pGrid.getId() + "_" + el.getValue());
288: pGrid.getChildren().add(txtD);
289: }
290: else if(el.getName().equals("INPUTMASK")){
291: InputMask txtMask = new InputMask();
292: txtMask.setId("mask" + pGrid.getId() + "_" + el.getValue());
293: txtMask.setSize(Integer.parseInt(el.getAttribute("w","20")));
294: if(!el.getAttribute("style","").equals("")){
295: txtMask.setStyle(el.getAttribute("style"));
296: }
297: if (isChild || isInput){
298: txtMask.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", String.class));
299: txtMask.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onValueChange","@form"));
300: }
301: else{ //means new
302: txtMask.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onNewValue","@none"));
303: }
304: txtMask.setMask(el.getAttribute("mask",""));
305: label.setFor("mask" + pGrid.getId() + "_" + el.getValue());
306: pGrid.getChildren().add(txtMask);
307: }
308: // else if(el.getName().equals("GMAP")){
309: // log.info("CREATING map");
310: //
311: // GMap map = new GMap();
312: // MapModel model = new DefaultMapModel();
313: //
314: // map.setId("map" + pGrid.getId() + "_" + el.getValue());
315: // map.setWidgetVar(map.getId());
316: // map.setCenter(el.getAttribute("center","41.381542, 2.122893"));
317: // map.setZoom(Integer.parseInt(el.getAttribute("zoom","15")));
318: // map.setType(el.getAttribute("type","hybrid"));
319: // map.setStyle(el.getAttribute("style","width:400px;height:300px"));
320: //
321: // model.addOverlay(new Marker(new LatLng(36.879466, 30.667648), "M1"));
322: // map.setModel(model);
323: //
324: // pGrid.getChildren().add(map);
325: // }
326: else if(el.getName().equals("EDITOR")){ //'component does not implement Behaviour Interface'
327: Editor edt = new Editor();
328: //MethodExpression ee = FacesAccessor.createMethodExpression("#{eventManager.onNewValue}",Void.class, new Class[0]);
329: //edt.setValueChangeListener(ee);
330: edt.setId("edt" + pGrid.getId() + "_" + el.getValue());
331: if (isChild || isInput){
332: edt.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", String.class));
333: //edt.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onValueChange","@form"));
334: }
335: //else{ //means new
336: //edt.addClientBehavior("blur", EventsManager.createAjaxBehaviour("onNewValue","@form"));
337: //}
338: edt.setWidth(Integer.parseInt(el.getAttribute("width","200")));
339: edt.setHeight(Integer.parseInt(el.getAttribute("heigth","100")));
340: edt.setControls(el.getAttribute("controls","bold italic underline strikethrough"));
341: edt.setRendered(Boolean.parseBoolean(el.getAttribute("visible","true")));
342: label.setFor("edt" + pGrid.getId() + "_" + el.getValue());
343: pGrid.getChildren().add(edt);
344: }
345: else if(el.getName().equals("TEXTDATE")){
346: //log.info("FOUND TEXTDATE value = " + el.getValue());
347: Calendar cal = new Calendar();
348: cal.setId("cal" + pGrid.getId() + "_" + el.getValue());
349: cal.setPattern("yyyy MMM dd");
350: cal.setNavigator(true);
351: //cal.setPages(3);
352: cal.setMode(el.getAttribute("mode","popup")); //button,inline,popup
353: //cal.setShowOn(String here);
354: cal.setYearRange(el.getAttribute("yearrange","1990:2020"));
355: //cal.setTimeOnly(true);
356: //cal.setShowWeek(true); //show week number
357: //cal.setShowButtonPanel(true); //Show TODAY and DONE
358: //cal.setImmediate(false); //process validations logic isexecuted at apply request values phase for this component
359: //cal.setSelectOtherMonths(true);
360: //cal.setShowOtherMonths(true);
361: //pattern="EEE, dd MMM, yyyy" showButtonPanel="true" navigator="true"
362: cal.setSize(Integer.parseInt(el.getAttribute("w","20")));
363: if (isChild || isInput){
364: //Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(string);
365: //log.info("Trying Java Date Formatter ... " + new SimpleDateFormat("yyyyy MMMMM dd", Locale.ENGLISH).parse(new Date()));
366: cal.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", Date.class));
367: cal.addClientBehavior("dateSelect", EventsManager.createAjaxBehaviour("onValueChange","@form")); //or change or select
368: }
369: else{ //means new
370: cal.addClientBehavior("dateSelect", EventsManager.createAjaxBehaviour("onNewValue","@none"));
371: if (defaultVal != null){
372: cal.setValue(defaultVal);
373: }
374: }
375: cal.setRendered(Boolean.parseBoolean(el.getAttribute("visible","true")));
376: label.setFor("cal" + pGrid.getId() + "_" + el.getValue());
377: pGrid.getChildren().add(cal);
378: }//end if TEXTDATE
379: else if(el.getName().equals("COMBOLIST")){
380: SelectOneMenu cmblist = new SelectOneMenu();
381: cmblist.setId("cmblist" + pGrid.getId() + "_" + el.getValue());
382: label.setFor("cmblist" + pGrid.getId() + "_" + el.getValue());
383: List<XMLElement> data = el.getElements();
384: List<SelectItem> items = new ArrayList<SelectItem>();
385: for(XMLElement dt : data) {
386: if(dt.getName().equals("DATA")){ //HAS TO BE A DATA
387: items.add(new SelectItem(dt.getAttribute("key","-1"), dt.getValue()));
388: }//end if DATA
389: }
390: UISelectItems selectItems = new UISelectItems();
391: selectItems.setValue(items);
392: selectItems.setId("si" + pGrid.getId() + "_" + el.getValue());
393: cmblist.getChildren().add(selectItems);
394: if (isChild || isInput){
395: //log.info("COMBOLIST parentModel = " + (parentModel==null?"NO PARENT":"OK"));
396: cmblist.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", Object.class));
397: cmblist.addClientBehavior("change", EventsManager.createAjaxBehaviour("onValueChange","@form"));
398: }
399: else{ //means new
400: cmblist.addClientBehavior("change", EventsManager.createAjaxBehaviour("onNewValue","@none"));
401: }
402: pGrid.getChildren().add(cmblist);
403: }
404: else if (el.getName().equals("COMBOBOX")){
405: SelectOneMenu cmbbox = new SelectOneMenu();
406: cmbbox.setId("cmbbox" + pGrid.getId() + "_" + el.getValue());
407: //if heigtht is defined
408: if(!el.getAttribute("h","").equals("")){
409: cmbbox.setHeight(Integer.parseInt(el.getAttribute("h")));
410: }
411: label.setFor("cmbbox" + pGrid.getId() + "_" + el.getValue());
412: String wheresql = el.getAttribute("wheresql");
413: //the last argument is a 'suggestion/advice' as to the width of the array
414: List<Object[]> cdata = IOService.getListFromResultSet(getDs(), "SELECT " + (el.getAttribute("lpkey",el.getValue())) + "," + el.getAttribute("lpfield") + " FROM " + el.getAttribute("lptable") + (wheresql==null?"":" WHERE " + wheresql));
415: List<SelectItem> items = new ArrayList<SelectItem>();
416: items.add(new SelectItem("-1", "Select"));
417: for(Object[] dt : cdata) {
418: items.add(new SelectItem((Integer)dt[0], (String)dt[1]));
419: }
420: UISelectItems selectItems = new UISelectItems();
421: selectItems.setValue(items);
422: selectItems.setId("si" + pGrid.getId() + "_" + el.getValue());
423: cmbbox.getChildren().add(selectItems);
424: if (isChild || isInput){
425: if(el.getAttribute("input","false").equals("true")){
426: cmbbox.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", Integer.class));
427: cmbbox.setDisabled(true);
428: }
429: else{
430: cmbbox.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(el.getValue()) + "]}", Integer.class));
431: cmbbox.addClientBehavior("change", EventsManager.createAjaxBehaviour("onValueChange","@form")); //this may
432: }
433: }
434: else{ //means new
435: cmbbox.addClientBehavior("change", EventsManager.createAjaxBehaviour("onNewValue","@none"));
436: }
437: pGrid.getChildren().add(cmbbox);
438: }
439: else if(el.getName().equals("FIELDSET")){
440: log.info("FOUND FIELDSET id=" + el.getAttribute("id","no id"));
441: Fieldset fs = new Fieldset();
442: fs.setId("fs" + pGrid.getId() + "_" + el.getAttribute("id","k"));
443: fs.setLegend(el.getAttribute("legend","No Legend"));
444: HtmlPanelGrid fGrid = new HtmlPanelGrid();
445: fGrid.setColumns(2);
446: fGrid.setId("fgrid" + fs.getId());
447: for(XMLElement ell : el.getElements()) {
448: if(ell.getName().equals("TEXTFIELD")){
449: log.info("FIELDSET CHILD = " + ell.getName());
450: InputText fTxt = new InputText();
451: fTxt.setLabel("TESTING");
452: fTxt.setValue("TESTING");
453: fGrid.getChildren().add(fTxt);
454: }
455: else if(ell.getName().equals("TEXTAREA")){
456: fGrid.getChildren().add(new InputTextarea());
457: }
458: else if(ell.getName().equals("EDITOR")){
459: fGrid.getChildren().add(new Editor());
460: }
461: }
462: fs.getChildren().add(fGrid);
463: pGrid.getChildren().add(fs);
464: }//end if FIELDSET
465: // else if(el.getName().equals("FEEDREADER")){
466: // log.info("FOUND FEEDREADER title = " + el.getAttribute("title"));
467: //
468: // FeedReader fd = new FeedReader();
469: // fd.setId("fd" + pGrid.getId() + "_" + el.getAttribute("key","k"));
470: // fd.setValue(el.getAttribute("source","http://rss.news.yahoo.com/rss/sports"));
471: // fd.setVar("feed");
472: // fd.setRendered(true);
473: // fd.setSize(Integer.parseInt(el.getAttribute("size","10")));
474: //
475: //
476: // ValueExpression titleVE = FacesAccessor.createValueExpression(elc, "#{feed.title}", Object.class);
477: // ValueExpression contentVE = FacesAccessor.createValueExpression(elc, "#{feed.description.value}", Object.class);
478: //
479: // HtmlOutputText fdTitle = new HtmlOutputText();//(HtmlOutputText)application.createComponent( HtmlOutputText.COMPONENT_TYPE );
480: // fdTitle.setValueExpression("value",titleVE);
481: // //fdTitle.setValue("#{feed.title}");
482: //
483: // HtmlOutputText fdContent = new HtmlOutputText();
484: // fdContent.setValueExpression("value",contentVE);
485: // //fdContent.setValue("#{feed.description.value}");
486: //
487: // UIOutput errorMessage = (UIOutput)application.createComponent(UIOutput.COMPONENT_TYPE);
488: // errorMessage.setValue("Something Went Wrong");
489: //
490: // fd.getChildren().add(fdTitle);
491: // fd.getChildren().add(fdContent);
492: //
493: // fd.getFacets().put("error", errorMessage);
494: //
495: //
496: //
497: // RequestContext reqContext = RequestContext.getCurrentInstance();
498: // reqContext.update("feed");
499: //
500: // pGrid.getChildren().add(fd);
501: //
502: // }//end if FEEDREADER
503: else if(el.getName().equals("IMAGE")){
504: GraphicImage img = new GraphicImage();
505: img.setId("img" + pGrid.getId() + "_" + el.getValue());
506: FileUpload fup = new FileUpload(); //used when noimage present
507: //img.setTitle(el.getAttribute("title","No Title"));
508: img.setHeight(el.getAttribute("h","50"));
509: img.setWidth(el.getAttribute("w","50"));
510: img.setAlt("Photo Here");
511: if (isChild || isInput){
512: log.info("Trying to load image from database");
513: ValueExpression imgValueExp = FacesAccessor.createValueExpression(elc, "#{imageBean.getImageBytes(\"select " + el.getValue() + " from " + pg.getAttribute("table","table") + " where " + pg.getAttribute("keyfield","kf") + " = ?\")}", DefaultStreamedContent.class);
514: UIParameter param = new UIParameter();
515: param.setName("pk");
516: param.setName("148");
517: //param.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{item[0]}", String.class));
518: img.getChildren().add(param);
519: FacesContext context = FacesContext.getCurrentInstance();
520: if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
521: img.setValue(new DefaultStreamedContent());
522: }
523: else{
524: img.setValueExpression("value", imgValueExp);
525: }
526: img.addClientBehavior("change", EventsManager.createAjaxBehaviour("onValueChange","@form"));
527: }
528: else{ //means new
529: fup.setId("fup" + pGrid.getId() + "_" + el.getValue());
530: fup.setAuto(Boolean.parseBoolean(el.getAttribute("autoupload","false")));
531: fup.setLabel("Choose");
532: //fup.setAllowTypes(el.getAttribute("uploadfilter","/(\.|\/)(gif|jpe?g|png)$/"));
533: //
534: MethodExpression fl = FacesAccessor.createMethodExpression("#{eventManager.handleFileUpload}",Void.class, FileUploadEvent.class);
535: fup.setFileUploadListener(fl);
536: label.setFor("fup" + pGrid.getId() + "_" + el.getValue());
537: // log.info("Trying to load image from file");
538: // try{
539: // //if is child get from db
540: // //File imgFile = new File(el.getAttribute("file","no_file"));
541: //
542: // String missing = "file:///opt/tomcat7/webapps.labs/primetime/resources/images/missing_person.jpg";
543: // File imgFile = new File(new URI(el.getAttribute("file",missing)));
544: // log.info("Can Read ? = " + imgFile.canRead() + " Can Write ? = " + imgFile.canWrite());
545: // log.info("File = " + imgFile.getPath());
546: // StreamedContent strmImg;
547: // FacesContext context = FacesContext.getCurrentInstance();
548: //
549: // log.info("IMAGE phase = " + context.getCurrentPhaseId());
550: //
551: // if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
552: // log.info("at Render Response");
553: // // So, we're rendering the view. Return a stub StreamedContent so that it will generate right URL.
554: // // strmImg = new DefaultStreamedContent();
555: // strmImg = new DefaultStreamedContent(new FileInputStream(missing), el.getAttribute("mimetype","image/jpg") ,"photo");
556: // }
557: // else{
558: // //strmImg = new DefaultStreamedContent(new FileInputStream(imgFile), el.getAttribute("mimetype","image/jpg") ,"photo");
559: // strmImg = new DefaultStreamedContent(new FileInputStream(missing), el.getAttribute("mimetype","image/jpg") ,"photo");
560: // //InputStream stream = this.getClass().getResourceAsStream("barcalogo.jpg");
561: // //image = new DefaultStreamedContent(stream, "image/jpeg");
562: // }
563: // //img.addClientBehavior("change", EventsManager.createAjaxBehaviour("onNewValue","@none"));
564: // log.info("StreamedContent name = " + strmImg.getName() + ", contentType = " + strmImg.getContentType() + ", stream = " + strmImg.getStream());
565: //
566: // //img.setValue(imgFile.getPath());
567: // img.setValue(strmImg.getStream());
568: // // if(strmImg != null)
569: // // img.setValue(strmImg);
570: // // else
571: // // log.severe("strmImg IS NULL");
572: /*
573: }
574: catch(FileNotFoundException e){
575: log.severe("File Not Found : Message = " + e.getMessage());
576: }
577: catch(URISyntaxException ex){
578: log.severe("Invalid URI = " + ex.getMessage());
579: }*/
580: }
581: //pGrid.getChildren().add(img);
582: pGrid.getChildren().add(fup);
583: }//end if IMAGE
584: }
585: //new can be true (default for everyone), rolename(only members with a specified role)
586: if(pg.getAttribute("new","false").equals("true")){
587: //if(isChild == false){ //if its not a child
588: CommandButton btnNew = new CommandButton();
589: btnNew.setId("new_"+pg.getAttribute("table","no_table"));
590: btnNew.setValue("Save");
591: btnNew.setAjax(true);
592: btnNew.setAsync(true);
593: btnNew.setUpdate("@form");
594: // CommandButton btnReset = new CommandButton();
595: // btnReset.setId("reset_"+pg.getAttribute("table","no_table"));
596: // btnReset.setValue("Clear");
597: // btnReset.setTitle("Click to add entry");
598: // btnReset.setType("reset");
599: //
600: //log.info("audit = " + pg.getAttribute("audit","false"));
601: //ButtonActionListener listener = new ButtonActionListener(pg.getAttribute("table","no_table"),_userId, _orgId);
602: ButtonActionListener listener = new ButtonActionListener(pg.getAttribute("table","no_table"),_props);
603: btnNew.addActionListener(listener);
604: if(!pg.getAttribute("input","").equals("")) //if input is needed from a datatable.....
605: listener.setInputField(pg.getAttribute("input").split(":")[1]);
606: // if(!pg.getAttribute("user","").equals(""))
607: // listener.setUserField(pg.getAttribute("user"));
608: //if either audit is true or if we want to relate loggedInUser with the new entry
609: if(pg.getAttribute("audit","false").equals("true") || !pg.getAttribute("user","").equals(""))
610: listener.setAudit(true);
611: if(pg.getAttribute("tenant","false").equals("true"))
612: listener.setTenant(true);
613: if(!pg.getAttribute("activiti","").equals(""))
614: listener.setTaskVars(tVars);
615: /*
616: if(!pg.getAttribute("input","").equals("")) //if input is needed from a datatable.....
617: //btnNew.addActionListener(new ButtonActionListener(pg.getAttribute("input").split(":")[1]));
618: inputField
619: else if(pg.getAttribute("audit","false").equals("true"))
620: btnNew.addActionListener(new ButtonActionListener(_userId));
621: else
622: btnNew.addActionListener(new ButtonActionListener());
623: */
624: //btnNew.addActionListener(EventsManager.getBlistener());
625: //btnNew.setActionExpression(FacesAccessor.createMethodExpression("#{dashboardBacker.onRowSelect}",Void.class, new Class[0]));
626: //item.setActionExpression(expFact.createMethodExpression(elCtx, "#{menuBean.add}", Void.class, new Class[]{Object.class,String.class}));
627: pGrid.getChildren().add(btnNew);
628: //pGrid.getChildren().add(btnReset);
629: }
630: // else{ //UPDATE button needed
631: // @TODO
632: // CommandButton btnUpdate = new CommandButton();
633: // btnNew.setId("update_"+pg.getAttribute("table","no_table"));
634: // btnNew.setValue("Update");
635: // btnNew.setAjax(true);
636: // btnNew.setAsync(true);
637: // //btnNew.setUpdate("@form");
638: // btnNew.setUpdate("@form");
639: // pGrid.getChildren().add(btnUpdate);
640: // }
641: return pGrid;
642: }
Programatically creating/initializing Primefaces Datatable with components
Ahoy,
This is for you Mike, and any other interested
This is very raw... (it works by the way).. i will clean it up for public use in a while...
Only look at the relevant part of the entire code...
This method should be part of a utility class (for creating datatables, schedules, gridforms, etc)...
This is for you Mike, and any other interested
This is very raw... (it works by the way).. i will clean it up for public use in a while...
Only look at the relevant part of the entire code...
This method should be part of a utility class (for creating datatables, schedules, gridforms, etc)...
1: public static DataTable createDataTable(XMLElement pg, DataSource d, int _userId, int _orgId, boolean _superUser) {
2: setDs(d);
3: FacesContext fc = FacesContext.getCurrentInstance();
4: Application application = fc.getApplication();
5: ExpressionFactory ef = application.getExpressionFactory();
6: ELContext elc = fc.getELContext();
7: //Model
8: //if its not nested continue
9: //LazyModel model = new LazyModel(pg, _userId, _orgId, _superUser); //original.. works but needs refactoring
10: LazyModel model = new LazyModel(getDs(), pg, _userId, _orgId, _superUser);
11: //model.setSuperUser(_superUser);
12: //if nested
13: //LazyModel model = new LazyModel(pg, _userId,); //update the where in the xml dynamicaly
14: //Table
15: DataTable table = (DataTable) application.createComponent(DataTable.COMPONENT_TYPE);
16: table.setId("dt" + pg.getAttribute("key","x") + pg.getAttribute("keyfield","kf").replace("_",""));
17: //log.info("TABLE id = " + table.getId());
18: //table.setPrependId(false);
19: table.setValue(model);
20: table.setVar("item");
21: //if nopages is true or if rows is not defined.....
22: if(pg.getAttribute("nopages","false").equals("true") || pg.getAttribute("rows","").equals("")){
23: table.setPaginator(false);
24: }
25: else{
26: table.setPaginator(true);
27: table.setPaginatorPosition("bottom");
28: table.setRowsPerPageTemplate("5,10,15");
29: table.setPaginatorTemplate("{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}");
30: }
31: table.setRows(Integer.parseInt(pg.getAttribute("rows","10")));
32: table.setLazy(true);
33: table.setResizableColumns(true);
34: table.setDraggableColumns(true);
35: table.setScrollable(false);
36: table.setLiveScroll(false);
37: //if no editor and toggler.. (USED TO disable rowselection)
38: if(pg.getAttribute("updatetable","").equals("") && pg.getAttribute("toggler","false").equals("false") && pg.getAttribute("noselection","false").equals("false")){
39: table.setSelectionMode(pg.getAttribute("selectionmode","single"));
40: table.setEditable(false);
41: }
42: //else if (pg.getAttribute("roweditor","false").equals("true")){
43: else if(!pg.getAttribute("updatetable","").equals("")){
44: table.setSelectionMode(pg.getAttribute("selectionmode","single")); //testing edit + delete co-existance
45: table.setEditable(true);
46: }
47: // else if(!pg.getAttribute("contextmenu","").equals("")){
48: // table.setSelectionMode(pg.getAttribute("selectionmode","single")); //testing edit + delete co-existance
49: // table.setEditable(true);
50: // }
51: table.setSelection(model.getSelectedRow());
52: table.setTableStyle(pg.getAttribute("tablestyle","font-size:11px;text-align:left;padding-top:0px;padding-bottom:0px;padding-left:0px"));
53: table.setRowStyleClass(pg.getAttribute("rowstyleclass","padding:0px 0px 0px 0px;"));
54: table.setEmptyMessage(pg.getAttribute("emptymessage","NO DATA TO DISPLAY"));
55: LazyModel parentModel = null;
56: String link = pg.getAttribute("link","");
57: boolean isChild = false;
58: if(!link.equals("")){ //if this is a child
59: DataTable parent = (DataTable)FacesAccessor.getUIComponent("mainForm:dt" + link.split(":")[0] + (link.split(":")[1]).replace("_",""));
60: parentModel = (LazyModel)parent.getValue();
61: boolean added = parentModel.addChild(model,parent,table.getId()); //no need to pass the parent
62: //boolean added = parentModel.addChild(model, parent.getId());
63: isChild = true;
64: }
65: //if(pg.getAttribute("roweditor","false").equals("false")){
66: if(pg.getAttribute("updatetable","").equals("")){ //if no updatetable
67: //log.info("NORMAL (un-editable) DATATABLE");
68: AjaxBehavior ajaxSelect = new AjaxBehavior();
69: MethodExpression se = FacesAccessor.createMethodExpression("#{eventManager.onRowSelect}",Void.class, new Class[0]);
70: ajaxSelect.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(se));
71: ajaxSelect.setUpdate("@form");
72: table.addClientBehavior("rowSelect", ajaxSelect);
73: //table.addClientBehavior("rowSelect", EventsManager.createAjaxBehaviour("onRowSelect","@this")); use this
74: }
75: //else if(pg.getAttribute("roweditor","false").equals("true")){
76: else if(!pg.getAttribute("updatetable","").equals("") && pg.getAttribute("contextmenu","").equals("") ){ //if there is updatetable and no contextmenu
77: //log.info("updatetable WITHOUT contextmenu");
78: AjaxBehavior ajaxEdit = new AjaxBehavior();
79: MethodExpression ee = FacesAccessor.createMethodExpression("#{eventManager.onRowEdit}",Void.class, new Class[0]);
80: ajaxEdit.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(ee));
81: ajaxEdit.setUpdate("@this"); //
82: table.addClientBehavior("rowEdit", ajaxEdit);
83: //table.addClientBehavior("rowEdit", EventsManager.createAjaxBehaviour("onRowEdit","@this")); use this
84: }
85: //if both updatetable and contextmenu
86: else if(!pg.getAttribute("updatetable","").equals("") && !pg.getAttribute("contextmenu","").equals("")){ //if there is both contextmenu and updatetable
87: //log.info("BOTH updatetable and contextmenu PRESENT.....");
88: AjaxBehavior ajaxEdit = new AjaxBehavior();
89: MethodExpression ee = FacesAccessor.createMethodExpression("#{eventManager.onRowEdit}",Void.class, new Class[0]);
90: ajaxEdit.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(ee));
91: ajaxEdit.setUpdate("@none");
92: table.addClientBehavior("rowEdit", ajaxEdit);//rowEditInit
93: AjaxBehavior ajaxSelect = new AjaxBehavior();
94: MethodExpression se = FacesAccessor.createMethodExpression("#{eventManager.onRowSelect}",Void.class, new Class[0]);
95: ajaxSelect.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(se));
96: //ajaxSelect.setUpdate("@form"); //should be children only
97: ajaxSelect.setUpdate("@none");
98: //ajaxSelect.setUpdate(model.getChildrenId().toString()); //.. problem is.. by this time the children are not yet created
99: //log.info("ajaxSelect update = " + model.getChildrenId().toString());
100: //table.handleAttribute("dblClickSelect", new Boolean(true));
101: //table.setDblClickSelect(true); //just to get around this race condition
102: table.addClientBehavior("rowSelect", ajaxSelect);
103: }
104: //this is actualy a summary row implementation
105: boolean group = false;
106: if(!pg.getAttribute("group","").equals("")){
107: group = true;
108: //table.setSortBy(parentModel.getDataIndex(pg.getAttribute("groupby")));
109: //if(isChild)
110: //table.setValueExpression("sortBy",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + model.getDataIndex(pg.getAttribute("group").split(":")[0]) + "]}", Object.class));
111: //table.setSortBy(model.getSelectedRow()[0]);
112: table.setValueExpression("sortBy", FacesAccessor.createValueExpression(elc, "#{item[" + model.getDataIndex(model.getGroupCol()) +"]}", Object.class));
113: table.setSortOrder("ascending");
114: table.addClientBehavior("sort", EventsManager.createAjaxBehaviour("onSort","@none"));
115: }
116: //Global Search (still in alpha testing)
117: if(pg.getAttribute("search","").equals("all")){
118: //table.setStyleClass(".ui-datatable .ui-datatable-header-search");
119: OutputPanel outPanel = new OutputPanel();
120: outPanel.setId("searchpanel_" + pg.getAttribute("table","no_table"));
121: //HtmlOutputText oText = new HtmlOutputText();
122: //oText.setValue("Search All Fields: ");
123: InputText sText = new InputText();
124: sText.setId("filterText");
125: sText.setStyle("width:150px");
126: //we may need p:defaultcommand instead of using the blur event..
127: //...or a search button that receives the table model search text and table id
128: sText.addClientBehavior("blur", EventsManager.createAjaxBehaviour("updateFTSSearchQuery",table.getId()));
129: //sText.addClientBehavior("keyup", EventsManager.createAjaxBehaviour("updateFTSSearchQuery",table.getId()));
130: CommandButton btnDTSearch = new CommandButton();
131: btnDTSearch.setId("search_" + pg.getAttribute("table","no_table"));
132: btnDTSearch.setValue("Search");
133: btnDTSearch.setAjax(true);
134: //btnDTSearch.setAsync(true);
135: btnDTSearch.setUpdate(table.getId());
136: btnDTSearch.addActionListener(new ButtonActionListener(model)); //search text, model
137: DefaultCommand dfCommand = new DefaultCommand();
138: dfCommand.setId("dfCommand_" + pg.getAttribute("table","no_table"));
139: dfCommand.setTarget(btnDTSearch.getId());
140: //dfCommand.setContext(outPanel.getId()); //id of parent
141: //outPanel.getChildren().add(oText);
142: outPanel.getChildren().add(sText);
143: outPanel.getChildren().add(btnDTSearch);
144: table.getFacets().put("header", outPanel);
145: }
146: if(!pg.getAttribute("header","").equals("")){
147: UIOutput tableTitle = (UIOutput)application.createComponent(UIOutput.COMPONENT_TYPE);
148: //tableTitle.setValue("Table Title");
149: tableTitle.setValue(pg.getAttribute("header"));
150: table.getFacets().put("header", tableTitle);
151: }
152: else if(isChild){ //it means we want a header here
153: try{
154: UIOutput tableTitle = (UIOutput)application.createComponent(UIOutput.COMPONENT_TYPE);
155: tableTitle.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(link.split(":")[2]) + "]}", String.class));
156: //tableTitle.setStyle("font-color:blue");
157: table.getFacets().put("header", tableTitle);
158: }
159: catch(ArrayIndexOutOfBoundsException e){
160: log.severe("Unable to set Child Header " + e.getMessage());
161: }
162: }
163: //TABLE FOOTER
164: if(!pg.getAttribute("footer","").equals("")){
165: UIOutput tableFooter = (UIOutput)application.createComponent(UIOutput.COMPONENT_TYPE);
166: tableFooter.setValue(pg.getAttribute("footer"));
167: table.getFacets().put("footer", tableFooter);
168: }
169: if(pg.getAttribute("toggler","false").equals("true")){
170: Column tcol = (Column) application.createComponent(Column.COMPONENT_TYPE);
171: tcol.setId("t_col_" + pg.getAttribute("key"));
172: RowToggler rt = new RowToggler();
173: rt.setId("rt_id_" + pg.getAttribute("key"));
174: rt.setRendered(true);
175: tcol.getChildren().add(rt);
176: table.getChildren().add(tcol);
177: }
178: int colIndex = 0;
179: for(XMLElement el : pg.getElements()) {
180: Column col = (Column) application.createComponent(Column.COMPONENT_TYPE);
181: //need to set id based on type of element.. especialy to facilitate report facility
182: if(el.getName().equals("JASPER"))
183: col.setId("col_report" + colIndex + "_" + pg.getAttribute("key"));
184: else
185: col.setId("col_" + el.getValue() + "_" + pg.getAttribute("key"));
186: if(!el.getAttribute("style","").equals("")){
187: col.setStyle(el.getAttribute("style"));
188: }
189: //buttons need to be added to the parent panel not to the datatable itself
190: if(el.getName().equals("ACTIONS")){
191: //log.info("FOUND ACTIONS");
192: col.setSelectionMode(pg.getAttribute("selectionmode","single"));
193: table.setSelectionMode(null);
194: table.getChildren().add(col);
195: AjaxBehavior ajaxSelect = new AjaxBehavior();
196: MethodExpression se = FacesAccessor.createMethodExpression("#{eventManager.onRowSelect}",Void.class, new Class[0]);
197: ajaxSelect.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(se));
198: ajaxSelect.setUpdate("@none");
199: table.addClientBehavior("rowSelectRadio", ajaxSelect);
200: continue; //TO NEXT ITERATION
201: }
202: if(el.getAttribute("selectionmode","").equals("multiple")){
203: //log.info("FOUND ACTIONS");
204: col.setSelectionMode("multiple");
205: table.setSelectionMode(null);
206: table.setSelection(model.getSelectedRows());
207: table.getChildren().add(col);
208: AjaxBehavior ajaxSelect = new AjaxBehavior();
209: MethodExpression se = FacesAccessor.createMethodExpression("#{eventManager.onMultipleSelect}",Void.class, new Class[0]);
210: ajaxSelect.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(se));
211: ajaxSelect.setUpdate("@none");
212: table.addClientBehavior("rowSelectCheckbox", ajaxSelect);
213: // AjaxBehavior ajaxUnSelect = new AjaxBehavior();
214: // MethodExpression ume = FacesAccessor.createMethodExpression("#{eventManager.onRowUnSelect}",Void.class, new Class[0]);
215: // ajaxUnSelect.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(ume));
216: // ajaxUnSelect.setUpdate("@none");
217: // table.addClientBehavior("rowUnSelectCheckbox", ajaxUnSelect);
218: //rowUnselectcheckbox
219: //continue; //TO NEXT ITERATION
220: }
221: col.setValueExpression("sortBy", FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class));
222: UIOutput colTitle = (UIOutput)application.createComponent(UIOutput.COMPONENT_TYPE);
223: colTitle.setValue(el.getAttribute("title","No Title"));
224: col.getFacets().put("header", colTitle);
225: //if footer present
226: if(!el.getAttribute("footer","").equals("")){
227: UIOutput colFooter = (UIOutput)application.createComponent(UIOutput.COMPONENT_TYPE);
228: colFooter.setValue(el.getAttribute("footer"));
229: col.getFacets().put("footer", colFooter);
230: }
231: //search
232: if(!el.getAttribute("filtermode","").equals("")){
233: col.setValueExpression("filterBy", FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class));
234: col.setFilterMatchMode(el.getAttribute("filtermode","contains"));
235: }
236: //col.getFacets().put("footer", colTitle);
237: if(pg.getAttribute("subtables","").equals("")){
238: table.getChildren().add(col);
239: }
240: /*
241: else{
242: log.info("SUBTABLE FOUND");
243: SubTable stable = new SubTable();
244: UIOutput subTitle = (UIOutput)application.createComponent(UIOutput.COMPONENT_TYPE);
245: //subTitle.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(pg.getAttribute("subtables")) + "]}", String.class));
246: subTitle.setValue("Sub Header");
247: stable.getFacets().put("header", subTitle);
248: stable.setVar(table.getVar());
249: stable.setValue(table.getValue());
250: stable.getChildren().add(col);
251: table.getChildren().add(stable);
252: }*/
253: // Create <h:outputText value="#{dataItem.id}"> for the body of the column.
254: if(el.getName().equals("TEXTFIELD")){
255: if(el.getAttribute("edit","false").equals("true")){
256: //log.info("Found EDITABLE field: " + el.getAttribute("title"));
257: CellEditor ce = new CellEditor();
258: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
259: HtmlOutputText colOutput = new HtmlOutputText();//(HtmlOutputText)application.createComponent( HtmlOutputText.COMPONENT_TYPE );
260: InputText colInput = new InputText();//(InputText)application.createComponent(InputText.COMPONENT_TYPE);
261: //colInput.setSize(Integer.parseInt(el.getAttribute("w","20")));
262: if(!el.getAttribute("style","").equals("")){
263: colInput.setStyle(el.getAttribute("style"));
264: colOutput.setStyle(el.getAttribute("style"));
265: }
266: colInput.setValueExpression("value", colValueExp);
267: colOutput.setValueExpression("value", colValueExp);
268: ce.getFacets().put("output", colOutput);
269: ce.getFacets().put("input", colInput);
270: col.getChildren().add(ce);
271: }
272: else{ //normal processing
273: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
274: HtmlOutputText colOutput = (HtmlOutputText)application.createComponent(HtmlOutputText.COMPONENT_TYPE);
275: colOutput.setValueExpression("value", colValueExp);
276: //colOutput.setSize(Integer.parseInt(el.getAttribute("w","20")));
277: if(!el.getAttribute("style","").equals(""))
278: colOutput.setStyle(el.getAttribute("style"));
279: col.getChildren().add(colOutput);
280: }
281: }
282: else if(el.getName().equals("TEXTDECIMAL")){
283: col.setStyle(el.getAttribute("style","text-align:right"));
284: if(el.getAttribute("edit","false").equals("true")){
285: CellEditor ce = new CellEditor();
286: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
287: HtmlOutputText colOutput = new HtmlOutputText();//(HtmlOutputText)application.createComponent( HtmlOutputText.COMPONENT_TYPE );
288: InputText colInput = new InputText();//(InputText)application.createComponent(InputText.COMPONENT_TYPE);
289: if(!el.getAttribute("style","").equals(""))
290: colInput.setStyle(el.getAttribute("style"));
291: colInput.setValueExpression("value", colValueExp);
292: colOutput.setValueExpression("value", colValueExp);
293: ce.getFacets().put("output", colOutput);
294: ce.getFacets().put("input", colInput);
295: col.getChildren().add(ce);
296: }
297: else{
298: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
299: HtmlOutputText colOutput = (HtmlOutputText)application.createComponent(HtmlOutputText.COMPONENT_TYPE);
300: colOutput.setValueExpression("value", colValueExp);
301: //thousands separator using regex (make sure there are no more than two(2) decimal places
302: //x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
303: col.getChildren().add(colOutput);
304: }
305: }
306: else if(el.getName().equals("TEXTDATE")){
307: if(el.getAttribute("edit","false").equals("true")){
308: CellEditor ce = new CellEditor();
309: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
310: HtmlOutputText colOutput = new HtmlOutputText();//(HtmlOutputText)application.createComponent( HtmlOutputText.COMPONENT_TYPE );
311: Calendar colInput = new Calendar();
312: colInput.setPattern("yyyy MMM dd");
313: colInput.setShowButtonPanel(true);
314: colInput.setNavigator(true);
315: if(!el.getAttribute("style","").equals("")){
316: colInput.setStyle(el.getAttribute("style"));
317: colOutput.setStyle(el.getAttribute("style"));
318: }
319: colInput.setValueExpression("value", colValueExp);
320: colOutput.setValueExpression("value", colValueExp);
321: ce.getFacets().put("output", colOutput);
322: ce.getFacets().put("input", colInput);
323: col.getChildren().add(ce);
324: }
325: else{
326: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
327: HtmlOutputText colOutput = (HtmlOutputText)application.createComponent(HtmlOutputText.COMPONENT_TYPE);
328: colOutput.setValueExpression("value", colValueExp);
329: if(!el.getAttribute("style","").equals("")){
330: colOutput.setStyle(el.getAttribute("style"));
331: }
332: col.getChildren().add(colOutput);
333: }
334: }
335: else if(el.getName().equals("COMBOBOX")){
336: //A COMBOBOX in a DataTable is always editable (otherwise just use TEXTFIELD)
337: //log.info("Found EDITABLE field: " + el.getAttribute("title"));
338: CellEditor ce = new CellEditor();
339: SelectOneMenu cmbbox = new SelectOneMenu();
340: cmbbox.setId("cmbbox" + "_" + el.getValue());
341: String wheresql = el.getAttribute("wheresql");
342: List<Object[]> cdata = IOService.getListFromResultSet(getDs(), "SELECT " + (el.getAttribute("lpkey",el.getValue())) + "," + el.getAttribute("lpfield") + " FROM " + el.getAttribute("lptable") + (wheresql==null?"":" WHERE " + wheresql));
343: List<SelectItem> items = new ArrayList<SelectItem>();
344: for(Object[] dt : cdata) {
345: items.add(new SelectItem(dt[0], (String)dt[1]));
346: }
347: UISelectItems selectItems = new UISelectItems();
348: selectItems.setValue(items);
349: selectItems.setId("si" + "_" + el.getValue());
350: cmbbox.getChildren().add(selectItems);
351: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
352: HtmlOutputText colOutput = new HtmlOutputText();//(HtmlOutputText)application.createComponent( HtmlOutputText.COMPONENT_TYPE );
353: SelectOneMenu colInput = cmbbox;
354: if(!el.getAttribute("style","").equals("")){
355: colInput.setStyle(el.getAttribute("style"));
356: colOutput.setStyle(el.getAttribute("style"));
357: }
358: colInput.setValueExpression("value", colValueExp);
359: colOutput.setValueExpression("value", colValueExp);
360: ce.getFacets().put("output", colOutput);
361: ce.getFacets().put("input", colInput);
362: col.getChildren().add(ce);
363: }
364: else if(el.getName().equals("COMBOLIST")){
365: if(el.getAttribute("edit","false").equals("true")){
366: //log.info("Found EDITABLE field: " + el.getAttribute("title"));
367: CellEditor ce = new CellEditor();
368: //combolist test
369: SelectOneMenu cmblist = new SelectOneMenu();
370: cmblist.setId("cmblist" + "_" + el.getValue());
371: List<XMLElement> data = el.getElements();
372: List<SelectItem> items = new ArrayList<SelectItem>();
373: for(XMLElement dt : data) {
374: if(dt.getName().equals("DATA")){ //HAS TO BE A DATA
375: items.add(new SelectItem(dt.getAttribute("key","-1"), dt.getValue()));
376: }//end if DATA
377: }
378: UISelectItems selectItems = new UISelectItems();
379: selectItems.setValue(items);
380: selectItems.setId("si" + "_" + el.getValue());
381: cmblist.getChildren().add(selectItems);
382: //end test
383: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
384: HtmlOutputText colOutput = new HtmlOutputText();//(HtmlOutputText)application.createComponent( HtmlOutputText.COMPONENT_TYPE );
385: //InputText colInput = new InputText();//(InputText)application.createComponent(InputText.COMPONENT_TYPE);
386: SelectOneMenu colInput = cmblist;
387: colInput.setValueExpression("value", colValueExp);
388: colOutput.setValueExpression("value", colValueExp);
389: //log.info("colInput value=" + colInput.getValue());
390: //log.info("colOutput value=" + colOutput.getValue());
391: ce.getFacets().put("output", colOutput);
392: ce.getFacets().put("input", colInput);
393: col.getChildren().add(ce);
394: }
395: else{ //normal processing
396: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
397: HtmlOutputText colOutput = (HtmlOutputText)application.createComponent(HtmlOutputText.COMPONENT_TYPE);
398: colOutput.setValueExpression("value", colValueExp);
399: col.getChildren().add(colOutput);
400: }
401: }
402: else if(el.getName().equals("GRIDFORM")){
403: childgrid = el;
404: }
405: else if(el.getName().equals("JASPER")){
406: Button jreport = new Button();
407: jreport.setValue("Download");
408: ValueExpression hrefValueExp = FacesAccessor.createValueExpression(elc, "report?jasper=" + el.getAttribute("jasper","jasper") + "&pdfname=" + el.getAttribute("pdfname","Report") + "&filterid=#{item[0]}", String.class);
409: jreport.setValueExpression("href", hrefValueExp);
410: jreport.setTitle(el.getAttribute("tooltip","Click to view"));
411: col.getChildren().add(jreport);
412: }
413: else if(el.getName().equals("CHECKBOX")){
414: if(el.getAttribute("edit","false").equals("true")){
415: CellEditor ce = new CellEditor();
416: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
417: HtmlOutputText colOutput = new HtmlOutputText();//(HtmlOutputText)application.createComponent( HtmlOutputText.COMPONENT_TYPE );
418: SelectBooleanCheckbox colInput = new SelectBooleanCheckbox();//(InputText)application.createComponent(InputText.COMPONENT_TYPE);
419: colInput.setValueExpression("value", colValueExp);
420: colOutput.setValueExpression("value", colValueExp);
421: ce.getFacets().put("output", colOutput);
422: ce.getFacets().put("input", colInput);
423: col.getChildren().add(ce);
424: }
425: else{
426: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{item[" + colIndex + "]}", Object.class);
427: HtmlOutputText colOutput = (HtmlOutputText)application.createComponent(HtmlOutputText.COMPONENT_TYPE);
428: colOutput.setValueExpression("value", colValueExp);
429: col.getChildren().add(colOutput);
430: }
431: }
432: else if(el.getName().equals("IMAGE")){
433: GraphicImage colOutput = (GraphicImage)application.createComponent(GraphicImage.COMPONENT_TYPE);
434: colOutput.setHeight(el.getAttribute("h","50"));
435: colOutput.setWidth(el.getAttribute("w","50"));
436: colOutput.setAlt("No Photo");
437: ValueExpression colValueExp = FacesAccessor.createValueExpression(elc, "#{imageBean.getImageBytes(\"select " + el.getValue() + " from " + pg.getAttribute("table","table") + " where " + pg.getAttribute("keyfield","kf") + " = ?\")}", DefaultStreamedContent.class);
438: UIParameter param = new UIParameter();
439: param.setName("pk");
440: param.setValueExpression("value",FacesAccessor.createValueExpression(elc, "#{item[0]}", String.class)); //this is OK coz pk is always at index 0
441: //default image in case of missing photo ?
442: UIParameter missing = new UIParameter();
443: missing.setName("missing");
444: missing.setValue("missing1.jpg");
445: colOutput.getChildren().add(param);
446: colOutput.getChildren().add(missing);
447: FacesContext context = FacesContext.getCurrentInstance();
448: if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
449: log.info("at RENDER RESPONSE");
450: //colOutput.setValue(new DefaultStreamedContent());
451: }
452: else{
453: colOutput.setValueExpression("value", colValueExp);
454: }
455: col.getChildren().add(colOutput);
456: }
457: else if(el.getName().equals("DATATABLE")){
458: ValueExpression nestValueExp = FacesAccessor.createValueExpression(elc, el.getAttribute("wheresql") + "= #{item[0]}", String.class);
459: //ValueExpression wVE = FacesAccessor.createValueExpression(elc, "#{item[0]}", String.class);
460: //el.removeAttribute("wheresql")
461: //el.setAttribute("wheresql", (pg.getAttribute("keyfield") + "=5"));
462: //el.setAttribute("wheresql", (innerTable.getAlt() + " " + wVE));
463: //log.info("nesting link: " + el.getAttribute("wheresql"));
464: //NESTED DATATABLEs SEEM technicaly INFEASIBLE !!!!!!!
465: DataTable innerTable = createDataTable(el, getDs(), -1, _orgId, _superUser);
466: innerTable.setValueExpression("emptyMessage",nestValueExp);
467: //log.info("INNER TABLE emptyMessage = " + innerTable.getEmptyMessage());
468: col.getChildren().add(innerTable);
469: }
470: colIndex++;
471: if(el.getAttribute("visible","true").equals("false"))
472: col.setRendered(false);
473: }
474: //if(pg.getAttribute("toggler","false").equals("true")){
475: if(childgrid != null){
476: //log.info("CREATING ROWEXPANSION...");
477: RowExpansion expCol = (RowExpansion) application.createComponent(RowExpansion.COMPONENT_TYPE);
478: expCol.setId("xpcol" + pg.getAttribute("key"));
479: HtmlPanelGrid xGrid = buildGridForm(childgrid,model,getDs(), new HashMap<String,String>(), _userId, _orgId);
480: //HtmlPanelGrid xGrid = buildGridForm(childgrid,true);
481: expCol.getChildren().add(xGrid);
482: table.getChildren().add(expCol);
483: }
484: //if(pg.getAttribute("roweditor","false").equals("true")){
485: if(!pg.getAttribute("updatetable","").equals("")){
486: //Testing row editor
487: Column rowCol = (Column) application.createComponent(Column.COMPONENT_TYPE);
488: RowEditor re = new RowEditor();
489: rowCol.getChildren().add(re);
490: table.getChildren().add(rowCol);
491: }
492: if(group){
493: SummaryRow sRow = new SummaryRow();
494: sRow.setId("sr" + table.getId());
495: MethodExpression MESummary = FacesAccessor.createMethodExpression("#{eventManager.summaryRowSum}",String.class, String.class);
496: sRow.setListener(MESummary);
497: Column col1 = (Column)application.createComponent(Column.COMPONENT_TYPE);
498: //col1.setColspan(2);
499: col1.setColspan(Integer.parseInt(pg.getAttribute("colspan","2")));
500: col1.setStyle("text-align:right");
501: HtmlOutputText sumLabel = new HtmlOutputText(); //summary label
502: //sumLabel.setValue("Summary");
503: sumLabel.setValue(pg.getAttribute("group").split(":")[2]);
504: col1.getChildren().add(sumLabel);
505: Column col2 = (Column)application.createComponent(Column.COMPONENT_TYPE);
506: //ValueExpression valExp = FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + parentModel.getDataIndex(pg.getAttribute("group").split(":")[1]) + "]}", Object.class);
507: //ValueExpression valExp = FacesAccessor.createValueExpression(elc, "#{eventManager.currentRow[" + model.getDataIndex(pg.getAttribute("group").split(":")[1]) + "]}", Object.class);
508: ValueExpression valExp = FacesAccessor.createValueExpression(elc, "#{eventManager.summary}", Object.class);
509: HtmlOutputText sumValue = new HtmlOutputText();
510: sumValue.setValueExpression("value", valExp);
511: col2.getChildren().add(sumValue);
512: //now add the columns to the summary row
513: sRow.getChildren().add(col1);
514: sRow.getChildren().add(col2);
515: table.getChildren().add(sRow);
516: }
517: return table;
518: }
Wednesday, July 30, 2014
WorkmateHR
Payroll and HR management the easy way....
Let this short video say the rest....
WorkmateHR from Mabura ZeGuru on Vimeo.
Friday, June 27, 2014
Dynamic SQL UPDATE
NEED TO UPDATE table columns with dynamic values (not known in advance).
A. ORACLE
i.Single-Column update
[Working example.. just replace table names]
UPDATE station s
SET vhf_network_id =
(
SELECT vhf_network_id
FROM vhf_network v
WHERE s.client_license_id = v.client_license_id
)
WHERE s.station_charge_id = 5;
ii. Multiple update
The key here is to maintain the order and count of the columns in the source columnlist and destination columnlist
UPDATE
SET (
(
SELECT
FROM
WHERE
SELECT
FROM
WHERE
)
WHERE ;
B. POSTGRES EQUIVALENT
Working example (difference with the above is the absence of INNER SELECT)
UPDATE station s
SET vhf_network_id = v.vhf_network_id
FROM vhf_network v
WHERE s.client_license_id = vhf_network.client_license_id;
Subscribe to:
Posts (Atom)