xref: /AOO41X/main/sdext/source/minimizer/pppoptimizer.cxx (revision 54628ca40d27d15cc98fe861da7fff7e60c2f7d6)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sdext.hxx"
26 
27 #include "pppoptimizer.hxx"
28 #include "impoptimizer.hxx"
29 #include <osl/file.hxx>
30 
31 #include <com/sun/star/lang/IllegalArgumentException.hpp>
32 
33 using namespace ::rtl;
34 using namespace ::com::sun::star::uno;
35 using namespace ::com::sun::star::util;
36 using namespace ::com::sun::star::lang;
37 using namespace ::com::sun::star::frame;
38 using namespace ::com::sun::star::beans;
39 
40 #define SERVICE_NAME "com.sun.star.comp.PPPOptimizer"
41 
42 // ----------------
43 // - PPPOptimizer -
44 // ----------------
45 
46 PPPOptimizer::PPPOptimizer( const Reference< XComponentContext > &rxMSF ) :
47     mxMSF( rxMSF )
48 {
49 }
50 
51 // -----------------------------------------------------------------------------
52 
53 PPPOptimizer::~PPPOptimizer()
54 {
55 }
56 
57 // -----------------------------------------------------------------------------
58 // XInitialization
59 // -----------------------------------------------------------------------------
60 
61 void SAL_CALL PPPOptimizer::initialize( const Sequence< Any >& aArguments )
62     throw ( Exception, RuntimeException )
63 {
64     if( aArguments.getLength() != 1 )
65         throw IllegalArgumentException();
66 
67     Reference< XFrame > xFrame;
68     aArguments[ 0 ] >>= xFrame;
69     if ( xFrame.is() )
70         mxController = xFrame->getController();
71 }
72 
73 // -----------------------------------------------------------------------------
74 // XServiceInfo
75 // -----------------------------------------------------------------------------
76 
77 OUString SAL_CALL PPPOptimizer::getImplementationName()
78     throw ( RuntimeException )
79 {
80     return PPPOptimizer_getImplementationName();
81 }
82 
83 sal_Bool SAL_CALL PPPOptimizer::supportsService( const OUString& rServiceName )
84     throw ( RuntimeException )
85 {
86     return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SERVICE_NAME ) );
87 }
88 
89 Sequence< OUString > SAL_CALL PPPOptimizer::getSupportedServiceNames()
90     throw ( RuntimeException )
91 {
92     return PPPOptimizer_getSupportedServiceNames();
93 }
94 
95 // -----------------------------------------------------------------------------
96 // XDispatchProvider
97 // -----------------------------------------------------------------------------
98 
99 Reference< com::sun::star::frame::XDispatch > SAL_CALL PPPOptimizer::queryDispatch(
100     const URL& aURL, const ::rtl::OUString& /* aTargetFrameName */, sal_Int32 /* nSearchFlags */ ) throw( RuntimeException )
101 {
102     Reference < XDispatch > xRet;
103     if ( aURL.Protocol.compareToAscii( "vnd.com.sun.star.comp.PPPOptimizer:" ) == 0 )
104     {
105 //      if ( aURL.Path.compareToAscii( "Function1" ) == 0 )
106         xRet = this;
107     }
108     return xRet;
109 }
110 
111 //------------------------------------------------------------------------------
112 
113 Sequence< Reference< com::sun::star::frame::XDispatch > > SAL_CALL PPPOptimizer::queryDispatches(
114     const Sequence< com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw( RuntimeException )
115 {
116     Sequence< Reference< com::sun::star::frame::XDispatch> > aReturn( aDescripts.getLength() );
117     Reference< com::sun::star::frame::XDispatch>* pReturn = aReturn.getArray();
118     const com::sun::star::frame::DispatchDescriptor* pDescripts = aDescripts.getConstArray();
119     for (sal_Int16 i = 0; i < aDescripts.getLength(); ++i, ++pReturn, ++pDescripts )
120     {
121         *pReturn = queryDispatch( pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags );
122     }
123     return aReturn;
124 }
125 
126 // -----------------------------------------------------------------------------
127 // XDispatch
128 // -----------------------------------------------------------------------------
129 
130 void SAL_CALL PPPOptimizer::dispatch( const URL& rURL, const Sequence< PropertyValue >& lArguments )
131     throw( RuntimeException )
132 {
133     if ( mxController.is() && ( rURL.Protocol.compareToAscii( "vnd.com.sun.star.comp.PPPOptimizer:" ) == 0 ) )
134     {
135         if ( rURL.Path.compareToAscii( "optimize" ) == 0 )
136         {
137             Reference< XModel > xModel( mxController->getModel() );
138             if ( xModel.is() )
139             {
140                 try
141                 {
142                     ImpOptimizer aOptimizer( mxMSF, xModel );
143                     aOptimizer.Optimize( lArguments );
144                 }
145                 catch( Exception& )
146                 {
147                 }
148             }
149         }
150     }
151 }
152 
153 //===============================================
154 void SAL_CALL PPPOptimizer::addStatusListener( const Reference< XStatusListener >&, const URL& )
155     throw( RuntimeException )
156 {
157     // TODO
158     OSL_ENSURE( sal_False, "PPPOptimizer::addStatusListener()\nNot implemented yet!" );
159 }
160 
161 //===============================================
162 void SAL_CALL PPPOptimizer::removeStatusListener( const Reference< XStatusListener >&, const URL& )
163     throw( RuntimeException )
164 {
165     // TODO
166     OSL_ENSURE( sal_False, "PPPOptimizer::removeStatusListener()\nNot implemented yet!" );
167 }
168 
169 // -----------------------------------------------------------------------------
170 // returning filesize, on error zero is returned
171 sal_Int64 PPPOptimizer::GetFileSize( const rtl::OUString& rURL )
172 {
173     sal_Int64 nFileSize = 0;
174     osl::DirectoryItem aItem;
175     if ( osl::DirectoryItem::get( rURL, aItem ) == osl::FileBase::E_None )
176     {
177         osl::FileStatus aStatus( osl_FileStatus_Mask_FileSize );
178         if ( aItem.getFileStatus( aStatus ) == osl::FileBase::E_None )
179         {
180             nFileSize = aStatus.getFileSize();
181         }
182     }
183     return nFileSize;
184 }
185 
186 // -----------------------------------------------------------------------------
187 
188 OUString PPPOptimizer_getImplementationName()
189 {
190     return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.PPPOptimizerImp" ) );
191 }
192 
193 Sequence< OUString > PPPOptimizer_getSupportedServiceNames()
194 {
195     Sequence < OUString > aRet(1);
196     OUString* pArray = aRet.getArray();
197     pArray[0] =  OUString ( RTL_CONSTASCII_USTRINGPARAM( SERVICE_NAME ) );
198     return aRet;
199 }
200 
201 Reference< XInterface > PPPOptimizer_createInstance( const Reference< XComponentContext > & rSMgr )
202     throw( Exception )
203 {
204     return (cppu::OWeakObject*) new PPPOptimizer( rSMgr );
205 }
206