1 if(!dojo._hasResource["fieldmapper.IDL"]) {
2 dojo.require('dojox.data.dom');
3 dojo.provide("fieldmapper.IDL");
4 dojo.declare('fieldmapper.IDL', null, {
6 _URL_PATH : '/reports/fm_IDL.xml', // XXX locale?
7 // -- just need to set up xmlent and use '/reports/'+dojo.locale+'/fm_IDL.xml'
8 NS_REPORTS : 'http://open-ils.org/spec/opensrf/IDL/reporter/v1',
9 NS_PERSIST : 'http://open-ils.org/spec/opensrf/IDL/persistence/v1',
10 NS_OBJ : 'http://open-ils.org/spec/opensrf/IDL/objects/v1',
12 constructor : function(callback, force) {
13 if(!fieldmapper.IDL.fmclasses || force) {
20 load : function (response) {
21 self._parse(response, callback);
22 fieldmapper.IDL.loaded = true;
24 error : function (response) {
25 fieldmapper.IDL.loaded = false;
26 dojo.require('fieldmapper.fmall', true);
33 return dojo.require('fieldmapper.Fieldmapper');
36 _parse : function(xmlNode, callback) {
37 var idl = fieldmapper.IDL.fmclasses = {};
39 dojo.forEach( dojo.query('class', xmlNode), function (node) {
40 var id = node.getAttribute('id');
41 var fields = dojo.query('fields', node)[0];
42 window.fmclasses[id] = [];
44 var fieldData = this._parseFields( node, id );
47 fields : fieldData.list,
48 field_map : fieldData.map,
49 name : node.getAttribute('id'),
50 //table : node.getAttributeNS(this.NS_PERSIST, 'tablename'),
51 //core : node.getAttributeNS(this.NS_REPORTS, 'core'),
52 label : node.getAttributeNS(this.NS_REPORTS, 'label'),
53 restrict_primary : node.getAttributeNS(this.NS_PERSIST, 'restrict_primary'),
54 virtual : (node.getAttributeNS(this.NS_PERSIST, 'virtual') == 'true'),
55 pkey : fields.getAttributeNS(this.NS_PERSIST, 'primary'),
56 pkey_sequence : fields.getAttributeNS(this.NS_PERSIST, 'sequence')
59 var permacrud = node.getElementsByTagName('permacrud')[0];
61 var actions = ['create', 'retrieve', 'update', 'delete'];
63 for(var idx in actions) {
64 var action = actions[idx];
65 var pnode = permacrud.getElementsByTagName(action)[0];
67 var permString = pnode.getAttribute('permission');
70 permList = (permString.match(/ /)) ? permString.split(' ') : [permString];
72 var contextString = pnode.getAttribute('context_field');
73 var contextList = null;
75 contextList = (contextString.match(/ /)) ? contextString.split(' ') : [contextString];
77 obj.permacrud[action] = {
79 localContextFields : contextList // need to add foreign context fields
80 }; // add more details as necessary
85 obj.core = (obj.core == 'true');
86 obj.label = (obj.label) ? obj.label : obj.name;
90 if(callback) callback();
93 /* parses the links and fields portion of the IDL */
94 _parseFields : function(node, classname) {
98 var links = dojo.query('links', node);
101 dojo.forEach(dojo.query('fields field', node), function (field) {
102 var name = field.getAttribute('name');
104 if(name == 'isnew' || name == 'ischanged' || name == 'isdeleted')
110 label : field.getAttributeNS(this.NS_REPORTS,'label'),
111 datatype : field.getAttributeNS(this.NS_REPORTS,'datatype'),
112 primitive : field.getAttributeNS(this.NS_PERSIST,'primitive'),
113 selector : field.getAttributeNS(this.NS_REPORTS,'selector'),
114 array_position : position++,
116 virtual : (field.getAttributeNS(this.NS_PERSIST, 'virtual') == 'true')
119 obj.label = obj.label || obj.name;
120 obj.datatype = obj.datatype || 'text';
122 window.fmclasses[classname].push(obj.name);
124 var link = dojo.query('links link[field=' + name + ']', node)[0];
127 obj.key = link.getAttribute('key');
128 obj['class'] = link.getAttribute('class');
129 obj.reltype = link.getAttribute('reltype');
136 dojo.forEach(['isnew', 'ischanged', 'isdeleted'],
140 array_position : position++,
149 return { list : data, map : map };
154 window.fmclasses = {};
155 fieldmapper.IDL.load = function (callback, force) { return new fieldmapper.IDL(callback, force); };
156 fieldmapper.IDL.loaded = false;