/*
	 Function name		: CXML::LoadFile
	 Description	    : This function load the given XML file using
						  m_pXMLDoc object. 	
	 Return type		: bool 
	 Argument			: LPCTSTR lpszXmlFile
	 Tested				: Ok
 */	
bool CXML::LoadFile(LPCTSTR lpszXmlFile)
{
	if (!lpszXmlFile || !m_pXMLDoc)
		return false;

	m_csXmlFileName = lpszXmlFile;
	long lXmlSate = 0;
	
	_variant_t vtFileName(m_csXmlFileName);
   
	VARIANT_BOOL vSuccess;
	m_hr = m_pXMLDoc->load(vtFileName,&vSuccess);

	if(!SUCCEEDED(m_hr) || vSuccess == FALSE)
	{
		return FALSE;
	}

	m_hr = m_pXMLDoc->get_readyState(&lXmlSate);
    if(SUCCEEDED(m_hr) && lXmlSate == 4)
	{	

		m_hr = m_pXMLDoc->get_documentElement(&m_pIRootElement);
		if(SUCCEEDED(m_hr) == 0)
			return false;

		BSTR bstrTagName;
		m_pIRootElement->get_tagName(&bstrTagName);
		CString csRootTag = bstrTagName;


		SysFreeString(bstrTagName);

		if(GetRootNode(csRootTag))
		{
			m_pICurrentNode = m_pIRootNode;
			m_pICurrentNode->AddRef();
		}
		else
			return false;
	}
	else
		return false;

	return true;
}
void ExcelControllerImpl08::DoSaveDocumentAs(IDispatchPtr spDocument, const CStdString& sNewFileName, MetawallBackEnd::wsFileFormat eFormat)
{
   if (spDocument == 0)	
      throw Workshare::Com::ComException(_T("The word document instance was null"), E_INVALIDARG);

   if (MetawallBackEnd::WSEXCELDOCUMENT != eFormat)
      throw Workshare::Com::ComException(_T("The format specified for SaveDocumentAs was invalid."), E_INVALIDARG);

   Excel::_WorkbookPtr pExcelDocument = spDocument;
   _variant_t vtFileName(sNewFileName.c_str());
   _variant_t vtFormat((long)(Excel::xlWorkbookNormal));
   _variant_t vtFalse(VARIANT_FALSE);
   _variant_t	vtEmpty(_T(""));

   HRESULT hr = pExcelDocument->SaveAs(&vtFileName, &vtFormat, &vtEmpty, &vtEmpty, &vtFalse, &vtFalse, Excel::xlNoChange);
   if (FAILED(hr))
      throw Workshare::Com::ComException(_T("Failed to save the workbook with the following file name:") + sNewFileName, hr);
}
/*
	 Function name		: CXML::Save
	 Description	    : This function saves the changes made to the loaded XML file
						: if a file name is supplied the changes will be stored in the new file
						 : else it will be saved in the old file.
	 Return type		: bool 
	 Argument			: LPCTSTR lpszFileName
	 Tested				: Ok
*/	
bool CXML::Save(LPCTSTR lpszFileName)
{
	CString csFile;

	if(lpszFileName)
		csFile = lpszFileName;
	else if(!m_csXmlFileName.IsEmpty())
		csFile = m_csXmlFileName;
	else
		return false;

	_variant_t vtFileName(csFile);
	m_hr = m_pXMLDoc->save(vtFileName);

	if(!SUCCEEDED(m_hr))
		return false;

return true;
}