1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_fpicker.hxx" 26*b1cdbd2cSJim Jagielski #include "fpinteraction.hxx" 27*b1cdbd2cSJim Jagielski #include <tools/debug.hxx> 28*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/InteractiveIOException.hpp> 29*b1cdbd2cSJim Jagielski #include <com/sun/star/task/XInteractionAbort.hpp> 30*b1cdbd2cSJim Jagielski #include <com/sun/star/task/XInteractionApprove.hpp> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/task/XInteractionDisapprove.hpp> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/task/XInteractionRetry.hpp> 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski //........................................................................ 35*b1cdbd2cSJim Jagielski namespace svt 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski //........................................................................ 38*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno; 39*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::task; 40*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::ucb; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski //==================================================================== 43*b1cdbd2cSJim Jagielski //= OFilePickerInteractionHandler 44*b1cdbd2cSJim Jagielski //==================================================================== DBG_NAME(OFilePickerInteractionHandler)45*b1cdbd2cSJim Jagielski DBG_NAME( OFilePickerInteractionHandler ) 46*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- 47*b1cdbd2cSJim Jagielski OFilePickerInteractionHandler::OFilePickerInteractionHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxMaster ) 48*b1cdbd2cSJim Jagielski :m_xMaster( _rxMaster ) 49*b1cdbd2cSJim Jagielski ,m_bUsed( sal_False ) 50*b1cdbd2cSJim Jagielski ,m_eInterceptions( OFilePickerInteractionHandler::E_NOINTERCEPTION ) 51*b1cdbd2cSJim Jagielski { 52*b1cdbd2cSJim Jagielski DBG_CTOR( OFilePickerInteractionHandler, NULL ); 53*b1cdbd2cSJim Jagielski DBG_ASSERT( m_xMaster.is(), "OFilePickerInteractionHandler::OFilePickerInteractionHandler: invalid master handler!" ); 54*b1cdbd2cSJim Jagielski } 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- ~OFilePickerInteractionHandler()57*b1cdbd2cSJim Jagielski OFilePickerInteractionHandler::~OFilePickerInteractionHandler( ) 58*b1cdbd2cSJim Jagielski { 59*b1cdbd2cSJim Jagielski DBG_DTOR( OFilePickerInteractionHandler, NULL ); 60*b1cdbd2cSJim Jagielski } 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- handle(const Reference<XInteractionRequest> & _rxRequest)63*b1cdbd2cSJim Jagielski void SAL_CALL OFilePickerInteractionHandler::handle( const Reference< XInteractionRequest >& _rxRequest ) throw (RuntimeException) 64*b1cdbd2cSJim Jagielski { 65*b1cdbd2cSJim Jagielski if (!_rxRequest.is()) 66*b1cdbd2cSJim Jagielski return; 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski m_bUsed = sal_True; 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski // extract some generic continuations ... might we need it later 71*b1cdbd2cSJim Jagielski // if something goes wrong. 72*b1cdbd2cSJim Jagielski Reference< XInteractionAbort > xAbort; 73*b1cdbd2cSJim Jagielski Reference< XInteractionApprove > xApprove; 74*b1cdbd2cSJim Jagielski Reference< XInteractionDisapprove > xDisapprove; 75*b1cdbd2cSJim Jagielski Reference< XInteractionRetry > xRetry; 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski const Sequence< Reference< XInteractionContinuation > > lConts = _rxRequest->getContinuations(); 78*b1cdbd2cSJim Jagielski const Reference< XInteractionContinuation >* pConts = lConts.getConstArray(); 79*b1cdbd2cSJim Jagielski for (sal_Int32 i=0; i<lConts.getLength(); ++i) 80*b1cdbd2cSJim Jagielski { 81*b1cdbd2cSJim Jagielski if (!xAbort.is()) 82*b1cdbd2cSJim Jagielski xAbort = Reference< XInteractionAbort >(pConts[i], UNO_QUERY); 83*b1cdbd2cSJim Jagielski if (!xApprove.is()) 84*b1cdbd2cSJim Jagielski xApprove = Reference< XInteractionApprove >(pConts[i], UNO_QUERY); 85*b1cdbd2cSJim Jagielski if (!xDisapprove.is()) 86*b1cdbd2cSJim Jagielski xDisapprove = Reference< XInteractionDisapprove >(pConts[i], UNO_QUERY); 87*b1cdbd2cSJim Jagielski if (!xRetry.is()) 88*b1cdbd2cSJim Jagielski xRetry = Reference< XInteractionRetry >(pConts[i], UNO_QUERY); 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski // safe the original request for later analyzing! 92*b1cdbd2cSJim Jagielski m_aException = _rxRequest->getRequest(); 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski // intercept some interesting interactions 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski // The "does not exist" interaction will be supressed here completly. 97*b1cdbd2cSJim Jagielski if (m_eInterceptions & OFilePickerInteractionHandler::E_DOESNOTEXIST) 98*b1cdbd2cSJim Jagielski { 99*b1cdbd2cSJim Jagielski InteractiveIOException aIoException; 100*b1cdbd2cSJim Jagielski if ( 101*b1cdbd2cSJim Jagielski (m_aException >>= aIoException ) && 102*b1cdbd2cSJim Jagielski (IOErrorCode_NOT_EXISTING == aIoException.Code) 103*b1cdbd2cSJim Jagielski ) 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski if (xAbort.is()) 106*b1cdbd2cSJim Jagielski xAbort->select(); 107*b1cdbd2cSJim Jagielski return; 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski } 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski // no master => abort this operation ... 112*b1cdbd2cSJim Jagielski if (!m_xMaster.is()) 113*b1cdbd2cSJim Jagielski { 114*b1cdbd2cSJim Jagielski if (xAbort.is()) 115*b1cdbd2cSJim Jagielski xAbort->select(); 116*b1cdbd2cSJim Jagielski return; 117*b1cdbd2cSJim Jagielski } 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski // forward it to our master - so he can handle all 120*b1cdbd2cSJim Jagielski // not interesting interactions :-) 121*b1cdbd2cSJim Jagielski m_xMaster->handle(_rxRequest); 122*b1cdbd2cSJim Jagielski } 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- enableInterceptions(EInterceptedInteractions eInterceptions)125*b1cdbd2cSJim Jagielski void OFilePickerInteractionHandler::enableInterceptions( EInterceptedInteractions eInterceptions ) 126*b1cdbd2cSJim Jagielski { 127*b1cdbd2cSJim Jagielski m_eInterceptions = eInterceptions; 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- wasUsed() const131*b1cdbd2cSJim Jagielski sal_Bool OFilePickerInteractionHandler::wasUsed() const 132*b1cdbd2cSJim Jagielski { 133*b1cdbd2cSJim Jagielski return m_bUsed; 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- resetUseState()137*b1cdbd2cSJim Jagielski void OFilePickerInteractionHandler::resetUseState() 138*b1cdbd2cSJim Jagielski { 139*b1cdbd2cSJim Jagielski m_bUsed = sal_False; 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- forgetRequest()143*b1cdbd2cSJim Jagielski void OFilePickerInteractionHandler::forgetRequest() 144*b1cdbd2cSJim Jagielski { 145*b1cdbd2cSJim Jagielski m_aException = Any(); 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- wasAccessDenied() const149*b1cdbd2cSJim Jagielski sal_Bool OFilePickerInteractionHandler::wasAccessDenied() const 150*b1cdbd2cSJim Jagielski { 151*b1cdbd2cSJim Jagielski InteractiveIOException aIoException; 152*b1cdbd2cSJim Jagielski if ( 153*b1cdbd2cSJim Jagielski (m_aException >>= aIoException ) && 154*b1cdbd2cSJim Jagielski (IOErrorCode_ACCESS_DENIED == aIoException.Code) 155*b1cdbd2cSJim Jagielski ) 156*b1cdbd2cSJim Jagielski { 157*b1cdbd2cSJim Jagielski return sal_True; 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski return sal_False; 160*b1cdbd2cSJim Jagielski } 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski //........................................................................ 163*b1cdbd2cSJim Jagielski } // namespace svt 164*b1cdbd2cSJim Jagielski //........................................................................ 165*b1cdbd2cSJim Jagielski 166