use "xcontrol.vframe.vbusiness.vd"
|
use "xbase.vframe.vbusiness.vd"
|
|
unit trade
|
[
|
class DeveloperSynch : public xframe
|
{
|
xtreeview tv_gs;
|
xsedit dw_log;
|
|
int[100] nItems;
|
int nCount;
|
|
string sContent;
|
|
string ProcessDevCmd(string cmd,string ext, string aurl="", bool needlogin=false)
|
{
|
if(aurl == "") aurl = GetServerUrl();
|
//alert(aurl);
|
string d = xaserver::ProcessCmd(aurl,"uri.hxsoft.com/xaserver/developer "+cmd,ext,needlogin);
|
return d;
|
}
|
|
string ProcessDevCmd2(string cmd,string ext, string aurl="", bool needlogin=false)
|
{
|
if(aurl == "") aurl = GetServerUrl();
|
//alert(aurl);
|
string d = xaserver::ProcessCmd(aurl,"uri.hxsoft.com/xaserver/dev:"+cmd,ext,needlogin);
|
return d;
|
}
|
|
int GetProjectItem(int hItem)
|
{
|
int pitem = hItem;
|
string typ;
|
while(true)
|
{
|
int h = xtreeview::GetItemData(tv_gs.GetId(), pitem);
|
msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
|
typ = GetEleString(e, "@tagname");
|
if(typ=="project")break;
|
pitem = xtreeview::GetParentItem(tv_gs.GetId(), pitem);
|
if(pitem<=0)break;
|
}
|
return pitem;
|
}
|
|
int GetP2Item(int hItem)
|
{
|
int hDomainItem;
|
int hP2Item = hItem;
|
while(true)
|
{
|
hDomainItem = xtreeview::GetParentItem(tv_gs.GetId(), hP2Item);
|
if(xtreeview::GetParentItem(tv_gs.GetId(), hDomainItem)<=0)break;
|
hP2Item = hDomainItem;
|
}
|
return hP2Item;
|
}
|
|
string GetItemGuid(int hItem)
|
{
|
int h = xtreeview::GetItemData(tv_gs.GetId(), hItem);
|
msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
|
string guid = e.GetAttribute("guid");
|
return guid;
|
}
|
|
xaserverarg GetDataArg(int hItem, xaserverarg arg)
|
{
|
int h = xtreeview::GetItemData(tv_gs.GetId(), hItem);
|
msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
|
string node = GetEleString(e, "@tagname");
|
//WriteLog(e.xml);
|
if(node=="File" || node=="file")
|
{
|
string caption = e.getAttribute("caption");
|
|
int hP2Item = 0;
|
int hDomainItem = 0;
|
if(xtreeview::GetParentItem(tv_gs.GetId(), hItem)<=0)
|
{
|
hDomainItem = hItem;
|
}else
|
{
|
hP2Item = GetP2Item(hItem);
|
hDomainItem = xtreeview::GetParentItem(tv_gs.GetId(), hP2Item);
|
}
|
|
//find project folder
|
string prjguid="";
|
int pitem = this.GetProjectItem(hItem);
|
if(pitem > 0)
|
prjguid = GetItemGuid(pitem);
|
|
//xaserverarg arg = new xaserverarg;
|
//arg.setNativePointer(arg.CreateInstance());
|
arg.AddArg("project.guid",prjguid);
|
if(hP2Item)
|
{
|
if(hP2Item != hItem)
|
{
|
string guid = e.getAttribute("guid");
|
arg.AddArg("guid",guid);
|
}
|
string guid2 = GetItemGuid(hP2Item);
|
arg.AddArg("root.guid",guid2);
|
}else if(hDomainItem > 0)
|
{
|
string guid3 = GetItemGuid(hDomainItem);
|
arg.AddArg("domain.guid",guid3);
|
}
|
return 1;
|
}
|
else if(node=="folder" || node=="project")
|
return 2;
|
else
|
return 0;
|
}
|
|
int SaveData(int hItem)
|
{
|
xcontrol xc = GetControl("surl");
|
string surl = xc.GetText();
|
if(surl == "")
|
{
|
alert("ÇëÊäÈëͬ²½·þÎñÆ÷µØÖ·");
|
return 1;
|
}
|
|
string name = xtreeview::GetItemLabel(tv_gs.GetId(), hItem);
|
xaserverarg arg = new xaserverarg;
|
arg.setNativePointer(arg.CreateInstance());
|
int ret = GetDataArg(hItem, arg);
|
//alert(arg.GetString());
|
if(ret == 0)
|
{
|
WriteLog(name+" ʧ°Ü, ÔÒò:»ñÈ¡¹¤³Ì»òÎļþ¼Ðʧ°Ü!");
|
return -1;
|
}
|
else if(ret == 2)
|
{
|
ret = SynchFolder(hItem);
|
if(ret == -1)
|
WriteLog(name+" ʧ°Ü, ÔÒò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü!");
|
else if(ret == 0)
|
WriteLog(name+" ʧ°Ü, ÔÒò:¸´ÖÆÎļþʧ°Ü!");
|
else
|
WriteLog(name);
|
return -1;
|
}
|
SynchFolder(hItem);
|
arg.AddArg("__name",name);
|
arg.AddArg("__url",surl);
|
synchServer(arg);
|
if(name.right(3) == ".vx" || name.right(5) == ".xpage")
|
{
|
arg.AddArg("__name",name + "[Code]");
|
arg.AddArg("iscode","yes");
|
synchServer(arg);
|
}
|
return 1;
|
}
|
|
string GetFolderPath(int hItem)
|
{
|
int k = hItem;
|
if(k == 0) return "";
|
string src = "";
|
//string name = "";
|
while(k > 0)
|
{
|
int h = xtreeview::GetItemData(tv_gs.GetId(), k);
|
k = xtreeview::GetParentItem(tv_gs.GetId(), k);
|
msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
|
string node = GetEleString(e, "@tagname");
|
if(node != "File" && node != "file")
|
{
|
string tmp = GetEleString(e, "@src");
|
//if(name == "") name = GetEleString(e, "@caption");
|
if(tmp != "")
|
{
|
SynchFolder(k);
|
if(src == "") src = tmp;
|
else
|
{
|
int j = 1;
|
int s = tmp.length();
|
string t = tmp.right(j).left(1);
|
while(t != "\\" && j < s)
|
{
|
//WriteLog(t);
|
j++;
|
t = tmp.right(j).left(1);
|
}
|
if(j >= s)
|
src = tmp+ "\\" + src;
|
else
|
src = tmp.left(s - j)+ "\\" + src;
|
}
|
}
|
}
|
}
|
if(src == "")
|
{
|
//WriteLog(name+" ͬ²½Ê§°Ü, ÔÒò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü0!");
|
return "";
|
}
|
//if(src.left(9) =="Projects\\") src = src.mid(9, src.length());
|
src = "\\" + src;//.replace("Projects\\","");
|
//WriteLog(src);
|
return src;
|
}
|
|
int SynchFolder(int hItem)
|
{
|
string src = GetFolderPath(hItem);
|
if(src== "") return -1;
|
if(xaserver::FileCopy("devfolder8001", src, "devfolder5001", src) != 1)
|
return 0;
|
//WriteLog(src);
|
return 1;
|
}
|
|
int synchServer(xaserverarg arg)
|
{
|
string name = arg.GetArgString("__name");
|
string surl = arg.GetArgString("__url");
|
string d = ProcessDevCmd("getobject",arg.GetString());
|
if(d == "")
|
{
|
WriteLog(name+" ʧ°Ü, ÔÒò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü!");
|
return -1;
|
}
|
//WriteLog(d);
|
arg.AddArg("content",d);
|
ProcessDevCmd("saveobject",arg.GetString(), surl,true);
|
WriteLog(name);
|
return 1;
|
}
|
|
int WriteLog(string str)
|
{
|
if(sContent == "")
|
sContent = str;
|
else
|
sContent += "\r\n" + str;
|
//alert(sContent);
|
dw_log.SetContent(sContent, "");
|
return 1;
|
}
|
|
//½¹µã¼¤»î´¦Àíº¯Êý
|
int OnSetFocus(ref TEvent evt,int param)
|
{
|
//ÖØÖù¤¾ßÌõ
|
SetAgent();
|
return 1;
|
}
|
|
int Add(int hItem)
|
{
|
if(nCount >99)
|
{
|
alert("ͬʱͬ²½µÄÊýÁ¿²»ÄÜ´óÓÚ100¸ö!");
|
return 1;
|
}
|
nItems[nCount] = hItem;
|
nCount++;
|
return 1;
|
}
|
|
int Del(int hItem)
|
{
|
for(int i=0; i<nCount; i++)
|
{
|
int p = nItems[i];
|
if(p == hItem) break;
|
}
|
if(i<nCount)
|
{
|
for(int j=i; j<nCount - 1; j++)
|
{
|
int k = nItems[j + 1];
|
nItems[j] = k;
|
}
|
nCount --;
|
}
|
return 1;
|
}
|
|
//ÃüÁî·¢²¼º¯Êý
|
int OnCmdDispatch(string comdid)
|
{
|
if(comdid != "synch") return 1;
|
|
int hCursor = xutil::SetCursorWait();
|
sContent = "";
|
for(int i=0; i<nCount; i++)
|
{
|
int p = nItems[i];
|
//int h = xtreeview::GetItemData(tv_gs.GetId(), p);
|
//msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
|
//alert(e.xml);
|
SaveData(p);
|
xtreeview::SetChecked(tv_gs.GetId(), p,0);
|
}
|
xutil::RestoreCursor(hCursor);
|
nCount = 0;
|
return 0;
|
}
|
|
int OnTreeCheckBoxSel(ref TNotifyEvent evt,int p)
|
{
|
ref TVNNMHDR nmtv = trust(evt.pnmh as ref TVNNMHDR);
|
int hItem = nmtv.FromItem;
|
int hCursor = xutil::SetCursorWait();
|
int hwnd = nmtv.hwndFrom;
|
int c = 1 - xtreeview::GetChecked(hwnd, hItem);
|
if(c == 1)
|
Add(hItem);
|
else
|
Del(hItem);
|
xutil::RestoreCursor(hCursor);
|
return 1;
|
}
|
|
//ÃüÁî´¦Àíʼþ
|
int OnXCommand(ref TXCommandEvent evt,int param)
|
{
|
return OnCmdDispatch(evt.pStrID);
|
}
|
|
int OnAttachEvent()
|
{
|
//°ó¶¨¹¤¾ßÌõµã»÷ʼþ
|
AttachEvent("WM_XCOMMAND",OnXCommand);
|
//»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ
|
//AttachEvent("WM_SETFOCUS",OnSetFocus);
|
AttachEvent("DevExplorer","TVN_CHECKBOXSEL",OnTreeCheckBoxSel);
|
AttachEvent("DevExplorer", "TVN_ITEMEXPANDING",OnTreeExpanding);
|
return 1;
|
}
|
|
int OnTreeExpanding(ref TNotifyEvent evt,int lparam)
|
{
|
ref NMTREEVIEW nmtv = trust(evt.pnmh as ref NMTREEVIEW);
|
int hItem = nmtv.itemNew.hItem;
|
int cItem=xtreeview::GetChildItem(tv_gs.GetId(), hItem);
|
if(cItem > 0) return 1;
|
int p = xtreeview::GetItemData(tv_gs.GetId(), hItem);
|
msxml::IXMLDOMElement ele = trust(p as msxml::IXMLDOMElement);
|
string src =GetEleString(ele, "@src");
|
string tagname =GetEleString(ele, "@tagname");
|
if (src == "" || tagname == "file" || tagname == "File") return 1;
|
OnSetTree(hItem, GetFolderPath(hItem));
|
|
return 1;
|
}
|
|
int OnSetTree(int pItem, msxml::IXMLDOMElement e)
|
{
|
msxml::IXMLDOMNodeList li=e.selectNodes("*");
|
int i=0;
|
int s=li.length;
|
for (i=0;i<s;i++){
|
msxml::IXMLDOMElement ele= li.item(s - i - 1);
|
string caption = GetEleString(ele, "@caption");
|
string src =GetEleString(ele, "@src");
|
string image =GetEleString(ele, "@image");
|
int p = trust(ele as int);
|
int hItem=xtreeview::InsertItem(tv_gs.GetId(), pItem,0,caption,p,image.toInt());
|
string tagname =GetEleString(ele, "@tagname");
|
if (src != "" && tagname != "file" && tagname != "File")
|
xtreeview::SetItemChild1(tv_gs.GetId(), hItem,1);
|
OnSetTree(hItem, ele);
|
}
|
|
return 1;
|
}
|
|
int OnSetTree(int hItem, string src)
|
{
|
xml x=new xml;
|
x.setNativePointer(xml::CreateInstance());
|
xaserverarg arg=new xaserverarg;
|
arg.setNativePointer(arg.CreateInstance());
|
arg.AddArg("src",src);
|
if(xaserver::ExecXQuery(GetServerUrl(),"[Developer.Tree.xq]",arg.GetString(),x)!=1)
|
{
|
alert("¶ÁÈ¡½Úµãʧ°Ü!");
|
return 1;
|
}
|
msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
|
OnSetTree(hItem, e);
|
return 1;
|
}
|
|
int onload()
|
{
|
nCount = 0;
|
tv_gs = GetControl("DevExplorer");
|
dw_log = GetControl("xlog");
|
OnAttachEvent();
|
|
return 1;
|
}
|
|
int onloaded()
|
{
|
OnSetTree(0, "Projects/projects.xhw");
|
return 1;
|
}
|
};
|
]
|