You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2005/11/27 19:21:12 UTC

svn commit: r349272 - in /struts/flow/trunk: ./ src/examples/WEB-INF/remote/ src/examples/remote/ src/java/org/apache/struts/flow/ src/java/org/apache/struts/flow/core/javascript/fom/ src/java/org/apache/struts/flow/ibatis/ src/java/org/apache/struts/f...

Author: mrdon
Date: Sun Nov 27 10:21:07 2005
New Revision: 349272

URL: http://svn.apache.org/viewcvs?rev=349272&view=rev
Log:
Moved to dojo for client js library, fixed a few places that weren't
wrapping java objects correctly, improved logging, upgraded to Rhin
1.6R2

Added:
    struts/flow/trunk/src/examples/remote/dojo-io.js   (with props)
    struts/flow/trunk/src/examples/remote/json.js   (with props)
Removed:
    struts/flow/trunk/src/examples/remote/clientFlow.js
Modified:
    struts/flow/trunk/build.xml
    struts/flow/trunk/project.xml
    struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp
    struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java
    struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java
    struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java
    struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java
    struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java
    struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java

Modified: struts/flow/trunk/build.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/build.xml?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/build.xml (original)
+++ struts/flow/trunk/build.xml Sun Nov 27 10:21:07 2005
@@ -100,9 +100,9 @@
               ignoreerrors="true" 
               src="http://www.ibiblio.org/maven/struts/jars/struts-1.2.8.jar"/> 
 
-        <get dest="${lib.core}/js-1.6R1.jar" usetimestamp="true" 
+        <get dest="${lib.core}/js-1.6R2.jar" usetimestamp="true" 
               ignoreerrors="true" 
-              src="http://www.ibiblio.org/maven/rhino/jars/js-1.6R1.jar"/> 
+              src="http://www.ibiblio.org/maven/rhino/jars/js-1.6R2.jar"/> 
 
         <get dest="${lib.core}/commons-chain-1.0.jar" usetimestamp="true" 
               ignoreerrors="true" 

Modified: struts/flow/trunk/project.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/project.xml?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/project.xml (original)
+++ struts/flow/trunk/project.xml Sun Nov 27 10:21:07 2005
@@ -77,7 +77,7 @@
 	<dependency>
 	  <groupId>rhino</groupId>
 	  <artifactId>js</artifactId>
-	  <version>1.6R1</version>
+	  <version>1.6R2</version>
 	  <properties>
 		<war.bundle>true</war.bundle>
 	  </properties>

Modified: struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp (original)
+++ struts/flow/trunk/src/examples/WEB-INF/remote/guess.jsp Sun Nov 27 10:21:07 2005
@@ -4,18 +4,21 @@
   <title>Struts Flow number guessing game - Remote edition</title>
     <script type="text/javascript">
   <!--
-function init() {
-    this.client = new ClientFlow("guess.do");
-}   
 function cheat() {
-    result = client.call("cheat");
-    alert("The secret number is "+result.secret+". After applying a penalty, you have guessed "+result.guesses+" times");
+    dojo.io.bind({
+        url:  "guess.do?FlowCall=cheat",
+        type: "text/javascript",
+        load: function(type, data, evt) {
+            eval("data = "+data);
+            alert("The secret number is "+data.secret+". After applying a penalty, you have guessed "+data.guesses+" times");
+        }
+    });
 }
     -->
   </script>
-  <script type="text/javascript" src="clientFlow.js" />
+  <script type="text/javascript" src="dojo-io.js"></script>
 </head>
-<body onload="init()">
+<body>
 
   <h1>Guess the Number Between 1 and 10</h1>
   

Added: struts/flow/trunk/src/examples/remote/dojo-io.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/remote/dojo-io.js?rev=349272&view=auto
==============================================================================
--- struts/flow/trunk/src/examples/remote/dojo-io.js (added)
+++ struts/flow/trunk/src/examples/remote/dojo-io.js Sun Nov 27 10:21:07 2005
@@ -0,0 +1,1271 @@
+/* Copyright (c) 2004-2005 The Dojo Foundation, Licensed under the Academic Free License version 2.1 or above */var dj_global=this;
+function dj_undef(_1,_2){
+if(!_2){
+_2=dj_global;
+}
+return (typeof _2[_1]=="undefined");
+}
+function dj_eval_object_path(_3,_4){
+if(typeof _3!="string"){
+return dj_global;
+}
+if(_3.indexOf(".")==-1){
+return dj_undef(_3)?undefined:dj_global[_3];
+}
+var _5=_3.split(/\./);
+var _6=dj_global;
+for(var i=0;i<_5.length;++i){
+if(!_4){
+_6=_6[_5[i]];
+if((typeof _6=="undefined")||(!_6)){
+return _6;
+}
+}else{
+if(dj_undef(_5[i],_6)){
+_6[_5[i]]={};
+}
+_6=_6[_5[i]];
+}
+}
+return _6;
+}
+if(dj_undef("djConfig")){
+var djConfig={};
+}
+var dojo;
+if(dj_undef("dojo")){
+dojo={};
+}
+dojo.version={major:0,minor:1,patch:0,revision:Number("$Rev: 1321 $".match(/[0-9]+/)[0]),toString:function(){
+var v=dojo.version;
+return v.major+"."+v.minor+"."+v.patch+" ("+v.revision+")";
+}};
+function dj_error_to_string(_9){
+return ((!dj_undef("message",_9))?_9.message:(dj_undef("description",_9)?_9:_9.description));
+}
+function dj_debug(){
+var _10=arguments;
+if(dj_undef("println",dojo.hostenv)){
+dj_throw("dj_debug not available (yet?)");
+}
+if(!dojo.hostenv.is_debug_){
+return;
+}
+var _11=dj_global["jum"];
+var s=_11?"":"DEBUG: ";
+for(var i=0;i<_10.length;++i){
+if(!false&&_10[i] instanceof Error){
+var msg="["+_10[i].name+": "+dj_error_to_string(_10[i])+(_10[i].fileName?", file: "+_10[i].fileName:"")+(_10[i].lineNumber?", line: "+_10[i].lineNumber:"")+"]";
+}else{
+var msg=_10[i];
+}
+s+=msg+" ";
+}
+if(_11){
+jum.debug(s);
+}else{
+dojo.hostenv.println(s);
+}
+}
+function dj_throw(_14){
+var he=dojo.hostenv;
+if(dj_undef("hostenv",dojo)&&dj_undef("println",dojo)){
+dojo.hostenv.println("FATAL: "+_14);
+}
+throw Error(_14);
+}
+function dj_rethrow(_16,_17){
+var _18=dj_error_to_string(_17);
+dj_throw(_16+": "+_18);
+}
+function dj_eval(s){
+return dj_global.eval?dj_global.eval(s):eval(s);
+}
+function dj_unimplemented(_19,_20){
+var _21="'"+_19+"' not implemented";
+if((typeof _20!="undefined")&&(_20)){
+_21+=" "+_20;
+}
+dj_throw(_21);
+}
+function dj_deprecated(_22,_23){
+var _24="DEPRECATED: "+_22;
+if((typeof _23!="undefined")&&(_23)){
+_24+=" "+_23;
+}
+dj_debug(_24);
+}
+function dj_inherits(_25,_26){
+if(typeof _26!="function"){
+dj_throw("superclass: "+_26+" borken");
+}
+_25.prototype=new _26();
+_25.prototype.constructor=_25;
+_25.superclass=_26.prototype;
+_25["super"]=_26.prototype;
+}
+dojo.render={name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:{capable:false,support:{builtin:false,plugin:false},ie:false,opera:false,khtml:false,safari:false,moz:false,prefixes:["html"]},svg:{capable:false,support:{builtin:false,plugin:false},corel:false,adobe:false,batik:false,prefixes:["svg"]},swf:{capable:false,support:{builtin:false,plugin:false},mm:false,prefixes:["Swf","Flash","Mm"]},swt:{capable:false,support:{builtin:false,plugin:false},ibm:false,prefixes:["Swt"]}};
+dojo.hostenv=(function(){
+var djc=djConfig;
+function _def(obj,_29,def){
+return (dj_undef(_29,obj)?def:obj[_29]);
+}
+return {is_debug_:_def(djc,"isDebug",false),base_script_uri_:_def(djc,"baseScriptUri",undefined),base_relative_path_:_def(djc,"baseRelativePath",""),library_script_uri_:_def(djc,"libraryScriptUri",""),auto_build_widgets_:_def(djc,"parseWidgets",true),ie_prevent_clobber_:_def(djc,"iePreventClobber",false),ie_clobber_minimal_:_def(djc,"ieClobberMinimal",false),name_:"(unset)",version_:"(unset)",pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_31,_32){
+this.modulePrefixes_[_31]={name:_31,value:_32};
+},getModulePrefix:function(_33){
+var mp=this.modulePrefixes_;
+if((mp[_33])&&(mp[_33]["name"])){
+return mp[_33].value;
+}
+return _33;
+},getTextStack:[],loadUriStack:[],loadedUris:[],modules_:{},modulesLoadedFired:false,modulesLoadedListeners:[],getName:function(){
+return this.name_;
+},getVersion:function(){
+return this.version_;
+},getText:function(uri){
+dj_unimplemented("getText","uri="+uri);
+},getLibraryScriptUri:function(){
+dj_unimplemented("getLibraryScriptUri","");
+}};
+})();
+dojo.hostenv.getBaseScriptUri=function(){
+if(!dj_undef("base_script_uri_",this)){
+return this.base_script_uri_;
+}
+var uri=this.library_script_uri_;
+if(!uri){
+uri=this.library_script_uri_=this.getLibraryScriptUri();
+if(!uri){
+dj_throw("Nothing returned by getLibraryScriptUri(): "+uri);
+}
+}
+var _36=uri.lastIndexOf("/");
+this.base_script_uri_=this.base_relative_path_;
+return this.base_script_uri_;
+};
+dojo.hostenv.setBaseScriptUri=function(uri){
+this.base_script_uri_=uri;
+};
+dojo.hostenv.loadPath=function(_37,_38,cb){
+if(!_37){
+dj_throw("Missing relpath argument");
+}
+if((_37.charAt(0)=="/")||(_37.match(/^\w+:/))){
+dj_throw("relpath '"+_37+"'; must be relative");
+}
+var uri=this.getBaseScriptUri()+_37;
+try{
+return ((!_38)?this.loadUri(uri):this.loadUriAndCheck(uri,_38));
+}
+catch(e){
+if(dojo.hostenv.is_debug_){
+dj_debug(e);
+}
+return false;
+}
+};
+dojo.hostenv.loadUri=function(uri,cb){
+if(dojo.hostenv.loadedUris[uri]){
+return;
+}
+var _40=this.getText(uri,null,true);
+if(_40==null){
+return 0;
+}
+var _41=dj_eval(_40);
+return 1;
+};
+dojo.hostenv.getDepsForEval=function(_42){
+if(!_42){
+_42="";
+}
+var _43=[];
+var tmp=_42.match(/dojo.hostenv.loadModule\(.*?\)/mg);
+if(tmp){
+for(var x=0;x<tmp.length;x++){
+_43.push(tmp[x]);
+}
+}
+tmp=_42.match(/dojo.hostenv.require\(.*?\)/mg);
+if(tmp){
+for(var x=0;x<tmp.length;x++){
+_43.push(tmp[x]);
+}
+}
+tmp=_42.match(/dojo.require\(.*?\)/mg);
+if(tmp){
+for(var x=0;x<tmp.length;x++){
+_43.push(tmp[x]);
+}
+}
+tmp=_42.match(/dojo.hostenv.conditionalLoadModule\([\w\W]*?\)/gm);
+if(tmp){
+for(var x=0;x<tmp.length;x++){
+_43.push(tmp[x]);
+}
+}
+return _43;
+};
+dojo.hostenv.loadUriAndCheck=function(uri,_46,cb){
+var ok=true;
+try{
+ok=this.loadUri(uri,cb);
+}
+catch(e){
+dj_debug("failed loading ",uri," with error: ",e);
+}
+return ((ok)&&(this.findModule(_46,false)))?true:false;
+};
+dojo.loaded=function(){
+};
+dojo.hostenv.loaded=function(){
+this.modulesLoadedFired=true;
+var mll=this.modulesLoadedListeners;
+for(var x=0;x<mll.length;x++){
+mll[x]();
+}
+dojo.loaded();
+};
+dojo.addOnLoad=function(obj,_49){
+if(arguments.length==1){
+dojo.hostenv.modulesLoadedListeners.push(obj);
+}else{
+if(arguments.length>1){
+dojo.hostenv.modulesLoadedListeners.push(function(){
+obj[_49]();
+});
+}
+}
+};
+dojo.hostenv.modulesLoaded=function(){
+if(this.modulesLoadedFired){
+return;
+}
+if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
+if(this.inFlightCount>0){
+dj_debug("couldn't initialize, there are files still in flight");
+return;
+}
+this.loaded();
+}
+};
+dojo.hostenv.moduleLoaded=function(_50){
+var _51=dj_eval_object_path((_50.split(".").slice(0,-1)).join("."));
+this.loaded_modules_[(new String(_50)).toLowerCase()]=_51;
+};
+dojo.hostenv.loadModule=function(_52,_53,_54){
+var _55=this.findModule(_52,false);
+if(_55){
+return _55;
+}
+if(dj_undef(_52,this.loading_modules_)){
+this.addedToLoadingCount.push(_52);
+}
+this.loading_modules_[_52]=1;
+var _56=_52.replace(/\./g,"/")+".js";
+var _57=_52.split(".");
+var _58=_52.split(".");
+for(var i=_57.length-1;i>0;i--){
+var _59=_57.slice(0,i).join(".");
+var _60=this.getModulePrefix(_59);
+if(_60!=_59){
+_57.splice(0,i,_60);
+break;
+}
+}
+var _61=_57[_57.length-1];
+if(_61=="*"){
+_52=(_58.slice(0,-1)).join(".");
+while(_57.length){
+_57.pop();
+_57.push(this.pkgFileName);
+_56=_57.join("/")+".js";
+if(_56.charAt(0)=="/"){
+_56=_56.slice(1);
+}
+ok=this.loadPath(_56,((!_54)?_52:null));
+if(ok){
+break;
+}
+_57.pop();
+}
+}else{
+_56=_57.join("/")+".js";
+_52=_58.join(".");
+var ok=this.loadPath(_56,((!_54)?_52:null));
+if((!ok)&&(!_53)){
+_57.pop();
+while(_57.length){
+_56=_57.join("/")+".js";
+ok=this.loadPath(_56,((!_54)?_52:null));
+if(ok){
+break;
+}
+_57.pop();
+_56=_57.join("/")+"/"+this.pkgFileName+".js";
+if(_56.charAt(0)=="/"){
+_56=_56.slice(1);
+}
+ok=this.loadPath(_56,((!_54)?_52:null));
+if(ok){
+break;
+}
+}
+}
+if((!ok)&&(!_54)){
+dj_throw("Could not load '"+_52+"'; last tried '"+_56+"'");
+}
+}
+if(!_54){
+_55=this.findModule(_52,false);
+if(!_55){
+dj_throw("symbol '"+_52+"' is not defined after loading '"+_56+"'");
+}
+}
+return _55;
+};
+function dj_load(_62,_63){
+return dojo.hostenv.loadModule(_62,_63);
+}
+dojo.hostenv.startPackage=function(_64){
+var _65=_64.split(/\./);
+if(_65[_65.length-1]=="*"){
+_65.pop();
+}
+return dj_eval_object_path(_65.join("."),true);
+};
+dojo.hostenv.findModule=function(_66,_67){
+if(!dj_undef(_66,this.modules_)){
+return this.modules_[_66];
+}
+if(this.loaded_modules_[(new String(_66)).toLowerCase()]){
+return this.loaded_modules_[_66];
+}
+var _68=dj_eval_object_path(_66);
+if((typeof _68!=="undefined")&&(_68)){
+return this.modules_[_66]=_68;
+}
+if(_67){
+dj_throw("no loaded module named '"+_66+"'");
+}
+return null;
+};
+dj_addNodeEvtHdlr=function(_69,_70,fp,_72){
+if(_69.attachEvent){
+_69.attachEvent("on"+_70,fp);
+}else{
+if(_69.addEventListener){
+_69.addEventListener(_70,fp,_72);
+}else{
+var _73=_69["on"+_70];
+if(typeof _73!="undefined"){
+_69["on"+_70]=function(){
+fp.apply(_69,arguments);
+_73.apply(_69,arguments);
+};
+}else{
+_69["on"+_70]=fp;
+}
+}
+}
+return true;
+};
+if(typeof window=="undefined"){
+dj_throw("no window object");
+}
+(function(){
+if((dojo.hostenv["base_script_uri_"]==""||dojo.hostenv["base_relative_path_"]=="")&&document&&document.getElementsByTagName){
+var _74=document.getElementsByTagName("script");
+var _75=/(__package__|dojo)\.js$/i;
+for(var i=0;i<_74.length;i++){
+var src=_74[i].getAttribute("src");
+if(_75.test(src)){
+var _77=src.replace(_75,"");
+if(dojo.hostenv["base_script_uri_"]==""){
+dojo.hostenv["base_script_uri_"]=_77;
+}
+if(dojo.hostenv["base_relative_path_"]==""){
+dojo.hostenv["base_relative_path_"]=_77;
+}
+break;
+}
+}
+}
+})();
+with(dojo.render){
+html.UA=navigator.userAgent;
+html.AV=navigator.appVersion;
+html.capable=true;
+html.support.builtin=true;
+ver=parseFloat(html.AV);
+os.mac=html.AV.indexOf("Macintosh")==-1?false:true;
+os.win=html.AV.indexOf("Windows")==-1?false:true;
+html.opera=html.UA.indexOf("Opera")==-1?false:true;
+html.khtml=((html.AV.indexOf("Konqueror")>=0)||(html.AV.indexOf("Safari")>=0))?true:false;
+html.safari=(html.AV.indexOf("Safari")>=0)?true:false;
+html.mozilla=html.moz=((html.UA.indexOf("Gecko")>=0)&&(!html.khtml))?true:false;
+html.ie=((document.all)&&(!html.opera))?true:false;
+html.ie50=html.ie&&html.AV.indexOf("MSIE 5.0")>=0;
+html.ie55=html.ie&&html.AV.indexOf("MSIE 5.5")>=0;
+html.ie60=html.ie&&html.AV.indexOf("MSIE 6.0")>=0;
+}
+dojo.hostenv.startPackage("dojo.hostenv");
+dojo.hostenv.name_="browser";
+dojo.hostenv.searchIds=[];
+var DJ_XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
+dojo.hostenv.getXmlhttpObject=function(){
+var _78=null;
+var _79=null;
+try{
+_78=new XMLHttpRequest();
+}
+catch(e){
+}
+if(!_78){
+for(var i=0;i<3;++i){
+var _80=DJ_XMLHTTP_PROGIDS[i];
+try{
+_78=new ActiveXObject(_80);
+}
+catch(e){
+_79=e;
+}
+if(_78){
+DJ_XMLHTTP_PROGIDS=[_80];
+break;
+}
+}
+}
+if((_79)&&(!_78)){
+dj_rethrow("Could not create a new ActiveXObject using any of the progids "+DJ_XMLHTTP_PROGIDS.join(", "),_79);
+}else{
+if(!_78){
+return dj_throw("No XMLHTTP implementation available, for uri "+uri);
+}
+}
+return _78;
+};
+dojo.hostenv.getText=function(uri,_81,_82){
+var _83=this.getXmlhttpObject();
+if(_81){
+_83.onreadystatechange=function(){
+if((4==_83.readyState)&&(_83["status"])){
+if(_83.status==200){
+dj_debug("LOADED URI: "+uri);
+_81(_83.responseText);
+}
+}
+};
+}
+_83.open("GET",uri,_81?true:false);
+_83.send(null);
+if(_81){
+return null;
+}
+return _83.responseText;
+};
+function dj_last_script_src(){
+var _84=window.document.getElementsByTagName("script");
+if(_84.length<1){
+dj_throw("No script elements in window.document, so can't figure out my script src");
+}
+var _85=_84[_84.length-1];
+var src=_85.src;
+if(!src){
+dj_throw("Last script element (out of "+_84.length+") has no src");
+}
+return src;
+}
+if(!dojo.hostenv["library_script_uri_"]){
+dojo.hostenv.library_script_uri_=dj_last_script_src();
+}
+dojo.hostenv.println=function(s){
+var ti=null;
+var dis="<div>"+s+"</div>";
+try{
+ti=document.createElement("div");
+document.body.appendChild(ti);
+ti.innerHTML=s;
+}
+catch(e){
+try{
+document.write(dis);
+}
+catch(e2){
+window.status=s;
+}
+}
+delete ti;
+delete dis;
+delete s;
+};
+dj_addNodeEvtHdlr(window,"load",function(){
+if(dojo.render.html.ie){
+dojo.hostenv.makeWidgets();
+}
+dojo.hostenv.modulesLoaded();
+});
+dojo.hostenv.makeWidgets=function(){
+if((dojo.hostenv.auto_build_widgets_)||(dojo.hostenv.searchIds.length>0)){
+if(dj_eval_object_path("dojo.widget.Parse")){
+try{
+var _88=new dojo.xml.Parse();
+var _89=dojo.hostenv.searchIds;
+if(_89.length>0){
+for(var x=0;x<_89.length;x++){
+if(!document.getElementById(_89[x])){
+continue;
+}
+var _90=_88.parseElement(document.getElementById(_89[x]),null,true);
+dojo.widget.getParser().createComponents(_90);
+}
+}else{
+if(dojo.hostenv.auto_build_widgets_){
+var _90=_88.parseElement(document.body,null,true);
+dojo.widget.getParser().createComponents(_90);
+}
+}
+}
+catch(e){
+dj_debug("auto-build-widgets error:",e);
+}
+}
+}
+};
+dojo.hostenv.modulesLoadedListeners.push(function(){
+if(!dojo.render.html.ie){
+dojo.hostenv.makeWidgets();
+}
+});
+if((!window["djConfig"])||(!window["djConfig"]["preventBackButtonFix"])){
+document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
+}
+dojo.hostenv.writeIncludes=function(){
+};
+dojo.hostenv.conditionalLoadModule=function(_91){
+var _92=_91["common"]||[];
+var _93=(_91[dojo.hostenv.name_])?_92.concat(_91[dojo.hostenv.name_]||[]):_92.concat(_91["default"]||[]);
+for(var x=0;x<_93.length;x++){
+var _94=_93[x];
+if(_94.constructor==Array){
+dojo.hostenv.loadModule.apply(dojo.hostenv,_94);
+}else{
+dojo.hostenv.loadModule(_94);
+}
+}
+};
+dojo.hostenv.require=dojo.hostenv.loadModule;
+dojo.require=function(){
+dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
+};
+dojo.requireIf=function(){
+if((arguments[0]=="common")||(dojo.render[arguments[0]].capable)){
+dojo.require(arguments[1],arguments[2],arguments[3]);
+}
+};
+dojo.conditionalRequire=dojo.requireIf;
+dojo.kwCompoundRequire=function(){
+dojo.hostenv.conditionalLoadModule.apply(dojo.hostenv,arguments);
+};
+dojo.hostenv.provide=dojo.hostenv.startPackage;
+dojo.provide=function(){
+dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
+};
+dojo.provide("dojo.io.IO");
+dojo.io.transports=[];
+dojo.io.hdlrFuncNames=["load","error"];
+dojo.io.Request=function(url,mt,_97,_98){
+this.url=url;
+this.mimetype=mt;
+this.transport=_97;
+this.changeUrl=_98;
+this.formNode=null;
+this.events_={};
+var _99=this;
+this.error=function(type,_101){
+switch(type){
+case "io":
+var _102=dojo.io.IOEvent.IO_ERROR;
+var _103="IOError: error during IO";
+break;
+case "parse":
+var _102=dojo.io.IOEvent.PARSE_ERROR;
+var _103="IOError: error during parsing";
+default:
+var _102=dojo.io.IOEvent.UNKOWN_ERROR;
+var _103="IOError: cause unkown";
+}
+var _104=new dojo.io.IOEvent("error",null,_99,_103,this.url,_102);
+_99.dispatchEvent(_104);
+if(_99.onerror){
+_99.onerror(_103,_99.url,_104);
+}
+};
+this.load=function(type,data,evt){
+var _107=new dojo.io.IOEvent("load",data,_99,null,null,null);
+_99.dispatchEvent(_107);
+if(_99.onload){
+_99.onload(_107);
+}
+};
+this.backButton=function(){
+var _108=new dojo.io.IOEvent("backbutton",null,_99,null,null,null);
+_99.dispatchEvent(_108);
+if(_99.onbackbutton){
+_99.onbackbutton(_108);
+}
+};
+this.forwardButton=function(){
+var _109=new dojo.io.IOEvent("forwardbutton",null,_99,null,null,null);
+_99.dispatchEvent(_109);
+if(_99.onforwardbutton){
+_99.onforwardbutton(_109);
+}
+};
+};
+dojo.io.Request.prototype.addEventListener=function(type,func){
+if(!this.events_[type]){
+this.events_[type]=[];
+}
+for(var i=0;i<this.events_[type].length;i++){
+if(this.events_[type][i]==func){
+return;
+}
+}
+this.events_[type].push(func);
+};
+dojo.io.Request.prototype.removeEventListener=function(type,func){
+if(!this.events_[type]){
+return;
+}
+for(var i=0;i<this.events_[type].length;i++){
+if(this.events_[type][i]==func){
+this.events_[type].splice(i,1);
+}
+}
+};
+dojo.io.Request.prototype.dispatchEvent=function(evt){
+if(!this.events_[evt.type]){
+return;
+}
+for(var i=0;i<this.events_[evt.type].length;i++){
+this.events_[evt.type][i](evt);
+}
+return false;
+};
+dojo.io.IOEvent=function(type,data,_111,_112,_113,_114){
+this.type=type;
+this.data=data;
+this.request=_111;
+this.errorMessage=_112;
+this.errorUrl=_113;
+this.errorCode=_114;
+};
+dojo.io.IOEvent.UNKOWN_ERROR=0;
+dojo.io.IOEvent.IO_ERROR=1;
+dojo.io.IOEvent.PARSE_ERROR=2;
+dojo.io.Error=function(msg,type,num){
+this.message=msg;
+this.type=type||"unknown";
+this.number=num||0;
+};
+dojo.io.transports.addTransport=function(name){
+this.push(name);
+this[name]=dojo.io[name];
+};
+dojo.io.bind=function(_117){
+if(!_117["url"]){
+_117.url="";
+}else{
+_117.url=_117.url.toString();
+}
+if(!_117["mimetype"]){
+_117.mimetype="text/plain";
+}
+if(!_117["method"]&&!_117["formNode"]){
+_117.method="get";
+}else{
+if(_117["formNode"]){
+_117.method=_117["method"]||_117["formNode"].method||"get";
+}
+}
+if(_117["handler"]){
+_117.handle=_117.handler;
+}
+if(!_117["handle"]){
+_117.handle=function(){
+};
+}
+if(_117["loaded"]){
+_117.load=_117.loaded;
+}
+if(_117["changeUrl"]){
+_117.changeURL=_117.changeUrl;
+}
+for(var x=0;x<this.hdlrFuncNames.length;x++){
+var fn=this.hdlrFuncNames[x];
+if(typeof _117[fn]=="function"){
+continue;
+}
+if(typeof _117.handler=="object"){
+if(typeof _117.handler[fn]=="function"){
+_117[fn]=_117.handler[fn]||_117.handler["handle"]||function(){
+};
+}
+}else{
+if(typeof _117["handler"]=="function"){
+_117[fn]=_117.handler;
+}else{
+if(typeof _117["handle"]=="function"){
+_117[fn]=_117.handle;
+}
+}
+}
+}
+var _119="";
+if(_117["transport"]){
+_119=_117["transport"];
+if(!this[_119]){
+return false;
+}
+}else{
+for(var x=0;x<dojo.io.transports.length;x++){
+var tmp=dojo.io.transports[x];
+if((this[tmp])&&(this[tmp].canHandle(_117))){
+_119=tmp;
+}
+}
+if(_119==""){
+return false;
+}
+}
+this[_119].bind(_117);
+return true;
+};
+dojo.io.argsFromMap=function(map){
+var _121=new Object();
+var _122="";
+for(var x in map){
+if(!_121[x]){
+_122+=encodeURIComponent(x)+"="+encodeURIComponent(map[x])+"&";
+}
+}
+return _122;
+};
+dojo.provide("dojo.alg.Alg");
+dojo.alg.find=function(arr,val){
+for(var i=0;i<arr.length;++i){
+if(arr[i]==val){
+return i;
+}
+}
+return -1;
+};
+dojo.alg.inArray=function(arr,val){
+if((!arr||arr.constructor!=Array)&&(val&&val.constructor==Array)){
+var a=arr;
+arr=val;
+val=a;
+}
+return dojo.alg.find(arr,val)>-1;
+};
+dojo.alg.inArr=dojo.alg.inArray;
+dojo.alg.getNameInObj=function(ns,item){
+if(!ns){
+ns=dj_global;
+}
+for(var x in ns){
+if(ns[x]===item){
+return new String(x);
+}
+}
+return null;
+};
+dojo.alg.has=function(obj,name){
+return (typeof obj[name]!=="undefined");
+};
+dojo.alg.forEach=function(arr,_128,_129){
+var il=arr.length;
+for(var i=0;i<((_129)?il:arr.length);i++){
+if(_128(arr[i])=="break"){
+break;
+}
+}
+};
+dojo.alg.for_each=dojo.alg.forEach;
+dojo.alg.map=function(arr,obj,_131){
+for(var i=0;i<arr.length;++i){
+_131.call(obj,arr[i]);
+}
+};
+dojo.alg.tryThese=function(){
+for(var x=0;x<arguments.length;x++){
+try{
+if(typeof arguments[x]=="function"){
+var ret=(arguments[x]());
+if(ret){
+return ret;
+}
+}
+}
+catch(e){
+dj_debug(e);
+}
+}
+};
+dojo.alg.delayThese=function(farr,cb,_134,_135){
+if(!farr.length){
+if(typeof _135=="function"){
+_135();
+}
+return;
+}
+if((typeof _134=="undefined")&&(typeof cb=="number")){
+_134=cb;
+cb=function(){
+};
+}else{
+if(!cb){
+cb=function(){
+};
+}
+}
+setTimeout(function(){
+(farr.shift())();
+cb();
+dojo.alg.delayThese(farr,cb,_134,_135);
+},_134);
+};
+dojo.alg.for_each_call=dojo.alg.map;
+dojo.require("dojo.alg.Alg",false,true);
+dojo.hostenv.moduleLoaded("dojo.alg.*");
+dojo.provide("dojo.io.BrowserIO");
+dojo.require("dojo.io.IO");
+dojo.require("dojo.alg.*");
+dojo.io.checkChildrenForFile=function(node){
+var _137=false;
+var _138=node.getElementsByTagName("input");
+dojo.alg.forEach(_138,function(_139){
+if(_137){
+return;
+}
+if(_139.getAttribute("type")=="file"){
+_137=true;
+}
+});
+return _137;
+};
+dojo.io.formHasFile=function(_140){
+return dojo.io.checkChildrenForFile(_140);
+};
+dojo.io.encodeForm=function(_141){
+if((!_141)||(!_141.tagName)||(!_141.tagName.toLowerCase()=="form")){
+dj_throw("Attempted to encode a non-form element.");
+}
+var ec=encodeURIComponent;
+var _143=[];
+for(var i=0;i<_141.elements.length;i++){
+var elm=_141.elements[i];
+if(elm.disabled){
+continue;
+}
+var name=ec(elm.name);
+var type=elm.type.toLowerCase();
+if((type=="select")&&(elm.multiple)){
+for(var j=0;j<elm.options.length;j++){
+_143.push(name+"="+ec(elm.options[j].value));
+}
+}else{
+if(dojo.alg.inArray(type,["radio","checked"])){
+if(elm.checked){
+_143.push(name+"="+ec(elm.value));
+}
+}else{
+if(!dojo.alg.inArray(type,["file","submit","reset","button"])){
+_143.push(name+"="+ec(elm.value));
+}
+}
+}
+}
+return _143.join("&");
+};
+dojo.io.setIFrameSrc=function(_146,src,_147){
+try{
+var r=dojo.render.html;
+if(!_147){
+if(r.safari){
+_146.location=src;
+}else{
+frames[_146.name].location=src;
+}
+}else{
+var idoc=(r.moz)?_146.contentWindow:_146;
+idoc.location.replace(src);
+dj_debug(_146.contentWindow.location);
+}
+}
+catch(e){
+dj_debug("setIFrameSrc: "+e);
+}
+};
+dojo.io.createIFrame=function(_150){
+if(window[_150]){
+return window[_150];
+}
+if(window.frames[_150]){
+return window.frames[_150];
+}
+var r=dojo.render.html;
+var _151=null;
+_151=document.createElement((((r.ie)&&(r.win))?"<iframe name="+_150+">":"iframe"));
+with(_151){
+name=_150;
+setAttribute("name",_150);
+id=_150;
+}
+window[_150]=_151;
+document.body.appendChild(_151);
+with(_151.style){
+position="absolute";
+left=top="0px";
+height=width="1px";
+visibility="hidden";
+if(dojo.hostenv.is_debug_){
+position="relative";
+height="100px";
+width="300px";
+visibility="visible";
+}
+}
+dojo.io.setIFrameSrc(_151,dojo.hostenv.getBaseScriptUri()+"iframe_history.html",true);
+return _151;
+};
+dojo.io.cancelDOMEvent=function(evt){
+if(!evt){
+return false;
+}
+if(evt.preventDefault){
+evt.stopPropagation();
+evt.preventDefault();
+}else{
+if(window.event){
+window.event.cancelBubble=true;
+window.event.returnValue=false;
+}
+}
+return false;
+};
+dojo.io.XMLHTTPTransport=new function(){
+var _152=this;
+this.initialHref=window.location.href;
+this.initialHash=window.location.hash;
+this.moveForward=false;
+var _153={};
+this.useCache=false;
+this.historyStack=[];
+this.forwardStack=[];
+this.historyIframe=null;
+this.bookmarkAnchor=null;
+this.locationTimer=null;
+function getCacheKey(url,_154,_155){
+return url+"|"+_154+"|"+_155.toLowerCase();
+}
+function addToCache(url,_156,_157,http){
+_153[getCacheKey(url,_156,_157)]=http;
+}
+function getFromCache(url,_159,_160){
+return _153[getCacheKey(url,_159,_160)];
+}
+this.clearCache=function(){
+_153={};
+};
+function doLoad(_161,http,url,_162,_163){
+if(http.status==200||(location.protocol=="file:"&&http.status==0)){
+var ret;
+if(_161.method.toLowerCase()=="head"){
+var _164=http.getAllResponseHeaders();
+ret={};
+ret.toString=function(){
+return _164;
+};
+var _165=_164.split(/[\r\n]+/g);
+for(var i=0;i<_165.length;i++){
+var pair=_165[i].match(/^([^:]+)\s*:\s*(.+)$/i);
+if(pair){
+ret[pair[1]]=pair[2];
+}
+}
+}else{
+if(_161.mimetype=="text/javascript"){
+ret=dj_eval(http.responseText);
+}else{
+if(_161.mimetype=="text/xml"){
+ret=http.responseXML;
+if(!ret||typeof ret=="string"){
+ret=dojo.xml.domUtil.createDocumentFromText(http.responseText);
+}
+}else{
+ret=http.responseText;
+}
+}
+}
+if(_163){
+addToCache(url,_162,_161.method,http);
+}
+if(typeof _161.load=="function"){
+_161.load("load",ret,http);
+}
+}else{
+var _167=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
+if(typeof _161.error=="function"){
+_161.error("error",_167,http);
+}
+}
+}
+function setHeaders(http,_168){
+if(_168["headers"]){
+for(var _169 in _168["headers"]){
+if(_169.toLowerCase()=="content-type"&&!_168["contentType"]){
+_168["contentType"]=_168["headers"][_169];
+}else{
+http.setRequestHeader(_169,_168["headers"][_169]);
+}
+}
+}
+}
+this.addToHistory=function(args){
+var _171=args["back"]||args["backButton"]||args["handle"];
+var hash=null;
+if(!this.historyIframe){
+this.historyIframe=window.frames["djhistory"];
+}
+if(!this.bookmarkAnchor){
+this.bookmarkAnchor=document.createElement("a");
+document.body.appendChild(this.bookmarkAnchor);
+this.bookmarkAnchor.style.display="none";
+}
+if((!args["changeURL"])||(dojo.render.html.ie)){
+var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
+this.moveForward=true;
+dojo.io.setIFrameSrc(this.historyIframe,url,false);
+}
+if(args["changeURL"]){
+hash="#"+((args["changeURL"]!==true)?args["changeURL"]:(new Date()).getTime());
+setTimeout("window.location.href = '"+hash+"';",1);
+this.bookmarkAnchor.href=hash;
+if(dojo.render.html.ie){
+var _173=_171;
+var lh=null;
+var hsl=this.historyStack.length-1;
+if(hsl>=0){
+while(!this.historyStack[hsl]["urlHash"]){
+hsl--;
+}
+lh=this.historyStack[hsl]["urlHash"];
+}
+if(lh){
+_171=function(){
+if(window.location.hash!=""){
+setTimeout("window.location.href = '"+lh+"';",1);
+}
+_173();
+};
+}
+this.forwardStack=[];
+var _176=args["forward"]||args["forwardButton"];
+var tfw=function(){
+if(window.location.hash!=""){
+window.location.href=hash;
+}
+if(_176){
+_176();
+}
+};
+if(args["forward"]){
+args.forward=tfw;
+}else{
+if(args["forwardButton"]){
+args.forwardButton=tfw;
+}
+}
+}else{
+if(dojo.render.html.moz){
+if(!this.locationTimer){
+this.locationTimer=setInterval("dojo.io.XMLHTTPTransport.checkLocation();",200);
+}
+}
+}
+}
+this.historyStack.push({"url":url,"callback":_171,"kwArgs":args,"urlHash":hash});
+};
+this.checkLocation=function(){
+var hsl=this.historyStack.length;
+if((window.location.hash==this.initialHash)||(window.location.href==this.initialHref)&&(hsl==1)){
+this.handleBackButton();
+return;
+}
+if(this.forwardStack.length>0){
+if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
+this.handleForwardButton();
+return;
+}
+}
+if((hsl>=2)&&(this.historyStack[hsl-2])){
+if(this.historyStack[hsl-2].urlHash==window.location.hash){
+this.handleBackButton();
+return;
+}
+}
+};
+this.iframeLoaded=function(evt,_178){
+var isp=_178.href.split("?");
+if(isp.length<2){
+if(this.historyStack.length==1){
+this.handleBackButton();
+}
+return;
+}
+var _180=isp[1];
+if(this.moveForward){
+this.moveForward=false;
+return;
+}
+var last=this.historyStack.pop();
+if(!last){
+if(this.forwardStack.length>0){
+var next=this.forwardStack[this.forwardStack.length-1];
+if(_180==next.url.split("?")[1]){
+this.handleForwardButton();
+}
+}
+return;
+}
+this.historyStack.push(last);
+if(this.historyStack.length>=2){
+if(isp[1]==this.historyStack[this.historyStack.length-2].url.split("?")[1]){
+this.handleBackButton();
+}
+}else{
+this.handleBackButton();
+}
+};
+this.handleBackButton=function(){
+var last=this.historyStack.pop();
+if(!last){
+return;
+}
+if(last["callback"]){
+last.callback();
+}else{
+if(last.kwArgs["backButton"]){
+last.kwArgs["backButton"]();
+}else{
+if(last.kwArgs["back"]){
+last.kwArgs["back"]();
+}else{
+if(last.kwArgs["handle"]){
+last.kwArgs.handle("back");
+}
+}
+}
+}
+this.forwardStack.push(last);
+};
+this.handleForwardButton=function(){
+var last=this.forwardStack.pop();
+if(!last){
+return;
+}
+if(last.kwArgs["forward"]){
+last.kwArgs.forward();
+}else{
+if(last.kwArgs["forwardButton"]){
+last.kwArgs.forwardButton();
+}else{
+if(last.kwArgs["handle"]){
+last.kwArgs.handle("forward");
+}
+}
+}
+this.historyStack.push(last);
+};
+var _183=dojo.hostenv.getXmlhttpObject()?true:false;
+this.canHandle=function(_184){
+return _183&&dojo.alg.inArray(_184["mimetype"],["text/plain","text/html","text/xml","text/javascript"])&&dojo.alg.inArray(_184["method"].toLowerCase(),["post","get","head"])&&!(_184["formNode"]&&dojo.io.formHasFile(_184["formNode"]));
+};
+this.bind=function(_185){
+if(!_185["url"]){
+if(!_185["formNode"]&&(_185["backButton"]||_185["back"]||_185["changeURL"]||_185["watchForURL"])&&(!window["djConfig"]&&!window["djConfig"]["preventBackButtonFix"])){
+this.addToHistory(_185);
+return true;
+}
+}
+var url=_185.url;
+var _186="";
+if(_185["formNode"]){
+var ta=_185.formNode.getAttribute("action");
+if((ta)&&(!_185["url"])){
+url=ta;
+}
+var tp=_185.formNode.getAttribute("method");
+if((tp)&&(!_185["method"])){
+_185.method=tp;
+}
+_186+=dojo.io.encodeForm(_185.formNode);
+}
+if(!_185["method"]){
+_185.method="get";
+}
+if(_185["content"]){
+_186+=dojo.io.argsFromMap(_185.content);
+}
+if(_185["postContent"]&&_185.method.toLowerCase()=="post"){
+_186=_185.postContent;
+}
+if(_185["backButton"]||_185["back"]||_185["changeURL"]){
+this.addToHistory(_185);
+}
+var _189=_185["sync"]?false:true;
+var _190=_185["useCache"]==true||(this.useCache==true&&_185["useCache"]!=false);
+if(_190){
+var _191=getFromCache(url,_186,_185.method);
+if(_191){
+doLoad(_185,_191,url,_186,false);
+return;
+}
+}
+var http=dojo.hostenv.getXmlhttpObject();
+var _192=false;
+if(_189){
+http.onreadystatechange=function(){
+if(4==http.readyState){
+if(_192){
+return;
+}
+_192=true;
+doLoad(_185,http,url,_186,_190);
+}
+};
+}
+if(_185.method.toLowerCase()=="post"){
+http.open("POST",url,_189);
+setHeaders(http,_185);
+http.setRequestHeader("Content-Type",_185["contentType"]||"application/x-www-form-urlencoded");
+http.send(_186);
+}else{
+var _193=url;
+if(_186!=""){
+_193+=(url.indexOf("?")>-1?"&":"?")+_186;
+}
+http.open(_185.method.toUpperCase(),_193,_189);
+setHeaders(http,_185);
+http.send(null);
+}
+if(!_189){
+doLoad(_185,http,url,_186,_190);
+}
+return;
+};
+dojo.io.transports.addTransport("XMLHTTPTransport");
+};
+

Propchange: struts/flow/trunk/src/examples/remote/dojo-io.js
------------------------------------------------------------------------------
    svn:executable = *

Added: struts/flow/trunk/src/examples/remote/json.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/remote/json.js?rev=349272&view=auto
==============================================================================
--- struts/flow/trunk/src/examples/remote/json.js (added)
+++ struts/flow/trunk/src/examples/remote/json.js Sun Nov 27 10:21:07 2005
@@ -0,0 +1,235 @@
+/*
+Copyright (c) 2005 JSON.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The Software shall be used for Good, not Evil.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+/*
+    The global object JSON contains two methods.
+
+    JSON.stringify(value) takes a JavaScript value and produces a JSON text.
+    The value must not be cyclical.
+
+    JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
+    throw a 'JSONError' exception if there is an error.
+*/
+var JSON = {
+    copyright: '(c)2005 JSON.org',
+    license: 'http://www.crockford.com/JSON/license.html',
+/*
+    Stringify a JavaScript value, producing a JSON text.
+*/
+    stringify: function (v) {
+        var a = [];
+
+/*
+    Emit a string.
+*/
+        function e(s) {
+            a[a.length] = s;
+        }
+
+/*
+    Convert a value.
+*/
+        function g(x) {
+            var c, i, l, v;
+
+            switch (typeof x) {
+            case 'object':
+                if (x) {
+                    if (x instanceof Array) {
+                        e('[');
+                        l = a.length;
+                        for (i = 0; i < x.length; i += 1) {
+                            v = x[i];
+                            if (typeof v != 'undefined' &&
+                                    typeof v != 'function') {
+                                if (l < a.length) {
+                                    e(',');
+                                }
+                                g(v);
+                            }
+                        }
+                        e(']');
+                        return;
+                    } else if (typeof x.toString != 'undefined') {
+                        e('{');
+                        l = a.length;
+                        for (i in x) {
+                            v = x[i];
+                            if (x.hasOwnProperty(i) &&
+                                    typeof v != 'undefined' &&
+                                    typeof v != 'function') {
+                                if (l < a.length) {
+                                    e(',');
+                                }
+                                g(i);
+                                e(':');
+                                g(v);
+                            }
+                        }
+                        return e('}');
+                    }
+                }
+                e('null');
+                return;
+            case 'number':
+                e(isFinite(x) ? +x : 'null');
+                return;
+            case 'string':
+                l = x.length;
+                e('"');
+                for (i = 0; i < l; i += 1) {
+                    c = x.charAt(i);
+                    if (c >= ' ') {
+                        if (c == '\\' || c == '"') {
+                            e('\\');
+                        }
+                        e(c);
+                    } else {
+                        switch (c) {
+                            case '\b':
+                                e('\\b');
+                                break;
+                            case '\f':
+                                e('\\f');
+                                break;
+                            case '\n':
+                                e('\\n');
+                                break;
+                            case '\r':
+                                e('\\r');
+                                break;
+                            case '\t':
+                                e('\\t');
+                                break;
+                            default:
+                                c = c.charCodeAt();
+                                e('\\u00' + Math.floor(c / 16).toString(16) +
+                                    (c % 16).toString(16));
+                        }
+                    }
+                }
+                e('"');
+                return;
+            case 'boolean':
+                e(String(x));
+                return;
+            default:
+                e('null');
+                return;
+            }
+        }
+        g(v);
+        return a.join('');
+    },
+/*
+    Parse a JSON text, producing a JavaScript value.
+*/
+    parse: function (text) {
+        var p = /^\s*(([,:{}\[\]])|"(\\.|[^\x00-\x1f"\\])*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)\s*/,
+            token,
+            operator;
+
+        function error(m, t) {
+            throw {
+                name: 'JSONError',
+                message: m,
+                text: t || operator || token
+            };
+        }
+
+        function next(b) {
+            if (b && b != operator) {
+                error("Expected '" + b + "'");
+            }
+            if (text) {
+                var t = p.exec(text);
+                if (t) {
+                    if (t[2]) {
+                        token = null;
+                        operator = t[2];
+                    } else {
+                        operator = null;
+                        try {
+                            token = eval(t[1]);
+                        } catch (e) {
+                            error("Bad token", t[1]);
+                        }
+                    }
+                    text = text.substring(t[0].length);
+                } else {
+                    error("Unrecognized token", text);
+                }
+            } else {
+                token = operator = undefined;
+            }
+        }
+
+
+        function val() {
+            var k, o;
+            switch (operator) {
+            case '{':
+                next('{');
+                o = {};
+                if (operator != '}') {
+                    for (;;) {
+                        if (operator || typeof token != 'string') {
+                            error("Missing key");
+                        }
+                        k = token;
+                        next();
+                        next(':');
+                        o[k] = val();
+                        if (operator != ',') {
+                            break;
+                        }
+                        next(',');
+                    }
+                }
+                next('}');
+                return o;
+            case '[':
+                next('[');
+                o = [];
+                if (operator != ']') {
+                    for (;;) {
+                        o.push(val());
+                        if (operator != ',') {
+                            break;
+                        }
+                        next(',');
+                    }
+                }
+                next(']');
+                return o;
+            default:
+                if (operator !== null) {
+                    error("Missing value");
+                }
+                k = token;
+                next();
+                return k;
+            }
+        }
+        next();
+        return val();
+    }
+};

Propchange: struts/flow/trunk/src/examples/remote/json.js
------------------------------------------------------------------------------
    svn:executable = *

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/FlowAction.java Sun Nov 27 10:21:07 2005
@@ -153,10 +153,11 @@
                         sb.append(buffer, 0, len);
                     }
                     String json = sb.toString();
-                    System.out.println("processing json:"+json);
+                    if (log.isDebugEnabled()) {
+                        log.debug("processing json:"+json);
+                    }
                     if (isValidJSON(json)) {
                         context.put("json", json);
-                        System.out.println("setting json:"+json);
                     }
                     
                 }
@@ -178,6 +179,9 @@
                 // if a flowcall, return pure json 
                 if (isFlowCall) {
                     String json = new JSONSerializer().serialize(atts);
+                    if (log.isDebugEnabled()) {
+                        log.debug("returning json: "+json);
+                    }
                     response.getWriter().write(json);
                     response.getWriter().flush();
                     response.getWriter().close();
@@ -250,8 +254,17 @@
     
     private boolean isValidJSON(String val) {
         try {
-            JSONArray obj = new JSONArray(val);
-            return true;
+            if (val != null && val.length() > 1) {
+                JSONArray obj = new JSONArray(val);
+                if (log.isDebugEnabled()) {
+                    log.debug("Valid JSON");
+                }
+                return true;
+            } else {
+                if (log.isDebugEnabled()) {
+                    log.debug("No JSON detected");
+                }
+            }
         } catch (Exception ex) {
             log.warn("Invalid JSON object", ex);
         }

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java Sun Nov 27 10:21:07 2005
@@ -173,7 +173,7 @@
             
             for (Iterator i = classes.values().iterator(); i.hasNext(); ) {
                 Class cls = (Class) i.next();
-                System.out.println("Registring "+cls.getName());
+                log.info("Registring "+cls.getName());
                 classesToRegister.add(cls);
             }
         } catch (Exception ex) {

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/core/javascript/fom/FOM_JavaScriptInterpreter.java Sun Nov 27 10:21:07 2005
@@ -397,8 +397,11 @@
         /**
          * Initializes new top-level scope.
          */
-        public ThreadScope(Global scope, Map flowVars) throws Exception {
+        public ThreadScope(Global scope, Map flowVars, WrapFactory wrapFactory) throws Exception {
             final Context context = Context.getCurrentContext();
+            if (wrapFactory != null) {
+                context.setWrapFactory(wrapFactory);
+            }
 
             final String[] names = { "importClass" };
             try {
@@ -433,8 +436,12 @@
                 
                 Object bean = varfactory.getInstance(this, flow);
                 
-                Scriptable var = (Scriptable) factory.wrap(context, this, bean, bean.getClass());
-                super.put(name, this, var);
+                if (bean instanceof Scriptable) {
+                    super.put(name, this, (Scriptable) bean);
+                } else {
+                    Scriptable var = (Scriptable) factory.wrapAsJavaObject(context, this, bean, bean.getClass());
+                    super.put(name, this, var);
+                }
             }  
 
             defineProperty(LAST_EXEC_TIME,
@@ -518,7 +525,7 @@
     }
 
     private ThreadScope createThreadScope() throws Exception {
-        return new ThreadScope(scope, flowVars);
+        return new ThreadScope(scope, flowVars, wrapFactory);
     }
 
     /**
@@ -697,6 +704,9 @@
         context.setGeneratingDebug(true);
         context.setCompileFunctionsWithDynamicScope(true);
         context.setErrorReporter(new JSErrorReporter(getLogger()));
+        if (wrapFactory != null) {
+            context.setWrapFactory(wrapFactory);
+        }
         
         LocationTrackingDebugger locationTracker = new LocationTrackingDebugger();
         if (!enableDebugger) {
@@ -780,6 +790,9 @@
         context.setGeneratingDebug(true);
         context.setCompileFunctionsWithDynamicScope(true);
         LocationTrackingDebugger locationTracker = new LocationTrackingDebugger();
+        if (wrapFactory != null) {
+            context.setWrapFactory(wrapFactory);
+        }
         if (!enableDebugger) {
             //FIXME: add a "tee" debugger that allows both to be used simultaneously
             context.setDebugger(locationTracker, null);

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java Sun Nov 27 10:21:07 2005
@@ -30,6 +30,8 @@
 
 import org.codehaus.janino.SimpleCompiler;
 
+import org.apache.commons.logging.*;
+
 /**
  *  JavaScript interface to the log facility.
  *
@@ -39,6 +41,8 @@
     protected static SqlMapClient client;
     protected String namespace;
     protected Map statements = new HashMap();
+    
+    protected static final Log log = LogFactory.getLog(SqlMap.class);
 
 
     /**  Constructor for the JSLog object */
@@ -94,7 +98,7 @@
     }
 
     public void setNamespace(String ns) {
-        System.out.println("setting namespace");
+        log.debug("setting namespace");
         this.namespace = ns;
         statements.clear();
         SqlMapClientImpl cimpl = (SqlMapClientImpl)client;
@@ -102,9 +106,9 @@
         String name;
         for (Iterator i = del.getMappedStatementNames(); i.hasNext(); ) {
             name = (String) i.next();
-            System.out.println("looking at statement "+name);
+            log.debug("looking at statement "+name);
             if (name.startsWith(namespace+".")) {
-                System.out.println("adding statement "+name);
+                log.debug("adding statement "+name);
                 statements.put(name.substring(namespace.length() + 1), del.getMappedStatement(name));
             }
         }
@@ -139,10 +143,10 @@
 
     public Object get(final String name, Scriptable start) {
 
-        System.out.println("getting property "+name);
+        log.debug("getting property "+name);
         final MappedStatement ms = (MappedStatement) statements.get(name);
         if (ms != null) {
-            System.out.println("found as a function");
+            log.debug("found as a function");
             return new ExtensionFunction() {    
                 public Object execute(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args) 
                     throws IOException {

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/portlet/FlowPortlet.java Sun Nov 27 10:21:07 2005
@@ -17,7 +17,7 @@
 import org.apache.struts.flow.core.javascript.fom.FOM_JavaScriptInterpreter;
 import org.apache.struts.flow.core.Interpreter;
 import org.apache.struts.flow.core.javascript.ConversionHelper;
-import org.apache.struts.flow.core.DefaultCallVariableRegistrar;
+import org.apache.struts.flow.core.DefaultFlowVariableFactory;
 import org.apache.struts.flow.sugar.SugarWrapFactory;
 import org.apache.commons.chain.*;
 import org.apache.commons.chain.web.portlet.*;

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java?rev=349272&r1=349271&r2=349272&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java Sun Nov 27 10:21:07 2005
@@ -81,7 +81,7 @@
      */
     public Scriptable wrapAsJavaObject(Context cx, Scriptable scope,
         Object javaObject, Class staticType) {
-        
+            
         Map map = getExtensionFunctions(javaObject.getClass());
         
         Scriptable wrap = null;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org