
/*
	"Hemi" JavaScript Framework
	Engine for Web Applications 3.1
	Composite file "hemi.comp.js" release: 3.1.9
	Copyright 2002 - 2010. All Rights Reserved.
	Author: Stephen W. Cote
	Email: sw.cote@gmail.com
	Project: http://www.whitefrost.com/Hemi/
	BSD License: http://www.whitefrost.com/Hemi.license.txt
*/
(function(){H.include("hemi.object");H.include("hemi.util.logger");H.include("hemi.transaction");H.namespace("data.io",H,{service:null,serviceImpl:
function(){var t=this;H.prepareObject("io_service","3.1.9",1,t,1);H.util.logger.addLogger(t,"IO Service","Data IO Service","661");H.object.addObjectAccessor(t,"provider");H.object.addObjectAccessor(t,"request");H.object.addObjectAccessor(t,"response");Hemi.transaction.service.register(t,1);t.p.busType={ANY:1,LOCAL:2,OFFLINE:3,ONLINE:4,STATIC:5};t.getBusName=function(i){var r="NONE",c,b=t.p.busType;if(!D.TN(i))return r;for(c in b){if(b[c]==i){r=c;break;}}return r;};t.getBusType=function(){return t.p.busType;};t.getList=function(b,l,x,c,r,a,h){return t.createRequest(t.getSubject(),b,l,x,c,(r?r:"List"),0,0,1,0,0,0,h);};t.object_destroy=function(){H.message.service.unsubscribe(t,"onremoveobject","H");H.message.service.unsubscribe(t,"onsessionrefresh","handle_session_refresh");};t.H=function(s,i){var v,a=t.getProviders(),z=0;for(;z<a.length;){v=a[z++];if(v&&v.providerId==i){t.unregister(v,1);break;}}};t.handle_session_refresh=function(s,i){t.mapSession(i);};t.mapSession=function(i){if(!D.TO(i))return;var o=t.getSubject();o.isAuthenticated=i.GetBoolParam("IsLoggedIn");o.name=i.GetParam("UserName");o.id=i.GetParam("RecordId");if(o.id&&o.id=="0")o.id=0;if(!o.isAuthenticated)o.name="Anonymous";t.updateSubject();};t.updateSubject=function(){Hemi.message.service.publish("onupdatesubject",this);};t.getSubject=function(){var o=t.o.subject;if(!o){o={name:null,id:null,isAuthenticated:false};t.o.subject=o;}return o;};t.arrayToGroup=function(a,p,h){var r=[],o;for(var i=0;i<a.length;i++){o=this.newGroup();o.name=a[i];if(p)o.policies.push(t.clonePolicy(p));o.path=(h?h:"")+a[i];r.push(o);}return r;};t.newGroup=function(){return{provider:0,name:0,id:0,parentId:0,type:0,detailsOnly:0,path:0,populated:0,groups:[],data:[],namespace:0,policies:[],bus:0};};t.arrayToData=function(a,p){var r=[],o;for(var i=0;i<a.length;i++){o=this.newData();o.value=o.name=a[i];o.mimeType="text/plain";if(p)o.policies.push(t.clonePolicy(p));r.push(o);}return r;};t.newData=function(){return{provider:0,value:0,name:0,description:0,mimeType:0,id:0,createdDate:0,modifiedDate:0,size:0,detailsOnly:0,group:0,namespace:0,path:0,policies:[],hash:0,bus:0,postData:0};};t.clonePolicy=function(p){var r=t.newPolicy();for(var i in p)r[i]=p[i];return r;};t.newPolicy=function(){return{subjectId:0,subjectType:0,read:0,write:0,change:0,del:0,statement:0};};t.cloneInstruction=function(p){var r=t.newIOInstruction();if(!p)return r;for(var i in p)r[i]=p[i];return r;};t.newIOInstruction=function(p,s,r,o,g){return{paginate:(p?p:0),recordCount:(r?r:0),startRecord:(s?s:0),totalCount:0,orderBy:o,groupBy:g};};t.newIOResponse=function(v,f){return{authenticationRequired:0,responseHandler:f,responseId:0,responsePath:0,status:0,message:0,serviceId:t.i,requestId:v.id,responseData:[],responseGroups:[],namespace:0,providerResponded:{},bus:0,id:Hemi.guid(),writeData:
function(o,p,a,b){if(p)o.provider=p.i;if(b)o.bus=b;(a?a:this.responseData).push(o);},writeDataArray:
function(a,p,r,b){for(var i=0;i<a.length;i++)this.writeData(a[i],p,r,b);},writeGroup:
function(o,p,a,b){if(p)o.provider=p.i;if(b)o.bus=b;(a?a:this.responseGroups).push(o);},writeGroupArray:
function(a,p,r,b){for(var i=0;i<a.length;i++)this.writeGroup(a[i],p,r,b);}};};t.newIORequest=function(b,l,x,h,o,i,n,d,a,c,u){return{requestApplication:l,requestContext:x,async:a,serviceId:t.i,responseId:0,requestId:i,requestAction:o,cache:c,requestName:n,requestCatalog:h,id:Hemi.guid(),namespace:0,detailsOnly:d,bus:b,providerRequested:{},requestData:[],transactionId:0,transactionName:0,is_open:0,instruction:u,mimeType:0};};t.createRequest=function(j,b,l,x,h,o,i,n,d,a,c,p,f){return t.openRequest(j,t.newIORequest(b,l,x,h,o,i,n,d,a,c,p),f);};t.openRequest=function(j,rq,f){var rs=t.newIOResponse(rq,f),k,b=rq.bus,z=t.o.providers,y=0,w,v,u,bt=t.p.busType;if(!D.TN(b))b=bt.ANY;if(!j)j=t.getSubject();u="io.service.request-"+rq.id;k=Hemi.transaction.service.openTransaction(u,t,{type:0,src:0,data:0},t.endRequest);t.addNewRequest(rq,rq.id);t.addNewResponse(rs,rs.id);rs.instruction=t.cloneInstruction(rq.instruction);rq.transactionName=u;rq.transactionId=k;rq.responseId=rs.id;rq.is_open=1;t.getPacket(u).data={serviceId:t.i,requestId:rq.id,responseId:rs.id,subject:j};for(;y<z.length;){w=z[y++];if(!w)continue;if(w.bus==bt.ANY||w.bus==b||b==bt.ANY){v=H.registry.service.getObject(w.providerId);if(!v){t.logWarning("Provider reference was not cleaned up. Registry #:"+w.providerId+" on bus "+w.bus);continue;}rq.providerRequested[w.providerId]=1;v.joinTransactionPacket(u);if(D.TF(v.handle_io_open_request))v.handle_io_open_request(t,j,rq);}}t.serveTransaction(0,0,1,u);return rq;};t.endRequest=function(s,v){var r=t.getRequestByName(v.data.requestId),q=t.getResponseByName(v.data.responseId),i;r.is_open=0;i=q.instruction;if(i.paginate){if(!i.recordCount)i=q.responseData.length;if(!i.totalCount)i=i.recordCount;}s.closeTransaction(r.transactionId);H.message.service.publish("oncloseiorequest",r.id);if(D.TF(q.responseHandler))q.responseHandler(t,v.data.subject,r,q);};t.continueRequest=function(r,o,b){if(D.TS(r))r=t.getRequestByName(r);if(!r)return 0;var p=t.getPacket(r.transactionName);if(!p||p.is_finalized||!D.TN(p.participants[o.i])||p.participants[o.i]==2)return 0;if(b)p.participants[o.i]=2;t.serveTransaction(0,0,1,r.transactionName);return 1;};t.startTransaction=function(s,o){return 1;};t.endTransaction=function(s,o){return 1;};t.doTransaction=function(s,o){return 1;};t.register=function(p,b,n,x){var h;if(!H.registry.service.isRegistered(p)||t.getProviderByName(p.i))return 0;if(x&&!p.handle_proxy_xml)p.handle_proxy_xml=function(){throw "handle_proxy_xml not implemented";};p.p.apiRegister={};p.implement=function(m,a){var f="request"+m+a;if(D.TF(this[f]))this.p.apiRegister[f]=1;};p.invokeHandler=function(v,s,r,q){var o=0,b="request",c="Catalog",u="Request",a="Action",g=this.p.apiRegister,f=0,m;f=b+c+r.requestAction;Hemi.logDebug("Check Invoke Handler:"+f+" from "+r.requestCatalog+" / "+r.requestAction+" / "+r.requestName);if(!g[f]){f=b+a+r.requestAction;Hemi.logDebug("Check Invoke Handler:"+f+" from "+r.requestCatalog+" / "+r.requestAction+" / "+r.requestName);}if(g[f])o=this[f](v,s,r,q);else Hemi.logDebug("No Handler Defined:"+this.getObjectType()+":"+f);return o;};if(!D.TF(p.doTransaction))p.doTransaction=function(s,p){var v=H.registry.service.getObject(p.data.serviceId),r,q,o=1;if(v&&(r=v.getRequestByName(p.data.requestId))&&(q=v.getResponseByName(p.data.responseId))){if(D.TF(this.handle_io_request))o=this.handle_io_request(v,p.data.subject,r,q);if(!o&&this.p.useRegisteredApi){o=this.invokeHandler(v,p.data.subject,r,q);}if(o)q.providerResponded[this.i]=1;}return o;};if(!D.TF(p.endTransaction))p.endTransaction=function(s,p){var v=H.registry.service.getObject(p.data.serviceId),r,q,o=1;if(v&&(r=v.getRequestByName(p.data.requestId))&&(q=v.getResponseByName(p.data.responseId))&&D.TF(this.handle_io_close_request))o=this.handle_io_close_request(v,p.data.subject,r,q);return o;};if(!H.transaction.service.register(p,1))return 0;if(!D.TN(b))b=t.p.busType.ANY;var r,v={providerId:p.i,bus:b,proxy:0};if((r=this.addNewProvider(v,(n?n:p.i)))){if(D.TF(p.handle_io_register))p.handle_io_register(t);if(x&&H.lookup("hemi.data.io.proxy"))H.data.io.proxy.service.register(v,x);}return r;};t.isRegistered=function(o){if(!o||!t.getProviderByName(o.i))return 0;return 1;};t.unregister=function(o,b){var r=t.o.requests,i=0,q,p;if(b)o=Hemi.registry.service.getObject(o.providerId);if(!o||!t.isRegistered(o))return 0;if(D.TF(o.handle_io_unregister))o.handle_io_unregister(t);for(;i<r.length;){q=r[i++];if(!q||!q.is_open)continue;b=H.transaction.service.removeTransactionParticipant(o,t.getPacket(q.transactionName));t.serveTransaction(0,0,1,q.transactionName);}p=t.getProviderByName(o.i);if(p.proxy&&H.lookup("hemi.data.io.proxy"))H.data.io.proxy.service.unregister(p);t.removeProvider(p);};H.message.service.subscribe(t,"onsessionrefresh","handle_session_refresh");H.message.service.subscribe(t,"onremoveobject","H");t.r=4;}},1);}());
/* End Hemi Framework 3.1 */

