1 /*
  2  *  Copyright (C) 2008-2009 WaveMaker Software, Inc.
  3  *
  4  *  This file is part of the WaveMaker Client Runtime.
  5  *
  6  *  Licensed under the Apache License, Version 2.0 (the "License");
  7  *  you may not use this file except in compliance with the License.
  8  *  You may obtain a copy of the License at
  9  *
 10  *      http://www.apache.org/licenses/LICENSE-2.0
 11  *
 12  *  Unless required by applicable law or agreed to in writing, software
 13  *  distributed under the License is distributed on an "AS IS" BASIS,
 14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  *  See the License for the specific language governing permissions and
 16  *  limitations under the License.
 17  */
 18 dojo.provide("wm.base.components.ServiceVariable");
 19 dojo.require("wm.base.components.Variable");
 20 dojo.require("wm.base.components.ServiceCall");
 21 
 22 
 23 //===========================================================================
 24 // Main service calling class: calls services with input data and returns data
 25 //===========================================================================
 26 /**
 27 	Main service calling class: calls services with input data and returns data
 28 	@name wm.ServiceVariable
 29 	@class
 30 	@extends wm.Variable
 31 	@extends wm.ServiceCall
 32 */
 33 dojo.declare("wm.ServiceVariable", [wm.Variable, wm.ServiceCall], {
 34 	total: 0,
 35 	_page: 0,
 36 	processResult: function(inResult) {
 37 		this.setData(inResult);
 38 		this.inherited(arguments);
 39 	},
 40 	getTotal: function() {
 41 		return this.total || this.getCount();
 42 	},
 43 	getPageCount: function() {
 44 		return Math.ceil(this.getTotal() / (this.getCount() || 1));
 45 	},
 46 	setPage: function(inPage) {
 47 		this._page = Math.max(0, Math.min(this.getPageCount() - 1, inPage));
 48 		this.firstRow = this._page * this.maxResults;
 49 		this.update();
 50 	},
 51 	getPage: function() {
 52 		return this._page;
 53 	},
 54 	setFirstPage: function() {
 55 		this.setPage(0);
 56 	},
 57 	setPreviousPage: function() {
 58 		this.setPage(this._page-1);
 59 	},
 60 	setNextPage: function() {
 61 		this.setPage(this._page+1);
 62 	},
 63 	setLastPage: function() {
 64 		this.setPage(this.getPageCount());
 65 	},
 66 	operationChanged: function() {
 67 		this.inherited(arguments);
 68 		// output has named type matching operation returnType
 69 		var op = this._operationInfo;
 70 		if (op)
 71 			this.setType(op.returnType);
 72 	}
 73 });
 74 
 75 wm.Object.extendSchema(wm.ServiceVariable, {
 76 	operation: { group: "common", order: 24},
 77 	clearInput: { group: "operation", order: 30},
 78 	input: { ignore: 1 , writeonly: 1, componentonly: 1, categoryParent: "Properties", categoryProps: {component: "input", bindToComponent: true, inspector: "Data"}},
 79 	service: {group: "common", order: 23 },
 80 	autoUpdate: {group: "common", order: 25},
 81 	startUpdate: {group: "common", order: 26},
 82 	updateNow: { group: "operation", order: 10},
 83 	queue: { group: "operation", order: 20},
 84 	json: {ignore: 1},
 85 	listType: {ignore: 1},
 86 	isList: {ignore: 1},
 87 	// binding inherited from Variable, keep it and write it but don't show it
 88 	// potentially needed for source bindings.
 89 	binding: {ignore: 1, writeonly: 1},
 90 	type: { ignore: 1 },
 91 	dataSet: { ignore: 1, defaultBindTarget: 1, isObject: true, type: "any"},
 92 	total: {ignore: 1}
 93 });
 94 
 95 
 96 wm.ServiceVariable.description = "Data from a service.";
 97 
 98 /**#@+ @design */
 99 wm.ServiceVariable.extend({
100 	/** @lends wm.ServiceVariable.prototype */
101 });
102 /**#@- @design *