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 #define SERVICE_NAME "com.sun.star.presentation.PresentationOptimizer"
34
35
36 using namespace ::com::sun::star::uno;
37 using namespace ::com::sun::star::util;
38 using namespace ::com::sun::star::lang;
39 using namespace ::com::sun::star::frame;
40 using namespace ::com::sun::star::beans;
41
42 using ::rtl::OUString;
43
44 // ----------------
45 // - PPPOptimizer -
46 // ----------------
47
PPPOptimizer(const Reference<XComponentContext> & rxContext)48 PPPOptimizer::PPPOptimizer( const Reference< XComponentContext > &rxContext ) :
49 mxContext( rxContext )
50 {
51 OSL_TRACE("PPPOptimizer::PPPOptimizer");
52 }
53
54 // -----------------------------------------------------------------------------
55
~PPPOptimizer()56 PPPOptimizer::~PPPOptimizer()
57 {
58 OSL_TRACE("PPPOptimizer::~PPPOptimizer");
59 }
60
61 // -----------------------------------------------------------------------------
62 // XInitialization
63 // -----------------------------------------------------------------------------
64
initialize(const Sequence<Any> & aArguments)65 void SAL_CALL PPPOptimizer::initialize( const Sequence< Any >& aArguments )
66 {
67 OSL_TRACE("PPPOptimizer::initialize");
68 if( aArguments.getLength() != 1 )
69 throw IllegalArgumentException();
70
71 Reference< XFrame > xFrame;
72 aArguments[ 0 ] >>= xFrame;
73 if ( xFrame.is() )
74 mxController = xFrame->getController();
75 }
76
77 // -----------------------------------------------------------------------------
78 // XServiceInfo
79 // -----------------------------------------------------------------------------
80
getImplementationName()81 OUString SAL_CALL PPPOptimizer::getImplementationName()
82 {
83 return PPPOptimizer_getImplementationName();
84 }
85
supportsService(const OUString & rServiceName)86 sal_Bool SAL_CALL PPPOptimizer::supportsService( const OUString& rServiceName )
87 {
88 return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SERVICE_NAME ) );
89 }
90
getSupportedServiceNames()91 Sequence< OUString > SAL_CALL PPPOptimizer::getSupportedServiceNames()
92 {
93 return PPPOptimizer_getSupportedServiceNames();
94 }
95
96 // -----------------------------------------------------------------------------
97 // XDispatchProvider
98 // -----------------------------------------------------------------------------
99
queryDispatch(const URL & aURL,const::rtl::OUString &,sal_Int32)100 Reference< com::sun::star::frame::XDispatch > SAL_CALL PPPOptimizer::queryDispatch(
101 const URL& aURL, const ::rtl::OUString& /* aTargetFrameName */, sal_Int32 /* nSearchFlags */ )
102 {
103 Reference < XDispatch > xRet;
104 if ( aURL.Protocol.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
105 "vnd.com.sun.star.presentation.PresentationOptimizer:" ) ) )
106 {
107 // if ( aURL.Path.compareToAscii( "Function1" ) == 0 )
108 xRet = this;
109 }
110 return xRet;
111 }
112
113 //------------------------------------------------------------------------------
114
queryDispatches(const Sequence<com::sun::star::frame::DispatchDescriptor> & aDescripts)115 Sequence< Reference< com::sun::star::frame::XDispatch > > SAL_CALL PPPOptimizer::queryDispatches(
116 const Sequence< com::sun::star::frame::DispatchDescriptor >& aDescripts )
117 {
118 Sequence< Reference< com::sun::star::frame::XDispatch> > aReturn( aDescripts.getLength() );
119 Reference< com::sun::star::frame::XDispatch>* pReturn = aReturn.getArray();
120 const com::sun::star::frame::DispatchDescriptor* pDescripts = aDescripts.getConstArray();
121 for (sal_Int16 i = 0; i < aDescripts.getLength(); ++i, ++pReturn, ++pDescripts )
122 {
123 *pReturn = queryDispatch( pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags );
124 }
125 return aReturn;
126 }
127
128 // -----------------------------------------------------------------------------
129 // XDispatch
130 // -----------------------------------------------------------------------------
131
dispatch(const URL & rURL,const Sequence<PropertyValue> & lArguments)132 void SAL_CALL PPPOptimizer::dispatch( const URL& rURL, const Sequence< PropertyValue >& lArguments )
133 {
134 OSL_TRACE("PPPOptimizer::dispatch");
135 if ( mxController.is() && rURL.Protocol.equalsAsciiL(
136 RTL_CONSTASCII_STRINGPARAM(
137 "vnd.com.sun.star.presentation.PresentationOptimizer:" )))
138 {
139 if ( rURL.Path.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("optimize") ) )
140 {
141 Reference< XModel > xModel( mxController->getModel() );
142 if ( xModel.is() )
143 {
144 try
145 {
146 ImpOptimizer aOptimizer( mxContext, xModel );
147 aOptimizer.Optimize( lArguments );
148 }
149 catch( Exception& )
150 {
151 }
152 }
153 }
154 }
155 }
156
157 //===============================================
addStatusListener(const Reference<XStatusListener> &,const URL &)158 void SAL_CALL PPPOptimizer::addStatusListener( const Reference< XStatusListener >&, const URL& )
159 {
160 // TODO
161 OSL_ENSURE( sal_False, "PPPOptimizer::addStatusListener()\nNot implemented yet!" );
162 }
163
164 //===============================================
removeStatusListener(const Reference<XStatusListener> &,const URL &)165 void SAL_CALL PPPOptimizer::removeStatusListener( const Reference< XStatusListener >&, const URL& )
166 {
167 // TODO
168 OSL_ENSURE( sal_False, "PPPOptimizer::removeStatusListener()\nNot implemented yet!" );
169 }
170
171 // -----------------------------------------------------------------------------
172 // returning filesize, on error zero is returned
GetFileSize(const rtl::OUString & rURL)173 sal_Int64 PPPOptimizer::GetFileSize( const rtl::OUString& rURL )
174 {
175 sal_Int64 nFileSize = 0;
176 osl::DirectoryItem aItem;
177 if ( osl::DirectoryItem::get( rURL, aItem ) == osl::FileBase::E_None )
178 {
179 osl::FileStatus aStatus( osl_FileStatus_Mask_FileSize );
180 if ( aItem.getFileStatus( aStatus ) == osl::FileBase::E_None )
181 {
182 nFileSize = aStatus.getFileSize();
183 }
184 }
185 return nFileSize;
186 }
187
188 // -----------------------------------------------------------------------------
189
PPPOptimizer_getImplementationName()190 OUString PPPOptimizer_getImplementationName()
191 {
192 return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.presentation.PresentationOptimizer" ) );
193 }
194
PPPOptimizer_getSupportedServiceNames()195 Sequence< OUString > PPPOptimizer_getSupportedServiceNames()
196 {
197 Sequence < OUString > aRet(1);
198 OUString* pArray = aRet.getArray();
199 pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM( SERVICE_NAME ) );
200 return aRet;
201 }
202
PPPOptimizer_createInstance(const Reference<XComponentContext> & rSMgr)203 Reference< XInterface > PPPOptimizer_createInstance( const Reference< XComponentContext > & rSMgr )
204 {
205 return (cppu::OWeakObject*) new PPPOptimizer( rSMgr );
206 }
207