source: Dev/trunk/src/client/dojox/wire/ml/Service.js

Last change on this file was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 2.7 KB
RevLine 
[483]1dojo.provide("dojox.wire.ml.Service");
2
3dojo.require("dijit._Widget");
4dojo.require("dojox.xml.parser");
5dojo.require("dojox.wire._base");
6dojo.require("dojox.wire.ml.util");
7
8dojo.declare("dojox.wire.ml.Service", dijit._Widget, {
9        // summary:
10        //              A widget for a service
11        // description:
12        //              This widget represents a service defined by a service description
13        //              specified with 'url' attribute.
14        //              If 'serviceType' and 'serviceUrl' attributes are specified, 'url'
15        //              attribute can be omitted.
16
17        // url:
18        //              A URL to a service description
19        url: "",
20
21        // serviceUrl:
22        //              A URL to a service
23        serviceUrl: "",
24
25        // serviceType:
26        //              A service type
27        serviceType: "",
28
29        // handlerClass:
30        //              A service handler class name
31        handlerClass: "",
32
33        preventCache: true,
34
35        postCreate: function(){
36                // summary:
37                //              Call _createHandler()
38                // description:
39                //              See _createHandler().
40                this.handler = this._createHandler();
41        },
42
43        _handlerClasses: {
44                "TEXT": "dojox.wire.ml.RestHandler",
45                "XML": "dojox.wire.ml.XmlHandler",
46                "JSON": "dojox.wire.ml.JsonHandler",
47                "JSON-RPC": "dojo.rpc.JsonService"
48        },
49
50        _createHandler: function(){
51                // summary:
52                //              Create a service handler
53                // description:
54                //              A service handler class is determined by:
55                //
56                //              1. 'handlerClass' attribute
57                //              2. 'serviceType' attribute
58                //              3. 'serviceType' property in a service description
59                // returns:
60                //              A service handler
61                if(this.url){
62                        var self = this;
63                        var d = dojo.xhrGet({
64                                url: this.url,
65                                handleAs: "json",
66                                sync: true
67                        });
68                        d.addCallback(function(result){
69                                self.smd = result;
70                        });
71                        if(this.smd && !this.serviceUrl){
72                                this.serviceUrl = (this.smd.serviceUrl || this.smd.serviceURL);
73                        }
74                }
75                var handlerClass = undefined;
76                if(this.handlerClass){
77                        handlerClass = dojox.wire._getClass(this.handlerClass);
78                }else if(this.serviceType){
79                        handlerClass = this._handlerClasses[this.serviceType];
80                        if(handlerClass && dojo.isString(handlerClass)){
81                                handlerClass = dojox.wire._getClass(handlerClass);
82                                this._handlerClasses[this.serviceType] = handlerClass;
83                        }
84                }else if(this.smd && this.smd.serviceType){
85                        handlerClass = this._handlerClasses[this.smd.serviceType];
86                        if(handlerClass && dojo.isString(handlerClass)){
87                                handlerClass = dojox.wire._getClass(handlerClass);
88                                this._handlerClasses[this.smd.serviceType] = handlerClass;
89                        }
90                }
91                if(!handlerClass){
92                        return null; //null
93                }
94                return new handlerClass(); //Object
95        },
96
97        callMethod: function(method, parameters){
98                // summary:
99                //              Call a service method with parameters
100                // method:
101                //              A method name
102                // parameters:
103                //              An array parameters
104                var deferred = new dojo.Deferred();
105                this.handler.bind(method, parameters, deferred, this.serviceUrl);
106                return deferred;
107        }
108});
Note: See TracBrowser for help on using the repository browser.