/******************************************************************************
Function Name  :  SetConfigurationData
Input(s)       :  BYTE* pSrcBuffer, UINT unBuffSize
Output         :  HRESULT
Functionality  :  Returns the configuration data
Member of      :  CTSExecutorChildFrame
Friend of      :  -
Author(s)      :  Venkatanarayana Makam
Date Created   :  07/04/2011
Modifications  :
Code Tag       :  CS040
******************************************************************************/
HRESULT CTSExecutorChildFrame::SetConfigurationData(BYTE* pSrcBuffer, UINT unBuffSize)
{
    if(unBuffSize != 0)
    {
        vInitialise();
        WINDOWPLACEMENT wndPlacement;
        COPY_DATA_2(&wndPlacement, pSrcBuffer,sizeof(WINDOWPLACEMENT));
        SetWindowPlacement(&wndPlacement);
        INT nCxCur, nCxMin;
        COPY_DATA_2(&nCxCur, pSrcBuffer, sizeof(INT));
        COPY_DATA_2(&nCxMin, pSrcBuffer, sizeof(INT));
        m_omSplitterWnd.SetColumnInfo(0, nCxCur, nCxMin);
        m_omSplitterWnd.RecalcLayout();
        unBuffSize = unBuffSize - sizeof(WINDOWPLACEMENT) - (2*sizeof(INT));
        m_ouTSExecutor.SetConfigurationData(pSrcBuffer, unBuffSize);
        m_odTreeView->GetTreeCtrl().SetCheck(m_hParentTreeItem, m_ouTSExecutor.m_bTestSuiteStatus);
        //Parse The Tree Control;
        INT nCount;
        m_ouTSExecutor.GetTestSetupCount(nCount);

        for(int i = 0; i < nCount; i++)
        {
            bParseTestSetup(i);
        }
    }
    //New File or when Initialising
    else
    {
        vInitialise();
        SetWindowPlacement(&m_sTSDefPlacement);
    }

    return S_OK;
}
/******************************************************************************
Function Name  :  vUpdateTreeView
Input(s)       :
Output         :  VOID
Functionality  :
Member of      :  CTSExecutorChildFrame
Friend of      :  -
Author(s)      :  Venkatanarayana Makam
Date Created   :  11/04/2011
Modifications  :
Code Tag       :
******************************************************************************/
VOID CTSExecutorChildFrame::vUpdateTreeView(void)
{

    INT nCount;
    CString omStrTestSuiteName;
    m_ouTSExecutor.GetTestsuiteName(omStrTestSuiteName);
    m_odTreeView->GetTreeCtrl().DeleteAllItems();
    m_hParentTreeItem = m_odTreeView->InsertTreeItem(NULL, omStrTestSuiteName, NULL, 0, 0, def_ID_TESTSUITE);
    m_ouTSExecutor.GetTestSetupCount(nCount);
    for(int i = 0; i < nCount; i++)
    {
        bParseTestSetup(i);
    }
    m_odTreeView->GetTreeCtrl().Expand(m_hParentTreeItem, TVE_EXPAND);
}
/******************************************************************************
Function Name  :  vUpdateTreeView
Input(s)       :
Output         :  void
Functionality  :
Member of      :  CTSExecutorChildFrame
Friend of      :  -
Author(s)      :  Venkatanarayana Makam
Date Created   :  11/04/2011
Modifications  :
Code Tag       :
******************************************************************************/
void CTSExecutorChildFrame::vUpdateTreeView(void)
{

    INT nCount;
    CString omStrTestSuiteName;
    m_ouTSExecutor.GetTestsuiteName(omStrTestSuiteName);
    BOOL bCheck = m_odTreeView->bIsItemChecked(m_hParentTreeItem);
    m_odTreeView->GetTreeCtrl().DeleteAllItems();
    m_hParentTreeItem = m_odTreeView->InsertTreeItem(nullptr, omStrTestSuiteName, nullptr, 0, 0, def_ID_TESTSUITE);
    m_ouTSExecutor.GetTestSetupCount(nCount);
    for(int i = 0; i < nCount; i++)
    {
        bParseTestSetup(i);
    }
    m_odTreeView->GetTreeCtrl().Expand(m_hParentTreeItem, TVE_EXPAND);

    m_odTreeView->GetTreeCtrl().SetCheck(m_hParentTreeItem, bCheck);
}
/******************************************************************************
Function Name  :  OnAddTestSetup
Input(s)       :  WPARAM wparam, LPARAM lparam
Output         :  HRESULT
Functionality  :  Adds a Test Setup Using File Browser
Member of      :  CTSExecutorChildFrame
Friend of      :  -
Author(s)      :  Venkatanarayana Makam
Date Created   :  07/04/2011
Modifications  :
Code Tag       :  CS036
******************************************************************************/
HRESULT CTSExecutorChildFrame::OnAddTestSetup(WPARAM wparam, LPARAM lparam)
{
    UNREFERENCED_PARAMETER(lparam);
    UNREFERENCED_PARAMETER(wparam);
    DWORD dwID;
    CString omTestSetupName;
    CFileDialog omTestSetupBrowser(TRUE, "*.xml", 0, OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, szFilter);

    //For Multiple File Select - Hint From Msdn
    const int nSize =  _MAX_PATH  * _MAX_PATH ;  //Total 260 Files
    char* szTempBuf = new char[nSize];
    memset(szTempBuf, 0, sizeof(char) * nSize);
    omTestSetupBrowser.m_ofn.lpstrFile = szTempBuf;
    omTestSetupBrowser.m_ofn.nMaxFile = nSize - 1;

    INT nRetVal = (INT)omTestSetupBrowser.DoModal();
    if(nRetVal == IDOK)
    {
        POSITION pos = omTestSetupBrowser.GetStartPosition();
        while(pos != nullptr)
        {

            CString omstrTestSetup = omTestSetupBrowser.GetNextPathName(pos);
            HRESULT hResult = m_ouTSExecutor.AddTestSetup(omstrTestSetup, dwID);
            if(hResult == S_OK)
            {
                INT nCount;
                m_ouTSExecutor.GetTestSetupCount(nCount);
                bParseTestSetup(nCount-1);
            }
            else
            {
                CString omStrInfo;
                omStrInfo.Format(_("The %s is Invalid File"), omstrTestSetup.GetBuffer(MAX_PATH));
                MessageBox(omStrInfo, _("Error"), MB_OK|MB_ICONERROR);
            }

        }
    }

    delete []szTempBuf;
    return S_OK;
}
HRESULT CTSExecutorChildFrame::SetConfigurationData(xmlNodePtr pXmlNode)
{
    int nRetValue = S_OK;
    //Test Suite Window Position
    WINDOWPLACEMENT wndPlacement;
    wndPlacement = m_sTSDefPlacement;

    if( nullptr != pXmlNode )
    {
        vInitialise();
        xmlNodePtr pTempNode = nullptr;
        xmlXPathObjectPtr pObjectPtr = nullptr;

        pObjectPtr = xmlUtils::pGetChildNodes(pXmlNode, (xmlChar*)"Window_Position");
        if( nullptr != pObjectPtr)
        {
            pTempNode = pObjectPtr->nodesetval->nodeTab[0];
            if( S_FALSE == xmlUtils::ParseWindowsPlacement(pTempNode, wndPlacement) )
            {
                wndPlacement = m_sTSDefPlacement;
            }
            xmlXPathFreeObject(pObjectPtr);
            pObjectPtr = nullptr;
        }

        //Splitter Position
        pObjectPtr = xmlUtils::pGetChildNodes(pXmlNode, (xmlChar*)"Splitter_Window");
        int nCxCur = 0;
        int nCxMin = 0;
        if( nullptr != pObjectPtr)
        {
            pTempNode = pObjectPtr->nodesetval->nodeTab[0];
            if ( S_OK == xmlUtils::ParseSplitterWindow(pTempNode, nCxCur, nCxMin) )
            {
                m_omSplitterWnd.SetColumnInfo(0, nCxCur, nCxMin);
                //Arun
                m_omSplitterWnd.RecalcLayout();
            }
        }

        //Test Suite Executor ConfigData
        m_ouTSExecutor.SetConfigurationData(pXmlNode);

        m_odTreeView->GetTreeCtrl().SetCheck(m_hParentTreeItem, m_ouTSExecutor.m_bTestSuiteStatus);

        CString omStrName;
        m_ouTSExecutor.GetTestsuiteName(omStrName);
        m_odTreeView->GetTreeCtrl().SetItemText(m_hParentTreeItem, omStrName);

        //Parse The Tree Control;
        INT nCount;
        m_ouTSExecutor.GetTestSetupCount(nCount);
        for(int i = 0; i < nCount; i++)
        {
            bParseTestSetup(i);
        }

    }
    if( nullptr == pXmlNode )
    {
        vInitialise();
    }
    SetWindowPlacement(&wndPlacement);

    return S_OK;
}