+ _parseFromFQ: function (fq) {
+ //op-node
+ if (fq.hasOwnProperty('op')
+ && fq.hasOwnProperty('s1')
+ && fq.hasOwnProperty('s2')) {
+ var node = new CQLBoolean();
+ node.op = fq.op;
+ node.left = this._parseFromFQ(fq.s1);
+ node.right = this._parseFromFQ(fq.s2);
+ //include all other members as modifiers
+ node.modifiers = [];
+ for (var key in fq) {
+ if (key == 'op' || key == 's1' || key == 's2')
+ continue;
+ var mod = new CQLModifier();
+ mod.name = key;
+ mod.relation = '=';
+ mod.value = fq[key];
+ node.modifiers.push(mod);
+ }
+ return node;
+ }
+ //search-clause node
+ if (fq.hasOwnProperty('term')) {
+ var node = new CQLSearchClause();
+ node.term = fq.term;
+ node.scf = this.scf;
+ node.scr = this.scr;
+ node.field = fq.hasOwnProperty('field')
+ ? fq.field : this.scf;
+ node.relation = fq.hasOwnProperty('relation')
+ ? node._remapRelation(fq.relation) : this.scr;
+ //include all other members as modifiers
+ node.relationuri = '';
+ node.fielduri = '';
+ node.modifiers = [];
+ for (var key in fq) {
+ if (key == 'term' || key == 'field' || key == 'relation')
+ continue;
+ var mod = new CQLModifier();
+ mod.name = key;
+ mod.relation = '=';
+ mod.value = fq[key];
+ node.modifiers.push(mod);
+ }
+ return node;
+ }
+ throw new Error('Unknow node type; '+JSON.stringify(fq));
+ },
+ toXCQL: function (c) {
+ c = typeof c == "undefined" ? ' ' : c;
+ return this.tree.toXCQL(0, c);
+ },
+ toFQ: function (c, nl) {
+ c = typeof c == "undefined" ? ' ' : c;
+ nl = typeof nl == "undefined" ? '\n' : c;
+ return this.tree.toFQ(0, c, nl);
+ },
+ toString: function () {
+ return this.tree.toString();