|  |  | 
 |  |  | #include <vbusiness/vutil/publiccode.vutil.vbusiness.hpp> | 
 |  |  | #include <win32/xfile.hpp> | 
 |  |  |  | 
 |  |  | #include <tchar.h> | 
 |  |  |  | 
 |  |  | using xml = KXMLDOMDocument; | 
 |  |  | class export XDevEditPage : public xwin | 
 |  |  | { | 
 |  |  | 
 |  |  | public: | 
 |  |  |    xstring ProcessDevCmd(xstring cmd, xstring ext) | 
 |  |  |    { | 
 |  |  |       //trace(ext); | 
 |  |  |       int nlen = 0; | 
 |  |  |       BYTE* pdata; | 
 |  |  |       xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext, pdata, nlen); | 
 |  |  |       if (nlen > 0) | 
 |  |  |       { | 
 |  |  |          xstring str = ((wchar_t*)pdata); | 
 |  |  |          return str.mid(1, 9999999); | 
 |  |  |       } | 
 |  |  |       else | 
 |  |  |          return L""; | 
 |  |  |       return  xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    HTREEITEM GetProjectItem(xtreeview tv_folder, HTREEITEM hItem ) | 
 |  |  | 
 |  |  |       return GetData(0); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int SaveContentEx(xstring content, int bcode) | 
 |  |  |    int SaveContentEx(HTREEITEM hItem,xstring content, 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") | 
 |  |  | 
 |  |  |  | 
 |  |  |          //find project folder | 
 |  |  |          xstring prjguid = L""; | 
 |  |  |          HTREEITEM pitem  = GetProjectItem(tv_folder, hItem); | 
 |  |  |          HTREEITEM pitem = GetProjectItem(tv_folder, hItem); | 
 |  |  |          if (pitem) | 
 |  |  |             prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid"); | 
 |  |  |  | 
 |  |  | 
 |  |  |       } | 
 |  |  |       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(HTREEITEM hItem, KXMLDOMElement ele, xstring prjguid, xstring domainguid, xstring rootguid) | 
 |  |  |    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"[@caption='" + caption + L"']"); | 
 |  |  |       KXMLDOMNode node = e.selectSingleNode(typ + L"[not(@delete) and @caption='" + caption + L"']"); | 
 |  |  |       if (!node) | 
 |  |  |       { | 
 |  |  |          //add file folder | 
 |  |  | 
 |  |  |             HTREEITEM hNewItem = tv_folder.InsertChildItem(hItem, arg.GetArgString(L"name"), e1, himage); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |             int GENERIC_READ = 0x80000000; | 
 |  |  |             int GENERIC_WRITE = 0x40000000; | 
 |  |  |             int FILE_SHARE_READ = 0x00000001; | 
 |  |  |             int FILE_SHARE_WRITE = 0x00000002; | 
 |  |  |             int OPEN_EXISTING = 3; | 
 |  |  |             int FILE_ATTRIBUTE_ARCHIVE = 0x00000020; | 
 |  |  |             HANDLE hFile = xfile::CreateFile(L"D:\\jrjhome\\developer-yh\\projects\\mherp.com.cn\\前端策略\works\\供应链\\" + sTemplName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); | 
 |  |  |             if (hFile > 0) | 
 |  |  |             { | 
 |  |  |                //int GMEM_MOVEABLE=0x0002; | 
 |  |  |                //int GMEM_ZEROINIT=0x0040; | 
 |  |  |                //int MEMSIZE; | 
 |  |  |                //int hMemory = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,MEMSIZE); | 
 |  |  |                //int pMemory = GlobalLock(hMemory); | 
 |  |  |                //int SizeReadWrite; | 
 |  |  |                //xwin::ReadFile(hFile,pMemory,MEMSIZE - 1,SizeReadWrite,0); | 
 |  |  |                DWORD FileSizeHigh = 0; | 
 |  |  |                int filesize = xfile::GetFileSize(hFile,FileSizeHigh); | 
 |  |  |                char * buffer = new char[filesize+2]; | 
 |  |  |                DWORD readsize; | 
 |  |  |                xfile:ReadFile(hFile, buffer, filesize, &readsize, 0); | 
 |  |  |                xfile::CloseHandle(hFile); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |             int lens; | 
 |  |  |             KXMLDOMNodeList nodes = ele.selectNodes(L"node()"); | 
 |  |  |             KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]"); | 
 |  |  |             lens = nodes.length(); | 
 |  |  |             for (int i = 0; i < lens; i++) | 
 |  |  |             { | 
 |  |  |                KXMLDOMElement child = nodes.item(i); | 
 |  |  |                ImportItem(hNewItem, child, prjguid, domainguid, rootguid); | 
 |  |  |                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; | 
 |  |  |    } | 
 |  |  | 
 |  |  |  | 
 |  |  |       xml src; | 
 |  |  |       src.load(srcfile); | 
 |  |  |       xstring path = L"//*[(name()='file' or name()='folder') and @src='" + id + L"']"; | 
 |  |  |  | 
 |  |  |       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; | 
 |  |  | 
 |  |  |          domainguid = d.getAttribute(L"guid"); | 
 |  |  |       } | 
 |  |  |       int lens; | 
 |  |  |       KXMLDOMNodeList nodes = srcele.selectNodes(L"node()"); | 
 |  |  |       KXMLDOMNodeList nodes = srcele.selectNodes(L"node()[not(@delete)]"); | 
 |  |  |       lens = nodes.length(); | 
 |  |  |       for (int i = 0; i < lens; i++) | 
 |  |  |       { | 
 |  |  |          KXMLDOMElement child = nodes.item(i); | 
 |  |  |          ImportItem(hItem, child, prjguid, domainguid, rootguid); | 
 |  |  |          ImportItem(szPath,hItem, child, prjguid, domainguid, rootguid); | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       return 1; |