mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5282 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
173 lines
5.2 KiB
JavaScript
173 lines
5.2 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2006, The Dojo Foundation
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the
|
|
modified BSD license. For more information on Dojo licensing, see:
|
|
|
|
http://dojotoolkit.org/community/licensing.shtml
|
|
*/
|
|
|
|
dojo.provide("dojo.io.RhinoIO");
|
|
|
|
dojo.require("dojo.io.common");
|
|
dojo.require("dojo.lang.func");
|
|
dojo.require("dojo.lang.array");
|
|
dojo.require("dojo.string.extras");
|
|
|
|
dojo.io.RhinoHTTPTransport = new function(){
|
|
this.canHandle = function(/*dojo.io.Request*/req){
|
|
//summary: Tells dojo.io.bind() if this is a good transport to
|
|
//use for the particular type of request. This type of transport can
|
|
//only be used inside the Rhino JavaScript engine.
|
|
|
|
// We have to limit to text types because Rhino doesnt support
|
|
// a W3C dom implementation out of the box. In the future we
|
|
// should provide some kind of hook to inject your own, because
|
|
// in all my projects I use XML for Script to provide a W3C DOM.
|
|
if(dojo.lang.find(["text/plain", "text/html", "text/xml", "text/javascript", "text/json", "application/json"],
|
|
(req.mimetype.toLowerCase() || "")) < 0){
|
|
return false;
|
|
}
|
|
|
|
// We only handle http requests! Unfortunately, because the method is
|
|
// protected, I can't directly create a java.net.HttpURLConnection, so
|
|
// this is the only way to test.
|
|
if(req.url.substr(0, 7) != "http://"){
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function doLoad(req, conn){
|
|
var ret;
|
|
if (req.method.toLowerCase() == "head"){
|
|
// TODO: return the headers
|
|
}else{
|
|
var stream = conn.getContent();
|
|
var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream));
|
|
|
|
// read line-by-line because why not?
|
|
var text = "";
|
|
var line = null;
|
|
while((line = reader.readLine()) != null){
|
|
text += line;
|
|
}
|
|
|
|
if(req.mimetype == "text/javascript"){
|
|
try{
|
|
ret = dj_eval(text);
|
|
}catch(e){
|
|
dojo.debug(e);
|
|
dojo.debug(text);
|
|
ret = null;
|
|
}
|
|
}else if(req.mimetype == "text/json" || req.mimetype == "application/json"){
|
|
try{
|
|
ret = dj_eval("("+text+")");
|
|
}catch(e){
|
|
dojo.debug(e);
|
|
dojo.debug(text);
|
|
ret = false;
|
|
}
|
|
}else{
|
|
ret = text;
|
|
}
|
|
}
|
|
|
|
req.load("load", ret, req);
|
|
}
|
|
|
|
function connect(req){
|
|
var content = req.content || {};
|
|
var query;
|
|
|
|
if (req.sendTransport){
|
|
content["dojo.transport"] = "rhinohttp";
|
|
}
|
|
|
|
if(req.postContent){
|
|
query = req.postContent;
|
|
}else{
|
|
query = dojo.io.argsFromMap(content, req.encoding);
|
|
}
|
|
|
|
var url_text = req.url;
|
|
if(req.method.toLowerCase() == "get" && query != ""){
|
|
url_text = url_text + "?" + query;
|
|
}
|
|
|
|
var url = new java.net.URL(url_text);
|
|
var conn = url.openConnection();
|
|
|
|
//
|
|
// configure the connection
|
|
//
|
|
|
|
conn.setRequestMethod(req.method.toUpperCase());
|
|
|
|
if(req.headers){
|
|
for(var header in req.headers){
|
|
if(header.toLowerCase() == "content-type" && !req.contentType){
|
|
req.contentType = req.headers[header];
|
|
}else{
|
|
conn.setRequestProperty(header, req.headers[header]);
|
|
}
|
|
}
|
|
}
|
|
if(req.contentType){
|
|
conn.setRequestProperty("Content-Type", req.contentType);
|
|
}
|
|
|
|
if(req.method.toLowerCase() == "post"){
|
|
conn.setDoOutput(true);
|
|
|
|
// write the post data
|
|
var output_stream = conn.getOutputStream();
|
|
var byte_array = (new java.lang.String(query)).getBytes();
|
|
output_stream.write(byte_array, 0, byte_array.length);
|
|
}
|
|
|
|
// do it to it!
|
|
conn.connect();
|
|
|
|
// perform the load
|
|
doLoad(req, conn);
|
|
}
|
|
|
|
this.bind = function(req){
|
|
//summary: function that sends the request to the server.
|
|
|
|
//The following are acceptable properties in kwArgs (in addition to the
|
|
//normal dojo.io.Request object properties).
|
|
//url: String: URL the server URL to use for the request.
|
|
//method: String: the HTTP method to use (GET, POST, etc...).
|
|
//mimetype: Specifies what format the result data should be given to the load/handle callback. Values of
|
|
// text/javascript, text/json, and application/json will cause the transport
|
|
// to evaluate the response as JavaScript/JSON. Any other mimetype will give back a text
|
|
// string.
|
|
//transport: String: specify "RhinoHTTPTransport" to force the use of this transport.
|
|
//sync: boolean: if true, then a synchronous XMLHttpRequest call is done,
|
|
// if false (the default), then an asynchronous call is used.
|
|
//headers: Object: The object property names and values will be sent as HTTP request header
|
|
// names and values.
|
|
//encoding: String: The type of encoding to use when dealing with the content kwArgs property.
|
|
//content: Object: The content object is converted into a name=value&name=value string, by
|
|
// using dojo.io.argsFromMap(). The encoding kwArgs property is passed to dojo.io.argsFromMap()
|
|
// for use in encoding the names and values. The resulting string is added to the request.
|
|
//postContent: String: Raw name=value&name=value string to be included as part of the request.
|
|
|
|
var async = req["sync"] ? false : true;
|
|
if (async){
|
|
setTimeout(dojo.lang.hitch(this, function(){
|
|
connect(req);
|
|
}), 1);
|
|
} else {
|
|
connect(req);
|
|
}
|
|
}
|
|
|
|
dojo.io.transports.addTransport("RhinoHTTPTransport");
|
|
}
|