summaryrefslogtreecommitdiff
path: root/uui/source/iahndl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'uui/source/iahndl.cxx')
-rw-r--r--uui/source/iahndl.cxx4200
1 files changed, 882 insertions, 3318 deletions
diff --git a/uui/source/iahndl.cxx b/uui/source/iahndl.cxx
index 2db6cc79ac57..98acd5f1c324 100644
--- a/uui/source/iahndl.cxx
+++ b/uui/source/iahndl.cxx
@@ -28,411 +28,93 @@
*
************************************************************************/
-#include "iahndl.hxx"
-
#include <memory>
-#include "osl/diagnose.h"
-#include "osl/conditn.hxx"
-#include "rtl/digest.h"
-#include "rtl/ustrbuf.hxx"
+#include "com/sun/star/awt/XWindow.hpp"
#include "com/sun/star/beans/PropertyValue.hpp"
-#include "com/sun/star/beans/XPropertyAccess.hpp"
#include "com/sun/star/configuration/backend/MergeRecoveryRequest.hpp"
#include "com/sun/star/configuration/backend/StratumCreationException.hpp"
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include "com/sun/star/container/XContainerQuery.hpp"
-#include "com/sun/star/container/XNameAccess.hpp"
-#include "com/sun/star/container/XNameContainer.hpp"
+#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
#include "com/sun/star/document/BrokenPackageRequest.hpp"
-#include "com/sun/star/document/FilterOptionsRequest.hpp"
-#include "com/sun/star/document/NoSuchFilterRequest.hpp"
-#include "com/sun/star/document/AmbigousFilterRequest.hpp"
-#include "com/sun/star/document/LockedDocumentRequest.hpp"
-#include "com/sun/star/document/OwnLockOnDocumentRequest.hpp"
-#include "com/sun/star/document/LockedOnSavingRequest.hpp"
-#include "com/sun/star/document/ChangedByOthersRequest.hpp"
-#include "com/sun/star/document/LockFileIgnoreRequest.hpp"
-#include "com/sun/star/document/XImporter.hpp"
-#include "com/sun/star/document/XInteractionFilterOptions.hpp"
-#include "com/sun/star/document/XInteractionFilterSelect.hpp"
+#include "com/sun/star/task/DocumentMacroConfirmationRequest.hpp"
+#include "com/sun/star/task/DocumentMacroConfirmationRequest2.hpp"
#include "com/sun/star/java/WrongJavaVersionException.hpp"
+#include "com/sun/star/lang/XInitialization.hpp"
#include "com/sun/star/lang/XMultiServiceFactory.hpp"
#include "com/sun/star/script/ModuleSizeExceededRequest.hpp"
#include "com/sun/star/sync2/BadPartnershipException.hpp"
-#include "com/sun/star/task/XInteractionHandler.hpp"
-#include "com/sun/star/task/XInteractionHandler2.hpp"
-#include "com/sun/star/task/DocumentPasswordRequest.hpp"
-#include "com/sun/star/task/DocumentMSPasswordRequest.hpp"
+#include "com/sun/star/task/DocumentMacroConfirmationRequest2.hpp"
#include "com/sun/star/task/ErrorCodeIOException.hpp"
#include "com/sun/star/task/ErrorCodeRequest.hpp"
-#include "com/sun/star/task/MasterPasswordRequest.hpp"
-#include "com/sun/star/task/NoMasterException.hpp"
-#include "com/sun/star/task/DocumentMacroConfirmationRequest.hpp"
-#include "com/sun/star/task/DocumentMacroConfirmationRequest2.hpp"
+#include "com/sun/star/task/FutureDocumentVersionProductUpdateRequest.hpp"
#include "com/sun/star/task/XInteractionAbort.hpp"
#include "com/sun/star/task/XInteractionApprove.hpp"
+#include "com/sun/star/task/XInteractionAskLater.hpp"
#include "com/sun/star/task/XInteractionDisapprove.hpp"
-#include "com/sun/star/task/XInteractionPassword.hpp"
+#include "com/sun/star/task/XInteractionHandler2.hpp"
#include "com/sun/star/task/XInteractionRequest.hpp"
#include "com/sun/star/task/XInteractionRetry.hpp"
-#include "com/sun/star/task/XPasswordContainer.hpp"
-#include "com/sun/star/task/XUrlContainer.hpp"
-#include "com/sun/star/task/XInteractionAskLater.hpp"
-#include "com/sun/star/ucb/AuthenticationRequest.hpp"
-#include "com/sun/star/ucb/URLAuthenticationRequest.hpp"
-#include "com/sun/star/ucb/CertificateValidationRequest.hpp"
-#include "com/sun/star/ucb/HandleCookiesRequest.hpp"
#include "com/sun/star/ucb/InteractiveAppException.hpp"
-#include "com/sun/star/ucb/InteractiveAugmentedIOException.hpp"
#include "com/sun/star/ucb/InteractiveCHAOSException.hpp"
+#include "com/sun/star/ucb/InteractiveLockingLockedException.hpp"
+#include "com/sun/star/ucb/InteractiveLockingNotLockedException.hpp"
+#include "com/sun/star/ucb/InteractiveLockingLockExpiredException.hpp"
#include "com/sun/star/ucb/InteractiveNetworkConnectException.hpp"
-#include "com/sun/star/ucb/InteractiveNetworkException.hpp"
-#include "com/sun/star/ucb/InteractiveNetworkGeneralException.hpp"
#include "com/sun/star/ucb/InteractiveNetworkOffLineException.hpp"
#include "com/sun/star/ucb/InteractiveNetworkReadException.hpp"
#include "com/sun/star/ucb/InteractiveNetworkResolveNameException.hpp"
#include "com/sun/star/ucb/InteractiveNetworkWriteException.hpp"
#include "com/sun/star/ucb/InteractiveWrongMediumException.hpp"
-#include "com/sun/star/ucb/IOErrorCode.hpp"
#include "com/sun/star/ucb/NameClashException.hpp"
#include "com/sun/star/ucb/NameClashResolveRequest.hpp"
#include "com/sun/star/ucb/UnsupportedNameClashException.hpp"
-#include "com/sun/star/ucb/XInteractionCookieHandling.hpp"
#include "com/sun/star/ucb/XInteractionReplaceExistingData.hpp"
-#include "com/sun/star/ucb/XInteractionSupplyAuthentication.hpp"
-#include "com/sun/star/ucb/XInteractionSupplyAuthentication2.hpp"
#include "com/sun/star/ucb/XInteractionSupplyName.hpp"
-#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
-#include "com/sun/star/uno/RuntimeException.hpp"
#include "com/sun/star/xforms/InvalidDataOnSubmitException.hpp"
-#include <com/sun/star/security/CertificateValidity.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-
+#include "osl/conditn.hxx"
+#include "tools/rcid.h" // RSC_STRING
+#include "tools/errinf.hxx" // ErrorHandler, ErrorContext, ...
#include "vos/mutex.hxx"
-#include "tools/rcid.h"
+#include "comphelper/documentconstants.hxx" // ODFVER_012_TEXT
+#include "svtools/sfxecode.hxx" // ERRCODE_SFX_*
+#include "vcl/msgbox.hxx"
#include "vcl/svapp.hxx"
-#include "svl/svtools.hrc"
-#include "svl/httpcook.hxx"
-#include "svtools/sfxecode.hxx"
-#include "toolkit/helper/vclunohelper.hxx"
-#include "comphelper/sequenceashashmap.hxx"
-#include "comphelper/documentconstants.hxx"
#include "unotools/configmgr.hxx"
+#include "toolkit/helper/vclunohelper.hxx"
#include "ids.hrc"
-#include "cookiedg.hxx"
+
+#include "getcontinuations.hxx"
#include "secmacrowarnings.hxx"
-#include "masterpasscrtdlg.hxx"
-#include "masterpassworddlg.hxx"
-#include "logindlg.hxx"
-#include "passcrtdlg.hxx"
-#include "passworddlg.hxx"
-#include "unknownauthdlg.hxx"
-#include "sslwarndlg.hxx"
-#include "openlocked.hxx"
#include "newerverwarn.hxx"
-#include "alreadyopen.hxx"
-#include "filechanged.hxx"
-#include "trylater.hxx"
-#include "lockfailed.hxx"
-#include "loginerr.hxx"
-
-#include <comphelper/processfactory.hxx>
-#include <svl/zforlist.hxx>
-using namespace com::sun;
-
-namespace csss = ::com::sun::star::security;
-
-using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::uno::UNO_QUERY;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::task::XInteractionContinuation;
-using ::com::sun::star::task::XInteractionAbort;
-using ::com::sun::star::task::XInteractionApprove;
-using ::com::sun::star::task::XInteractionAskLater;
-using ::com::sun::star::task::FutureDocumentVersionProductUpdateRequest;
+#include "iahndl.hxx"
-#define CONFIG_INTERACTIONHANDLERS_KEY "/org.openoffice.ucb.InteractionHandler/InteractionHandlers"
+using namespace com::sun::star;
namespace {
-class CookieList: public List
+class HandleData : public osl::Condition
{
public:
- ~CookieList() SAL_THROW(());
-};
-
-CookieList::~CookieList() SAL_THROW(())
-{
- while (Count() != 0)
- delete static_cast< CntHTTPCookie * >(Remove(Count() - 1));
-}
-
-class ErrorResource: private Resource
-{
-public:
- inline ErrorResource(ResId & rResId) SAL_THROW(()): Resource(rResId) {}
-
- inline ~ErrorResource() SAL_THROW(()) { FreeResource(); }
-
- bool getString(ErrCode nErrorCode, rtl::OUString * pString) const
- SAL_THROW(());
-};
-
-bool ErrorResource::getString(ErrCode nErrorCode, rtl::OUString * pString)
- const SAL_THROW(())
-{
- OSL_ENSURE(pString, "specification violation");
- ResId aResId(static_cast< USHORT >(nErrorCode & ERRCODE_RES_MASK), *m_pResMgr);
- aResId.SetRT(RSC_STRING);
- if (!IsAvailableRes(aResId))
- return false;
- aResId.SetAutoRelease(false);
- *pString = UniString(aResId);
- m_pResMgr->PopContext();
- return true;
-}
-
-void
-getContinuations(
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const & rContinuations,
- star::uno::Reference< star::task::XInteractionApprove > * pApprove,
- star::uno::Reference< star::task::XInteractionDisapprove > * pDisapprove,
- star::uno::Reference< star::task::XInteractionRetry > * pRetry,
- star::uno::Reference< star::task::XInteractionAbort > * pAbort,
- star::uno::Reference< star::ucb::XInteractionSupplyAuthentication > *
- pSupplyAuthentication,
- star::uno::Reference< star::ucb::XInteractionSupplyAuthentication2 > *
- pSupplyAuthentication2,
- star::uno::Reference< star::task::XInteractionPassword > * pPassword,
- star::uno::Reference< star::ucb::XInteractionSupplyName > *
- pSupplyName,
- star::uno::Reference< star::ucb::XInteractionReplaceExistingData > *
- pReplaceExistingData)
- SAL_THROW((star::uno::RuntimeException))
-{
- for (sal_Int32 i = 0; i < rContinuations.getLength(); ++i)
- {
- if (pApprove && !pApprove->is())
- {
- *pApprove
- = star::uno::Reference< star::task::XInteractionApprove >(
- rContinuations[i], star::uno::UNO_QUERY);
- if (pApprove->is())
- continue;
- }
- if (pDisapprove && !pDisapprove->is())
- {
- *pDisapprove
- = star::uno::Reference< star::task::XInteractionDisapprove >(
- rContinuations[i], star::uno::UNO_QUERY);
- if (pDisapprove->is())
- continue;
- }
- if (pRetry && !pRetry->is())
- {
- *pRetry = star::uno::Reference< star::task::XInteractionRetry >(
- rContinuations[i], star::uno::UNO_QUERY);
- if (pRetry->is())
- continue;
- }
- if (pAbort && !pAbort->is())
- {
- *pAbort = star::uno::Reference< star::task::XInteractionAbort >(
- rContinuations[i], star::uno::UNO_QUERY);
- if (pAbort->is())
- continue;
- }
- if (pSupplyAuthentication && !pSupplyAuthentication->is())
- {
- *pSupplyAuthentication
- = star::uno::Reference<
- star::ucb::XInteractionSupplyAuthentication >(
- rContinuations[i], star::uno::UNO_QUERY);
- if (pSupplyAuthentication->is())
- {
- // is it even a supplyauthentication2, which is derived from
- // supplyauthentication?
- if (pSupplyAuthentication2 && !pSupplyAuthentication2->is())
- *pSupplyAuthentication2
- = star::uno::Reference<
- star::ucb::XInteractionSupplyAuthentication2 >(
- rContinuations[i], star::uno::UNO_QUERY);
- continue;
- }
- }
- if (pPassword && !pPassword->is())
- {
- *pPassword
- = star::uno::Reference< star::task::XInteractionPassword >(
- rContinuations[i], star::uno::UNO_QUERY);
- if (pPassword->is())
- continue;
- }
- if (pSupplyName && !pSupplyName->is())
- {
- *pSupplyName
- = star::uno::Reference< star::ucb::XInteractionSupplyName >(
- rContinuations[i], star::uno::UNO_QUERY);
- if (pSupplyName->is())
- continue;
- }
- if (pReplaceExistingData && !pReplaceExistingData->is())
- {
- *pReplaceExistingData
- = star::uno::Reference<
- star::ucb::XInteractionReplaceExistingData >(
- rContinuations[i], star::uno::UNO_QUERY);
- if (pReplaceExistingData->is())
- continue;
- }
- }
-}
-
-::rtl::OUString replaceMessageWithArguments(
- ::rtl::OUString aMessage,
- std::vector< rtl::OUString > const & rArguments )
-{
- for (sal_Int32 i = 0;;)
- {
- i = aMessage.
- indexOf(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("$(ARG")), i);
- if (i == -1)
- break;
- if (aMessage.getLength() - i >= RTL_CONSTASCII_LENGTH("$(ARGx)")
- && aMessage.getStr()[i + RTL_CONSTASCII_LENGTH("$(ARGx")] == ')')
- {
- sal_Unicode c
- = aMessage.getStr()[i + RTL_CONSTASCII_LENGTH("$(ARG")];
- if (c >= '1' && c <= '2')
- {
- std::vector< rtl::OUString >::size_type nIndex
- = static_cast< std::vector< rtl::OUString >::size_type >(
- c - '1');
- if (nIndex < rArguments.size())
- {
- aMessage
- = aMessage.replaceAt(i,
- RTL_CONSTASCII_LENGTH("$(ARGx)"),
- rArguments[nIndex]);
- i += rArguments[nIndex].getLength();
- continue;
- }
- }
- }
- ++i;
- }
-
- return aMessage;
-}
-
-
-bool
-getStringRequestArgument(star::uno::Sequence< star::uno::Any > const &
- rArguments,
- rtl::OUString const & rKey,
- rtl::OUString * pValue)
- SAL_THROW(())
-{
- for (sal_Int32 i = 0; i < rArguments.getLength(); ++i)
+ HandleData(
+ uno::Reference< task::XInteractionRequest > const & rRequest)
+ : osl::Condition(),
+ m_rRequest(rRequest),
+ bHandled( false )
{
- star::beans::PropertyValue aProperty;
- if ((rArguments[i] >>= aProperty) && aProperty.Name == rKey)
- {
- rtl::OUString aValue;
- if (aProperty.Value >>= aValue)
- {
- if (pValue)
- *pValue = aValue;
- return true;
- }
- }
}
- return false;
-}
-
-bool
-getBoolRequestArgument(star::uno::Sequence< star::uno::Any > const &
- rArguments,
- rtl::OUString const & rKey,
- bool * pValue)
- SAL_THROW(())
-{
- for (sal_Int32 i = 0; i < rArguments.getLength(); ++i)
- {
- star::beans::PropertyValue aProperty;
- if ((rArguments[i] >>= aProperty) && aProperty.Name == rKey)
- {
- sal_Bool bValue = sal_Bool();
- if (aProperty.Value >>= bValue)
- {
- if (pValue)
- *pValue = bValue;
- return true;
- }
- }
- }
- return false;
-}
-
-bool
-getResourceNameRequestArgument(star::uno::Sequence< star::uno::Any > const &
- rArguments,
- rtl::OUString * pValue)
- SAL_THROW(())
-{
- if (!getStringRequestArgument(rArguments,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "Uri")),
- pValue))
- return false;
- // Use the resource name only for file URLs, to avoid confusion:
- //TODO! work with ucp locality concept instead of hardcoded "file"?
- if (pValue
- && pValue->matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM(
- "file:")))
- getStringRequestArgument(rArguments,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ResourceName")),
- pValue);
- return true;
-}
-
-bool isInformationalErrorMessageRequest(
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations)
-{
- // Only requests with a single continuation (user has no choice, request
- // is just informational)
- if (rContinuations.getLength() != 1 )
- return false;
-
- // user can only abort or approve, all other continuations are not
- // considered to be informational.
- star::uno::Reference< star::task::XInteractionApprove > xApprove(
- rContinuations[0], star::uno::UNO_QUERY);
- if (xApprove.is())
- return true;
-
- star::uno::Reference< star::task::XInteractionAbort > xAbort(
- rContinuations[0], star::uno::UNO_QUERY);
- if (xAbort.is())
- return true;
-
- return false;
-}
+ uno::Reference< task::XInteractionRequest > m_rRequest;
+ bool bHandled;
+ beans::Optional< rtl::OUString > m_aResult;
+};
} /* namespace */
UUIInteractionHelper::UUIInteractionHelper(
- star::uno::Reference< star::lang::XMultiServiceFactory > const &
- rServiceFactory,
- star::uno::Sequence< star::uno::Any > const & rArguments)
+ uno::Reference< lang::XMultiServiceFactory > const & rServiceFactory,
+ uno::Sequence< uno::Any > const & rArguments)
SAL_THROW(()):
m_xServiceFactory(rServiceFactory),
m_aProperties(rArguments)
@@ -440,8 +122,7 @@ UUIInteractionHelper::UUIInteractionHelper(
}
UUIInteractionHelper::UUIInteractionHelper(
- star::uno::Reference< star::lang::XMultiServiceFactory > const &
- rServiceFactory)
+ uno::Reference< lang::XMultiServiceFactory > const & rServiceFactory)
SAL_THROW(()):
m_xServiceFactory(rServiceFactory)
{
@@ -451,41 +132,32 @@ UUIInteractionHelper::~UUIInteractionHelper()
{
}
-class HandleData : public osl::Condition {
-public:
- HandleData(
- star::uno::Reference< star::task::XInteractionRequest > const &
- rRequest)
- : osl::Condition(),
- m_rRequest(rRequest),
- bHandled( false )
- {
- }
- star::uno::Reference< star::task::XInteractionRequest > m_rRequest;
- bool bHandled;
- star::beans::Optional< rtl::OUString > m_aResult;
-};
-
-long UUIInteractionHelper::handlerequest(
- void* pHandleData,void* pInteractionHelper)
-{
- HandleData* pHND = (HandleData*) pHandleData;
- UUIInteractionHelper* pUUI = (UUIInteractionHelper*) pInteractionHelper;
- pHND->bHandled = pUUI->handle_impl(pHND->m_rRequest);
+long
+UUIInteractionHelper::handlerequest(
+ void* pHandleData, void* pInteractionHelper)
+{
+ HandleData* pHND
+ = static_cast< HandleData * >(pHandleData);
+ UUIInteractionHelper* pUUI
+ = static_cast< UUIInteractionHelper * >(pInteractionHelper);
+ bool bDummy = false;
+ rtl::OUString aDummy;
+ pHND->bHandled
+ = pUUI->handleRequest_impl(pHND->m_rRequest, false, bDummy, aDummy);
pHND->set();
return 0;
}
-
bool
UUIInteractionHelper::handleRequest(
- star::uno::Reference< star::task::XInteractionRequest > const & rRequest)
- throw (star::uno::RuntimeException)
+ uno::Reference< task::XInteractionRequest > const & rRequest)
+ SAL_THROW((uno::RuntimeException))
{
Application* pApp = 0;
if(
// be aware,it is the same type
- ((oslThreadIdentifier) Application::GetMainThreadIdentifier())
+ static_cast< oslThreadIdentifier >(
+ Application::GetMainThreadIdentifier())
!= osl_getThreadIdentifier(NULL)
&&
(pApp = GetpApp())
@@ -501,10 +173,15 @@ UUIInteractionHelper::handleRequest(
return aHD.bHandled;
}
else
- return handle_impl(rRequest);
+ {
+ bool bDummy = false;
+ rtl::OUString aDummy;
+ return handleRequest_impl(rRequest, false, bDummy, aDummy);
+ }
}
-long UUIInteractionHelper::getstringfromrequest(
+long
+UUIInteractionHelper::getstringfromrequest(
void* pHandleData,void* pInteractionHelper)
{
HandleData* pHND = (HandleData*) pHandleData;
@@ -514,30 +191,34 @@ long UUIInteractionHelper::getstringfromrequest(
return 0;
}
-star::beans::Optional< rtl::OUString >
+beans::Optional< rtl::OUString >
UUIInteractionHelper::getStringFromRequest_impl(
- star::uno::Reference< star::task::XInteractionRequest > const & rRequest)
- throw (star::uno::RuntimeException)
+ uno::Reference< task::XInteractionRequest > const & rRequest)
+ SAL_THROW((uno::RuntimeException))
{
bool bSuccess = false;
rtl::OUString aMessage;
- handleMessageboxRequests(rRequest, true, bSuccess, aMessage);
+ handleRequest_impl(rRequest, true, bSuccess, aMessage);
- if (!bSuccess)
- handleErrorHandlerRequests(rRequest, true, bSuccess, aMessage);
+ OSL_ENSURE(bSuccess ||
+ !isInformationalErrorMessageRequest(
+ rRequest->getContinuations()),
+ "Interaction request is a candidate for a string representation."
+ "Please implement!");
- return star::beans::Optional< rtl::OUString >(bSuccess, aMessage);
+ return beans::Optional< rtl::OUString >(bSuccess, aMessage);
}
-star::beans::Optional< rtl::OUString >
+beans::Optional< rtl::OUString >
UUIInteractionHelper::getStringFromRequest(
- star::uno::Reference< star::task::XInteractionRequest > const & rRequest)
- throw (star::uno::RuntimeException)
+ uno::Reference< task::XInteractionRequest > const & rRequest)
+ SAL_THROW((uno::RuntimeException))
{
Application* pApp = 0;
if(
// be aware,it is the same type
- ((oslThreadIdentifier) Application::GetMainThreadIdentifier())
+ static_cast< oslThreadIdentifier >(
+ Application::GetMainThreadIdentifier())
!= osl_getThreadIdentifier(NULL)
&&
(pApp = GetpApp())
@@ -556,879 +237,660 @@ UUIInteractionHelper::getStringFromRequest(
return getStringFromRequest_impl(rRequest);
}
-bool UUIInteractionHelper::handleMessageboxRequests(
- star::uno::Reference< star::task::XInteractionRequest > const & rRequest,
- bool bObtainErrorStringOnly,
- bool & bHasErrorString,
- rtl::OUString & rErrorString)
+::rtl::OUString
+UUIInteractionHelper::replaceMessageWithArguments(
+ ::rtl::OUString aMessage,
+ std::vector< rtl::OUString > const & rArguments )
{
- star::uno::Any aAnyRequest(rRequest->getRequest());
-
- star::script::ModuleSizeExceededRequest aModSizeException;
- if (aAnyRequest >>= aModSizeException )
+ for (sal_Int32 i = 0;;)
{
- ErrCode nErrorCode = ERRCODE_UUI_IO_MODULESIZEEXCEEDED;
- std::vector< rtl::OUString > aArguments;
- star::uno::Sequence< rtl::OUString > sModules
- = aModSizeException.Names;
- if ( sModules.getLength() )
+ i = aMessage.
+ indexOf(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("$(ARG")), i);
+ if (i == -1)
+ break;
+ if (aMessage.getLength() - i >= RTL_CONSTASCII_LENGTH("$(ARGx)")
+ && aMessage.getStr()[i + RTL_CONSTASCII_LENGTH("$(ARGx")] == ')')
{
- rtl::OUString aName;
- for ( sal_Int32 index=0; index< sModules.getLength(); ++index )
+ sal_Unicode c
+ = aMessage.getStr()[i + RTL_CONSTASCII_LENGTH("$(ARG")];
+ if (c >= '1' && c <= '2')
{
- if ( index )
- aName = aName + rtl::OUString( ',' ) + sModules[index];
- else
- aName = sModules[index]; // 1st name
+ std::vector< rtl::OUString >::size_type nIndex
+ = static_cast< std::vector< rtl::OUString >::size_type >(
+ c - '1');
+ if (nIndex < rArguments.size())
+ {
+ aMessage
+ = aMessage.replaceAt(i,
+ RTL_CONSTASCII_LENGTH("$(ARGx)"),
+ rArguments[nIndex]);
+ i += rArguments[nIndex].getLength();
+ continue;
+ }
}
- aArguments.push_back( aName );
}
- handleErrorRequest( star::task::InteractionClassification_WARNING,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
+ ++i;
}
- star::ucb::NameClashException aNCException;
- if (aAnyRequest >>= aNCException)
- {
- ErrCode nErrorCode = ERRCODE_UUI_IO_TARGETALREADYEXISTS;
- std::vector< rtl::OUString > aArguments;
+ return aMessage;
+}
- if( aNCException.Name.getLength() )
- {
- nErrorCode = ERRCODE_UUI_IO_ALREADYEXISTS;
- aArguments.push_back( aNCException.Name );
- }
+bool
+UUIInteractionHelper::isInformationalErrorMessageRequest(
+ uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
+ rContinuations)
+{
+ // Only requests with a single continuation (user has no choice, request
+ // is just informational)
+ if (rContinuations.getLength() != 1 )
+ return false;
- handleErrorRequest( aNCException.Classification,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
+ // user can only abort or approve, all other continuations are not
+ // considered to be informational.
+ uno::Reference< task::XInteractionApprove > xApprove(
+ rContinuations[0], uno::UNO_QUERY);
+ if (xApprove.is())
return true;
- }
- star::ucb::UnsupportedNameClashException aUORequest;
- if (aAnyRequest >>= aUORequest)
- {
- ErrCode nErrorCode = ERRCODE_UUI_IO_UNSUPPORTEDOVERWRITE;
- std::vector< rtl::OUString > aArguments;
+ uno::Reference< task::XInteractionAbort > xAbort(
+ rContinuations[0], uno::UNO_QUERY);
+ if (xAbort.is())
+ return true;
- star::uno::Reference< star::task::XInteractionApprove > xApprove;
- star::uno::Reference<
- star::task::XInteractionDisapprove > xDisapprove;
- getContinuations(
- rRequest->getContinuations(),
- &xApprove, &xDisapprove, 0, 0, 0, 0, 0, 0, 0);
+ return false;
+}
+
+bool
+UUIInteractionHelper::tryOtherInteractionHandler(
+ uno::Reference< task::XInteractionRequest > const & rRequest)
+ SAL_THROW((uno::RuntimeException))
+{
+ InteractionHandlerDataList dataList;
+ getInteractionHandlerList(dataList);
+
+ InteractionHandlerDataList::const_iterator aEnd(dataList.end());
+ for (InteractionHandlerDataList::const_iterator aIt(dataList.begin());
+ aIt != aEnd;
+ ++aIt)
+ {
+ uno::Reference< uno::XInterface > xIfc;
- if( xApprove.is() && xDisapprove.is() )
+ try
+ {
+ xIfc = m_xServiceFactory->createInstance(aIt->ServiceName);
+ }
+ catch ( uno::RuntimeException const & )
+ {
+ throw;
+ }
+ catch ( uno::Exception const & )
{
- handleErrorRequest( star::task::InteractionClassification_QUERY,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
}
- return true;
- }
- star::document::BrokenPackageRequest aBrokenPackageRequest;
- if (aAnyRequest >>= aBrokenPackageRequest)
- {
- std::vector< rtl::OUString > aArguments;
+ uno::Reference< lang::XInitialization >
+ xInitialization( xIfc, uno::UNO_QUERY );
- if( aBrokenPackageRequest.aName.getLength() )
- aArguments.push_back( aBrokenPackageRequest.aName );
+ OSL_ENSURE( xInitialization.is(),
+ "Custom Interactionhandler does not "
+ "implement mandatory interface XInitialization!" );
+ if (xInitialization.is())
+ {
+ uno::Sequence< uno::Any > propertyValues(1);
+ beans::PropertyValue aProperty;
- handleBrokenPackageRequest( aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
+ aProperty.Name = rtl::OUString::createFromAscii( "Parent" );
+ aProperty.Value <<= getParentXWindow();
+ propertyValues[ 0 ] <<= aProperty;
+
+ xInitialization->initialize(propertyValues);
+ }
+
+ uno::Reference< task::XInteractionHandler2 >
+ xIH( xIfc, uno::UNO_QUERY );
+
+ OSL_ENSURE( xIH.is(),
+ "Custom Interactionhandler does not "
+ "implement mandatory interface XInteractionHandler2!" );
+ if (xIH.is() && xIH->handleInteractionRequest(rRequest))
+ return true;
}
+ return false;
+}
- star::ucb::InteractiveIOException aIoException;
- if (aAnyRequest >>= aIoException)
+bool
+UUIInteractionHelper::handleRequest_impl(
+ uno::Reference< task::XInteractionRequest > const & rRequest,
+ bool bObtainErrorStringOnly,
+ bool & bHasErrorString,
+ rtl::OUString & rErrorString)
+ SAL_THROW((uno::RuntimeException))
+{
+ try
{
- star::uno::Sequence< star::uno::Any > aRequestArguments;
- star::ucb::InteractiveAugmentedIOException aAugmentedIoException;
- if (aAnyRequest >>= aAugmentedIoException)
- aRequestArguments = aAugmentedIoException.Arguments;
-
- ErrCode nErrorCode;
- std::vector< rtl::OUString > aArguments;
- static ErrCode const
- aErrorCode[star::ucb::IOErrorCode_WRONG_VERSION + 1][2]
- = { { ERRCODE_IO_ABORT, ERRCODE_UUI_IO_ABORT }, // ABORT
- { ERRCODE_IO_ACCESSDENIED, ERRCODE_UUI_IO_ACCESSDENIED },
- // ACCESS_DENIED
- { ERRCODE_IO_ALREADYEXISTS,
- ERRCODE_UUI_IO_ALREADYEXISTS }, // ALREADY_EXISTING
- { ERRCODE_IO_BADCRC, ERRCODE_UUI_IO_BADCRC }, // BAD_CRC
- { ERRCODE_IO_CANTCREATE, ERRCODE_UUI_IO_CANTCREATE },
- // CANT_CREATE
- { ERRCODE_IO_CANTREAD, ERRCODE_UUI_IO_CANTREAD },
- // CANT_READ
- { ERRCODE_IO_CANTSEEK, ERRCODE_UUI_IO_CANTSEEK },
- // CANT_SEEK
- { ERRCODE_IO_CANTTELL, ERRCODE_UUI_IO_CANTTELL },
- // CANT_TELL
- { ERRCODE_IO_CANTWRITE, ERRCODE_UUI_IO_CANTWRITE },
- // CANT_WRITE
- { ERRCODE_IO_CURRENTDIR, ERRCODE_UUI_IO_CURRENTDIR },
- // CURRENT_DIRECTORY
- { ERRCODE_IO_DEVICENOTREADY, ERRCODE_UUI_IO_NOTREADY },
- // DEVICE_NOT_READY
- { ERRCODE_IO_NOTSAMEDEVICE,
- ERRCODE_UUI_IO_NOTSAMEDEVICE }, // DIFFERENT_DEVICES
- { ERRCODE_IO_GENERAL, ERRCODE_UUI_IO_GENERAL }, // GENERAL
- { ERRCODE_IO_INVALIDACCESS,
- ERRCODE_UUI_IO_INVALIDACCESS }, // INVALID_ACCESS
- { ERRCODE_IO_INVALIDCHAR, ERRCODE_UUI_IO_INVALIDCHAR },
- // INVALID_CHARACTER
- { ERRCODE_IO_INVALIDDEVICE,
- ERRCODE_UUI_IO_INVALIDDEVICE }, // INVALID_DEVICE
- { ERRCODE_IO_INVALIDLENGTH,
- ERRCODE_UUI_IO_INVALIDLENGTH }, // INVALID_LENGTH
- { ERRCODE_IO_INVALIDPARAMETER,
- ERRCODE_UUI_IO_INVALIDPARAMETER }, // INVALID_PARAMETER
- { ERRCODE_IO_ISWILDCARD, ERRCODE_UUI_IO_ISWILDCARD },
- // IS_WILDCARD
- { ERRCODE_IO_LOCKVIOLATION,
- ERRCODE_UUI_IO_LOCKVIOLATION }, // LOCKING_VIOLATION
- { ERRCODE_IO_MISPLACEDCHAR,
- ERRCODE_UUI_IO_MISPLACEDCHAR }, // MISPLACED_CHARACTER
- { ERRCODE_IO_NAMETOOLONG, ERRCODE_UUI_IO_NAMETOOLONG },
- // NAME_TOO_LONG
- { ERRCODE_IO_NOTEXISTS, ERRCODE_UUI_IO_NOTEXISTS },
- // NOT_EXISTING
- { ERRCODE_IO_NOTEXISTSPATH,
- ERRCODE_UUI_IO_NOTEXISTSPATH }, // NOT_EXISTING_PATH
- { ERRCODE_IO_NOTSUPPORTED, ERRCODE_UUI_IO_NOTSUPPORTED },
- // NOT_SUPPORTED
- { ERRCODE_IO_NOTADIRECTORY,
- ERRCODE_UUI_IO_NOTADIRECTORY }, // NO_DIRECTORY
- { ERRCODE_IO_NOTAFILE, ERRCODE_UUI_IO_NOTAFILE },
- // NO_FILE
- { ERRCODE_IO_OUTOFSPACE, ERRCODE_UUI_IO_OUTOFSPACE },
- // OUT_OF_DISK_SPACE
- { ERRCODE_IO_TOOMANYOPENFILES,
- ERRCODE_UUI_IO_TOOMANYOPENFILES },
- // OUT_OF_FILE_HANDLES
- { ERRCODE_IO_OUTOFMEMORY, ERRCODE_UUI_IO_OUTOFMEMORY },
- // OUT_OF_MEMORY
- { ERRCODE_IO_PENDING, ERRCODE_UUI_IO_PENDING }, // PENDING
- { ERRCODE_IO_RECURSIVE, ERRCODE_UUI_IO_RECURSIVE },
- // RECURSIVE
- { ERRCODE_IO_UNKNOWN, ERRCODE_UUI_IO_UNKNOWN }, // UNKNOWN
- { ERRCODE_IO_WRITEPROTECTED,
- ERRCODE_UUI_IO_WRITEPROTECTED }, // WRITE_PROTECTED
- { ERRCODE_IO_WRONGFORMAT, ERRCODE_UUI_IO_WRONGFORMAT },
- // WRONG_FORMAT
- { ERRCODE_IO_WRONGVERSION,
- ERRCODE_UUI_IO_WRONGVERSION } }; // WRONG_VERSION
- switch (aIoException.Code)
+ if (!rRequest.is())
+ return false;
+
+ uno::Any aAnyRequest(rRequest->getRequest());
+
+ script::ModuleSizeExceededRequest aModSizeException;
+ if (aAnyRequest >>= aModSizeException )
{
- case star::ucb::IOErrorCode_CANT_CREATE:
+ ErrCode nErrorCode = ERRCODE_UUI_IO_MODULESIZEEXCEEDED;
+ std::vector< rtl::OUString > aArguments;
+ uno::Sequence< rtl::OUString > sModules
+ = aModSizeException.Names;
+ if ( sModules.getLength() )
{
- rtl::OUString aArgFolder;
- if (getStringRequestArgument(
- aRequestArguments,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "Folder")),
- &aArgFolder))
+ rtl::OUString aName;
+ for ( sal_Int32 index=0; index< sModules.getLength(); ++index )
{
- rtl::OUString aArgUri;
- if (getResourceNameRequestArgument(aRequestArguments,
- &aArgUri))
- {
- nErrorCode = ERRCODE_UUI_IO_CANTCREATE;
- aArguments.reserve(2);
- aArguments.push_back(aArgUri);
- aArguments.push_back(aArgFolder);
- }
+ if ( index )
+ aName = aName + rtl::OUString( ',' ) + sModules[index];
else
- {
- nErrorCode = ERRCODE_UUI_IO_CANTCREATE_NONAME;
- aArguments.push_back(aArgFolder);
- }
+ aName = sModules[index]; // 1st name
}
- else
- nErrorCode = aErrorCode[aIoException.Code][0];
- break;
+ aArguments.push_back( aName );
}
+ handleErrorHandlerRequest( task::InteractionClassification_WARNING,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
+ }
+
+ ucb::NameClashException aNCException;
+ if (aAnyRequest >>= aNCException)
+ {
+ ErrCode nErrorCode = ERRCODE_UUI_IO_TARGETALREADYEXISTS;
+ std::vector< rtl::OUString > aArguments;
- case star::ucb::IOErrorCode_DEVICE_NOT_READY:
+ if( aNCException.Name.getLength() )
{
- rtl::OUString aArgUri;
- if (getResourceNameRequestArgument(aRequestArguments,
- &aArgUri))
- {
- rtl::OUString aResourceType;
- getStringRequestArgument(
- aRequestArguments,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ResourceType")),
- &aResourceType);
- bool bRemovable = false;
- getBoolRequestArgument(aRequestArguments,
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Removable")),
- &bRemovable);
- nErrorCode
- = aResourceType.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM("volume"))
- ? (bRemovable
- ? ERRCODE_UUI_IO_NOTREADY_VOLUME_REMOVABLE
- : ERRCODE_UUI_IO_NOTREADY_VOLUME)
- : (bRemovable
- ? ERRCODE_UUI_IO_NOTREADY_REMOVABLE
- : ERRCODE_UUI_IO_NOTREADY);
- aArguments.push_back(aArgUri);
- }
- else
- nErrorCode = aErrorCode[aIoException.Code][0];
- break;
+ nErrorCode = ERRCODE_UUI_IO_ALREADYEXISTS;
+ aArguments.push_back( aNCException.Name );
}
- case star::ucb::IOErrorCode_DIFFERENT_DEVICES:
- {
- rtl::OUString aArgVolume;
- rtl::OUString aArgOtherVolume;
- if (getStringRequestArgument(
- aRequestArguments,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "Volume")),
- &aArgVolume)
- && getStringRequestArgument(
- aRequestArguments,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "OtherVolume")),
- &aArgOtherVolume))
- {
- nErrorCode = aErrorCode[aIoException.Code][1];
- aArguments.reserve(2);
- aArguments.push_back(aArgVolume);
- aArguments.push_back(aArgOtherVolume);
- }
- else
- nErrorCode = aErrorCode[aIoException.Code][0];
- break;
+ handleErrorHandlerRequest( aNCException.Classification,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
}
- case star::ucb::IOErrorCode_NOT_EXISTING:
- {
- rtl::OUString aArgUri;
- if (getResourceNameRequestArgument(aRequestArguments,
- &aArgUri))
- {
- rtl::OUString aResourceType;
- getStringRequestArgument(
- aRequestArguments,
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ResourceType")),
- &aResourceType);
- nErrorCode
- = aResourceType.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM("volume"))
- ? ERRCODE_UUI_IO_NOTEXISTS_VOLUME
- : (aResourceType.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM("folder"))
- ? ERRCODE_UUI_IO_NOTEXISTS_FOLDER
- : ERRCODE_UUI_IO_NOTEXISTS);
- aArguments.push_back(aArgUri);
- }
- else
- nErrorCode = aErrorCode[aIoException.Code][0];
- break;
- }
+ ucb::UnsupportedNameClashException aUORequest;
+ if (aAnyRequest >>= aUORequest)
+ {
+ ErrCode nErrorCode = ERRCODE_UUI_IO_UNSUPPORTEDOVERWRITE;
+ std::vector< rtl::OUString > aArguments;
- default:
+ uno::Reference< task::XInteractionApprove > xApprove;
+ uno::Reference< task::XInteractionDisapprove > xDisapprove;
+ getContinuations(
+ rRequest->getContinuations(), &xApprove, &xDisapprove);
+
+ if ( xApprove.is() && xDisapprove.is() )
{
- rtl::OUString aArgUri;
- if (getResourceNameRequestArgument(aRequestArguments,
- &aArgUri))
- {
- nErrorCode = aErrorCode[aIoException.Code][1];
- aArguments.push_back(aArgUri);
- }
- else
- nErrorCode = aErrorCode[aIoException.Code][0];
- break;
+ handleErrorHandlerRequest( task::InteractionClassification_QUERY,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
}
+ return true;
}
- handleErrorRequest(aIoException.Classification,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
-
- star::ucb::InteractiveAppException aAppException;
- if (aAnyRequest >>= aAppException)
- {
- std::vector< rtl::OUString > aArguments;
- handleErrorRequest( aAppException.Classification,
- aAppException.Code,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ if ( handleInteractiveIOException( rRequest,
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString ) )
+ return true;
- star::ucb::InteractiveNetworkException aNetworkException;
- if (aAnyRequest >>= aNetworkException)
- {
- ErrCode nErrorCode;
- std::vector< rtl::OUString > aArguments;
- star::ucb::InteractiveNetworkOffLineException aOffLineException;
- star::ucb::InteractiveNetworkResolveNameException
- aResolveNameException;
- star::ucb::InteractiveNetworkConnectException aConnectException;
- star::ucb::InteractiveNetworkReadException aReadException;
- star::ucb::InteractiveNetworkWriteException aWriteException;
- if (aAnyRequest >>= aOffLineException)
- nErrorCode = ERRCODE_INET_OFFLINE;
- else if (aAnyRequest >>= aResolveNameException)
- {
- nErrorCode = ERRCODE_INET_NAME_RESOLVE;
- aArguments.push_back(aResolveNameException.Server);
- }
- else if (aAnyRequest >>= aConnectException)
- {
- nErrorCode = ERRCODE_INET_CONNECT;
- aArguments.push_back(aConnectException.Server);
- }
- else if (aAnyRequest >>= aReadException)
- {
- nErrorCode = ERRCODE_INET_READ;
- aArguments.push_back(aReadException.Diagnostic);
+ ucb::InteractiveAppException aAppException;
+ if (aAnyRequest >>= aAppException)
+ {
+ std::vector< rtl::OUString > aArguments;
+ handleErrorHandlerRequest( aAppException.Classification,
+ aAppException.Code,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
}
- else if (aAnyRequest >>= aWriteException)
+
+ ucb::InteractiveNetworkException aNetworkException;
+ if (aAnyRequest >>= aNetworkException)
{
- nErrorCode = ERRCODE_INET_WRITE;
- aArguments.push_back(aWriteException.Diagnostic);
+ ErrCode nErrorCode;
+ std::vector< rtl::OUString > aArguments;
+ ucb::InteractiveNetworkOffLineException aOffLineException;
+ ucb::InteractiveNetworkResolveNameException aResolveNameException;
+ ucb::InteractiveNetworkConnectException aConnectException;
+ ucb::InteractiveNetworkReadException aReadException;
+ ucb::InteractiveNetworkWriteException aWriteException;
+ if (aAnyRequest >>= aOffLineException)
+ nErrorCode = ERRCODE_INET_OFFLINE;
+ else if (aAnyRequest >>= aResolveNameException)
+ {
+ nErrorCode = ERRCODE_INET_NAME_RESOLVE;
+ aArguments.push_back(aResolveNameException.Server);
+ }
+ else if (aAnyRequest >>= aConnectException)
+ {
+ nErrorCode = ERRCODE_INET_CONNECT;
+ aArguments.push_back(aConnectException.Server);
+ }
+ else if (aAnyRequest >>= aReadException)
+ {
+ nErrorCode = ERRCODE_INET_READ;
+ aArguments.push_back(aReadException.Diagnostic);
+ }
+ else if (aAnyRequest >>= aWriteException)
+ {
+ nErrorCode = ERRCODE_INET_WRITE;
+ aArguments.push_back(aWriteException.Diagnostic);
+ }
+ else
+ nErrorCode = ERRCODE_INET_GENERAL;
+
+ handleErrorHandlerRequest(aNetworkException.Classification,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
}
- else
- nErrorCode = ERRCODE_INET_GENERAL;
-
- handleErrorRequest(aNetworkException.Classification,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
- star::ucb::InteractiveCHAOSException aChaosException;
- if (aAnyRequest >>= aChaosException)
- {
- std::vector< rtl::OUString > aArguments;
- sal_Int32 nCount
- = std::min< sal_Int32 >(aChaosException.Arguments.getLength(),
- 2);
- aArguments.
- reserve(
- static_cast< std::vector< rtl::OUString >::size_type >(
+ ucb::InteractiveCHAOSException aChaosException;
+ if (aAnyRequest >>= aChaosException)
+ {
+ std::vector< rtl::OUString > aArguments;
+ sal_Int32 nCount
+ = std::min< sal_Int32 >(aChaosException.Arguments.getLength(),
+ 2);
+ aArguments.
+ reserve(static_cast< std::vector< rtl::OUString >::size_type >(
nCount));
- for (sal_Int32 i = 0; i < nCount; ++i)
- aArguments.push_back(aChaosException.Arguments[i]);
- handleErrorRequest(aChaosException.Classification,
- aChaosException.ID,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ for (sal_Int32 i = 0; i < nCount; ++i)
+ aArguments.push_back(aChaosException.Arguments[i]);
+ handleErrorHandlerRequest(aChaosException.Classification,
+ aChaosException.ID,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
+ }
- star::ucb::InteractiveWrongMediumException aWrongMediumException;
- if (aAnyRequest >>= aWrongMediumException)
- {
- sal_Int32 nMedium = 0;
- aWrongMediumException.Medium >>= nMedium;
- std::vector< rtl::OUString > aArguments;
- aArguments.push_back(UniString::CreateFromInt32(nMedium + 1));
- handleErrorRequest(aWrongMediumException.Classification,
- ERRCODE_UUI_WRONGMEDIUM,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ ucb::InteractiveWrongMediumException aWrongMediumException;
+ if (aAnyRequest >>= aWrongMediumException)
+ {
+ sal_Int32 nMedium = 0;
+ aWrongMediumException.Medium >>= nMedium;
+ std::vector< rtl::OUString > aArguments;
+ aArguments.push_back(UniString::CreateFromInt32(nMedium + 1));
+ handleErrorHandlerRequest(aWrongMediumException.Classification,
+ ERRCODE_UUI_WRONGMEDIUM,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
+ }
- star::java::WrongJavaVersionException aWrongJavaVersionException;
- if (aAnyRequest >>= aWrongJavaVersionException)
- {
- ErrCode nErrorCode;
- std::vector< rtl::OUString > aArguments;
- if (aWrongJavaVersionException.DetectedVersion.getLength() == 0)
- if (aWrongJavaVersionException.LowestSupportedVersion.
- getLength()
- == 0)
- nErrorCode = ERRCODE_UUI_WRONGJAVA;
+ java::WrongJavaVersionException aWrongJavaVersionException;
+ if (aAnyRequest >>= aWrongJavaVersionException)
+ {
+ ErrCode nErrorCode;
+ std::vector< rtl::OUString > aArguments;
+ if (aWrongJavaVersionException.DetectedVersion.getLength() == 0)
+ if (aWrongJavaVersionException.LowestSupportedVersion.
+ getLength()
+ == 0)
+ nErrorCode = ERRCODE_UUI_WRONGJAVA;
+ else
+ {
+ nErrorCode = ERRCODE_UUI_WRONGJAVA_MIN;
+ aArguments.push_back(aWrongJavaVersionException.
+ LowestSupportedVersion);
+ }
+ else if (aWrongJavaVersionException.LowestSupportedVersion.
+ getLength()
+ == 0)
+ {
+ nErrorCode = ERRCODE_UUI_WRONGJAVA_VERSION;
+ aArguments.push_back(aWrongJavaVersionException.
+ DetectedVersion);
+ }
else
{
- nErrorCode = ERRCODE_UUI_WRONGJAVA_MIN;
+ nErrorCode = ERRCODE_UUI_WRONGJAVA_VERSION_MIN;
+ aArguments.reserve(2);
+ aArguments.push_back(aWrongJavaVersionException.
+ DetectedVersion);
aArguments.push_back(aWrongJavaVersionException.
LowestSupportedVersion);
}
- else if (aWrongJavaVersionException.LowestSupportedVersion.
- getLength()
- == 0)
- {
- nErrorCode = ERRCODE_UUI_WRONGJAVA_VERSION;
- aArguments.push_back(aWrongJavaVersionException.
- DetectedVersion);
+ handleErrorHandlerRequest(task::InteractionClassification_ERROR,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
}
- else
+
+ sync2::BadPartnershipException aBadPartnershipException;
+ if (aAnyRequest >>= aBadPartnershipException)
{
- nErrorCode = ERRCODE_UUI_WRONGJAVA_VERSION_MIN;
- aArguments.reserve(2);
- aArguments.push_back(aWrongJavaVersionException.
- DetectedVersion);
- aArguments.push_back(aWrongJavaVersionException.
- LowestSupportedVersion);
+ ErrCode nErrorCode;
+ std::vector< rtl::OUString > aArguments;
+ if (aBadPartnershipException.Partnership.getLength() == 0)
+ nErrorCode = ERRCODE_UUI_BADPARTNERSHIP;
+ else
+ {
+ nErrorCode = ERRCODE_UUI_BADPARTNERSHIP_NAME;
+ aArguments.push_back(aBadPartnershipException.Partnership);
+ }
+ handleErrorHandlerRequest(task::InteractionClassification_ERROR,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
}
- handleErrorRequest(star::task::InteractionClassification_ERROR,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
- star::sync2::BadPartnershipException aBadPartnershipException;
- if (aAnyRequest >>= aBadPartnershipException)
- {
- ErrCode nErrorCode;
- std::vector< rtl::OUString > aArguments;
- if (aBadPartnershipException.Partnership.getLength() == 0)
- nErrorCode = ERRCODE_UUI_BADPARTNERSHIP;
- else
+ configuration::backend::MergeRecoveryRequest aMergeRecoveryRequest;
+ if (aAnyRequest >>= aMergeRecoveryRequest)
{
- nErrorCode = ERRCODE_UUI_BADPARTNERSHIP_NAME;
- aArguments.push_back(aBadPartnershipException.Partnership);
- }
- handleErrorRequest(star::task::InteractionClassification_ERROR,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ ErrCode nErrorCode = aMergeRecoveryRequest.IsRemovalRequest
+ ? ERRCODE_UUI_CONFIGURATION_BROKENDATA_WITHREMOVE
+ : ERRCODE_UUI_CONFIGURATION_BROKENDATA_NOREMOVE;
- star::configuration::backend::MergeRecoveryRequest aMergeRecoveryRequest;
- if (aAnyRequest >>= aMergeRecoveryRequest)
- {
- ErrCode nErrorCode = aMergeRecoveryRequest.IsRemovalRequest
- ? ERRCODE_UUI_CONFIGURATION_BROKENDATA_WITHREMOVE
- : ERRCODE_UUI_CONFIGURATION_BROKENDATA_NOREMOVE;
-
- std::vector< rtl::OUString > aArguments;
- aArguments.push_back(aMergeRecoveryRequest.ErrorLayerId);
-
- handleErrorRequest(star::task::InteractionClassification_ERROR,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ std::vector< rtl::OUString > aArguments;
+ aArguments.push_back(aMergeRecoveryRequest.ErrorLayerId);
- star::configuration::backend::StratumCreationException
- aStratumCreationException;
+ handleErrorHandlerRequest(task::InteractionClassification_ERROR,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
+ }
- if (aAnyRequest >>= aStratumCreationException)
- {
- const ErrCode nErrorCode = ERRCODE_UUI_CONFIGURATION_BACKENDMISSING;
-
- rtl::OUString aStratum = aStratumCreationException.StratumData;
- if (aStratum.getLength() == 0)
- aStratum = aStratumCreationException.StratumService;
-
- std::vector< rtl::OUString > aArguments;
- aArguments.push_back(aStratum);
-
- handleErrorRequest(star::task::InteractionClassification_ERROR,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ configuration::backend::StratumCreationException
+ aStratumCreationException;
- star::xforms::InvalidDataOnSubmitException aInvalidDataOnSubmitException;
- if (aAnyRequest >>= aInvalidDataOnSubmitException)
- {
- const ErrCode nErrorCode = ERRCODE_UUI_INVALID_XFORMS_SUBMISSION_DATA;
+ if (aAnyRequest >>= aStratumCreationException)
+ {
+ const ErrCode nErrorCode = ERRCODE_UUI_CONFIGURATION_BACKENDMISSING;
- std::vector< rtl::OUString > aArguments;
+ rtl::OUString aStratum = aStratumCreationException.StratumData;
+ if (aStratum.getLength() == 0)
+ aStratum = aStratumCreationException.StratumService;
- handleErrorRequest(star::task::InteractionClassification_QUERY,
- nErrorCode,
- aArguments,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ std::vector< rtl::OUString > aArguments;
+ aArguments.push_back(aStratum);
- return false;
-}
+ handleErrorHandlerRequest(task::InteractionClassification_ERROR,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
+ }
-bool UUIInteractionHelper::handleDialogRequests(
- star::uno::Reference< star::task::XInteractionRequest > const & rRequest)
-{
- star::uno::Any aAnyRequest(rRequest->getRequest());
+ xforms::InvalidDataOnSubmitException aInvalidDataOnSubmitException;
+ if (aAnyRequest >>= aInvalidDataOnSubmitException)
+ {
+ const ErrCode nErrorCode =
+ ERRCODE_UUI_INVALID_XFORMS_SUBMISSION_DATA;
- star::ucb::URLAuthenticationRequest aURLAuthenticationRequest;
- if (aAnyRequest >>= aURLAuthenticationRequest)
- {
- handleAuthenticationRequest(aURLAuthenticationRequest,
- rRequest->getContinuations(),
- aURLAuthenticationRequest.URL);
- return true;
- }
+ std::vector< rtl::OUString > aArguments;
- star::ucb::AuthenticationRequest aAuthenticationRequest;
- if (aAnyRequest >>= aAuthenticationRequest)
- {
- handleAuthenticationRequest(aAuthenticationRequest,
- rRequest->getContinuations(),
- rtl::OUString());
- return true;
- }
+ handleErrorHandlerRequest(task::InteractionClassification_QUERY,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
+ }
- star::ucb::CertificateValidationRequest aCertificateValidationRequest;
- if (aAnyRequest >>= aCertificateValidationRequest)
- {
- handleCertificateValidationRequest(aCertificateValidationRequest,
- rRequest->getContinuations());
- return true;
- }
+ ucb::InteractiveLockingLockedException aLLException;
+ if (aAnyRequest >>= aLLException)
+ {
+ ErrCode nErrorCode = aLLException.SelfOwned
+ ? ERRCODE_UUI_LOCKING_LOCKED_SELF : ERRCODE_UUI_LOCKING_LOCKED;
+ std::vector< rtl::OUString > aArguments;
+ aArguments.push_back( aLLException.Url );
-// @@@ Todo #i29340#: activate!
-// star::ucb::NameClashResolveRequest aNameClashResolveRequest;
-// if (aAnyRequest >>= aNameClashResolveRequest)
-// {
-// handleNameClashResolveRequest(aNameClashResolveRequest,
-// rRequest->getContinuations());
-// return;
-// }
-
- star::task::MasterPasswordRequest aMasterPasswordRequest;
- if (aAnyRequest >>= aMasterPasswordRequest)
- {
- handleMasterPasswordRequest(aMasterPasswordRequest.Mode,
- rRequest->getContinuations());
- return true;
- }
+ handleErrorHandlerRequest( aLLException.Classification,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString );
+ return true;
+ }
- star::task::DocumentPasswordRequest aDocumentPasswordRequest;
- if (aAnyRequest >>= aDocumentPasswordRequest)
- {
- handlePasswordRequest(aDocumentPasswordRequest.Mode,
- rRequest->getContinuations(),
- aDocumentPasswordRequest.Name);
- return true;
- }
+ ucb::InteractiveLockingNotLockedException aLNLException;
+ if (aAnyRequest >>= aLNLException)
+ {
+ ErrCode nErrorCode = ERRCODE_UUI_LOCKING_NOT_LOCKED;
+ std::vector< rtl::OUString > aArguments;
+ aArguments.push_back( aLNLException.Url );
- star::task::DocumentMSPasswordRequest aDocumentMSPasswordRequest;
- if (aAnyRequest >>= aDocumentMSPasswordRequest)
- {
- handleMSPasswordRequest(aDocumentMSPasswordRequest.Mode,
- rRequest->getContinuations(),
- aDocumentMSPasswordRequest.Name);
- return true;
- }
+ handleErrorHandlerRequest( aLNLException.Classification,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString );
+ return true;
+ }
- star::task::PasswordRequest aPasswordRequest;
- if (aAnyRequest >>= aPasswordRequest)
- {
- handlePasswordRequest(aPasswordRequest.Mode,
- rRequest->getContinuations());
- return true;
- }
+ ucb::InteractiveLockingLockExpiredException aLLEException;
+ if (aAnyRequest >>= aLLEException)
+ {
+ ErrCode nErrorCode = ERRCODE_UUI_LOCKING_LOCK_EXPIRED;
+ std::vector< rtl::OUString > aArguments;
+ aArguments.push_back( aLLEException.Url );
- star::ucb::HandleCookiesRequest aCookiesRequest;
- if (aAnyRequest >>= aCookiesRequest)
- {
- handleCookiesRequest(aCookiesRequest,
- rRequest->getContinuations());
- return true;
- }
+ handleErrorHandlerRequest( aLLEException.Classification,
+ nErrorCode,
+ aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString );
+ return true;
+ }
- star::document::NoSuchFilterRequest aNoSuchFilterRequest;
- if (aAnyRequest >>= aNoSuchFilterRequest)
- {
- handleNoSuchFilterRequest(aNoSuchFilterRequest,
- rRequest->getContinuations());
- return true;
- }
+ document::BrokenPackageRequest aBrokenPackageRequest;
+ if (aAnyRequest >>= aBrokenPackageRequest)
+ {
+ std::vector< rtl::OUString > aArguments;
- star::document::AmbigousFilterRequest aAmbigousFilterRequest;
- if (aAnyRequest >>= aAmbigousFilterRequest)
- {
- handleAmbigousFilterRequest(aAmbigousFilterRequest,
- rRequest->getContinuations());
- return true;
- }
+ if( aBrokenPackageRequest.aName.getLength() )
+ aArguments.push_back( aBrokenPackageRequest.aName );
- star::document::FilterOptionsRequest aFilterOptionsRequest;
- if (aAnyRequest >>= aFilterOptionsRequest)
- {
- handleFilterOptionsRequest(aFilterOptionsRequest,
- rRequest->getContinuations());
- return true;
- }
+ handleBrokenPackageRequest( aArguments,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString );
+ return true;
+ }
- star::document::LockedDocumentRequest aLockedDocumentRequest;
- if (aAnyRequest >>= aLockedDocumentRequest )
- {
- handleLockedDocumentRequest( aLockedDocumentRequest.DocumentURL,
- aLockedDocumentRequest.UserInfo,
- rRequest->getContinuations(),
- UUI_DOC_LOAD_LOCK );
- return true;
- }
+ task::ErrorCodeRequest aErrorCodeRequest;
+ if (aAnyRequest >>= aErrorCodeRequest)
+ {
+ handleGenericErrorRequest( aErrorCodeRequest.ErrCode,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
+ }
- star::document::OwnLockOnDocumentRequest aOwnLockOnDocumentRequest;
- if (aAnyRequest >>= aOwnLockOnDocumentRequest )
- {
- handleLockedDocumentRequest( aOwnLockOnDocumentRequest.DocumentURL,
- aOwnLockOnDocumentRequest.TimeInfo,
- rRequest->getContinuations(),
- aOwnLockOnDocumentRequest.IsStoring ? UUI_DOC_OWN_SAVE_LOCK : UUI_DOC_OWN_LOAD_LOCK );
- return true;
- }
+ task::ErrorCodeIOException aErrorCodeIOException;
+ if (aAnyRequest >>= aErrorCodeIOException)
+ {
+ handleGenericErrorRequest( aErrorCodeIOException.ErrCode,
+ rRequest->getContinuations(),
+ bObtainErrorStringOnly,
+ bHasErrorString,
+ rErrorString);
+ return true;
+ }
- star::document::LockedOnSavingRequest aLockedOnSavingRequest;
- if (aAnyRequest >>= aLockedOnSavingRequest )
- {
- handleLockedDocumentRequest( aLockedOnSavingRequest.DocumentURL,
- aLockedOnSavingRequest.UserInfo,
- rRequest->getContinuations(),
- UUI_DOC_SAVE_LOCK );
- return true;
- }
- star::document::ChangedByOthersRequest aChangedByOthersRequest;
- if (aAnyRequest >>= aChangedByOthersRequest )
- {
- handleChangedByOthersRequest( rRequest->getContinuations() );
- return true;
- }
+ ///////////////////////////////////////////////////////////////////
+ // Handle requests which do not have a plain string representation.
+ ///////////////////////////////////////////////////////////////////
+ if (!bObtainErrorStringOnly)
+ {
+ if ( handleAuthenticationRequest( rRequest ) )
+ return true;
- star::document::LockFileIgnoreRequest aLockFileIgnoreRequest;
- if (aAnyRequest >>= aLockFileIgnoreRequest )
- {
- handleLockFileIgnoreRequest( rRequest->getContinuations() );
- return true;
- }
+ if ( handleCertificateValidationRequest( rRequest ) )
+ return true;
- return false;
-}
+// @@@ Todo #i29340#: activate!
+// ucb::NameClashResolveRequest aNameClashResolveRequest;
+// if (aAnyRequest >>= aNameClashResolveRequest)
+// {
+// handleNameClashResolveRequest(aNameClashResolveRequest,
+// rRequest->getContinuations());
+// return true;
+// }
+
+ if ( handleMasterPasswordRequest( rRequest ) )
+ return true;
-bool UUIInteractionHelper::handleErrorHandlerRequests(
- star::uno::Reference< star::task::XInteractionRequest > const & rRequest,
- bool bObtainErrorStringOnly,
- bool & bHasErrorString,
- rtl::OUString & rErrorString)
-{
- star::uno::Any aAnyRequest(rRequest->getRequest());
+ if ( handlePasswordRequest( rRequest ) )
+ return true;
- star::task::ErrorCodeRequest aErrorCodeRequest;
- if (aAnyRequest >>= aErrorCodeRequest)
- {
- handleGenericErrorRequest( aErrorCodeRequest.ErrCode,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ if ( handleCookiesRequest( rRequest ) )
+ return true;
- star::task::DocumentMacroConfirmationRequest aMacroConfirmRequest;
- if (aAnyRequest >>= aMacroConfirmRequest)
- {
- handleMacroConfirmRequest(
- aMacroConfirmRequest.DocumentURL,
- aMacroConfirmRequest.DocumentStorage,
- ODFVER_012_TEXT,
- aMacroConfirmRequest.DocumentSignatureInformation,
- rRequest->getContinuations()
- );
- return true;
- }
+ if ( handleNoSuchFilterRequest( rRequest ) )
+ return true;
- star::task::DocumentMacroConfirmationRequest2 aMacroConfirmRequest2;
- if (aAnyRequest >>= aMacroConfirmRequest2)
- {
- handleMacroConfirmRequest(
- aMacroConfirmRequest2.DocumentURL,
- aMacroConfirmRequest2.DocumentZipStorage,
- aMacroConfirmRequest2.DocumentVersion,
- aMacroConfirmRequest2.DocumentSignatureInformation,
- rRequest->getContinuations()
- );
- return true;
- }
+ if ( handleAmbigousFilterRequest( rRequest ) )
+ return true;
- FutureDocumentVersionProductUpdateRequest aProductUpdateRequest;
- if (aAnyRequest >>= aProductUpdateRequest)
- {
- handleFutureDocumentVersionUpdateRequest(
- aProductUpdateRequest,
- rRequest->getContinuations()
- );
- return true;
- }
+ if ( handleFilterOptionsRequest( rRequest ) )
+ return true;
- star::task::ErrorCodeIOException aErrorCodeIOException;
- if (aAnyRequest >>= aErrorCodeIOException)
- {
- handleGenericErrorRequest( aErrorCodeIOException.ErrCode,
- rRequest->getContinuations(),
- bObtainErrorStringOnly,
- bHasErrorString,
- rErrorString);
- return true;
- }
+ if ( handleLockedDocumentRequest( rRequest ) )
+ return true;
- return false;
-}
+ if ( handleChangedByOthersRequest( rRequest ) )
+ return true;
-bool
-UUIInteractionHelper::handle_impl(
- star::uno::Reference< star::task::XInteractionRequest > const & rRequest)
- throw (star::uno::RuntimeException)
-{
- try
- {
- if (!rRequest.is())
- return false;
+ if ( handleLockFileIgnoreRequest( rRequest ) )
+ return true;
- ////////////////////////////////////////////////////////////
- // Display Messagebox
- ////////////////////////////////////////////////////////////
- bool bDummy = false;
- rtl::OUString aDummy;
- if (! handleMessageboxRequests(rRequest, false, bDummy, aDummy))
- {
- ////////////////////////////////////////////////////////////
- // Use ErrorHandler::HandleError
- ////////////////////////////////////////////////////////////
- if (!handleErrorHandlerRequests(rRequest, false, bDummy, aDummy))
+ task::DocumentMacroConfirmationRequest aMacroConfirmRequest;
+ if (aAnyRequest >>= aMacroConfirmRequest)
{
- ////////////////////////////////////////////////////////////
- // Display Special Dialog
- ////////////////////////////////////////////////////////////
- if (!handleDialogRequests(rRequest))
- {
- ////////////////////////////////////////////////////////////
- // Use customized InteractionHandler from configuration
- ////////////////////////////////////////////////////////////
- InteractionHandlerDataList dataList;
+ handleMacroConfirmRequest(
+ aMacroConfirmRequest.DocumentURL,
+ aMacroConfirmRequest.DocumentStorage,
+ ODFVER_012_TEXT,
+ aMacroConfirmRequest.DocumentSignatureInformation,
+ rRequest->getContinuations());
+ return true;
+ }
- GetInteractionHandlerList(dataList);
+ task::DocumentMacroConfirmationRequest2 aMacroConfirmRequest2;
+ if (aAnyRequest >>= aMacroConfirmRequest2)
+ {
+ handleMacroConfirmRequest(
+ aMacroConfirmRequest2.DocumentURL,
+ aMacroConfirmRequest2.DocumentZipStorage,
+ aMacroConfirmRequest2.DocumentVersion,
+ aMacroConfirmRequest2.DocumentSignatureInformation,
+ rRequest->getContinuations());
+ return true;
+ }
- InteractionHandlerDataList::const_iterator aEnd(dataList.end());
- for (InteractionHandlerDataList::const_iterator aIt(dataList.begin());
- aIt != aEnd; ++aIt)
- {
- Reference< uno::XInterface > xIfc =
- m_xServiceFactory->createInstance(aIt->ServiceName);
-
-
- Reference< com::sun::star::lang::XInitialization > xInitialization =
- Reference< com::sun::star::lang::XInitialization >( xIfc, UNO_QUERY );
-
- OSL_ENSURE( xInitialization.is(), "Custom Interactionhandler does not implement mandatory interface XInitialization!" );
- if (xInitialization.is())
- {
- uno::Sequence< uno::Any > propertyValues(1);
- beans::PropertyValue aProperty;
-
- aProperty.Name = rtl::OUString::createFromAscii( "Parent" );
- aProperty.Value <<= getParentXWindow();
- propertyValues[ 0 ] <<= aProperty;
-
- xInitialization->initialize(propertyValues);
- }
-
- Reference< task::XInteractionHandler2 >
- xInteractionHandler( xIfc, UNO_QUERY );
-
- OSL_ENSURE( xInteractionHandler.is(),
- "Custom Interactionhandler does not implement "
- "mandatory interface XInteractionHandler2!" );
- if (xInteractionHandler.is())
- if (xInteractionHandler->handleInteractionRequest(rRequest))
- return true;
- }
- return false;
- }
+ task::FutureDocumentVersionProductUpdateRequest
+ aProductUpdateRequest;
+ if (aAnyRequest >>= aProductUpdateRequest)
+ {
+ handleFutureDocumentVersionUpdateRequest(
+ aProductUpdateRequest,
+ rRequest->getContinuations());
+ return true;
}
+
+ ///////////////////////////////////////////////////////////////
+ // Last chance: try to find and use another IH for the request.
+ ///////////////////////////////////////////////////////////////
+ if (tryOtherInteractionHandler( rRequest ))
+ return true;
}
+
+ // Not handled.
+ return false;
}
catch (std::bad_alloc const &)
{
- throw star::uno::RuntimeException(
+ throw uno::RuntimeException(
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
+ uno::Reference< uno::XInterface >());
}
- return true;
}
-void UUIInteractionHelper::GetInteractionHandlerList(InteractionHandlerDataList &rdataList)
+void
+UUIInteractionHelper::getInteractionHandlerList(
+ InteractionHandlerDataList &rdataList)
+ SAL_THROW((uno::RuntimeException))
{
+ try
+ {
uno::Reference< lang::XMultiServiceFactory > xConfigProv(
- m_xServiceFactory->createInstance(
- rtl::OUString::createFromAscii(
- "com.sun.star.configuration.ConfigurationProvider" ) ),
- uno::UNO_QUERY );
+ m_xServiceFactory->createInstance(
+ rtl::OUString::createFromAscii(
+ "com.sun.star.configuration.ConfigurationProvider" ) ),
+ uno::UNO_QUERY );
if ( !xConfigProv.is() )
- {
- OSL_ENSURE( false,
- "GetInteractionHandlerList - No config provider!" );
- return;
- }
+ throw uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "unable to instanciate config provider service")),
+ uno::Reference< uno::XInterface >());
rtl::OUStringBuffer aFullPath;
- aFullPath.appendAscii( CONFIG_INTERACTIONHANDLERS_KEY );
+ aFullPath.appendAscii(
+ "/org.openoffice.ucb.InteractionHandler/InteractionHandlers" );
uno::Sequence< uno::Any > aArguments( 1 );
beans::PropertyValue aProperty;
@@ -1444,21 +906,20 @@ void UUIInteractionHelper::GetInteractionHandlerList(InteractionHandlerDataList
aArguments ) );
if ( !xInterface.is() )
- {
- OSL_ENSURE( false,
- "GetInteractionHandlerList - No config access!" );
- return;
- }
+ throw uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "unable to instanciate config access")),
+ uno::Reference< uno::XInterface >());
uno::Reference< container::XNameAccess > xNameAccess(
- xInterface, uno::UNO_QUERY );
-
+ xInterface, uno::UNO_QUERY );
if ( !xNameAccess.is() )
- {
- OSL_ENSURE( false,
- "GetInteractionHandlerList - No XNameAccess!" );
- return;
- }
+ throw uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "config access does not implement XNameAccess")),
+ uno::Reference< uno::XInterface >());
uno::Sequence< rtl::OUString > aElems = xNameAccess->getElementNames();
const rtl::OUString* pElems = aElems.getConstArray();
@@ -1470,12 +931,11 @@ void UUIInteractionHelper::GetInteractionHandlerList(InteractionHandlerDataList
xHierNameAccess( xInterface, uno::UNO_QUERY );
if ( !xHierNameAccess.is() )
- {
- OSL_ENSURE( false,
- "GetInteractionHandlerList - "
- "No XHierarchicalNameAccess!" );
- return;
- }
+ throw uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "config access does not implement XHierarchicalNameAccess")),
+ uno::Reference< uno::XInterface >());
// Iterate over children.
for ( sal_Int32 n = 0; n < nCount; ++n )
@@ -1517,28 +977,41 @@ void UUIInteractionHelper::GetInteractionHandlerList(InteractionHandlerDataList
}
}
}
+ }
+ catch ( uno::RuntimeException const & )
+ {
+ throw;
+ }
+ catch ( uno::Exception const & )
+ {
+ OSL_ENSURE( false, "GetInteractionHandlerList - Caught Exception!" );
+ }
}
-Window * UUIInteractionHelper::getParentProperty() SAL_THROW(())
+Window *
+UUIInteractionHelper::getParentProperty()
+ SAL_THROW(())
{
- star::uno::Reference< star::awt::XWindow > xWindow = getParentXWindow();
+ uno::Reference< awt::XWindow > xWindow = getParentXWindow();
if ( xWindow.is() )
return VCLUnoHelper::GetWindow(xWindow);
return 0;
}
-star::uno::Reference< ::com::sun::star::awt::XWindow> UUIInteractionHelper::getParentXWindow() SAL_THROW(())
+uno::Reference< awt::XWindow>
+UUIInteractionHelper::getParentXWindow()
+ SAL_THROW(())
{
osl::MutexGuard aGuard(m_aPropertyMutex);
for (sal_Int32 i = 0; i < m_aProperties.getLength(); ++i)
{
- star::beans::PropertyValue aProperty;
+ beans::PropertyValue aProperty;
if ((m_aProperties[i] >>= aProperty)
&& aProperty.
Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Parent")))
{
- star::uno::Reference< star::awt::XWindow > xWindow;
+ uno::Reference< awt::XWindow > xWindow;
aProperty.Value >>= xWindow;
return xWindow;
}
@@ -1546,12 +1019,14 @@ star::uno::Reference< ::com::sun::star::awt::XWindow> UUIInteractionHelper::get
return 0;
}
-rtl::OUString UUIInteractionHelper::getContextProperty() SAL_THROW(())
+rtl::OUString
+UUIInteractionHelper::getContextProperty()
+ SAL_THROW(())
{
osl::MutexGuard aGuard(m_aPropertyMutex);
for (sal_Int32 i = 0; i < m_aProperties.getLength(); ++i)
{
- star::beans::PropertyValue aProperty;
+ beans::PropertyValue aProperty;
if ((m_aProperties[i] >>= aProperty)
&& aProperty.
Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Context")))
@@ -1564,582 +1039,45 @@ rtl::OUString UUIInteractionHelper::getContextProperty() SAL_THROW(())
return rtl::OUString();
}
-bool
-UUIInteractionHelper::initPasswordContainer(
- star::uno::Reference< star::task::XPasswordContainer > * pContainer,
- star::uno::Reference< star::task::XUrlContainer > * pUrlContainer)
- const SAL_THROW(())
-{
- OSL_ENSURE(pContainer, "specification violation");
- if (!pContainer->is() && m_xServiceFactory.is())
- try
- {
- *pContainer
- = star::uno::Reference< star::task::XPasswordContainer >(
- m_xServiceFactory->
- createInstance(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.task.PasswordContainer"))),
- star::uno::UNO_QUERY);
-
- if ( pContainer->is() )
- {
- *pUrlContainer = star::uno::Reference< star::task::XUrlContainer >( *pContainer, UNO_QUERY );
- OSL_ENSURE( pUrlContainer->is(), "Got no XUrlContainer!" );
- }
- }
- catch (star::uno::Exception const &)
- {}
- OSL_ENSURE(pContainer->is(), "unexpected situation");
- return pContainer->is() && pUrlContainer->is();
-}
-
-
-String GetContentPart( const String& _rRawString )
-{
- // search over some parts to find a string
- //static char* aIDs[] = { "CN", "OU", "O", "E", NULL };
- static char const * aIDs[] = { "CN=", "OU=", "O=", "E=", NULL };// By CP
- String sPart;
- int i = 0;
- while ( aIDs[i] )
- {
- String sPartId = String::CreateFromAscii( aIDs[i++] );
- xub_StrLen nContStart = _rRawString.Search( sPartId );
- if ( nContStart != STRING_NOTFOUND )
- {
- nContStart = nContStart + sPartId.Len();
- //++nContStart; // now it's start of content, directly after Id // delete By CP
- xub_StrLen nContEnd = _rRawString.Search( sal_Unicode( ',' ), nContStart );
- sPart = String( _rRawString, nContStart, nContEnd - nContStart );
- break;
- }
- }
-
- return sPart;
-}
-
-
-sal_Bool UUIInteractionHelper::executeUnknownAuthDialog( const cssu::Reference< dcss::security::XCertificate >& rXCert)
- SAL_THROW((star::uno::RuntimeException))
+uno::Reference< task::XInteractionHandler >
+UUIInteractionHelper::getInteractionHandler()
+ SAL_THROW((uno::RuntimeException))
{
+ uno::Reference< task::XInteractionHandler > xIH;
try
{
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- std::auto_ptr< ResMgr >
- xManager(ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- std::auto_ptr< UnknownAuthDialog >
- xDialog(new UnknownAuthDialog( getParentProperty(),
- rXCert,
- m_xServiceFactory,
- xManager.get()));
-
- // Get correct ressource string
- rtl::OUString aMessage;
-
- std::vector< rtl::OUString > aArguments;
- aArguments.push_back( GetContentPart( rXCert.get()->getSubjectName()) );
- //aArguments.push_back( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")) );
-
- if (xManager.get())
- {
- ResId aResId(RID_UUI_ERRHDL, *xManager.get());
- if (ErrorResource(aResId).getString(ERRCODE_UUI_UNKNOWNAUTH_UNTRUSTED, &aMessage))
- {
- aMessage = replaceMessageWithArguments( aMessage, aArguments );
- xDialog->setDescriptionText( aMessage );
- }
- }
-
- return static_cast<sal_Bool> (xDialog->Execute());
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
- }
-}
-
-rtl::OUString
-UUIInteractionHelper::getLocalizedDatTimeStr( ::com::sun::star::util::DateTime aDateTime )
-{
-
-
- rtl::OUString aDateTimeStr;
- Date aDate;
- Time aTime;
-
- aDate = Date( aDateTime.Day, aDateTime.Month, aDateTime.Year );
- aTime = Time( aDateTime.Hours, aDateTime.Minutes, aDateTime.Seconds );
-
- LanguageType eUILang = Application::GetSettings().GetUILanguage();
- SvNumberFormatter *pNumberFormatter = new SvNumberFormatter( ::comphelper::getProcessServiceFactory(), eUILang );
- String aTmpStr;
- Color* pColor = NULL;
- Date* pNullDate = pNumberFormatter->GetNullDate();
- sal_uInt32 nFormat = pNumberFormatter->GetStandardFormat( NUMBERFORMAT_DATE, eUILang );
-
- pNumberFormatter->GetOutputString( aDate - *pNullDate, nFormat, aTmpStr, &pColor );
- aDateTimeStr = aTmpStr + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" "));
-
- nFormat = pNumberFormatter->GetStandardFormat( NUMBERFORMAT_TIME, eUILang );
- pNumberFormatter->GetOutputString( aTime.GetTimeInDays(), nFormat, aTmpStr, &pColor );
- aDateTimeStr += aTmpStr;
-
- return aDateTimeStr;
-}
-
-sal_Bool UUIInteractionHelper::executeSSLWarnDialog( const cssu::Reference< dcss::security::XCertificate >& rXCert,
- sal_Int32 const & failure,
- const rtl::OUString & hostName )
- SAL_THROW((star::uno::RuntimeException))
-{
- try
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- std::auto_ptr< ResMgr >
- xManager(ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- std::auto_ptr< SSLWarnDialog >
- xDialog(new SSLWarnDialog( getParentProperty(),
- rXCert,
- m_xServiceFactory,
- xManager.get()));
-
- // Get correct ressource string
- rtl::OUString aMessage_1;
- std::vector< rtl::OUString > aArguments_1;
-
- switch( failure )
- {
- case SSLWARN_TYPE_DOMAINMISMATCH:
- aArguments_1.push_back( hostName );
- aArguments_1.push_back( GetContentPart( rXCert.get()->getSubjectName()) );
- aArguments_1.push_back( hostName );
- break;
- case SSLWARN_TYPE_EXPIRED:
- aArguments_1.push_back( GetContentPart( rXCert.get()->getSubjectName()) );
- aArguments_1.push_back( getLocalizedDatTimeStr( rXCert.get()->getNotValidAfter() ) );
- aArguments_1.push_back( getLocalizedDatTimeStr( rXCert.get()->getNotValidAfter() ) );
- break;
- case SSLWARN_TYPE_INVALID:
- break;
- }
-
-
-
- //aArguments.push_back( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")) );
-
- if (xManager.get())
- {
- ResId aResId(RID_UUI_ERRHDL, *xManager.get());
- if (ErrorResource(aResId).getString( ERRCODE_AREA_UUI_UNKNOWNAUTH + failure + DESCRIPTION_1, &aMessage_1))
- {
- aMessage_1 = replaceMessageWithArguments( aMessage_1, aArguments_1 );
- xDialog->setDescription1Text( aMessage_1 );
- }
-
- rtl::OUString aTitle;
- ErrorResource(aResId).getString( ERRCODE_AREA_UUI_UNKNOWNAUTH + failure + TITLE, &aTitle);
- xDialog->SetText( aTitle );
- }
-
-
-
- return static_cast<sal_Bool> (xDialog->Execute());
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
- }
-}
-
-void UUIInteractionHelper::executeLoginDialog(LoginErrorInfo & rInfo,
- rtl::OUString const & rRealm)
- SAL_THROW((star::uno::RuntimeException))
-{
- try
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- bool bAccount = (rInfo.GetFlags() & LOGINERROR_FLAG_MODIFY_ACCOUNT)
- != 0;
- bool bSavePassword = rInfo.GetIsPersistentPassword()
- || rInfo.GetIsSavePassword();
- bool bCanUseSysCreds = rInfo.GetCanUseSystemCredentials();
-
- sal_uInt16 nFlags = 0;
- if (rInfo.GetPath().Len() == 0)
- nFlags |= LF_NO_PATH;
- if (rInfo.GetErrorText().Len() == 0)
- nFlags |= LF_NO_ERRORTEXT;
- if (!bAccount)
- nFlags |= LF_NO_ACCOUNT;
- if (!(rInfo.GetFlags() & LOGINERROR_FLAG_MODIFY_USER_NAME))
- nFlags |= LF_USERNAME_READONLY;
-
- if (!bSavePassword)
- nFlags |= LF_NO_SAVEPASSWORD;
-
- if (!bCanUseSysCreds)
- nFlags |= LF_NO_USESYSCREDS;
-
- std::auto_ptr< ResMgr >
- xManager(ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- UniString aRealm(rRealm); // Forte compiler needs it spelled out...
- std::auto_ptr< LoginDialog >
- xDialog(new LoginDialog(getParentProperty(),
- nFlags,
- rInfo.GetServer(),
- &aRealm,
- xManager.get()));
- if (rInfo.GetErrorText().Len() != 0)
- xDialog->SetErrorText(rInfo.GetErrorText());
- xDialog->SetName(rInfo.GetUserName());
- if (bAccount)
- xDialog->ClearAccount();
- else
- xDialog->ClearPassword();
- xDialog->SetPassword(rInfo.GetPassword());
-
- if (bSavePassword)
- {
- xDialog->
- SetSavePasswordText(ResId(rInfo.GetIsPersistentPassword() ?
- RID_SAVE_PASSWORD :
- RID_KEEP_PASSWORD,
- *xManager.get()));
- xDialog->SetSavePassword(rInfo.GetIsSavePassword());
- }
-
- if ( bCanUseSysCreds )
- xDialog->SetUseSystemCredentials( rInfo.GetIsUseSystemCredentials() );
-
- rInfo.SetResult(xDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK :
- ERRCODE_BUTTON_CANCEL);
- rInfo.SetUserName(xDialog->GetName());
- rInfo.SetPassword(xDialog->GetPassword());
- rInfo.SetAccount(xDialog->GetAccount());
- rInfo.SetSavePassword(xDialog->IsSavePassword());
-
- if ( bCanUseSysCreds )
- rInfo.SetIsUseSystemCredentials( xDialog->IsUseSystemCredentials() );
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
- }
-}
-
-void
-UUIInteractionHelper::executeMasterPasswordDialog(
- LoginErrorInfo & rInfo,
- star::task::PasswordRequestMode nMode)
- SAL_THROW((star::uno::RuntimeException))
-{
- rtl::OString aMaster;
- try
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- std::auto_ptr< ResMgr >
- xManager(ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- if( nMode == star::task::PasswordRequestMode_PASSWORD_CREATE )
- {
- std::auto_ptr< MasterPasswordCreateDialog >
- xDialog(new MasterPasswordCreateDialog(
- getParentProperty(), xManager.get()));
- rInfo.SetResult(xDialog->Execute()
- == RET_OK ? ERRCODE_BUTTON_OK
- : ERRCODE_BUTTON_CANCEL);
- aMaster = rtl::OUStringToOString(xDialog->GetMasterPassword(),
- RTL_TEXTENCODING_UTF8);
- }
- else
- {
- std::auto_ptr< MasterPasswordDialog >
- xDialog(new MasterPasswordDialog(
- getParentProperty(), nMode, xManager.get()));
- rInfo.SetResult(xDialog->Execute()
- == RET_OK ? ERRCODE_BUTTON_OK
- : ERRCODE_BUTTON_CANCEL);
- aMaster = rtl::OUStringToOString(xDialog->GetMasterPassword(),
- RTL_TEXTENCODING_UTF8);
- }
-
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
- }
-
- sal_uInt8 aKey[RTL_DIGEST_LENGTH_MD5];
- rtl_digest_PBKDF2(aKey,
- RTL_DIGEST_LENGTH_MD5,
- reinterpret_cast< sal_uInt8 const * >(aMaster.getStr()),
- aMaster.getLength(),
- reinterpret_cast< sal_uInt8 const * >(
- "3B5509ABA6BC42D9A3A1F3DAD49E56A51"),
- 32,
- 1000);
-
- rtl::OUStringBuffer aBuffer;
- for (int i = 0; i < RTL_DIGEST_LENGTH_MD5; ++i)
- {
- aBuffer.append(static_cast< sal_Unicode >('a' + (aKey[i] >> 4)));
- aBuffer.append(static_cast< sal_Unicode >('a' + (aKey[i] & 15)));
- }
- rInfo.SetPassword(aBuffer.makeStringAndClear());
-}
-
-void
-UUIInteractionHelper::executePasswordDialog(
- LoginErrorInfo & rInfo,
- star::task::PasswordRequestMode nMode,
- ::rtl::OUString aDocName)
- SAL_THROW((star::uno::RuntimeException))
-{
- try
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- std::auto_ptr< ResMgr >
- xManager(ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- if( nMode == star::task::PasswordRequestMode_PASSWORD_CREATE )
- {
- std::auto_ptr< PasswordCreateDialog >
- xDialog(new PasswordCreateDialog(
- getParentProperty(), xManager.get()));
-
- rInfo.SetResult(xDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK :
- ERRCODE_BUTTON_CANCEL);
- rInfo.SetPassword( xDialog->GetPassword() );
- }
- else
- {
- std::auto_ptr< PasswordDialog >
- xDialog(new PasswordDialog(
- getParentProperty(), nMode, xManager.get(), aDocName ));
-
- rInfo.SetResult(xDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK :
- ERRCODE_BUTTON_CANCEL);
- rInfo.SetPassword( xDialog->GetPassword() );
- }
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface>());
- }
-}
-
-void
-UUIInteractionHelper::executeMSPasswordDialog(
- LoginErrorInfo & rInfo,
- star::task::PasswordRequestMode nMode,
- ::rtl::OUString aDocName)
- SAL_THROW((star::uno::RuntimeException))
-{
- try
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- std::auto_ptr< ResMgr >
- xManager(ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- if( nMode == star::task::PasswordRequestMode_PASSWORD_CREATE )
- {
- std::auto_ptr< PasswordCreateDialog >
- xDialog(new PasswordCreateDialog(
- getParentProperty(), xManager.get(), true));
-
- rInfo.SetResult(xDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK :
- ERRCODE_BUTTON_CANCEL);
- rInfo.SetPassword( xDialog->GetPassword() );
- }
- else
- {
- std::auto_ptr< PasswordDialog >
- xDialog(new PasswordDialog(
- getParentProperty(), nMode, xManager.get(), aDocName ));
-
- rInfo.SetResult(xDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK :
- ERRCODE_BUTTON_CANCEL);
- rInfo.SetPassword( xDialog->GetPassword() );
- }
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface>());
- }
-}
-
-void
-UUIInteractionHelper::executeCookieDialog(CntHTTPCookieRequest & rRequest)
- SAL_THROW((star::uno::RuntimeException))
-{
- try
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- std::auto_ptr< ResMgr >
- xManager(ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- std::auto_ptr< CookiesDialog >
- xDialog(new CookiesDialog(
- getParentProperty(), &rRequest, xManager.get()));
- xDialog->Execute();
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface>());
+ xIH.set(m_xServiceFactory->createInstanceWithArguments(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.task.InteractionHandler")),
+ m_aProperties),
+ uno::UNO_QUERY);
}
-}
-
-void UUIInteractionHelper::executeFilterDialog(
- rtl::OUString const & rURL ,
- uui::FilterNameList const & rFilters,
- rtl::OUString & rFilter )
- SAL_THROW((star::uno::RuntimeException))
-{
- try
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- std::auto_ptr< ResMgr >
- xManager(ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
-
- std::auto_ptr< uui::FilterDialog >
- xDialog(new uui::FilterDialog(getParentProperty(),
- xManager.get()));
-
- xDialog->SetURL(rURL);
- xDialog->ChangeFilters(&rFilters);
+ catch (uno::Exception const &)
+ {}
- uui::FilterNameListPtr pSelected = rFilters.end();
- if( xDialog->AskForFilter( pSelected ) )
- {
- rFilter = pSelected->sInternal;
- }
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
- }
+ if (!xIH.is())
+ throw uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "unable to instanciate Interaction Handler service")),
+ uno::Reference< uno::XInterface >());
+ return xIH;
}
-USHORT
-UUIInteractionHelper::executeErrorDialog(
- star::task::InteractionClassification eClassification,
- rtl::OUString const & rContext,
- rtl::OUString const & rMessage,
- WinBits nButtonMask)
- SAL_THROW((star::uno::RuntimeException))
-{
-
- vos::OGuard aGuard(Application::GetSolarMutex());
-
- rtl::OUStringBuffer aText(rContext);
- if (rContext.getLength() != 0 && rMessage.getLength() != 0)
- aText.appendAscii(RTL_CONSTASCII_STRINGPARAM(":\n"));
- //TODO! must be internationalized
- aText.append(rMessage);
-
- std::auto_ptr< MessBox > xBox;
- try
- {
- switch (eClassification)
- {
- case star::task::InteractionClassification_ERROR:
- xBox.reset(new ErrorBox(getParentProperty(),
- nButtonMask,
- aText.makeStringAndClear()));
- break;
-
- case star::task::InteractionClassification_WARNING:
- xBox.reset(new WarningBox(getParentProperty(),
- nButtonMask,
- aText.makeStringAndClear()));
- break;
-
- case star::task::InteractionClassification_INFO:
- if ((nButtonMask & 0x01F00000) == WB_DEF_OK)
- //TODO! missing win bit button mask define (want to ignore
- // any default button settings)...
- xBox.reset(new InfoBox(getParentProperty(),
- aText.makeStringAndClear()));
- else
- xBox.reset(new ErrorBox(getParentProperty(),
- nButtonMask,
- aText.makeStringAndClear()));
- break;
-
- case star::task::InteractionClassification_QUERY:
- xBox.reset(new QueryBox(getParentProperty(),
- nButtonMask,
- aText.makeStringAndClear()));
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
- }
-
- USHORT aResult = xBox->Execute();
- switch( aResult )
- {
- case BUTTONID_OK:
- aResult = ERRCODE_BUTTON_OK;
- break;
- case BUTTONID_CANCEL:
- aResult = ERRCODE_BUTTON_CANCEL;
- break;
- case BUTTONID_YES:
- aResult = ERRCODE_BUTTON_YES;
- break;
- case BUTTONID_NO:
- aResult = ERRCODE_BUTTON_NO;
- break;
- case BUTTONID_RETRY:
- aResult = ERRCODE_BUTTON_RETRY;
- break;
- }
-
- return aResult;
-}
+namespace {
USHORT
-UUIInteractionHelper::executeMessageBox(
+executeMessageBox(
+ Window * pParent,
rtl::OUString const & rTitle,
rtl::OUString const & rMessage,
WinBits nButtonMask )
- SAL_THROW((star::uno::RuntimeException))
+ SAL_THROW((uno::RuntimeException))
{
-
vos::OGuard aGuard(Application::GetSolarMutex());
- MessBox xBox( getParentProperty(), nButtonMask, rTitle, rMessage );
+ MessBox xBox( pParent, nButtonMask, rTitle, rMessage );
USHORT aResult = xBox.Execute();
switch( aResult )
@@ -2163,479 +1101,12 @@ UUIInteractionHelper::executeMessageBox(
return aResult;
}
-star::uno::Reference< star::task::XInteractionHandler >
-UUIInteractionHelper::getInteractionHandler() const
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionHandler > xIH;
- try
- {
- xIH = star::uno::Reference< star::task::XInteractionHandler >(
- m_xServiceFactory->createInstanceWithArguments(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.task.InteractionHandler")),
- m_aProperties),
- star::uno::UNO_QUERY);
- }
- catch (star::uno::Exception const &)
- {}
-
- if (!xIH.is())
- throw star::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unable to instanciate Interaction Handler service")),
- star::uno::Reference< star::uno::XInterface >());
- return xIH;
-}
-
-namespace
-{
-bool fillContinuation(
- bool bUseSystemCredentials,
- const star::ucb::AuthenticationRequest & rRequest,
- const star::task::UrlRecord & aRec,
- const star::uno::Reference< star::ucb::XInteractionSupplyAuthentication > &
- xSupplyAuthentication,
- const star::uno::Reference< star::ucb::XInteractionSupplyAuthentication2 > &
- xSupplyAuthentication2,
- bool bCanUseSystemCredentials,
- bool bCheckForEqualPasswords )
-{
- if ( bUseSystemCredentials )
- {
- // "use system creds" record found.
- // Wants client that we use it?
- if ( xSupplyAuthentication2.is() &&
- bCanUseSystemCredentials )
- {
- xSupplyAuthentication2->setUseSystemCredentials( sal_True );
- return true;
- }
- return false;
- }
- else if (aRec.UserList.getLength() != 0)
- {
- if (aRec.UserList[0].Passwords.getLength() == 0)
- {
- // Password sequence can be empty, for instance if master
- // password was not given (e.g. master pw dialog canceled)
- // pw container does not throw NoMasterException in this case.
- // bug???
- return false;
- }
-
- // "user/pass" record found.
- if (!bCheckForEqualPasswords || !rRequest.HasPassword
- || rRequest.Password != aRec.UserList[0].Passwords[0]) // failed login attempt?
- {
- if (xSupplyAuthentication->canSetUserName())
- xSupplyAuthentication->
- setUserName(aRec.UserList[0].UserName.getStr());
-
- if (xSupplyAuthentication->canSetPassword())
- xSupplyAuthentication->
- setPassword(aRec.UserList[0].Passwords[0].getStr());
- if (aRec.UserList[0].Passwords.getLength() > 1)
- {
- if (rRequest.HasRealm)
- {
- if (xSupplyAuthentication->canSetRealm())
- xSupplyAuthentication->
- setRealm(aRec.UserList[0].Passwords[1].
- getStr());
- }
- else if (xSupplyAuthentication->canSetAccount())
- xSupplyAuthentication->
- setAccount(aRec.UserList[0].Passwords[1].
- getStr());
- }
-
- if ( xSupplyAuthentication2.is() &&
- bCanUseSystemCredentials )
- xSupplyAuthentication2->setUseSystemCredentials( sal_False );
-
- return true;
- }
- }
- return false;
-}
-
-}
-
-void
-UUIInteractionHelper::handleAuthenticationRequest(
- star::ucb::AuthenticationRequest const & rRequest,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations,
- const rtl::OUString & rURL)
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionHandler > xIH;
-
- star::uno::Reference< star::task::XInteractionRetry > xRetry;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- star::uno::Reference< star::ucb::XInteractionSupplyAuthentication >
- xSupplyAuthentication;
- star::uno::Reference< star::ucb::XInteractionSupplyAuthentication2 >
- xSupplyAuthentication2;
- getContinuations(
- rContinuations,
- 0, 0, &xRetry, &xAbort,
- &xSupplyAuthentication, &xSupplyAuthentication2, 0, 0, 0 );
- bool bRemember;
- bool bRememberPersistent;
- if (xSupplyAuthentication.is())
- {
- star::ucb::RememberAuthentication eDefault;
- star::uno::Sequence< star::ucb::RememberAuthentication >
- aModes(xSupplyAuthentication->getRememberPasswordModes(eDefault));
- bRemember = eDefault != star::ucb::RememberAuthentication_NO;
- bRememberPersistent = false;
- for (sal_Int32 i = 0; i < aModes.getLength(); ++i)
- if (aModes[i] == star::ucb::RememberAuthentication_PERSISTENT)
- {
- bRememberPersistent = true;
- break;
- }
- }
- else
- {
- bRemember = false;
- bRememberPersistent = false;
- }
-
- sal_Bool bCanUseSystemCredentials;
- sal_Bool bDefaultUseSystemCredentials;
- if (xSupplyAuthentication2.is())
- {
- bCanUseSystemCredentials
- = xSupplyAuthentication2->canUseSystemCredentials(
- bDefaultUseSystemCredentials );
- }
- else
- {
- bCanUseSystemCredentials = sal_False;
- bDefaultUseSystemCredentials = sal_False;
- }
-
- com::sun::star::uno::Reference< com::sun::star::task::XPasswordContainer >
- xContainer;
- com::sun::star::uno::Reference< com::sun::star::task::XUrlContainer >
- xUrlContainer;
-
- if ( bCanUseSystemCredentials && initPasswordContainer( &xContainer, &xUrlContainer ) )
- {
- // Runtime / Persistent info avail for current auth request?
-
- rtl::OUString aResult = xUrlContainer->findUrl(
- rURL.getLength() ? rURL : rRequest.ServerName );
- if ( aResult.getLength() > 0 )
- {
- if ( fillContinuation( true,
- rRequest,
- star::task::UrlRecord(),
- xSupplyAuthentication,
- xSupplyAuthentication2,
- bCanUseSystemCredentials,
- false ) )
- {
- xSupplyAuthentication->select();
- return;
- }
- }
- }
-
- // xContainer works with userName passwdSequences pairs:
- if (rRequest.HasUserName
- && rRequest.HasPassword
- && initPasswordContainer(&xContainer, &xUrlContainer))
- {
- xIH = getInteractionHandler();
- try
- {
- if (rRequest.UserName.getLength() == 0)
- {
- star::task::UrlRecord aRec;
- if ( rURL.getLength() )
- aRec = xContainer->find(rURL, xIH);
-
- if ( aRec.UserList.getLength() == 0 )
- {
- // compat: try server name.
- aRec = xContainer->find(rRequest.ServerName, xIH);
- }
-
- if ( fillContinuation( false,
- rRequest,
- aRec,
- xSupplyAuthentication,
- xSupplyAuthentication2,
- bCanUseSystemCredentials,
- false ) )
- {
- xSupplyAuthentication->select();
- return;
- }
- }
- else
- {
- star::task::UrlRecord aRec;
- if ( rURL.getLength() )
- aRec = xContainer->findForName(
- rURL, rRequest.UserName, xIH);
-
- if ( aRec.UserList.getLength() == 0 )
- {
- // compat: try server name.
- aRec = xContainer->findForName(
- rRequest.ServerName, rRequest.UserName, xIH);
- }
-
- if ( fillContinuation( false,
- rRequest,
- aRec,
- xSupplyAuthentication,
- xSupplyAuthentication2,
- bCanUseSystemCredentials,
- true ) )
- {
- xSupplyAuthentication->select();
- return;
- }
- }
- }
- catch (star::task::NoMasterException const &)
- {} // user did not enter master password
- }
-
- LoginErrorInfo aInfo;
- aInfo.SetTitle(rRequest.ServerName);
- aInfo.SetServer(rRequest.ServerName);
- if (rRequest.HasAccount)
- aInfo.SetAccount(rRequest.Account);
- if (rRequest.HasUserName)
- aInfo.SetUserName(rRequest.UserName);
- if (rRequest.HasPassword)
- aInfo.SetPassword(rRequest.Password);
- aInfo.SetErrorText(rRequest.Diagnostic);
- aInfo.SetPersistentPassword(bRememberPersistent);
- aInfo.SetSavePassword(bRemember);
- aInfo.SetCanUseSystemCredentials( bCanUseSystemCredentials );
- aInfo.SetIsUseSystemCredentials( bDefaultUseSystemCredentials );
- aInfo.SetModifyAccount(rRequest.HasAccount
- && xSupplyAuthentication.is()
- && xSupplyAuthentication->canSetAccount());
- aInfo.SetModifyUserName(rRequest.HasUserName
- && xSupplyAuthentication.is()
- && xSupplyAuthentication->canSetUserName());
- executeLoginDialog(aInfo,
- rRequest.HasRealm ? rRequest.Realm : rtl::OUString());
- switch (aInfo.GetResult())
- {
- case ERRCODE_BUTTON_OK:
- if (xSupplyAuthentication.is())
- {
- if (xSupplyAuthentication->canSetUserName())
- xSupplyAuthentication->setUserName(aInfo.GetUserName());
- if (xSupplyAuthentication->canSetPassword())
- xSupplyAuthentication->setPassword(aInfo.GetPassword());
- xSupplyAuthentication->
- setRememberPassword(
- aInfo.GetIsSavePassword() ?
- bRememberPersistent ?
- star::ucb::RememberAuthentication_PERSISTENT :
- star::ucb::RememberAuthentication_SESSION :
- star::ucb::RememberAuthentication_NO);
- if (rRequest.HasRealm)
- {
- if (xSupplyAuthentication->canSetRealm())
- xSupplyAuthentication->setRealm(aInfo.GetAccount());
- }
- else if (xSupplyAuthentication->canSetAccount())
- xSupplyAuthentication->setAccount(aInfo.GetAccount());
-
- if ( xSupplyAuthentication2.is() && bCanUseSystemCredentials )
- xSupplyAuthentication2->setUseSystemCredentials(
- aInfo.GetIsUseSystemCredentials() );
-
- xSupplyAuthentication->select();
- }
-
- if ( aInfo.GetIsUseSystemCredentials() )
- {
- if (aInfo.GetIsSavePassword())
- {
- if ( initPasswordContainer(&xContainer, &xUrlContainer) )
- xUrlContainer->addUrl(
- rURL.getLength() ? rURL : rRequest.ServerName,
- bRememberPersistent );
- }
- }
- else if (aInfo.GetUserName().Len() != 0 // Empty user name can not be valid:
- && initPasswordContainer(&xContainer, &xUrlContainer))
- {
- try
- {
- if (aInfo.GetIsSavePassword())
- {
- star::uno::Sequence< rtl::OUString >
- aPassList(aInfo.GetAccount().Len() == 0 ? 1 : 2);
- aPassList[0] = aInfo.GetPassword();
- if (aInfo.GetAccount().Len() != 0)
- aPassList[1] = aInfo.GetAccount();
-
- if (!xIH.is())
- xIH = getInteractionHandler();
-
- if (bRememberPersistent)
- xContainer->addPersistent(
- rURL.getLength() ? rURL : rRequest.ServerName,
- aInfo.GetUserName(),
- aPassList,
- xIH);
- else
- xContainer->add(
- rURL.getLength() ? rURL : rRequest.ServerName,
- aInfo.GetUserName(),
- aPassList,
- xIH);
- }
- }
- catch (star::task::NoMasterException const &)
- {} // user did not enter master password
- }
- break;
-
- case ERRCODE_BUTTON_RETRY:
- if (xRetry.is())
- xRetry->select();
- break;
-
- default:
- if (xAbort.is())
- xAbort->select();
- break;
- }
-}
-
-sal_Bool
-UUIInteractionHelper::isDomainMatch( rtl::OUString hostName, rtl::OUString certHostName)
-{
- if (hostName.equalsIgnoreAsciiCase( certHostName ))
- return sal_True;
-
-
-
- if ( 0 == certHostName.indexOf( rtl::OUString::createFromAscii( "*" ) ) && hostName.getLength() >= certHostName.getLength() )
- {
- rtl::OUString cmpStr = certHostName.copy( 1 );
-
- if ( hostName.matchIgnoreAsciiCase( cmpStr, hostName.getLength( ) - cmpStr.getLength()) )
- return sal_True;
-
- }
-
- return sal_False;
-}
-
-
-void
-UUIInteractionHelper::handleCertificateValidationRequest(
- star::ucb::CertificateValidationRequest const & rRequest,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations)
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionHandler > xIH = getInteractionHandler();
-
- star::uno::Reference< star::task::XInteractionApprove > xApprove;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
-
- getContinuations(
- rContinuations, &xApprove, 0, 0, &xAbort, 0, 0, 0, 0, 0);
-
- sal_Int32 failures = rRequest.CertificateValidity;
-
- sal_Bool trustCert = sal_True;
-
-
- if ( ((failures & csss::CertificateValidity::UNTRUSTED) == csss::CertificateValidity::UNTRUSTED ) ||
- ((failures & csss::CertificateValidity::ISSUER_UNTRUSTED) == csss::CertificateValidity::ISSUER_UNTRUSTED) ||
- ((failures & csss::CertificateValidity::ROOT_UNTRUSTED) == csss::CertificateValidity::ROOT_UNTRUSTED) )
- {
- if ( executeUnknownAuthDialog( rRequest.Certificate ) )
- trustCert = sal_True;
- else
- trustCert = sal_False;
- }
-
- if ( (!isDomainMatch( rRequest.HostName, GetContentPart( rRequest.Certificate.get()->getSubjectName()) )) &&
- trustCert )
- {
- if ( executeSSLWarnDialog( rRequest.Certificate, SSLWARN_TYPE_DOMAINMISMATCH, rRequest.HostName ) )
- trustCert = sal_True;
- else
- trustCert = sal_False;
- }
-
- if ( (((failures & csss::CertificateValidity::TIME_INVALID) == csss::CertificateValidity::TIME_INVALID) ||
- ((failures & csss::CertificateValidity::NOT_TIME_NESTED) == csss::CertificateValidity::NOT_TIME_NESTED)) &&
- trustCert )
- {
- if ( executeSSLWarnDialog( rRequest.Certificate, SSLWARN_TYPE_EXPIRED, rRequest.HostName ) )
- trustCert = sal_True;
- else
- trustCert = sal_False;
- }
-
- if ( (((failures & csss::CertificateValidity::REVOKED) == csss::CertificateValidity::REVOKED) ||
- ((failures & csss::CertificateValidity::SIGNATURE_INVALID) == csss::CertificateValidity::SIGNATURE_INVALID) ||
- ((failures & csss::CertificateValidity::EXTENSION_INVALID) == csss::CertificateValidity::EXTENSION_INVALID) ||
- ((failures & csss::CertificateValidity::INVALID) == csss::CertificateValidity::INVALID)) &&
- trustCert )
- {
- if ( executeSSLWarnDialog( rRequest.Certificate, SSLWARN_TYPE_INVALID, rRequest.HostName ) )
- trustCert = sal_True;
- else
- trustCert = sal_False;
- }
-
- if ( trustCert )
- {
- if (xApprove.is())
- xApprove->select();
- } else
- {
- if (xAbort.is())
- xAbort->select();
- }
-
- /*
-
- switch (executeMessageBox( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Dialog1")), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Dummy dialog")), WB_YES_NO | WB_DEF_YES ))
- {
- case ERRCODE_BUTTON_YES:
- if (xApprove.is())
- xApprove->select();
- break;
- default:
- if (xAbort.is())
- xAbort->select();
- break;
- }
- */
-}
-
-namespace {
enum NameClashResolveDialogResult { ABORT, RENAME, OVERWRITE };
NameClashResolveDialogResult
executeNameClashResolveDialog(
+ Window * /*pParent*/,
rtl::OUString const & /*rTargetFolderURL*/,
rtl::OUString const & /*rClashingName*/,
rtl::OUString & /*rProposedNewName*/)
@@ -2648,6 +1119,7 @@ executeNameClashResolveDialog(
NameClashResolveDialogResult
executeSimpleNameClashResolveDialog(
+ Window * /*pParent*/,
rtl::OUString const & /*rTargetFolderURL*/,
rtl::OUString const & /*rClashingName*/,
rtl::OUString & /*rProposedNewName*/)
@@ -2662,10 +1134,10 @@ executeSimpleNameClashResolveDialog(
void
UUIInteractionHelper::handleNameClashResolveRequest(
- star::ucb::NameClashResolveRequest const & rRequest,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const & rContinuations)
- SAL_THROW((star::uno::RuntimeException))
+ ucb::NameClashResolveRequest const & rRequest,
+ uno::Sequence< uno::Reference<
+ task::XInteractionContinuation > > const & rContinuations)
+ SAL_THROW((uno::RuntimeException))
{
OSL_ENSURE(
rRequest.TargetFolderURL.getLength() > 0,
@@ -2675,15 +1147,11 @@ UUIInteractionHelper::handleNameClashResolveRequest(
rRequest.ClashingName.getLength() > 0,
"NameClashResolveRequest must not contain empty ClashingName" );
- star::uno::Reference< star::task::XInteractionAbort >
- xAbort;
- star::uno::Reference< star::ucb::XInteractionSupplyName >
- xSupplyName;
- star::uno::Reference< star::ucb::XInteractionReplaceExistingData >
- xReplaceExistingData;
+ uno::Reference< task::XInteractionAbort > xAbort;
+ uno::Reference< ucb::XInteractionSupplyName > xSupplyName;
+ uno::Reference< ucb::XInteractionReplaceExistingData > xReplaceExistingData;
getContinuations(
- rContinuations,
- 0, 0, 0, &xAbort, 0, 0, 0, &xSupplyName, &xReplaceExistingData);
+ rContinuations, &xAbort, &xSupplyName, &xReplaceExistingData);
OSL_ENSURE( xAbort.is(),
"NameClashResolveRequest must contain Abort continuation" );
@@ -2695,14 +1163,16 @@ UUIInteractionHelper::handleNameClashResolveRequest(
rtl::OUString aProposedNewName( rRequest.ProposedNewName );
if ( xReplaceExistingData.is() )
eResult = executeNameClashResolveDialog(
- rRequest.TargetFolderURL,
- rRequest.ClashingName,
- aProposedNewName);
+ getParentProperty(),
+ rRequest.TargetFolderURL,
+ rRequest.ClashingName,
+ aProposedNewName);
else
eResult = executeSimpleNameClashResolveDialog(
- rRequest.TargetFolderURL,
- rRequest.ClashingName,
- aProposedNewName);
+ getParentProperty(),
+ rRequest.TargetFolderURL,
+ rRequest.ClashingName,
+ aProposedNewName);
switch ( eResult )
{
@@ -2731,595 +1201,106 @@ UUIInteractionHelper::handleNameClashResolveRequest(
}
void
-UUIInteractionHelper::handleMasterPasswordRequest(
- star::task::PasswordRequestMode nMode,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations)
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionRetry > xRetry;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- star::uno::Reference< star::ucb::XInteractionSupplyAuthentication >
- xSupplyAuthentication;
- getContinuations(
- rContinuations,
- 0, 0, &xRetry, &xAbort, &xSupplyAuthentication, 0, 0, 0, 0);
- LoginErrorInfo aInfo;
-
- // in case of master password a hash code is returned
- executeMasterPasswordDialog(aInfo, nMode);
-
- switch (aInfo.GetResult())
- {
- case ERRCODE_BUTTON_OK:
- if (xSupplyAuthentication.is())
- {
- if (xSupplyAuthentication->canSetPassword())
- xSupplyAuthentication->setPassword(aInfo.GetPassword());
- xSupplyAuthentication->select();
- }
- break;
-
- case ERRCODE_BUTTON_RETRY:
- if (xRetry.is())
- xRetry->select();
- break;
-
- default:
- if (xAbort.is())
- xAbort->select();
- break;
- }
-}
-
-void
-UUIInteractionHelper::handlePasswordRequest(
- star::task::PasswordRequestMode nMode,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations,
- ::rtl::OUString aDocumentName )
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionRetry > xRetry;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- star::uno::Reference< star::task::XInteractionPassword >
- xPassword;
- getContinuations(
- rContinuations, 0, 0, &xRetry, &xAbort, 0, 0, &xPassword, 0, 0);
- LoginErrorInfo aInfo;
-
- executePasswordDialog(aInfo, nMode, aDocumentName);
-
- switch (aInfo.GetResult())
- {
- case ERRCODE_BUTTON_OK:
- if (xPassword.is())
- {
- xPassword->setPassword(aInfo.GetPassword());
- xPassword->select();
- }
- break;
-
- case ERRCODE_BUTTON_RETRY:
- if (xRetry.is())
- xRetry->select();
- break;
-
- default:
- if (xAbort.is())
- xAbort->select();
- break;
- }
-}
-
-void
-UUIInteractionHelper::handleMSPasswordRequest(
- star::task::PasswordRequestMode nMode,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations,
- ::rtl::OUString aDocumentName )
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionRetry > xRetry;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- star::uno::Reference< star::task::XInteractionPassword >
- xPassword;
- getContinuations(
- rContinuations, 0, 0, &xRetry, &xAbort, 0, 0, &xPassword, 0, 0);
- LoginErrorInfo aInfo;
-
- executeMSPasswordDialog(aInfo, nMode, aDocumentName);
-
- switch (aInfo.GetResult())
- {
- case ERRCODE_BUTTON_OK:
- if (xPassword.is())
- {
- xPassword->setPassword(aInfo.GetPassword());
- xPassword->select();
- }
- break;
-
- case ERRCODE_BUTTON_RETRY:
- if (xRetry.is())
- xRetry->select();
- break;
-
- default:
- if (xAbort.is())
- xAbort->select();
- break;
- }
-}
-
-void
-UUIInteractionHelper::handleCookiesRequest(
- star::ucb::HandleCookiesRequest const & rRequest,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations)
- SAL_THROW((star::uno::RuntimeException))
-{
- CookieList aCookies;
- for (sal_Int32 i = 0; i < rRequest.Cookies.getLength(); ++i)
- {
- try
- {
- std::auto_ptr< CntHTTPCookie > xCookie(new CntHTTPCookie);
- xCookie->m_aName = UniString(rRequest.Cookies[i].Name);
- xCookie->m_aValue = UniString(rRequest.Cookies[i].Value);
- xCookie->m_aDomain = UniString(rRequest.Cookies[i].Domain);
- xCookie->m_aPath = UniString(rRequest.Cookies[i].Path);
- xCookie->m_aExpires
- = DateTime(Date(rRequest.Cookies[i].Expires.Day,
- rRequest.Cookies[i].Expires.Month,
- rRequest.Cookies[i].Expires.Year),
- Time(rRequest.Cookies[i].Expires.Hours,
- rRequest.Cookies[i].Expires.Minutes,
- rRequest.Cookies[i].Expires.Seconds,
- rRequest.Cookies[i].Expires.
- HundredthSeconds));
- xCookie->m_nFlags
- = rRequest.Cookies[i].Secure ? CNTHTTP_COOKIE_FLAG_SECURE : 0;
- switch (rRequest.Cookies[i].Policy)
- {
- case star::ucb::CookiePolicy_CONFIRM:
- xCookie->m_nPolicy = CNTHTTP_COOKIE_POLICY_INTERACTIVE;
- break;
-
- case star::ucb::CookiePolicy_ACCEPT:
- xCookie->m_nPolicy = CNTHTTP_COOKIE_POLICY_ACCEPTED;
- break;
-
- case star::ucb::CookiePolicy_IGNORE:
- xCookie->m_nPolicy = CNTHTTP_COOKIE_POLICY_BANNED;
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
- aCookies.Insert(xCookie.get(), LIST_APPEND);
- xCookie.release();
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "out of memory")),
- star::uno::Reference< star::uno::XInterface >());
- }
- }
-
- CntHTTPCookieRequest
- aRequest(rRequest.URL,
- aCookies,
- rRequest.Request == star::ucb::CookieRequest_RECEIVE ?
- CNTHTTP_COOKIE_REQUEST_RECV :
- CNTHTTP_COOKIE_REQUEST_SEND);
- executeCookieDialog(aRequest);
- for (sal_Int32 i = 0; i < rContinuations.getLength(); ++i)
- {
- star::uno::Reference< star::ucb::XInteractionCookieHandling >
- xCookieHandling(rContinuations[i], star::uno::UNO_QUERY);
- if (xCookieHandling.is())
- {
- switch (aRequest.m_nRet)
- {
- case CNTHTTP_COOKIE_POLICY_INTERACTIVE:
- xCookieHandling->
- setGeneralPolicy(star::ucb::CookiePolicy_CONFIRM);
- break;
-
- case CNTHTTP_COOKIE_POLICY_ACCEPTED:
- xCookieHandling->
- setGeneralPolicy(star::ucb::CookiePolicy_ACCEPT);
- break;
-
- case CNTHTTP_COOKIE_POLICY_BANNED:
- xCookieHandling->
- setGeneralPolicy(star::ucb::CookiePolicy_IGNORE);
- break;
- }
- for (sal_Int32 j = 0; j < rRequest.Cookies.getLength(); ++j)
- if (rRequest.Cookies[j].Policy
- == star::ucb::CookiePolicy_CONFIRM)
- switch (static_cast< CntHTTPCookie * >(aCookies.
- GetObject(j))->
- m_nPolicy)
- {
- case CNTHTTP_COOKIE_POLICY_ACCEPTED:
- xCookieHandling->
- setSpecificPolicy(rRequest.Cookies[j], true);
- break;
-
- case CNTHTTP_COOKIE_POLICY_BANNED:
- xCookieHandling->
- setSpecificPolicy(rRequest.Cookies[j], false);
- break;
- }
- xCookieHandling->select();
- break;
- }
- }
-}
-
-void
-UUIInteractionHelper::handleNoSuchFilterRequest(
- star::document::NoSuchFilterRequest const & rRequest,
- star::uno::Sequence<
- star::uno::Reference< star::task::XInteractionContinuation > > const &
- rContinuations )
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- star::uno::Reference<
- star::document::XInteractionFilterSelect > xFilterTransport;
-
- sal_Int32 nCount = rContinuations.getLength();
- for( sal_Int32 nStep=0; nStep<nCount; ++nStep )
- {
- if( ! xAbort.is() )
- xAbort = star::uno::Reference< star::task::XInteractionAbort >(
- rContinuations[nStep], star::uno::UNO_QUERY );
-
- if( ! xFilterTransport.is() )
- xFilterTransport = star::uno::Reference<
- star::document::XInteractionFilterSelect >(
- rContinuations[nStep], star::uno::UNO_QUERY );
- }
-
- // check neccessary ressources - if they doesn't exist - abort or
- // break this operation
- if (!xAbort.is())
- return;
-
- if (!xFilterTransport.is() || !m_xServiceFactory.is())
- {
- xAbort->select();
- return;
- }
-
- star::uno::Reference< star::container::XContainerQuery >
- xFilterContainer( m_xServiceFactory->createInstance(
- ::rtl::OUString::createFromAscii(
- "com.sun.star.document.FilterFactory") ),
- star::uno::UNO_QUERY );
- if (!xFilterContainer.is())
- {
- xAbort->select();
- return;
- }
-
- uui::FilterNameList lNames;
-
- // Note: We look for all filters here which match the following criteria:
- // - they are import filters as minimum (of course they can
- // support export too)
- // - we don't show any filter which are flaged as "don't show it
- // at the UI" or "they are not installed"
- // - we ignore filters, which have not set any valid
- // DocumentService (e.g. our pure graphic filters)
- // - we show it sorted by her UIName's
- // - We don't use the order flag or prefer default filters.
- // (Because this list shows all filters and the user should
- // find his filter vry easy by his UIName ...)
- // - We use "_query_all" here ... but we filter graphic filters
- // out by using DocumentService property later!
- star::uno::Reference< star::container::XEnumeration > xFilters
- = xFilterContainer->createSubSetEnumerationByQuery(
- ::rtl::OUString::createFromAscii(
- "_query_all:sort_prop=uiname:iflags=1:eflags=143360"));
- while (xFilters->hasMoreElements())
- {
- try
- {
- ::comphelper::SequenceAsHashMap lProps(xFilters->nextElement());
- uui::FilterNamePair aPair;
-
- aPair.sInternal = lProps.getUnpackedValueOrDefault(
- rtl::OUString::createFromAscii("Name"), ::rtl::OUString());
- aPair.sUI = lProps.getUnpackedValueOrDefault(
- rtl::OUString::createFromAscii("UIName"), ::rtl::OUString());
- if (
- (!aPair.sInternal.Len()) ||
- (!aPair.sUI.Len() )
- )
- {
- continue;
- }
- lNames.push_back( aPair );
- }
- catch(const star::uno::RuntimeException&)
- {
- throw;
- }
- catch(const star::uno::Exception&)
- {
- continue;
- }
- }
-
- // no list available for showing
- // -> abort operation
- if (lNames.size()<1)
- {
- xAbort->select();
- return;
- }
-
- // let the user select the right filter
- rtl::OUString sSelectedFilter;
- executeFilterDialog( rRequest.URL, lNames, sSelectedFilter );
-
- // If he doesn't select anyone
- // -> abort operation
- if (sSelectedFilter.getLength()<1)
- {
- xAbort->select();
- return;
- }
-
- // otherwhise set it for return
- xFilterTransport->setFilter( sSelectedFilter );
- xFilterTransport->select();
-}
-
-void
-UUIInteractionHelper::handleAmbigousFilterRequest(
- star::document::AmbigousFilterRequest const & rRequest,
- star::uno::Sequence<
- star::uno::Reference<
- star::task::XInteractionContinuation > > const & rContinuations)
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- star::uno::Reference<
- star::document::XInteractionFilterSelect > xFilterTransport;
-
- sal_Int32 nCount = rContinuations.getLength();
- for( sal_Int32 nStep=0; nStep<nCount; ++nStep )
- {
- if( ! xAbort.is() )
- xAbort = star::uno::Reference< star::task::XInteractionAbort >(
- rContinuations[nStep], star::uno::UNO_QUERY );
-
- if( ! xFilterTransport.is() )
- xFilterTransport = star::uno::Reference<
- star::document::XInteractionFilterSelect >(
- rContinuations[nStep], star::uno::UNO_QUERY );
- }
-
- uui::FilterNameList lNames;
-
- if( m_xServiceFactory.is() == sal_True )
- {
- star::uno::Reference< star::container::XNameContainer >
- xFilterContainer( m_xServiceFactory->createInstance(
- ::rtl::OUString::createFromAscii(
- "com.sun.star.document.FilterFactory") ),
- star::uno::UNO_QUERY );
- if( xFilterContainer.is() == sal_True )
- {
- star::uno::Any aPackedSet ;
- star::uno::Sequence< star::beans::PropertyValue > lProps ;
- sal_Int32 nStep ;
- uui::FilterNamePair aPair ;
-
- try
- {
- aPackedSet
- = xFilterContainer->getByName( rRequest.SelectedFilter );
- }
- catch(const ::com::sun::star::container::NoSuchElementException&)
- {
- aPackedSet.clear();
- }
- aPackedSet >>= lProps;
- for( nStep=0; nStep<lProps.getLength(); ++nStep )
- {
- if( lProps[nStep].Name.compareToAscii("UIName") == 0 )
- {
- ::rtl::OUString sTemp;
- lProps[nStep].Value >>= sTemp;
- aPair.sUI = sTemp;
- aPair.sInternal = rRequest.SelectedFilter;
- lNames.push_back( aPair );
- break;
- }
- }
-
- try
- {
- aPackedSet
- = xFilterContainer->getByName( rRequest.DetectedFilter );
- }
- catch(const ::com::sun::star::container::NoSuchElementException&)
- {
- aPackedSet.clear();
- }
- aPackedSet >>= lProps;
- for( nStep=0; nStep<lProps.getLength(); ++nStep )
- {
- if( lProps[nStep].Name.compareToAscii("UIName") == 0 )
- {
- ::rtl::OUString sTemp;
- lProps[nStep].Value >>= sTemp;
- aPair.sUI = sTemp;
- aPair.sInternal = rRequest.DetectedFilter;
- lNames.push_back( aPair );
- break;
- }
- }
- }
- }
-
- if( xAbort.is() && xFilterTransport.is() )
- {
- if( lNames.size() < 1 )
- {
- xAbort->select();
- }
- else
- {
- rtl::OUString sFilter;
- executeFilterDialog( rRequest.URL, lNames, sFilter );
-
- if( sFilter.getLength() > 0 )
- {
- xFilterTransport->setFilter( sFilter );
- xFilterTransport->select();
- }
- else
- xAbort->select();
- }
- }
-}
-
-void
UUIInteractionHelper::handleGenericErrorRequest(
sal_Int32 nErrorCode,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const & rContinuations,
+ uno::Sequence< uno::Reference<
+ task::XInteractionContinuation > > const & rContinuations,
bool bObtainErrorStringOnly,
bool & bHasErrorString,
rtl::OUString & rErrorString)
- SAL_THROW((star::uno::RuntimeException))
+ SAL_THROW((uno::RuntimeException))
{
if (bObtainErrorStringOnly)
{
bHasErrorString = isInformationalErrorMessageRequest(rContinuations);
if (bHasErrorString)
- {
- String aErrorString;
- ErrorHandler::GetErrorString(nErrorCode, aErrorString);
- rErrorString = aErrorString;
- }
+ {
+ String aErrorString;
+ ErrorHandler::GetErrorString(nErrorCode, aErrorString);
+ rErrorString = aErrorString;
+ }
}
else
{
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- star::uno::Reference< star::task::XInteractionApprove > xApprove;
+ uno::Reference< task::XInteractionAbort > xAbort;
+ uno::Reference< task::XInteractionApprove > xApprove;
+ getContinuations(rContinuations, &xApprove, &xAbort);
- sal_Int32 nCount = rContinuations.getLength();
- for( sal_Int32 nStep=0; nStep<nCount; ++nStep )
- {
- if( ! xAbort.is() )
- xAbort
- = star::uno::Reference< star::task::XInteractionAbort >(
- rContinuations[nStep], star::uno::UNO_QUERY );
-
- if( ! xApprove.is() )
- xApprove
- = star::uno::Reference< star::task::XInteractionApprove >(
- rContinuations[nStep], star::uno::UNO_QUERY );
- }
+ // Note: It's important to convert the transported long to the
+ // required unsigned long value. Otherwhise using as flag field
+ // can fail ...
+ ErrCode nError = static_cast< ErrCode >(nErrorCode);
+ sal_Bool bWarning = !ERRCODE_TOERROR(nError);
- // Note: It's important to convert the transported long to the
- // required unsigned long value. Otherwhise using as flag field
- // can fail ...
- ErrCode nError = (ErrCode)nErrorCode;
- sal_Bool bWarning = !ERRCODE_TOERROR(nError);
-
- if ( nError == ERRCODE_SFX_BROKENSIGNATURE
- || nError == ERRCODE_SFX_INCOMPLETE_ENCRYPTION )
- {
- // the security warning need a special title
- String aErrorString;
- ErrorHandler::GetErrorString( nErrorCode, aErrorString );
-
- std::auto_ptr< ResMgr >
- xManager( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) );
- ::rtl::OUString aTitle;
-
- try
+ if ( nError == ERRCODE_SFX_BROKENSIGNATURE
+ || nError == ERRCODE_SFX_INCOMPLETE_ENCRYPTION )
{
- star::uno::Any aProductNameAny =
- ::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty(
- ::utl::ConfigManager::PRODUCTNAME );
- aProductNameAny >>= aTitle;
- } catch( star::uno::Exception& )
- {}
+ // the security warning box needs a special title
+ String aErrorString;
+ ErrorHandler::GetErrorString( nErrorCode, aErrorString );
- ::rtl::OUString aErrTitle = String( ResId( nError == ERRCODE_SFX_BROKENSIGNATURE ? STR_WARNING_BROKENSIGNATURE_TITLE : STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE, *xManager.get() ) );
+ std::auto_ptr< ResMgr > xManager(
+ ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) );
+ ::rtl::OUString aTitle;
- if ( aTitle.getLength() && aErrTitle.getLength() )
- aTitle += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( " - " ) );
- aTitle += aErrTitle;
+ try
+ {
+ uno::Any aProductNameAny =
+ ::utl::ConfigManager::GetConfigManager()
+ ->GetDirectConfigProperty(
+ ::utl::ConfigManager::PRODUCTNAME );
+ aProductNameAny >>= aTitle;
+ }
+ catch( uno::Exception& )
+ {
+ }
- executeMessageBox( aTitle, aErrorString, WB_OK );
- }
- else
- ErrorHandler::HandleError(nErrorCode);
+ ::rtl::OUString aErrTitle
+ = String( ResId( nError == ERRCODE_SFX_BROKENSIGNATURE
+ ? STR_WARNING_BROKENSIGNATURE_TITLE
+ : STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE,
+ *xManager.get() ) );
- if (xApprove.is() && bWarning)
- xApprove->select();
- else if (xAbort.is())
- xAbort->select();
- }
-}
+ if ( aTitle.getLength() && aErrTitle.getLength() )
+ aTitle += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( " - " ) );
+ aTitle += aErrTitle;
-namespace
-{
- template< class INTERACTION_TYPE >
- bool lcl_findContinuation( const Sequence< Reference< XInteractionContinuation > >& _rContinuations,
- Reference< INTERACTION_TYPE >& _rContinuation )
- {
- const Reference< XInteractionContinuation >* pContinuation = _rContinuations.getConstArray();
- const Reference< XInteractionContinuation >* pContinuationEnd = _rContinuations.getConstArray() + _rContinuations.getLength();
- while ( pContinuation != pContinuationEnd )
- {
- if ( _rContinuation.set( *pContinuation++, UNO_QUERY ) )
- return true;
+ executeMessageBox(
+ getParentProperty(), aTitle, aErrorString, WB_OK );
}
- return false;
+ else
+ ErrorHandler::HandleError(nErrorCode);
+
+ if (xApprove.is() && bWarning)
+ xApprove->select();
+ else if (xAbort.is())
+ xAbort->select();
}
}
void
UUIInteractionHelper::handleMacroConfirmRequest(
const ::rtl::OUString& aDocumentURL,
- const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xZipStorage,
+ const uno::Reference< embed::XStorage >& xZipStorage,
const ::rtl::OUString& aDocumentVersion,
- const ::com::sun::star::uno::Sequence< ::com::sun::star::security::DocumentSignatureInformation > aSignInfo,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const & rContinuations
-)
- SAL_THROW((star::uno::RuntimeException))
+ const uno::Sequence< security::DocumentSignatureInformation > aSignInfo,
+ uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
+ rContinuations )
+ SAL_THROW((uno::RuntimeException))
{
- Reference< XInteractionAbort > xAbort; lcl_findContinuation( rContinuations, xAbort );
- Reference< XInteractionApprove > xApprove; lcl_findContinuation( rContinuations, xApprove );
+ uno::Reference< task::XInteractionAbort > xAbort;
+ uno::Reference< task::XInteractionApprove > xApprove;
+ getContinuations( rContinuations, &xApprove, &xAbort );
bool bApprove = false;
- std::auto_ptr< ResMgr > pResMgr( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) );
+ std::auto_ptr< ResMgr > pResMgr(
+ ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) );
if ( pResMgr.get() )
{
bool bShowSignatures = aSignInfo.getLength() > 0;
- MacroWarning aWarning( getParentProperty(), bShowSignatures, *pResMgr.get() );
+ MacroWarning aWarning(
+ getParentProperty(), bShowSignatures, *pResMgr.get() );
aWarning.SetDocumentURL( aDocumentURL );
if ( aSignInfo.getLength() > 1 )
@@ -3342,372 +1323,100 @@ UUIInteractionHelper::handleMacroConfirmRequest(
void
UUIInteractionHelper::handleFutureDocumentVersionUpdateRequest(
- const FutureDocumentVersionProductUpdateRequest& _rRequest,
- Sequence< Reference< XInteractionContinuation > > const & rContinuations
-)
- SAL_THROW((star::uno::RuntimeException))
+ const task::FutureDocumentVersionProductUpdateRequest& _rRequest,
+ uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
+ rContinuations )
+ SAL_THROW((uno::RuntimeException))
{
- Reference< XInteractionAbort > xAbort; lcl_findContinuation( rContinuations, xAbort );
- Reference< XInteractionApprove > xApprove; lcl_findContinuation( rContinuations, xApprove );
- Reference< XInteractionApprove > xAskLater; lcl_findContinuation( rContinuations, xAskLater );
+ uno::Reference< task::XInteractionAbort > xAbort;
+ uno::Reference< task::XInteractionApprove > xApprove;
+ uno::Reference< task::XInteractionAskLater > xAskLater;
+ getContinuations( rContinuations, &xApprove, &xAbort, &xAskLater );
short nResult = RET_CANCEL;
static bool s_bDeferredToNextSession = false;
- // TODO: this static variable is somewhat hacky. Formerly (before the dialog was moved from SFX2 to the
- // interaction handler implementation), this was stored in SFX_APP()'s impl structure, in member
- // bODFVersionWarningLater. Of course, we do not have access to it here.
- //
- // A proper solution which I would envision would be:
- // - There's a central implementation (this one here) of css.task.InteractionHandler
- // - There's a configuration which maps UNO names to service names
- // - If the handler is confronted with a request, it tries to find the name of the UNO structure describing
- // the request in the said configuration.
- // - If an entry is found, then
- // - the respective service is instantiated
- // - the component is queried for css.task.XInteractionHandler, and the request is delegated
- // - if no entry is found, then the request is silenced (with calling the AbortContinuation, if possible)
- // This way, the FutureDocumentVersionProductUpdateRequest could be handled in SFX (or any other
- // suitable place), again, and we would only have one place where we remember the s_bDeferredToNextSession
- // flag.
- //
- // The side effect (well, actually the more important effect) would be that we do not need to burden
- // this central implementation with all interactions which are possible. Instead, separate parts of OOo
- // can define/implement different requests. (for instance, everything which today is done in the
- // css.sdb.InteractionHandler can then be routed through a "normal" interaction handler, where today we
- // always need to tell people to instantiate the SDB-version of the handler, not the normal one.)
+ // TODO: this static variable is somewhat hacky. Formerly (before the dialog was moved from SFX2 to the
+ // interaction handler implementation), this was stored in SFX_APP()'s impl structure, in member
+ // bODFVersionWarningLater. Of course, we do not have access to it here.
+ //
+ // A proper solution which I would envision would be:
+ // - There's a central implementation (this one here) of css.task.InteractionHandler
+ // - There's a configuration which maps UNO names to service names
+ // - If the handler is confronted with a request, it tries to find the name of the UNO structure describing
+ // the request in the said configuration.
+ // - If an entry is found, then
+ // - the respective service is instantiated
+ // - the component is queried for css.task.XInteractionHandler, and the request is delegated
+ // - if no entry is found, then the request is silenced (with calling the AbortContinuation, if possible)
+ // This way, the FutureDocumentVersionProductUpdateRequest could be handled in SFX (or any other
+ // suitable place), again, and we would only have one place where we remember the s_bDeferredToNextSession
+ // flag.
+ //
+ // The side effect (well, actually the more important effect) would be that we do not need to burden
+ // this central implementation with all interactions which are possible. Instead, separate parts of OOo
+ // can define/implement different requests. (for instance, everything which today is done in the
+ // css.sdb.InteractionHandler can then be routed through a "normal" interaction handler, where today we
+ // always need to tell people to instantiate the SDB-version of the handler, not the normal one.)
if ( !s_bDeferredToNextSession )
{
- std::auto_ptr< ResMgr > pResMgr( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) );
+ std::auto_ptr< ResMgr > pResMgr(
+ ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) );
if ( pResMgr.get() )
{
- ::uui::NewerVersionWarningDialog aDialog( getParentProperty(), _rRequest.DocumentODFVersion, *pResMgr.get() );
+ ::uui::NewerVersionWarningDialog aDialog(
+ getParentProperty(),
+ _rRequest.DocumentODFVersion,
+ *pResMgr.get() );
nResult = aDialog.Execute();
}
}
switch ( nResult )
{
- case RET_OK: if ( xApprove.is() ) xApprove->select(); break;
- case RET_CANCEL: if ( xAbort.is() ) xAbort->select(); break;
- case RET_ASK_LATER: if ( xAskLater.is() ) xAskLater->select(); s_bDeferredToNextSession = true; break;
+ case RET_OK:
+ if ( xApprove.is() )
+ xApprove->select();
+ break;
+ case RET_CANCEL:
+ if ( xAbort.is() )
+ xAbort->select();
+ break;
+ case RET_ASK_LATER:
+ if ( xAskLater.is() )
+ xAskLater->select();
+ s_bDeferredToNextSession = true;
+ break;
default:
- OSL_ENSURE( false, "UUIInteractionHelper::handleFutureDocumentVersionUpdateRequest: unexpected dialog return value!" );
+ OSL_ENSURE( false,
+ "UUIInteractionHelper::handleFutureDocumentVersionUpdateRequest: "
+ "unexpected dialog return value!" );
break;
}
}
void
-UUIInteractionHelper::handleFilterOptionsRequest(
- star::document::FilterOptionsRequest const & rRequest,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const & rContinuations)
- SAL_THROW((com::sun::star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- star::uno::Reference<
- star::document::XInteractionFilterOptions > xFilterOptions;
-
- sal_Int32 nCount = rContinuations.getLength();
- for( sal_Int32 nStep=0; nStep<nCount; ++nStep )
- {
- if( ! xAbort.is() )
- xAbort = star::uno::Reference< star::task::XInteractionAbort >(
- rContinuations[nStep], star::uno::UNO_QUERY );
-
- if( ! xFilterOptions.is() )
- xFilterOptions = star::uno::Reference<
- star::document::XInteractionFilterOptions >(
- rContinuations[nStep], star::uno::UNO_QUERY );
- }
-
- star::uno::Reference< star::container::XNameAccess > xFilterCFG;
- if( m_xServiceFactory.is() )
- {
- xFilterCFG = star::uno::Reference< star::container::XNameAccess >(
- m_xServiceFactory->createInstance(
- ::rtl::OUString::createFromAscii(
- "com.sun.star.document.FilterFactory" ) ),
- star::uno::UNO_QUERY );
- }
-
- if( xFilterCFG.is() && rRequest.rProperties.getLength() )
- {
- try {
- ::rtl::OUString aFilterName;
- sal_Int32 nPropCount = rRequest.rProperties.getLength();
- for( sal_Int32 ind = 0; ind < nPropCount; ++ind )
- {
- rtl::OUString tmp = rRequest.rProperties[ind].Name;
- if( rRequest.rProperties[ind].Name.equals(
- ::rtl::OUString::createFromAscii("FilterName")) )
- {
- rRequest.rProperties[ind].Value >>= aFilterName;
- break;
- }
- }
-
- star::uno::Sequence < star::beans::PropertyValue > aProps;
- if ( xFilterCFG->getByName( aFilterName ) >>= aProps )
- {
- sal_Int32 nPropertyCount = aProps.getLength();
- for( sal_Int32 nProperty=0;
- nProperty < nPropertyCount;
- ++nProperty )
- if( aProps[nProperty].Name.equals(
- ::rtl::OUString::createFromAscii("UIComponent")) )
- {
- ::rtl::OUString aServiceName;
- aProps[nProperty].Value >>= aServiceName;
- if( aServiceName.getLength() )
- {
- star::uno::Reference<
- star::ui::dialogs::XExecutableDialog >
- xFilterDialog(
- m_xServiceFactory->createInstance(
- aServiceName ),
- star::uno::UNO_QUERY );
- star::uno::Reference<
- star::beans::XPropertyAccess >
- xFilterProperties(
- xFilterDialog,
- star::uno::UNO_QUERY );
-
- if( xFilterDialog.is() && xFilterProperties.is() )
- {
- star::uno::Reference<
- star::document::XImporter > xImporter(
- xFilterDialog,
- star::uno::UNO_QUERY );
- if( xImporter.is() )
- xImporter->setTargetDocument(
- star::uno::Reference<
- star::lang::XComponent >(
- rRequest.rModel,
- star::uno::UNO_QUERY ) );
-
- xFilterProperties->setPropertyValues(
- rRequest.rProperties );
-
- if( xFilterDialog->execute() )
- {
- xFilterOptions->setFilterOptions(
- xFilterProperties
- ->getPropertyValues() );
- xFilterOptions->select();
- return;
-
- }
- }
- }
- break;
- }
- }
- }
- catch( star::container::NoSuchElementException& )
- {
- // the filter name is unknown
- }
- catch( star::uno::Exception& )
- {
- }
- }
-
- xAbort->select();
-}
-
-void
-UUIInteractionHelper::handleErrorRequest(
- star::task::InteractionClassification eClassification,
- ErrCode nErrorCode,
+UUIInteractionHelper::handleBrokenPackageRequest(
std::vector< rtl::OUString > const & rArguments,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const & rContinuations,
+ uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
+ rContinuations,
bool bObtainErrorStringOnly,
bool & bHasErrorString,
rtl::OUString & rErrorString)
- SAL_THROW((star::uno::RuntimeException))
+ SAL_THROW((uno::RuntimeException))
{
- rtl::OUString aMessage;
- {
- enum Source { SOURCE_DEFAULT, SOURCE_CNT, SOURCE_SVX, SOURCE_UUI };
- static char const * const aManager[4]
- = { CREATEVERSIONRESMGR_NAME(ofa),
- CREATEVERSIONRESMGR_NAME(cnt),
- CREATEVERSIONRESMGR_NAME(svx),
- CREATEVERSIONRESMGR_NAME(uui) };
- static USHORT const aId[4]
- = { RID_ERRHDL,
- RID_CHAOS_START + 12,
- // cf. chaos/source/inc/cntrids.hrc, where
- // #define RID_CHAOS_ERRHDL (RID_CHAOS_START + 12)
- RID_SVX_START + 350, // RID_SVXERRCODE
- RID_UUI_ERRHDL };
- ErrCode nErrorId = nErrorCode & ~ERRCODE_WARNING_MASK;
- Source eSource = nErrorId < ERRCODE_AREA_LIB1 ?
- SOURCE_DEFAULT :
- nErrorId >= ERRCODE_AREA_CHAOS
- && nErrorId < ERRCODE_AREA_CHAOS_END ?
- SOURCE_CNT :
- nErrorId >= ERRCODE_AREA_SVX
- && nErrorId <= ERRCODE_AREA_SVX_END ?
- SOURCE_SVX :
- SOURCE_UUI;
-
- vos::OGuard aGuard(Application::GetSolarMutex());
- std::auto_ptr< ResMgr > xManager;
- xManager.reset(ResMgr::CreateResMgr(aManager[eSource]));
- if (!xManager.get())
- return;
- ResId aResId(aId[eSource], *xManager.get());
- if (!ErrorResource(aResId). getString(nErrorCode, &aMessage))
- return;
- }
-
- aMessage = replaceMessageWithArguments( aMessage, rArguments );
-
if (bObtainErrorStringOnly)
{
bHasErrorString = isInformationalErrorMessageRequest(rContinuations);
- if (bHasErrorString)
- rErrorString = aMessage;
- return;
- }
- else
- {
- //TODO! It can happen that the buttons calculated below do not match
- // the error text from the resource (e.g., some text that is not a
- // question, but YES and NO buttons). Some error texts have
- // ExtraData that specifies a set of buttons, but that data is not
- // really useful, because a single error text may well make sense
- // both with only an OK button and with RETRY and CANCEL buttons.
-
- star::uno::Reference< star::task::XInteractionApprove > xApprove;
- star::uno::Reference< star::task::XInteractionDisapprove > xDisapprove;
- star::uno::Reference< star::task::XInteractionRetry > xRetry;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- getContinuations(
- rContinuations,
- &xApprove, &xDisapprove, &xRetry, &xAbort, 0, 0, 0, 0, 0);
-
- // The following mapping uses the bit mask
- // Approve = 8,
- // Disapprove = 4,
- // Retry = 2,
- // Abort = 1
- //
- // The mapping has five properties on which the code to select the
- // correct continuation relies:
- // 1 The OK button is mapped to Approve if that is available,
- // otherwise to Abort if that is available, otherwise to none.
- // 2 The CANCEL button is always mapped to Abort.
- // 3 The RETRY button is always mapped to Retry.
- // 4 The NO button is always mapped to Disapprove.
- // 5 The YES button is always mapped to Approve.
- //
- // Because the WinBits button combinations are quite restricted, not
- // every request can be served here.
- //
- // Finally, it seems to be better to leave default button
- // determination to VCL (the favouring of CANCEL as default button
- // seems to not always be what the user wants)...
- WinBits const aButtonMask[16]
- = { 0,
- WB_OK /*| WB_DEF_OK*/, // Abort
- 0,
- WB_RETRY_CANCEL /*| WB_DEF_CANCEL*/, // Retry, Abort
- 0,
- 0,
- 0,
- 0,
- WB_OK /*| WB_DEF_OK*/, // Approve
- WB_OK_CANCEL /*| WB_DEF_CANCEL*/, // Approve, Abort
- 0,
- 0,
- WB_YES_NO /*| WB_DEF_NO*/, // Approve, Disapprove
- WB_YES_NO_CANCEL /*| WB_DEF_CANCEL*/,
- // Approve, Disapprove, Abort
- 0,
- 0 };
-
- WinBits nButtonMask = aButtonMask[(xApprove.is() ? 8 : 0)
- | (xDisapprove.is() ? 4 : 0)
- | (xRetry.is() ? 2 : 0)
- | (xAbort.is() ? 1 : 0)];
- if (nButtonMask == 0)
+ if (!bHasErrorString)
return;
-
- //TODO! remove this backwards compatibility?
- rtl::OUString aContext(getContextProperty());
- if (aContext.getLength() == 0 && nErrorCode != 0)
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
- ErrorContext * pContext = ErrorContext::GetContext();
- if (pContext)
- {
- UniString aContextString;
- if (pContext->GetString(nErrorCode, aContextString))
- aContext = aContextString;
- }
- }
-
- USHORT nResult = executeErrorDialog(
- eClassification, aContext, aMessage, nButtonMask );
- switch (nResult)
- {
- case ERRCODE_BUTTON_OK:
- OSL_ENSURE(xApprove.is() || xAbort.is(), "unexpected situation");
- if (xApprove.is())
- xApprove->select();
- else if (xAbort.is())
- xAbort->select();
- break;
-
- case ERRCODE_BUTTON_CANCEL:
- OSL_ENSURE(xAbort.is(), "unexpected situation");
- if (xAbort.is())
- xAbort->select();
- break;
-
- case ERRCODE_BUTTON_RETRY:
- OSL_ENSURE(xRetry.is(), "unexpected situation");
- if (xRetry.is())
- xRetry->select();
- break;
-
- case ERRCODE_BUTTON_NO:
- OSL_ENSURE(xDisapprove.is(), "unexpected situation");
- if (xDisapprove.is())
- xDisapprove->select();
- break;
-
- case ERRCODE_BUTTON_YES:
- OSL_ENSURE(xApprove.is(), "unexpected situation");
- if (xApprove.is())
- xApprove->select();
- break;
- }
-
}
-}
-void
-UUIInteractionHelper::handleBrokenPackageRequest(
- std::vector< rtl::OUString > const & rArguments,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations,
- bool bObtainErrorStringOnly,
- bool & bHasErrorString,
- rtl::OUString & rErrorString)
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionApprove > xApprove;
- star::uno::Reference< star::task::XInteractionDisapprove > xDisapprove;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- getContinuations(
- rContinuations, &xApprove, &xDisapprove, 0, &xAbort, 0, 0, 0, 0, 0);
+ uno::Reference< task::XInteractionApprove > xApprove;
+ uno::Reference< task::XInteractionDisapprove > xDisapprove;
+ uno::Reference< task::XInteractionAbort > xAbort;
+ getContinuations(rContinuations, &xApprove, &xDisapprove, &xAbort);
ErrCode nErrorCode;
if( xApprove.is() && xDisapprove.is() )
@@ -3725,7 +1434,7 @@ UUIInteractionHelper::handleBrokenPackageRequest(
{
vos::OGuard aGuard(Application::GetSolarMutex());
std::auto_ptr< ResMgr > xManager(
- ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
+ ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
if (!xManager.get())
return;
@@ -3738,226 +1447,81 @@ UUIInteractionHelper::handleBrokenPackageRequest(
if (bObtainErrorStringOnly)
{
- bHasErrorString = isInformationalErrorMessageRequest(rContinuations);
- if (bHasErrorString)
- rErrorString = aMessage;
+ rErrorString = aMessage;
return;
}
- else
- {
- WinBits nButtonMask;
- if( xApprove.is() && xDisapprove.is() )
- {
- nButtonMask = WB_YES_NO | WB_DEF_YES;
- }
- else if ( xAbort.is() )
- {
- nButtonMask = WB_OK;
- }
- else
- return;
-
- star::uno::Any aProductNameAny =
- ::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty(
- ::utl::ConfigManager::PRODUCTNAME );
- star::uno::Any aProductVersionAny =
- ::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty(
- ::utl::ConfigManager::PRODUCTVERSION );
- ::rtl::OUString aProductName, aProductVersion;
- if ( !( aProductNameAny >>= aProductName ) )
- aProductName
- = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("StarOffice") );
-
- ::rtl::OUString aTitle( aProductName );
- if( aProductVersionAny >>= aProductVersion )
- {
- aTitle += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(" ") );
- aTitle += aProductVersion;
- }
-
- switch ( executeMessageBox( aTitle, aMessage, nButtonMask ))
- {
- case ERRCODE_BUTTON_OK:
- OSL_ENSURE( xAbort.is(), "unexpected situation" );
- if (xAbort.is())
- xAbort->select();
- break;
-
- case ERRCODE_BUTTON_NO:
- OSL_ENSURE(xDisapprove.is(), "unexpected situation");
- if (xDisapprove.is())
- xDisapprove->select();
- break;
-
- case ERRCODE_BUTTON_YES:
- OSL_ENSURE(xApprove.is(), "unexpected situation");
- if (xApprove.is())
- xApprove->select();
- break;
- }
- }
-}
-void
-UUIInteractionHelper::handleLockedDocumentRequest(
- const ::rtl::OUString& aDocumentURL,
- const ::rtl::OUString& aInfo,
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations,
- sal_uInt16 nMode )
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionApprove > xApprove;
- star::uno::Reference< star::task::XInteractionDisapprove > xDisapprove;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- getContinuations(
- rContinuations, &xApprove, &xDisapprove, 0, &xAbort, 0, 0, 0, 0, 0);
-
- if ( !xApprove.is() || !xDisapprove.is() || !xAbort.is() )
- return;
-
- try
+ WinBits nButtonMask;
+ if( xApprove.is() && xDisapprove.is() )
{
- vos::OGuard aGuard(Application::GetSolarMutex());
- std::auto_ptr< ResMgr > xManager(
- ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- if (!xManager.get())
- return;
-
- ::rtl::OUString aMessage;
- std::vector< rtl::OUString > aArguments;
- aArguments.push_back( aDocumentURL );
-
- sal_Int32 nResult = RET_CANCEL;
- if ( nMode == UUI_DOC_LOAD_LOCK )
- {
- aArguments.push_back( aInfo.getLength()
- ? aInfo
- : ::rtl::OUString( String( ResId( STR_UNKNOWNUSER, *xManager.get() ) ) ) );
- aMessage = String( ResId( STR_OPENLOCKED_MSG, *xManager.get() ) );
- aMessage = replaceMessageWithArguments( aMessage, aArguments );
-
- std::auto_ptr< OpenLockedQueryBox > xDialog(new OpenLockedQueryBox(
- getParentProperty(), xManager.get(), aMessage ) );
- nResult = xDialog->Execute();
- }
- else if ( nMode == UUI_DOC_SAVE_LOCK )
- {
- aArguments.push_back( aInfo.getLength()
- ? aInfo
- : ::rtl::OUString( String( ResId( STR_UNKNOWNUSER, *xManager.get() ) ) ) );
- aMessage = String( ResId( STR_TRYLATER_MSG, *xManager.get() ) );
- aMessage = replaceMessageWithArguments( aMessage, aArguments );
-
- std::auto_ptr< TryLaterQueryBox > xDialog(new TryLaterQueryBox(
- getParentProperty(), xManager.get(), aMessage ) );
- nResult = xDialog->Execute();
- }
- else if ( nMode == UUI_DOC_OWN_LOAD_LOCK || nMode == UUI_DOC_OWN_SAVE_LOCK )
- {
- aArguments.push_back( aInfo );
- aMessage = String( ResId( nMode == UUI_DOC_OWN_SAVE_LOCK ? STR_ALREADYOPEN_SAVE_MSG : STR_ALREADYOPEN_MSG, *xManager.get() ) );
- aMessage = replaceMessageWithArguments( aMessage, aArguments );
-
- std::auto_ptr< AlreadyOpenQueryBox > xDialog(new AlreadyOpenQueryBox(
- getParentProperty(), xManager.get(), aMessage, nMode == UUI_DOC_OWN_SAVE_LOCK ) );
- nResult = xDialog->Execute();
- }
-
- if ( nResult == RET_YES )
- xApprove->select();
- else if ( nResult == RET_NO )
- xDisapprove->select();
- else
- xAbort->select();
+ nButtonMask = WB_YES_NO | WB_DEF_YES;
}
- catch (std::bad_alloc const &)
+ else if ( xAbort.is() )
{
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
+ nButtonMask = WB_OK;
}
-}
-
-void
-UUIInteractionHelper::handleChangedByOthersRequest(
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations )
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionApprove > xApprove;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- getContinuations(
- rContinuations, &xApprove, 0, 0, &xAbort, 0, 0, 0, 0, 0);
-
- if ( !xApprove.is() || !xAbort.is() )
+ else
return;
- try
- {
- vos::OGuard aGuard(Application::GetSolarMutex());
- std::auto_ptr< ResMgr > xManager(
- ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- if (!xManager.get())
- return;
-
- std::auto_ptr< FileChangedQueryBox > xDialog(new FileChangedQueryBox(
- getParentProperty(), xManager.get() ) );
- sal_Int32 nResult = xDialog->Execute();
+ uno::Any aProductNameAny =
+ ::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty(
+ ::utl::ConfigManager::PRODUCTNAME );
+ uno::Any aProductVersionAny =
+ ::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty(
+ ::utl::ConfigManager::PRODUCTVERSION );
+ ::rtl::OUString aProductName, aProductVersion;
+ if ( !( aProductNameAny >>= aProductName ) )
+ aProductName
+ = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("StarOffice") );
- if ( nResult == RET_YES )
- xApprove->select();
- else
- xAbort->select();
- }
- catch (std::bad_alloc const &)
+ ::rtl::OUString aTitle( aProductName );
+ if( aProductVersionAny >>= aProductVersion )
{
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
+ aTitle += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(" ") );
+ aTitle += aProductVersion;
}
-}
-
-void
-UUIInteractionHelper::handleLockFileIgnoreRequest(
- star::uno::Sequence< star::uno::Reference<
- star::task::XInteractionContinuation > > const &
- rContinuations )
- SAL_THROW((star::uno::RuntimeException))
-{
- star::uno::Reference< star::task::XInteractionApprove > xApprove;
- star::uno::Reference< star::task::XInteractionAbort > xAbort;
- getContinuations(
- rContinuations, &xApprove, 0, 0, &xAbort, 0, 0, 0, 0, 0);
-
- if ( !xApprove.is() || !xAbort.is() )
- return;
- try
+ switch ( executeMessageBox( getParentProperty(),
+ aTitle,
+ aMessage,
+ nButtonMask ))
{
- vos::OGuard aGuard(Application::GetSolarMutex());
- std::auto_ptr< ResMgr > xManager(
- ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
- if (!xManager.get())
- return;
+ case ERRCODE_BUTTON_OK:
+ OSL_ENSURE( xAbort.is(), "unexpected situation" );
+ if (xAbort.is())
+ xAbort->select();
+ break;
- std::auto_ptr< LockFailedQueryBox > xDialog(new LockFailedQueryBox(
- getParentProperty(), xManager.get() ) );
- sal_Int32 nResult = xDialog->Execute();
+ case ERRCODE_BUTTON_NO:
+ OSL_ENSURE(xDisapprove.is(), "unexpected situation");
+ if (xDisapprove.is())
+ xDisapprove->select();
+ break;
- if ( nResult == RET_OK )
+ case ERRCODE_BUTTON_YES:
+ OSL_ENSURE(xApprove.is(), "unexpected situation");
+ if (xApprove.is())
xApprove->select();
- else
- xAbort->select();
- }
- catch (std::bad_alloc const &)
- {
- throw star::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
- star::uno::Reference< star::uno::XInterface >());
+ break;
}
}
+//=========================================================================
+// ErrorResource Implementation
+//=========================================================================
+bool
+ErrorResource::getString(ErrCode nErrorCode, rtl::OUString * pString)
+ const SAL_THROW(())
+{
+ OSL_ENSURE(pString, "specification violation");
+ ResId aResId(static_cast< USHORT >(nErrorCode & ERRCODE_RES_MASK),
+ *m_pResMgr);
+ aResId.SetRT(RSC_STRING);
+ if (!IsAvailableRes(aResId))
+ return false;
+ aResId.SetAutoRelease(false);
+ *pString = UniString(aResId);
+ m_pResMgr->PopContext();
+ return true;
+}