1  /*************************************************************************
2   *
3   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4   *
5   * Copyright 2000, 2010 Oracle and/or its affiliates.
6   *
7   * OpenOffice.org - a multi-platform office productivity suite
8   *
9   * This file is part of OpenOffice.org.
10   *
11   * OpenOffice.org is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Lesser General Public License version 3
13   * only, as published by the Free Software Foundation.
14   *
15   * OpenOffice.org is distributed in the hope that it will be useful,
16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
17   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18   * GNU Lesser General Public License version 3 for more details
19   * (a copy is included in the LICENSE file that accompanied this code).
20   *
21   * You should have received a copy of the GNU Lesser General Public License
22   * version 3 along with OpenOffice.org.  If not, see
23   * <http://www.openoffice.org/license.html>
24   * for a copy of the LGPLv3 License.
25   *
26   ************************************************************************/
27  
28  #ifndef __FRAMEWORK_DISPATCH_SYSTEMEXEC_HXX_
29  #define __FRAMEWORK_DISPATCH_SYSTEMEXEC_HXX_
30  
31  //_________________________________________________________________________________________________________________
32  //	my own includes
33  //_________________________________________________________________________________________________________________
34  
35  #include <macros/generic.hxx>
36  #include <macros/xinterface.hxx>
37  #include <macros/xtypeprovider.hxx>
38  #include <macros/xserviceinfo.hxx>
39  #include <macros/debug.hxx>
40  #include <threadhelp/threadhelpbase.hxx>
41  #include <general.h>
42  #include <stdtypes.h>
43  
44  //_________________________________________________________________________________________________________________
45  //	interface includes
46  //_________________________________________________________________________________________________________________
47  #include <com/sun/star/lang/XTypeProvider.hpp>
48  #include <com/sun/star/frame/XNotifyingDispatch.hpp>
49  #include <com/sun/star/frame/XDispatch.hpp>
50  #include <com/sun/star/frame/XDispatchProvider.hpp>
51  #include <com/sun/star/util/URL.hpp>
52  #include <com/sun/star/beans/PropertyValue.hpp>
53  #include <com/sun/star/frame/XStatusListener.hpp>
54  
55  //_________________________________________________________________________________________________________________
56  //	other includes
57  //_________________________________________________________________________________________________________________
58  #include <cppuhelper/weak.hxx>
59  
60  //_________________________________________________________________________________________________________________
61  //	namespace
62  //_________________________________________________________________________________________________________________
63  
64  namespace framework{
65  
66  //_________________________________________________________________________________________________________________
67  //	exported const
68  //_________________________________________________________________________________________________________________
69  
70  //_________________________________________________________________________________________________________________
71  //	exported definitions
72  //_________________________________________________________________________________________________________________
73  
74  /**
75      @short          protocol handler for "systemexec:*" URLs
76      @descr          It's a special dispatch/provider object which is registered for such URL pattern and will
77                      be automaticly used by the framework dispatch mechanism if such URL occured.
78                      It forwards all URL's to the underlying operating system.
79                      So it would e.g. be possible to open HTML files outside the office within a web browser.
80  
81      @base           ThreadHelpBase
82                          exports a lock member to guarantee right initialize value of it
83      @base           OWeakObject
84                          provides XWeak and ref count mechanism
85  
86  	@devstatus		ready to use
87  */
88  class SystemExec : // interfaces
89                         public  css::lang::XTypeProvider      ,
90                         public  css::lang::XServiceInfo       ,
91                         public  css::frame::XDispatchProvider ,
92                         public  css::frame::XNotifyingDispatch, // => XDispatch
93                         // baseclasses
94                         // Order is neccessary for right initialization!
95                         private ThreadHelpBase                ,
96                         public  cppu::OWeakObject
97  {
98      /* member */
99      private:
100  
101          /// reference to global uno service manager which had created us
102          css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory;
103  
104      /* interface */
105  	public:
106  
107          // ctor/dtor
108                   SystemExec( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory );
109          virtual ~SystemExec(                                                                        );
110  
111          // XInterface, XTypeProvider, XServiceInfo
112          FWK_DECLARE_XINTERFACE
113  		FWK_DECLARE_XTYPEPROVIDER
114          DECLARE_XSERVICEINFO
115  
116          // XDispatchProvider
117          virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL                       queryDispatch  ( const css::util::URL&                                       aURL        ,
118                                                                                                               const ::rtl::OUString&                                      sTarget     ,
119                                                                                                                     sal_Int32                                             nFlags      ) throw( css::uno::RuntimeException );
120          virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor >& lDescriptor ) throw( css::uno::RuntimeException );
121  
122          // XNotifyingDispatch
123          virtual void SAL_CALL dispatchWithNotification( const css::util::URL&                                             aURL      ,
124                                                          const css::uno::Sequence< css::beans::PropertyValue >&            lArguments,
125                                                          const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw( css::uno::RuntimeException );
126  
127          // XDispatch
128          virtual void SAL_CALL dispatch            ( const css::util::URL&                                     aURL       ,
129                                                      const css::uno::Sequence< css::beans::PropertyValue >&    lArguments ) throw( css::uno::RuntimeException );
130          virtual void SAL_CALL addStatusListener   ( const css::uno::Reference< css::frame::XStatusListener >& xListener  ,
131                                                      const css::util::URL&                                     aURL       ) throw( css::uno::RuntimeException );
132          virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xListener  ,
133                                                      const css::util::URL&                                     aURL       ) throw( css::uno::RuntimeException );
134  
135      /* internal */
136      private:
137  
138          void impl_notifyResultListener(const css::uno::Reference< css::frame::XDispatchResultListener >& xListener,
139                                         const sal_Int16                                                   nState   );
140  
141  };      //  class SystemExec
142  
143  }		//	namespace framework
144  
145  #endif  //  #ifndef __FRAMEWORK_DISPATCH_SYSTEMEXEC_HXX_
146