ActionStatus OpenOfficeAction::GetStatus()
{
	if (status == InProgress)
	{
		if (m_runner->IsRunning())
			return InProgress;

		if (_isLangPackInstalled())
		{
			if (_isDefaultLanguage() == false)
			{
				_setDefaultLanguage();
			}

			SetStatus(Successful);
		}
		else
		{
			SetStatus(FinishedWithError);
		}
		
		g_log.Log(L"OpenOfficeAction::GetStatus is '%s'", status == Successful ? L"Successful" : L"FinishedWithError");
	}
	return status;
}
ActionStatus Windows8LPIAction::GetStatus()
{
    if (status == InProgress)
    {
        if (m_runner->IsRunning())
            return InProgress;

        if (_isLanguagePanelFirst() == false)
        {
            _setLanguagePanel();
        }
        _setDefaultLanguage();

        if (_isAlreadyApplied())
        {
            SetStatus(Successful);
        }
        else
        {
            SetStatus(FinishedWithError);
            _dumpLpkSetupErrors();
        }

        g_log.Log(L"Windows8LPIAction::GetStatus is '%s'", status == Successful ? L"Successful" : L"FinishedWithError");
    }
    return status;
}
ActionStatus MSOfficeLPIAction::GetStatus()
{
	if (status == InProgress)
	{
		if (m_runner->IsRunning())
			return InProgress;

		switch (m_executionStep)
		{
			case ExecutionStepNone:
				break;
			case ExecutionStep1:
			{
				if (_executeInstallConnector() == true)
				{
					m_executionStep = ExecutionStep2;
					return InProgress;
				}
				break;
			}				
			case ExecutionStep2:
				break;
			default:
				assert(false);
				break;
		}

		if (_isLangPackForVersionInstalled(_getRegKeys()))
		{
			SetStatus(Successful);
			_setDefaultLanguage();
		}
		else
		{
			SetStatus(FinishedWithError);

			if (m_msiexecLog.empty() == false)
			{
				#define LINES_TODUMP 7
				#define KEYWORD_TOSEARCH L"Error"

				LogExtractor logExtractor(m_msiexecLog, LINES_TODUMP);
				logExtractor.SetExtractLastOccurrence(true);
				logExtractor.SetFileIsUnicode(false);
				logExtractor.ExtractLogFragmentForKeyword(KEYWORD_TOSEARCH);
				logExtractor.DumpLines();
			}
		}		
		g_log.Log(L"MSOfficeLPIAction::GetStatus is '%s'", status == Successful ? L"Successful" : L"FinishedWithError");
	}
	return status;
}
ActionStatus WindowsLPIAction::GetStatus()
{
	if (status == InProgress)
	{
		if (m_runner->IsRunning())
			return InProgress;

		if (_isLangPackInstalled()) {
			status = Successful;
			_setDefaultLanguage();
		}
		else {
			status = FinishedWithError;			
		}
		
		g_log.Log(L"WindowsLPIAction::GetStatus is '%s'", status == Successful ? L"Successful" : L"FinishedWithError");
	}
	return status;
}
void WindowsLPIAction::Execute()
{
	wchar_t szParams[MAX_PATH];
	wchar_t lpkapp[MAX_PATH];

	if (_isLangPackInstalled() == true)
	{
		_setDefaultLanguage();
		status = _isLangPackInstalled() ? Successful : FinishedWithError;
		g_log.Log(L"WindowsLPIAction::Execute. Setting default language only was '%s'", status == Successful ? L"Successful" : L"FinishedWithError");
		return;
	}

	OperatingVersion version = m_OSVersion->GetVersion();

	if (version == WindowsXP)
	{
		GetSystemDirectory(lpkapp, MAX_PATH);
		wcscat_s(lpkapp, L"\\msiexec.exe ");

		wcscpy_s(szParams, L" /i ");
		wcscat_s(szParams, m_szFilename); // full path to 'lip_ca-es.msi'
		wcscat_s(szParams, L" /qn");
	}
	else // Windows Vista and 7
	{	
		// Documentation: http://technet.microsoft.com/en-us/library/cc766010%28WS.10%29.aspx
		wcscpy_s(szParams, L" /i ca-ES /r /s /p ");
		wcscat_s(szParams, m_szFilename);
	
		GetSystemDirectory(lpkapp, MAX_PATH);
		wcscat_s(lpkapp, L"\\lpksetup.exe");
	}

	status = InProgress;
	g_log.Log(L"WindowsLPIAction::Execute '%s' with params '%s'", lpkapp, szParams);
	m_runner->Execute(lpkapp, szParams, m_OSVersion->IsWindows64Bits());
}