1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
/*
* $Id: schema.js,v 1.7.2.3 2010/04/06 16:46:12 source Exp $
*
* This file is part of the OpenLink Software Ajax Toolkit (OAT) project.
*
* Copyright (C) 2005-2010 OpenLink Software
*
* See LICENSE file for details.
*/
/*
*/
OAT.Schema = {
getType:function(schemaElements,name) {
var schemas = schemaElements;
if (!(schemas instanceof Array)) { schemas = [schemaElements]; }
var availTypeNodes = OAT.Xml.getElementsByLocalName(schemas,"complexType");
for (var i=0;i<availTypeNodes.length;i++) {
var node = availTypeNodes[i];
if (node.getAttribute("name") == name) {
/* correct type node */
var result = {};
var elems = OAT.Xml.getElementsByLocalName(node,"element");
for (var i=0;i<elems.length;i++) {
var n = elems[i].getAttribute("name");
var t = elems[i].getAttribute("type");
if (t) {
t = t.split(":").pop();
result[n] = OAT.Schema.getType(schemas,t);
} else {
var ref = elems[i].getAttribute("ref").split(":").pop();
var type = OAT.Schema.getElement(schemas,ref);
if (elems.length > 1) {
result[ref] = type;
} else return [type];
}
}
/* also try arrays */
if (elems.length) { return result; }
var res = OAT.Xml.getElementsByLocalName(node,"restriction");
if (res.length && res[0].getAttribute("base").split(":").pop() == "Array") {
/* is array! */
result = [];
var a = OAT.Xml.getElementsByLocalName(res[0],"attribute")[0];
var t = a.getAttribute("wsdl:arrayType").split(":").pop().match(/(.*)\[\]/)[1];
result.push(OAT.Schema.getType(schemas,t));
}
return result;
}
}
return name;
},
getElement:function(schemaElements,name) {
var schemas = schemaElements;
if (!(schemas instanceof Array)) { schemas = [schemaElements]; }
var availElementNodes = OAT.Xml.getElementsByLocalName(schemas,"element");
for (var i=0;i<availElementNodes.length;i++) {
var node = availElementNodes[i];
if (node.getAttribute("name") == name) {
/* correct type node */
var result = {};
var elems = OAT.Xml.getElementsByLocalName(node,"element");
for (var i=0;i<elems.length;i++) {
var n = elems[i].getAttribute("name");
var t = elems[i].getAttribute("type");
if (t) {
t = t.split(":").pop();
result[n] = OAT.Schema.getType(schemas,t);
} else {
var ref = elems[i].getAttribute("ref").split(":").pop();
var type = OAT.Schema.getElement(schemas,ref);
if (elems.length > 1) {
result[ref] = type;
} else return [type];
}
}
/* also try arrays */
if (elems.length) { return result; }
var res = OAT.Xml.getElementsByLocalName(node,"restriction");
if (res.length && res[0].getAttribute("base").split(":").pop() == "Array") {
/* is array! */
result = [];
var a = OAT.Xml.getElementsByLocalName(res[0],"attribute")[0];
var t = a.getAttribute("wsdl:arrayType").split(":").pop().match(/(.*)\[\]/)[1];
result.push(OAT.Schema.getType(schemas,t));
}
return result;
}
}
return false;
}
}
|