Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F947936
Service.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Subscribers
None
Service.js
View Options
if
(
!
dojo
.
_hasResource
[
"dojox.wire.ml.Service"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dojox.wire.ml.Service"
]
=
true
;
dojo
.
provide
(
"dojox.wire.ml.Service"
);
dojo
.
provide
(
"dojox.wire.ml.RestHandler"
);
dojo
.
provide
(
"dojox.wire.ml.XmlHandler"
);
dojo
.
provide
(
"dojox.wire.ml.JsonHandler"
);
dojo
.
require
(
"dijit._Widget"
);
dojo
.
require
(
"dojox.data.dom"
);
dojo
.
require
(
"dojox.wire._base"
);
dojo
.
require
(
"dojox.wire.ml.util"
);
dojo
.
declare
(
"dojox.wire.ml.Service"
,
dijit
.
_Widget
,
{
// summary:
// A widget for a service
// description:
// This widget represents a service defined by a service description
// specified with 'url' attribute.
// If 'serviceType' and 'serviceUrl' attributes are specified, 'url'
// attribute can be omitted.
// url:
// A URL to a service description
// serviceUrl:
// A URL to a service
// serviceType:
// A service type
// handlerClass:
// A service handler class name
url
:
""
,
serviceUrl
:
""
,
serviceType
:
""
,
handlerClass
:
""
,
preventCache
:
true
,
postCreate
:
function
(){
// summary:
// Call _createHandler()
// description:
// See _createHandler().
this
.
handler
=
this
.
_createHandler
();
},
_handlerClasses
:
{
"TEXT"
:
"dojox.wire.ml.RestHandler"
,
"XML"
:
"dojox.wire.ml.XmlHandler"
,
"JSON"
:
"dojox.wire.ml.JsonHandler"
,
"JSON-RPC"
:
"dojo.rpc.JsonService"
},
_createHandler
:
function
(){
// summary:
// Create a service handler
// desription:
// A service handler class is determined by:
// 1. 'handlerClass' attribute
// 2. 'serviceType' attribute
// 3. 'serviceType' property in a service description
// returns:
// A service handler
if
(
this
.
url
){
var
self
=
this
;
var
d
=
dojo
.
xhrGet
({
url
:
this
.
url
,
handleAs
:
"json"
,
sync
:
true
});
d
.
addCallback
(
function
(
result
){
self
.
smd
=
result
;
});
if
(
this
.
smd
&&
!
this
.
serviceUrl
){
this
.
serviceUrl
=
(
this
.
smd
.
serviceUrl
||
this
.
smd
.
serviceURL
);
}
}
var
handlerClass
=
undefined
;
if
(
this
.
handlerClass
){
handlerClass
=
dojox
.
wire
.
_getClass
(
this
.
handlerClass
);
}
else
if
(
this
.
serviceType
){
handlerClass
=
this
.
_handlerClasses
[
this
.
serviceType
];
if
(
handlerClass
&&
dojo
.
isString
(
handlerClass
)){
handlerClass
=
dojox
.
wire
.
_getClass
(
handlerClass
);
this
.
_handlerClasses
[
this
.
serviceType
]
=
handlerClass
;
}
}
else
if
(
this
.
smd
&&
this
.
smd
.
serviceType
){
handlerClass
=
this
.
_handlerClasses
[
this
.
smd
.
serviceType
];
if
(
handlerClass
&&
dojo
.
isString
(
handlerClass
)){
handlerClass
=
dojox
.
wire
.
_getClass
(
handlerClass
);
this
.
_handlerClasses
[
this
.
smd
.
serviceType
]
=
handlerClass
;
}
}
if
(
!
handlerClass
){
return
null
;
//null
}
return
new
handlerClass
();
//Object
},
callMethod
:
function
(
method
,
parameters
){
// summary:
// Call a service method with parameters
// method:
// A method name
// parameters:
// An array parameters
var
deferred
=
new
dojo
.
Deferred
();
this
.
handler
.
bind
(
method
,
parameters
,
deferred
,
this
.
serviceUrl
);
return
deferred
;
}
});
dojo
.
declare
(
"dojox.wire.ml.RestHandler"
,
null
,
{
// summary:
// A REST service handler
// description:
// This class serves as a base REST service.
// Sub-classes may override _getContent() and _getResult() to handle
// specific content types.
contentType
:
"text/plain"
,
handleAs
:
"text"
,
bind
:
function
(
method
,
parameters
,
deferred
,
url
){
// summary:
// Call a service method with parameters.
// description:
// A service is called with a URL generated by _getUrl() and
// an HTTP method specified with 'method'.
// For "POST" and "PUT", a content is generated by _getContent().
// When data is loaded, _getResult() is used to pass the result to
// Deferred.callback().
// method:
// A method name
// parameters:
// An array of parameters
// deferred:
// 'Deferred'
// url:
// A URL for the method
method
=
method
.
toUpperCase
();
var
self
=
this
;
var
args
=
{
url
:
this
.
_getUrl
(
method
,
parameters
,
url
),
contentType
:
this
.
contentType
,
handleAs
:
this
.
handleAs
,
headers
:
this
.
headers
,
preventCache
:
this
.
preventCache
};
var
d
=
null
;
if
(
method
==
"POST"
){
args
.
postData
=
this
.
_getContent
(
method
,
parameters
);
d
=
dojo
.
rawXhrPost
(
args
);
}
else
if
(
method
==
"PUT"
){
args
.
putData
=
this
.
_getContent
(
method
,
parameters
);
d
=
dojo
.
rawXhrPut
(
args
);
}
else
if
(
method
==
"DELETE"
){
d
=
dojo
.
xhrDelete
(
args
);
}
else
{
// "GET"
d
=
dojo
.
xhrGet
(
args
);
}
d
.
addCallbacks
(
function
(
result
){
deferred
.
callback
(
self
.
_getResult
(
result
));
},
function
(
error
){
deferred
.
errback
(
error
);
});
},
_getUrl
:
function
(
/*String*/
method
,
/*Array*/
parameters
,
/*String*/
url
){
// summary:
// Generate a URL
// description:
// If 'method' is "GET" or "DELETE", a query string is generated
// from a query object specified to the first parameter in
// 'parameters' and appended to 'url'.
// If 'url' contains variable seguments ("{parameter_name}"),
// they are replaced with corresponding parameter values, instead.
// method:
// A method name
// parameters:
// An array of parameters
// url:
// A base URL
// returns:
// A URL
if
(
method
==
"GET"
||
method
==
"DELETE"
){
var
query
=
parameters
[
0
];
var
queryString
=
""
;
for
(
var
name
in
query
){
var
value
=
query
[
name
];
if
(
value
){
value
=
encodeURIComponent
(
value
);
var
variable
=
"{"
+
name
+
"}"
;
var
index
=
url
.
indexOf
(
variable
);
if
(
index
>=
0
){
// encode in path
url
=
url
.
substring
(
0
,
index
)
+
value
+
url
.
substring
(
index
+
variable
.
length
);
}
else
{
// encode as query string
if
(
queryString
){
queryString
+=
"&"
;
}
queryString
+=
(
name
+
"="
+
value
);
}
}
}
if
(
queryString
){
url
+=
"?"
+
queryString
;
}
}
return
url
;
//String
},
_getContent
:
function
(
/*String*/
method
,
/*Array*/
parameters
){
// summary:
// Generate a request content
// description:
// If 'method' is "POST" or "PUT", the first parameter in
// 'parameters' is returned.
// method:
// A method name
// parameters:
// An array of parameters
// returns:
// A request content
if
(
method
==
"POST"
||
method
==
"PUT"
){
return
(
parameters
?
parameters
[
0
]
:
null
);
//anything
}
else
{
return
null
;
//null
}
},
_getResult
:
function
(
/*anything*/
data
){
// summary:
// Extract a result
// description:
// A response data is returned as is.
// data:
// A response data returned by a service
// returns:
// A result object
return
data
;
//anything
}
});
dojo
.
declare
(
"dojox.wire.ml.XmlHandler"
,
dojox
.
wire
.
ml
.
RestHandler
,
{
// summary:
// A REST service handler for XML
// description:
// This class provides XML handling for a REST service.
contentType
:
"text/xml"
,
handleAs
:
"xml"
,
_getContent
:
function
(
/*String*/
method
,
/*Array*/
parameters
){
// description:
// If 'method' is "POST" or "PUT", the first parameter in
// 'parameters' is used to generate an XML content.
// method:
// A method name
// parameters:
// An array of parameters
// returns:
// A request content
var
content
=
null
;
if
(
method
==
"POST"
||
method
==
"PUT"
){
var
p
=
parameters
[
0
];
if
(
p
){
if
(
dojo
.
isString
(
p
)){
content
=
p
;
}
else
{
var
element
=
p
;
if
(
element
instanceof
dojox
.
wire
.
ml
.
XmlElement
){
element
=
element
.
element
;
}
else
if
(
element
.
nodeType
===
9
/* DOCUMENT_NODE */
){
element
=
element
.
documentElement
;
}
var
declaration
=
"<?xml version=\"1.0\"?>"
;
// TODO: encoding?
content
=
declaration
+
dojox
.
data
.
dom
.
innerXML
(
element
);
}
}
}
return
content
;
},
_getResult
:
function
(
/*Document*/
data
){
// summary:
// Extract a result
// description:
// A response data (XML Document) is returned wrapped with
// XmlElement.
// data:
// A response data returned by a service
// returns:
// A result object
if
(
data
){
data
=
new
dojox
.
wire
.
ml
.
XmlElement
(
data
);
}
return
data
;
}
});
dojo
.
declare
(
"dojox.wire.ml.JsonHandler"
,
dojox
.
wire
.
ml
.
RestHandler
,
{
// summary:
// A REST service handler for JSON
// description:
// This class provides JSON handling for a REST service.
contentType
:
"text/json"
,
handleAs
:
"json"
,
headers
:
{
"Accept"
:
"*/json"
},
_getContent
:
function
(
/*String*/
method
,
/*Array*/
parameters
){
// summary:
// Generate a request content
// description:
// If 'method' is "POST" or "PUT", the first parameter in
// 'parameter' is used to generate a JSON content.
// method:
// A method name
// parameters:
// An array of parameters
// returns:
// A request content
var
content
=
null
;
if
(
method
==
"POST"
||
method
==
"PUT"
){
var
p
=
(
parameters
?
parameters
[
0
]
:
undefined
);
if
(
p
){
if
(
dojo
.
isString
(
p
)){
content
=
p
;
}
else
{
content
=
dojo
.
toJson
(
p
);
}
}
}
return
content
;
//String
}
});
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 14:01 (10 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26621
Default Alt Text
Service.js (8 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment