1 /** initializes reports, some basid display settings,
2 * grabs and builds the IDL tree
4 function oilsInitReportBuilder() {
6 oilsReportBuilderReset();
9 hideMe(DOM.oils_rpt_tree_loading);
10 unHideMe(DOM.oils_rpt_table);
15 function oilsReportBuilderReset() {
16 var n = (oilsRpt) ? oilsRpt.name : "";
17 oilsRpt = new oilsReport();
19 oilsRptDisplaySelector = DOM.oils_rpt_display_selector;
20 oilsRptFilterSelector = DOM.oils_rpt_filter_selector;
21 removeChildren(oilsRptDisplaySelector);
22 removeChildren(oilsRptFilterSelector);
27 /* returns just the column name */
28 function oilsRptPathCol(path) {
29 var parts = path.split(/-/);
33 /* returns the IDL class of the selected column */
34 function oilsRptPathClass(path) {
35 var parts = path.split(/-/);
40 /* returns everything prior to the column name */
41 function oilsRptPathRel(path) {
42 var parts = path.split(/-/);
44 return parts.join('-');
47 /* creates a label "path" based on the column path */
48 function oilsRptMakeLabel(path) {
49 var parts = path.split(/-/);
51 for( var i = 0; i < parts.length; i++ ) {
54 str += oilsIDL[parts[i]].label;
56 var column = parts[i];
57 var data = oilsIDL[parts[i-1]];
58 var f = grep(data.fields,
59 function(j){return (j.name == column); })[0];
67 /* adds an item to the display window */
68 function oilsAddRptDisplayItem(path, name, tform, params) {
69 if( ! oilsAddSelectorItem(oilsRptDisplaySelector, path, name) )
72 /* add the selected columns to the report output */
73 name = (name) ? name : oilsRptPathCol(path);
74 var param = oilsRptNextParam();
76 /* add this item to the select blob */
78 relation:oilsRptPathRel(path),
85 params.unshift(oilsRptPathCol(path));
86 sel.column[tform] = params;
88 sel.column[tform] = oilsRptPathCol(path);
90 } else { sel.column = oilsRptPathCol(path); }
92 oilsRpt.def.select.push(sel);
94 mergeObjects( oilsRpt.def.from, oilsRptBuildFromClause(path));
95 oilsRpt.params[param] = name;
99 /* takes a column path and builds a from-clause object for the path */
100 function oilsRptBuildFromClause(path) {
101 var parts = path.split(/-/);
106 for( var i = 0; i < parts.length; i += 2 ) {
108 var col = parts[i+1];
109 var node = oilsIDL[parts[i]];
110 var field = oilsRptFindField(node, col);
111 newpath = (newpath) ? newpath + '-'+ cls : cls;
113 tobj.table = node.table;
114 tobj.alias = newpath;
115 _debug('field type is ' + field.type);
116 if( i == (parts.length - 2) ) break;
122 if( field.type == 'link' )
123 tobj.key = field.key;
125 newpath = newpath + '-'+ col;
128 _debug("built 'from' clause: path="+path+"\n"+formatJSON(js2JSON(obj)));
133 /* removes a specific item from the display window */
134 function oilsDelDisplayItem(val) {
135 oilsDelSelectorItem(oilsRptDisplaySelector, val);
138 /* removes selected items from the display window */
139 function oilsDelSelectedDisplayItems() {
140 var list = oilsDelSelectedItems(oilsRptDisplaySelector);
142 /* remove the de-selected columns from the report output */
143 oilsRpt.def.select = grep( oilsRpt.def.select,
145 for( var j = 0; j < list.length; j++ ) {
149 /* if this columsn has a transform,
150 it will be an object { tform => column } */
151 if( typeof col != 'string' )
152 for( var c in col ) col = col[c];
154 /* if this transform requires params, the column
155 will be the first item in the param set array */
156 if( typeof col != 'string' ) col = col[0];
158 if( oilsRptPathRel(d) == i.relation && oilsRptPathCol(d) == col ) {
159 var param = (i.alias) ? i.alias.match(/::PARAM\d*/) : null;
160 if( param ) delete oilsRpt.params[param];
168 if(!oilsRpt.def.select) {
169 oilsRpt.def.select = [];
170 oilsReportBuilderReset();
173 for( var j = 0; j < list.length; j++ )
174 oilsRptPruneFromClause(list[j]);
180 /* for each item in the path list, remove the associated data
181 from the "from" clause */
182 function oilsRptPruneFromClause(pathlist) {
185 /* adds an item to the display window */
186 function oilsAddRptFilterItem(val) {
187 oilsAddSelectorItem(oilsRptFilterSelector, val);
190 /* removes a specific item from the display window */
191 function oilsDelFilterItem(val) {
192 oilsDelSelectorItem(oilsRptFilterSelector, val);
195 /* removes selected items from the display window */
196 function oilsDelSelectedFilterItems() {
197 oilsDelSelectedItems(oilsRptFilterSelector);
201 /* adds an item to the display window */
202 function oilsAddSelectorItem(sel, val, name) {
203 name = (name) ? name : oilsRptMakeLabel(val);
204 _debug("adding selector item "+name+' = ' +val);
205 for( var i = 0; i < sel.options.length; i++ ) {
206 var opt = sel.options[i];
207 if( opt.value == val ) return false;
209 insertSelectorVal( sel, -1, name, val );
214 /* removes a specific item from the display window */
215 function oilsDelSelectorItem(sel, val) {
216 _debug("deleting selector item "+val);
217 var opts = sel.options;
218 for( var i = 0; i < opts.length; i++ ) {
220 if( opt.value == val ) {
221 if( i == opts.length - 1 )
223 else opts[i] = opts[i+1];
229 /* removes selected items from the display window */
230 function oilsDelSelectedItems(sel) {
231 var list = getSelectedList(sel);
232 for( var i = 0; i < list.length; i++ )
233 oilsDelSelectorItem(sel, list[i]);
238 /* hides the different field editor tabs */
239 function oilsRptHideEditorDivs() {
240 hideMe(DOM.oils_rpt_tform_div);
241 hideMe(DOM.oils_rpt_filter_div);
242 hideMe(DOM.oils_rpt_agg_filter_div);
247 This draws the 3-tabbed window containing the transform,
248 filter, and aggregate filter picker window
250 function oilsRptDrawDataWindow(path) {
251 var col = oilsRptPathCol(path);
252 var cls = oilsRptPathClass(path);
253 var field = grep(oilsIDL[cls].fields, function(f){return (f.name==col);})[0];
254 _debug("setting update data window for column "+col+' on class '+cls);
256 var div = DOM.oils_rpt_column_editor;
257 /* set a preliminary top position so the page won't bounce around */
258 div.setAttribute('style','top:'+oilsMouseX+'px');
260 /* unhide the div so we can determine the dimensions */
263 /* don't let them see the floating div until the position is fully determined */
264 div.style.visibility='hidden';
266 oilsRptDrawTransformWindow(path, col, cls, field);
268 DOM.oils_rpt_column_editor_close_button.onclick = function(){hideMe(div);};
269 buildFloatingDiv(div, 600);
271 /* now let them see it */
272 div.style.visibility='visible';
274 /* give the tab links behavior */
275 DOM.oils_rpt_tform_tab.onclick =
276 function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_tform_div)};
277 DOM.oils_rpt_filter_tab.onclick =
278 function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_filter_div)};
279 DOM.oils_rpt_agg_filter_tab.onclick =
280 function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_agg_filter_div)};
282 DOM.oils_rpt_tform_tab.onclick();
286 /* draws the transform window */
287 function oilsRptDrawTransformWindow(path, col, cls, field) {
288 appendClear(DOM.oils_rpt_tform_label, text(oilsRptMakeLabel(path)));
289 DOM.oils_rpt_tform_label_input.value = oilsRptMakeLabel(path);
290 var dtype = field.datatype;
292 DOM.oils_rpt_tform_submit.onclick =
294 var tform = oilsRptGetTform(dtype);
295 _debug('found tform: ' + js2JSON(tform));
296 var params = getRptTformParams(dtype, tform);
297 _debug('found tform params: ' + js2JSON(params));
298 tform = (tform == 'raw') ? null : tform;
299 oilsAddRptDisplayItem(path, DOM.oils_rpt_tform_label_input.value, tform, params )
302 DOM.oils_rpt_tform_label_input.focus();
303 DOM.oils_rpt_tform_label_input.select();
304 oilsRptHideTformFields();
306 _debug("Transforming item with datatype "+dtype);
307 unHideMe($('oils_rpt_tform_'+dtype+'_div'));
308 $('oils_rpt_tform_all_raw').checked = true;
311 function oilsRptHideTformFields() {
312 for( var t in oilsRptTransforms )
313 hideMe($('oils_rpt_tform_'+t+'_div'));
316 function oilsRptGetTform(datatype) {
317 for( var i in oilsRptTransforms[datatype] )
318 if( $('oils_rpt_tform_'+datatype+'_'+oilsRptTransforms[datatype][i]).checked )
319 return oilsRptTransforms[datatype][i];
320 for( var i in oilsRptTransforms.all )
321 if( $('oils_rpt_tform_all_'+oilsRptTransforms.all[i]).checked )
322 return oilsRptTransforms.all[i];
326 function getRptTformParams(type, tform) {
331 return [DOM.oils_rpt_tform_timestamp_months_ago_input.value];
333 return [DOM.oils_rpt_tform_timestamp_quarters_ago_input.value];