#include #include #include #include #include #include #include #include #include #include using xml = KXMLDOMDocument; class export XDevEditPage : public xwin { public: XDevEditPage(void* implPtr,HWND hWnd) :xwin(implPtr,hWnd) {} public: xstring ProcessDevCmd(xstring cmd, xstring ext) { return xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext); } HTREEITEM GetProjectItem(xtreeview tv_folder, HTREEITEM hItem ) { HTREEITEM pitem = hItem; xstring typ; while (true) { typ = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).tagName(); if (typ == L"project")break; pitem = tv_folder.GetParentItem(pitem); if (!pitem)break; } return pitem; } HTREEITEM GetP2Item(xtreeview tv_folder, HTREEITEM hItem ) { HTREEITEM hDomainItem; HTREEITEM hP2Item = hItem; while (true) { hDomainItem = tv_folder.GetParentItem(hP2Item); if (!tv_folder.GetParentItem(hDomainItem))break; hP2Item = hDomainItem; } return hP2Item; } xstring GetData(int bcode) { xwin w = GetFrameWindow(); xtreeview tv_folder = w.GetControl(L"DevExplorer"); HTREEITEM hItem = (HTREEITEM)GetWinParam(); KXMLDOMElement e = tv_folder.GetItemData(hItem); xstring node = e.tagName(); if (node == L"File" || node == L"file") { xstring caption = e.getAttribute(L"caption"); SetWindowText(GetHWND(), caption); HTREEITEM hP2Item = 0; HTREEITEM hDomainItem = 0; if (!tv_folder.GetParentItem(hItem)) { hDomainItem = hItem; } else { hP2Item = GetP2Item(tv_folder, hItem); hDomainItem = tv_folder.GetParentItem(hP2Item); } //find project folder xstring prjguid = L""; HTREEITEM pitem = GetProjectItem(tv_folder, hItem); if (pitem) prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid"); xaserverarg arg; arg.AddArg(L"project.guid", prjguid); if (hP2Item) { if (hP2Item != hItem) { xstring guid = e.getAttribute(L"guid"); arg.AddArg(L"guid", guid); } KXMLDOMElement p = tv_folder.GetItemData(hP2Item); xstring guid = p.getAttribute(L"guid"); arg.AddArg(L"root.guid", guid); } else if (hDomainItem) { KXMLDOMElement d = tv_folder.GetItemData(hDomainItem); xstring guid = d.getAttribute(L"guid"); arg.AddArg(L"domain.guid", guid); } if (bcode)arg.AddArg(L"iscode", L"yes"); return ProcessDevCmd(L"getobject", arg.GetString()); } else return L""; } xstring GetData() { return GetData(0); } int SaveContentEx(HTREEITEM hItem,xstring content, int bcode) { xwin w = GetFrameWindow(); xtreeview tv_folder = w.GetControl(L"DevExplorer"); KXMLDOMElement e = tv_folder.GetItemData(hItem); xstring node = e.tagName(); if (node == L"File" || node == L"file") { HTREEITEM hP2Item = 0; HTREEITEM hDomainItem = 0; if (!tv_folder.GetParentItem(hItem)) { hDomainItem = hItem; } else { hP2Item = GetP2Item(tv_folder, hItem); hDomainItem = tv_folder.GetParentItem(hP2Item); } //find project folder xstring prjguid = L""; HTREEITEM pitem = GetProjectItem(tv_folder, hItem); if (pitem) prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid"); xaserverarg arg; arg.AddArg(L"project.guid", prjguid); if (hP2Item) { if (hP2Item != hItem) { xstring guid = e.getAttribute(L"guid"); arg.AddArg(L"guid", guid); } KXMLDOMElement p = tv_folder.GetItemData(hP2Item); xstring guid = p.getAttribute(L"guid"); arg.AddArg(L"root.guid", guid); } else if (hDomainItem) { KXMLDOMElement d = tv_folder.GetItemData(hDomainItem); xstring guid = d.getAttribute(L"guid"); arg.AddArg(L"domain.guid", guid); } arg.AddArg(L"content", content); if (bcode)arg.AddArg(L"iscode", L"yes"); ProcessDevCmd(L"saveobject", arg.GetString()); } return 1; } int SaveContentEx(xstring content, int bcode) { HTREEITEM hItem = (HTREEITEM)GetWinParam(); return SaveContentEx(hItem,content,bcode); } int SaveContent(HTREEITEM hItem,xstring content) { return SaveContentEx(hItem,content, 0); } int SaveContent(xstring content) { return SaveContentEx(content, 0); } int SaveContentEx(xstring prjguid, xstring domainguid, xstring rootguid, xstring guid,xstring content, int bcode) { xaserverarg arg; arg.AddArg(L"project.guid", prjguid); arg.AddArg(L"root.guid", rootguid); arg.AddArg(L"domain.guid", domainguid); arg.AddArg(L"guid", guid); arg.AddArg(L"content", content); if (bcode)arg.AddArg(L"iscode", L"yes"); ProcessDevCmd(L"saveobject", arg.GetString()); return 1; } xstring GetGuid() { return publiccode::GetGuid(); } int ImportItem(xstring baseFolder,HTREEITEM hItem, KXMLDOMElement ele, xstring prjguid, xstring domainguid, xstring rootguid) { xwin w = GetFrameWindow(); xtreeview tv_folder = w.GetControl(L"DevExplorer"); xstring caption = ele.getAttribute(L"src"); xstring uri = ele.getAttribute(L"uri"); xstring guid = ((KXMLDOMElement)tv_folder.GetItemData(hItem)).getAttribute(L"guid"); xstring typ = ele.tagName(); KXMLDOMElement e = tv_folder.GetItemData(hItem); xaserverarg arg; KXMLDOMNode node = e.selectSingleNode(typ + L"[not(@delete) and @caption='" + caption + L"']"); if (!node) { //add file folder arg.AddArg(L"image", ele.getAttribute(L"image")); //arg.AddArg(L"guid", ele.getAttribute(L"guid")); arg.AddArg(L"folder", ele.tagName()); arg.AddArg(L"type", ele.getAttribute(L"type")); arg.AddArg(L"desc", ele.getAttribute(L"desc")); arg.AddArg(L"uri", ele.getAttribute(L"uri")); arg.AddArg(L"src", ele.getAttribute(L"src")); arg.AddArg(L"name", ele.getAttribute(L"caption")); arg.AddArg(L"parent.guid", guid); arg.AddArg(L"project.guid", prjguid); arg.AddArg(L"domain.guid", domainguid); arg.AddArg(L"root.guid", rootguid); xstring str = ProcessDevCmd(L"addfolder", arg.GetString()); if (str != L"") { xml x; x.loadXML(str); auto e1 = x.documentElement(); e.appendChild(e1); int himage = xstring(e1.getAttribute(L"image")).toInt(); HTREEITEM hNewItem = tv_folder.InsertChildItem(hItem, arg.GetArgString(L"name"), e1, himage); int lens; KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]"); lens = nodes.length(); for (int i = 0; i < lens; i++) { KXMLDOMElement child = nodes.item(i); ImportItem(baseFolder,hNewItem, child, prjguid, domainguid, rootguid); } } return 1; } else { //update content if (typ == L"file" && node.selectSingleNode(L"@guid") && node.selectSingleNode(L"@src")) { wchar_t path[MAX_PATH]=L""; xstring src = node.selectSingleNode(L"@src").text(); trace(L"\r\n" + src); wcscat_s(path, MAX_PATH, baseFolder); wcscat_s(path, MAX_PATH, L"/"); wcscat_s(path, MAX_PATH, src.c_str()); xstring xs = xfile::GetString(path); const wchar_t* val = xs.c_str(); xstring myguid = node.selectSingleNode(L"@guid").text(); xstring mytype = node.selectSingleNode(L"@type") ? node.selectSingleNode(L"@type").text() : L""; if (xs != L"") { this->SaveContentEx(prjguid, domainguid, rootguid, myguid, xs, false); if (mytype == L"xpage") { ::PathRemoveExtensionW(path); wcscat_s(path, MAX_PATH, L".xss"); xs = xfile::GetString(path); if (xs != L"")this->SaveContentEx(prjguid, domainguid, rootguid, myguid, xs, true); } } } HTREEITEM hNewItem = tv_folder.GetChildItem(hItem); KXMLDOMElement e2 = node; xstring url2 = e2.getAttribute(L"uri"); while (hNewItem) { KXMLDOMElement e1 = tv_folder.GetItemData(hNewItem); wchar_t* uri1 = e1.getAttribute(L"uri"); wchar_t* uri2 = e2.getAttribute(L"uri"); if (url2 == e1.getAttribute(L"uri"))break; hNewItem = tv_folder.GetNextItem(hNewItem); } if (hNewItem) { int lens; KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]"); lens = nodes.length(); for (int i = 0; i < lens; i++) { KXMLDOMElement child = nodes.item(i); ImportItem(baseFolder, hNewItem, child, prjguid, domainguid, rootguid); } } } return 1; } int ImportItems(xstring srcfile, xstring id) { xwin w = GetFrameWindow(); xtreeview tv_folder = w.GetControl(L"DevExplorer"); HTREEITEM hItem = tv_folder.GetSelectedItem(); if (!hItem) return 1; xml src; src.load(srcfile); TCHAR szPath[MAX_PATH]=L""; wcscat_s(szPath, MAX_PATH,srcfile.c_str()); ::PathRemoveExtensionW(szPath); xstring path = L"//*[(name()='file' or name()='folder') and not(@delete) and @src='" + id + L"']"; const wchar_t* str = src.xml(); KXMLDOMElement srcele = src.selectSingleNode(path); if (!srcele) return 1; //find project folder xstring prjguid = L""; xstring domainguid = L""; xstring rootguid = L""; HTREEITEM pitem = GetProjectItem(tv_folder,hItem); if (pitem && pitem != hItem) prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid"); HTREEITEM hP2Item = 0; HTREEITEM hDomainItem = 0; KXMLDOMElement e = tv_folder.GetItemData(hItem); if (!tv_folder.GetParentItem(hItem)) { hDomainItem = hItem; } else { hP2Item = GetP2Item(tv_folder,hItem); hDomainItem = tv_folder.GetParentItem(hP2Item); } if (hP2Item) { KXMLDOMElement p = tv_folder.GetItemData(hP2Item); rootguid = p.getAttribute(L"guid"); } if (hDomainItem) { KXMLDOMElement d = tv_folder.GetItemData(hDomainItem); domainguid = d.getAttribute(L"guid"); } int lens; KXMLDOMNodeList nodes = srcele.selectNodes(L"node()[not(@delete)]"); lens = nodes.length(); for (int i = 0; i < lens; i++) { KXMLDOMElement child = nodes.item(i); ImportItem(szPath,hItem, child, prjguid, domainguid, rootguid); } return 1; } };