#pragma once
#include "xbase.hpp"
#include "kobject/kxml.hpp"
#include "wobject/xapp.hpp"
#include "wobject/xstring.hpp"
#include "wobject/xaserver.hpp"
#include "wobject/xaserverarg.hpp"
#include "wobject/xutil.hpp"
#include "win32/win.hpp"
class xurl
{
public:
static int getEx(string serverurl,string aurl, string args, Hxsoft::XFrame::KXMLDOMDocument x)
{
xstring arg = L"";
int ret;
if(xstring(args) == L"" || xstring(args).find(L"",0)>-1)
{
ret = xaserver::ExecXQuery( serverurl,L"[service.url.xq]",(L""+arg+L"").c_str(),x);
}
else
{
xstring tmp = xstring(args).mid(6, 9999999);
ret = xaserver::ExecXQuery( serverurl,L"[service.url.xq]",(L"" + arg +tmp).c_str(),x);
}
if(ret != 1) return -1;
return 1;
}
static int get(string url1, string args, Hxsoft::XFrame::KXMLDOMDocument x)
{
return get(xapp::GetApp()->GetServerUrl(), url1, args, x);
}
static int get(string serverUrl,string url1, string args, Hxsoft::XFrame::KXMLDOMDocument x)
{
//return getEx(serverUrl,url1, args, x);
#if 0
//trace("\r\n-----------");
bool f0 = xutil::HasCacheData(((xstring)L"[URL]"+url1).c_str());
if(f0)
url1 = xutil::GetUrlData(((xstring)L"[URL]"+url1).c_str());
//trace("%s",url1);
bool f = xutil::HasCacheData(url1);
bool f1 = xutil::HasCacheData(((xstring)L"[VER]"+url1).c_str());
string ver = L"1";
string t = L"0";
if(f && f1)
{
Hxsoft::XFrame::KXMLDOMDocument xl2;
xaserverarg arg;
arg.AddArg(L"url", url1);
xaserver::ExecXQuery( serverUrl,L"[service.url.type.xq]",arg.GetString(),xl2);
BSTR str = (BSTR)xl2.xml();
if( str && str[0])
t = xl2.text();
string t1 = xutil::GetUrlData(((xstring)L"[VER]"+url1).c_str());
//trace("\r\nclient:%s server:%s", t1, t);
//win32::alert("url:"+url1+" client:"+t1+" server:"+t);
if(t == t1)
{
//trace("\r\nurl: %s find", url1);
string d = xutil::GetUrlData(url1);
//trace("\r\nurl: %s data: %s", aurl, d.left(100));
x.loadXML(d);
return 1;
}
ver = t;
}
//trace("\r\nurl: %s not find", url1);
#endif
xstring iface ;
xstring root ;
Hxsoft::XFrame::KXMLDOMDocument doc;
Hxsoft::XFrame::KXMLDOMNode n;
Hxsoft::XFrame::KXMLDOMDocument xl ;
xstring aurl = url1;
int pos = aurl.find(L".vface",0);
if(pos>0)
{
//MessageBoxW(0,aurl.c_str(),L"vface",0);
iface = aurl.left(pos+6);
root = aurl.mid(pos +6,9999);
xaserver::LoadUrl(serverUrl,L"dev:xml[sale.view.url.xml]",L"",xl);
doc = xl;
n = doc.selectSingleNode(((xstring)L"//item[@src='dev:vface[" + iface+L"]']/@url").c_str());
if(n)
aurl = (xstring)L"/sale/view/"+n.text()+root;
else
{
xaserver::LoadUrl(serverUrl,L"dev:xml[saleex.view.url.xml]",L"",xl);
doc = xl;
n = doc.selectSingleNode(((xstring)L"//item[@src='dev:vface[" + iface+L"]']/@url").c_str());
if(n)
aurl = (xstring)L"/sale/view/"+n.text()+root;
else
return -1;
}
}
else if (aurl.find(L".iface",0)>0)
{
//MessageBoxW(0,L"caption",L"iface",0);
iface = aurl.left(aurl.find(L".iface",0)+6);
root = aurl.mid(aurl.find(L".iface",0) +6,9999);
xaserver::LoadUrl(serverUrl,L"dev:xml[sale.data.url.xml]",L"",xl);
doc = xl;
n = doc.selectSingleNode(((xstring)L"//item[@src='dev:iface[" + iface+L"]']/@url").c_str());
if(n)
aurl = (xstring)L"/sale/data/"+n.text()+root;
else
return -1;
}
else if(aurl.find(L"/",0)!=0)
{
//MessageBoxW(0,L"caption",L"path",0);
iface = aurl.left(aurl.find(L"/",0));
root = aurl.mid(aurl.find(L"/",0),9999);
xaserver::LoadUrl(serverUrl,L"dev:xml[sale.data.url.xml]",L"",xl);
doc = xl;
n = doc.selectSingleNode(((xstring)L"//item[@src='dev:iface[" + iface+L".iface]']/@url").c_str());
if(n)
{
aurl = (xstring)L"/sale/data/"+n.text()+root;
}
else
return -1;
}
if((xstring)url1 != aurl)
{
//xutil::CacheUrlData("[URL]"+url1, aurl);
}
if(getEx(serverUrl,aurl, args, x) != 1)
{
return -1;
}
#if 0
if(aurl.find(L"/sale/data/", 0)<0 && aurl.find(L"/workflow/query", 0)<0 && aurl.find(L"/workflow/action", 0)<0)
{
if((xstring)ver == L"1")
{
Hxsoft::XFrame::KXMLDOMDocument xl3;
xaserverarg arg3;
arg3.AddArg(L"url", aurl.c_str());
xaserver::ExecXQuery( serverUrl,L"[service.url.type.xq]",arg3.GetString(),xl3);
t = xl3.text();
if((xstring)t != L"") ver = t;
}
//trace("\r\nurl: %s cache version:%s", aurl, ver);
xutil::CacheUrlData(aurl.c_str(), (const LPWSTR)x.xml());
xutil::CacheUrlData(((xstring)L"[VER]"+aurl.c_str()).c_str(), ver);
}
#endif
return 1;
}
static int post(string aurl, string args, Hxsoft::XFrame::KXMLDOMDocument x)
{
return get(aurl, args, x);
}
static int post(string serverUrl,string aurl, string args, Hxsoft::XFrame::KXMLDOMDocument x)
{
return get(serverUrl,aurl,args,x);
}
static string get(string serverUrl,string aurl, string args)
{
KXMLDOMDocument x;
int r = get(serverUrl,aurl,args,x);
if ( r == 1)
return x.xml();
else
return L"";
}
static string get(string serverUrl,string aurl, xaserverarg args, Hxsoft::XFrame::KXMLDOMDocument x)
{
int r = get(serverUrl,aurl,args.GetString(),x);
if ( r == 1)
return x.xml();
else
return L"";
}
static string get(string serverUrl,string aurl, xaserverarg args)
{
return get(serverUrl,aurl,args.GetString());
}
static int getSql(string serverUrl,string arg, Hxsoft::XFrame::KXMLDOMDocument& x)
{
return xaserver::ExecXQuery(serverUrl,L"[publicSql.xq]",arg,x);
}
static int getSql(string serverUrl,xaserverarg& arg,Hxsoft::XFrame::KXMLDOMDocument& x)
{
return getSql(serverUrl,arg.GetString(),x);
}
};