3 /* fetchs and draws the report tree */
4 function oilsDrawRptTree(callback) {
5 oilsLoadRptTree(function(){oilsRenderRptTree(callback)});
8 /* fetches the IDL XML */
9 function oilsLoadRptTree(callback) {
10 var r = new XMLHttpRequest();
11 r.open('GET', OILS_IDL_URL, true);
12 r.onreadystatechange = function() {
13 if( r.readyState == 4 ) {
14 oilsParseRptTree(r.responseXML, callback);
20 function oilsRptFindField(node, field) {
21 return grep( node.fields,
23 return (f.name == field);
29 /* turns the IDL into a js object */
30 function oilsParseRptTree(IDL, callback) {
31 var classes = IDL.getElementsByTagName('class');
34 for( var i = 0; i < classes.length; i++ ) {
35 var node = classes[i];
36 var id = node.getAttribute('id');
37 var fields = node.getElementsByTagName('fields')[0];
40 fields : oilsRptParseFields(node),
41 name : node.getAttribute('id'),
42 table : node.getAttributeNS(oilsIDLPersistNS, 'tablename'),
43 core : node.getAttributeNS(oilsIDLReportsNS, 'core'),
44 label : node.getAttributeNS(oilsIDLReportsNS, 'label'),
45 pkey : fields.getAttributeNS(oilsIDLPersistNS, 'primary')
48 if( obj.core == 'true' ) obj.core = true;
49 else obj.core = false;
50 obj.label = (obj.label) ? obj.label : obj.name;
55 if( callback ) callback();
56 //oilsRenderRptTree(callback);
59 /* parses the links and fields portion of the IDL */
60 function oilsRptParseFields( node ) {
63 var fields = node.getElementsByTagName('fields')[0];
64 fields = fields.getElementsByTagName('field');
66 var links = node.getElementsByTagName('links')[0];
68 links = links.getElementsByTagName('link');
71 for( var i = 0; i < fields.length; i++ ) {
73 var field = fields[i];
74 var name = field.getAttribute('name');
79 label : field.getAttributeNS(oilsIDLReportsNS,'label'),
80 datatype : field.getAttributeNS(oilsIDLReportsNS,'datatype'),
81 selector : field.getAttributeNS(oilsIDLReportsNS,'selector'),
86 for( var l = 0; l < links.length; l++ ) {
87 if( links[l].getAttribute('field') == name ) {
95 obj.key = link.getAttribute('key');
96 obj['class'] = link.getAttribute('class');
97 obj.reltype = link.getAttribute('reltype');
99 if( fields[i].getAttributeNS(oilsIDLPersistNS, 'virtual') == 'true' )
103 obj.label = (obj.label) ? obj.label : obj.name;
104 obj.datatype = (obj.datatype) ? obj.datatype : 'string';
108 /* sort by field name */
111 if( a.label > b.label ) return 1;
112 if( a.label < b.name ) return -1;
121 /* shoves the IDL into a UI tree */
122 function oilsRenderRptTree(callback) {
123 var sel = DOM.oils_rpt_builder_type_selector;
125 for( var i in oilsIDL ) {
126 var data = oilsIDL[i];
127 if( !data.core ) continue;
128 insertSelectorVal( sel, -1, data.label, data.name );
131 sel.onchange = function() {
132 if(oilsRpt.def.select.length > 0)
133 if(!confirm(DOM.oils_rpt_confirm_new_report.innerHTML))
135 oilsRptRenderClassTree(getSelectorVal(sel))
136 oilsReportBuilderReset();
140 if( callback ) callback();
143 function oilsRptRenderClassTree(cls) {
144 var data = oilsIDL[cls];
145 removeChildren(DOM.oils_rpt_tree_div);
146 oilsRptTree = new SlimTree( DOM.oils_rpt_tree_div, 'oilsRptTree' );
147 var treeId = oilsNextId();
148 oilsRptTree.addNode( treeId, -1, data.label );
149 oilsRenderSubTree( data, treeId, '' );
153 function oilsRenderSubTree( data, subTreeId, path ) {
155 for( var f = 0; f < data.fields.length; f++ ) {
157 var field = data.fields[f];
158 var dataId = oilsNextId();
160 var fval = data.name+'-'+field.name;
161 var fullpath = (path) ? path + '-' + fval : fval;
164 //var action = 'javascript:oilsAddRptDisplayItem("'+fullpath+'")';
165 var action = 'javascript:oilsRptDrawDataWindow("'+fullpath+'")';
167 if( field.type == 'link' )
168 action = 'javascript:oilsAddLinkTree("' +
169 dataId+'","'+field['class']+'","'+fullpath+'");';
173 /* indicate that this will build a friendly list at report time */
174 if( field.selector ) label += ' **';
176 oilsRptTree.addNode( dataId, subTreeId, label, action, field.label,
177 (field.type == 'link') ? 'oils_rpt_tree_link_ref' : null );
183 var oilsLinkTreeCache = {};
184 function oilsAddLinkTree( parentId, classname, fullpath ) {
185 _debug("adding link with class="+classname+' : full path '+fullpath);
186 if( ! oilsLinkTreeCache[parentId] )
187 oilsLinkTreeCache[parentId] = [];
189 if( grep ( oilsLinkTreeCache[parentId],
190 function(i) { return (i == classname); } ) ) {
191 oilsRptTree.toggle(parentId);
195 oilsLinkTreeCache[parentId].push(classname);
196 var data = grep( oilsIDL, function(i) { return ( i.name == classname ); })[0];
197 var sid = oilsRenderSubTree( data, parentId, fullpath );
198 oilsRptTree.open(parentId);