1 if(!dojo._hasResource["fieldmapper.IDL"]) {
2 dojo.provide("fieldmapper.IDL");
3 dojo.declare('fieldmapper.IDL', null, {
5 _URL_PATH : '/reports/fm_IDL.xml', // XXX locale?
6 // -- just need to set up xmlent and use '/reports/'+dojo.locale+'/fm_IDL.xml'
7 NS_REPORTS : 'http://open-ils.org/spec/opensrf/IDL/reporter/v1',
8 NS_PERSIST : 'http://open-ils.org/spec/opensrf/IDL/persistence/v1',
9 NS_OBJ : 'http://open-ils.org/spec/opensrf/IDL/objects/v1',
11 constructor : function(callback, force) {
12 if(!fieldmapper.IDL.fmclasses || force) {
19 load : function (response) {
20 self._parse(response, callback);
21 fieldmapper.IDL.loaded = true;
23 error : function (response) {
24 fieldmapper.IDL.loaded = false;
25 dojo.require('fieldmapper.fmall', true);
32 return dojo.require('fieldmapper.Fieldmapper');
35 _parse : function(xmlNode, callback) {
36 var classes = xmlNode.getElementsByTagName('class');
37 var idl = fieldmapper.IDL.fmclasses = {};
39 for(var i = 0; i < classes.length; i++) {
40 var node = classes[i];
41 var id = node.getAttribute('id');
42 var fields = node.getElementsByTagName('fields')[0];
43 window.fmclasses[id] = [];
45 var fieldData = this._parseFields(node, id);
48 fields : fieldData.list,
49 field_map : fieldData.map,
50 name : node.getAttribute('id'),
51 //table : node.getAttributeNS(this.NS_PERSIST, 'tablename'),
52 //core : node.getAttributeNS(this.NS_REPORTS, 'core'),
53 label : node.getAttributeNS(this.NS_REPORTS, 'label'),
54 restrict_primary : node.getAttributeNS(this.NS_PERSIST, 'restrict_primary'),
55 virtual : (node.getAttributeNS(this.NS_PERSIST, 'virtual') == 'true'),
56 pkey : fields.getAttributeNS(this.NS_PERSIST, 'primary'),
57 pkey_sequence : fields.getAttributeNS(this.NS_PERSIST, 'sequence')
60 var permacrud = node.getElementsByTagName('permacrud')[0];
62 var actions = ['create', 'retrieve', 'update', 'delete'];
64 for(var idx in actions) {
65 var action = actions[idx];
66 var pnode = permacrud.getElementsByTagName(action)[0];
68 var permString = pnode.getAttribute('permission');
71 permList = (permString.match(/ /)) ? permString.split(' ') : [permString];
73 var contextString = pnode.getAttribute('context_field');
74 var contextList = null;
76 contextList = (contextString.match(/ /)) ? contextString.split(' ') : [contextString];
78 obj.permacrud[action] = {
80 localContextFields : contextList // need to add foreign context fields
81 }; // add more details as necessary
86 obj.core = (obj.core == 'true');
87 obj.label = (obj.label) ? obj.label : obj.name;
95 /* parses the links and fields portion of the IDL */
96 _parseFields : function(node, classname) {
100 var fields = node.getElementsByTagName('fields')[0];
101 fields = fields.getElementsByTagName('field');
103 var links = node.getElementsByTagName('links')[0];
104 if( links ) links = links.getElementsByTagName('link');
108 for(var i = 0; i < fields.length; i++) {
109 var field = fields[i];
110 var name = field.getAttribute('name');
115 label : field.getAttributeNS(this.NS_REPORTS,'label'),
116 datatype : field.getAttributeNS(this.NS_REPORTS,'datatype'),
117 primitive : field.getAttributeNS(this.NS_PERSIST,'primitive'),
118 selector : field.getAttributeNS(this.NS_REPORTS,'selector'),
119 array_position : parseInt(field.getAttributeNS(this.NS_OBJ,'array_position')),
121 virtual : (fields[i].getAttributeNS(this.NS_PERSIST, 'virtual') == 'true')
124 obj.label = obj.label || obj.name;
125 obj.datatype = obj.datatype || 'text';
127 if (obj.array_position > 2)
128 window.fmclasses[classname].push(obj.name);
131 for(var l = 0; l < links.length; l++) {
132 if(links[l].getAttribute('field') == name) {
140 obj.key = link.getAttribute('key');
141 obj['class'] = link.getAttribute('class');
142 obj.reltype = link.getAttribute('reltype');
152 if( a.label > b.label ) return 1;
153 if( a.label < b.name ) return -1;
159 return { list : data, map : map };
164 window.fmclasses = {};
165 fieldmapper.IDL.load = function (callback, force) { return new fieldmapper.IDL(callback, force); };
166 fieldmapper.IDL.loaded = false;