1*cdf0e10cSrcweir  /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sdext.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include "pppoptimizer.hxx"
32*cdf0e10cSrcweir #include "impoptimizer.hxx"
33*cdf0e10cSrcweir #include <osl/file.hxx>
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir #include <com/sun/star/lang/IllegalArgumentException.hpp>
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir using namespace ::rtl;
38*cdf0e10cSrcweir using namespace ::com::sun::star::uno;
39*cdf0e10cSrcweir using namespace ::com::sun::star::util;
40*cdf0e10cSrcweir using namespace ::com::sun::star::lang;
41*cdf0e10cSrcweir using namespace ::com::sun::star::frame;
42*cdf0e10cSrcweir using namespace ::com::sun::star::beans;
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir #define SERVICE_NAME "com.sun.star.comp.PPPOptimizer"
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir // ----------------
47*cdf0e10cSrcweir // - PPPOptimizer -
48*cdf0e10cSrcweir // ----------------
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir PPPOptimizer::PPPOptimizer( const Reference< XComponentContext > &rxMSF ) :
51*cdf0e10cSrcweir     mxMSF( rxMSF )
52*cdf0e10cSrcweir {
53*cdf0e10cSrcweir }
54*cdf0e10cSrcweir 
55*cdf0e10cSrcweir // -----------------------------------------------------------------------------
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir PPPOptimizer::~PPPOptimizer()
58*cdf0e10cSrcweir {
59*cdf0e10cSrcweir }
60*cdf0e10cSrcweir 
61*cdf0e10cSrcweir // -----------------------------------------------------------------------------
62*cdf0e10cSrcweir // XInitialization
63*cdf0e10cSrcweir // -----------------------------------------------------------------------------
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir void SAL_CALL PPPOptimizer::initialize( const Sequence< Any >& aArguments )
66*cdf0e10cSrcweir 	throw ( Exception, RuntimeException )
67*cdf0e10cSrcweir {
68*cdf0e10cSrcweir 	if( aArguments.getLength() != 1 )
69*cdf0e10cSrcweir 		throw IllegalArgumentException();
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir 	Reference< XFrame > xFrame;
72*cdf0e10cSrcweir 	aArguments[ 0 ] >>= xFrame;
73*cdf0e10cSrcweir 	if ( xFrame.is() )
74*cdf0e10cSrcweir 		mxController = xFrame->getController();
75*cdf0e10cSrcweir }
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir // -----------------------------------------------------------------------------
78*cdf0e10cSrcweir // XServiceInfo
79*cdf0e10cSrcweir // -----------------------------------------------------------------------------
80*cdf0e10cSrcweir 
81*cdf0e10cSrcweir OUString SAL_CALL PPPOptimizer::getImplementationName()
82*cdf0e10cSrcweir 	throw ( RuntimeException )
83*cdf0e10cSrcweir {
84*cdf0e10cSrcweir 	return PPPOptimizer_getImplementationName();
85*cdf0e10cSrcweir }
86*cdf0e10cSrcweir 
87*cdf0e10cSrcweir sal_Bool SAL_CALL PPPOptimizer::supportsService( const OUString& rServiceName )
88*cdf0e10cSrcweir 	throw ( RuntimeException )
89*cdf0e10cSrcweir {
90*cdf0e10cSrcweir     return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SERVICE_NAME ) );
91*cdf0e10cSrcweir }
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir Sequence< OUString > SAL_CALL PPPOptimizer::getSupportedServiceNames()
94*cdf0e10cSrcweir 	throw ( RuntimeException )
95*cdf0e10cSrcweir {
96*cdf0e10cSrcweir     return PPPOptimizer_getSupportedServiceNames();
97*cdf0e10cSrcweir }
98*cdf0e10cSrcweir 
99*cdf0e10cSrcweir // -----------------------------------------------------------------------------
100*cdf0e10cSrcweir // XDispatchProvider
101*cdf0e10cSrcweir // -----------------------------------------------------------------------------
102*cdf0e10cSrcweir 
103*cdf0e10cSrcweir Reference< com::sun::star::frame::XDispatch > SAL_CALL PPPOptimizer::queryDispatch(
104*cdf0e10cSrcweir 	const URL& aURL, const ::rtl::OUString& /* aTargetFrameName */, sal_Int32 /* nSearchFlags */ ) throw( RuntimeException )
105*cdf0e10cSrcweir {
106*cdf0e10cSrcweir 	Reference < XDispatch > xRet;
107*cdf0e10cSrcweir     if ( aURL.Protocol.compareToAscii( "vnd.com.sun.star.comp.PPPOptimizer:" ) == 0 )
108*cdf0e10cSrcweir     {
109*cdf0e10cSrcweir //		if ( aURL.Path.compareToAscii( "Function1" ) == 0 )
110*cdf0e10cSrcweir 		xRet = this;
111*cdf0e10cSrcweir     }
112*cdf0e10cSrcweir 	return xRet;
113*cdf0e10cSrcweir }
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir //------------------------------------------------------------------------------
116*cdf0e10cSrcweir 
117*cdf0e10cSrcweir Sequence< Reference< com::sun::star::frame::XDispatch > > SAL_CALL PPPOptimizer::queryDispatches(
118*cdf0e10cSrcweir 	const Sequence< com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw( RuntimeException )
119*cdf0e10cSrcweir {
120*cdf0e10cSrcweir 	Sequence< Reference< com::sun::star::frame::XDispatch> > aReturn( aDescripts.getLength() );
121*cdf0e10cSrcweir 	Reference< com::sun::star::frame::XDispatch>* pReturn = aReturn.getArray();
122*cdf0e10cSrcweir 	const com::sun::star::frame::DispatchDescriptor* pDescripts = aDescripts.getConstArray();
123*cdf0e10cSrcweir 	for (sal_Int16 i = 0; i < aDescripts.getLength(); ++i, ++pReturn, ++pDescripts )
124*cdf0e10cSrcweir 	{
125*cdf0e10cSrcweir 		*pReturn = queryDispatch( pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags );
126*cdf0e10cSrcweir 	}
127*cdf0e10cSrcweir 	return aReturn;
128*cdf0e10cSrcweir }
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir // -----------------------------------------------------------------------------
131*cdf0e10cSrcweir // XDispatch
132*cdf0e10cSrcweir // -----------------------------------------------------------------------------
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir void SAL_CALL PPPOptimizer::dispatch( const URL& rURL, const Sequence< PropertyValue >& lArguments )
135*cdf0e10cSrcweir     throw( RuntimeException )
136*cdf0e10cSrcweir {
137*cdf0e10cSrcweir 	if ( mxController.is() && ( rURL.Protocol.compareToAscii( "vnd.com.sun.star.comp.PPPOptimizer:" ) == 0 ) )
138*cdf0e10cSrcweir 	{
139*cdf0e10cSrcweir 		if ( rURL.Path.compareToAscii( "optimize" ) == 0 )
140*cdf0e10cSrcweir 		{
141*cdf0e10cSrcweir 			Reference< XModel > xModel( mxController->getModel() );
142*cdf0e10cSrcweir 			if ( xModel.is() )
143*cdf0e10cSrcweir 			{
144*cdf0e10cSrcweir 				try
145*cdf0e10cSrcweir 				{
146*cdf0e10cSrcweir 					ImpOptimizer aOptimizer( mxMSF, xModel );
147*cdf0e10cSrcweir 					aOptimizer.Optimize( lArguments );
148*cdf0e10cSrcweir 				}
149*cdf0e10cSrcweir 				catch( Exception& )
150*cdf0e10cSrcweir 				{
151*cdf0e10cSrcweir 				}
152*cdf0e10cSrcweir 			}
153*cdf0e10cSrcweir 		}
154*cdf0e10cSrcweir 	}
155*cdf0e10cSrcweir }
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir //===============================================
158*cdf0e10cSrcweir void SAL_CALL PPPOptimizer::addStatusListener( const Reference< XStatusListener >&, const URL& )
159*cdf0e10cSrcweir 	throw( RuntimeException )
160*cdf0e10cSrcweir {
161*cdf0e10cSrcweir     // TODO
162*cdf0e10cSrcweir     OSL_ENSURE( sal_False, "PPPOptimizer::addStatusListener()\nNot implemented yet!" );
163*cdf0e10cSrcweir }
164*cdf0e10cSrcweir 
165*cdf0e10cSrcweir //===============================================
166*cdf0e10cSrcweir void SAL_CALL PPPOptimizer::removeStatusListener( const Reference< XStatusListener >&, const URL& )
167*cdf0e10cSrcweir     throw( RuntimeException )
168*cdf0e10cSrcweir {
169*cdf0e10cSrcweir     // TODO
170*cdf0e10cSrcweir     OSL_ENSURE( sal_False, "PPPOptimizer::removeStatusListener()\nNot implemented yet!" );
171*cdf0e10cSrcweir }
172*cdf0e10cSrcweir 
173*cdf0e10cSrcweir // -----------------------------------------------------------------------------
174*cdf0e10cSrcweir // returning filesize, on error zero is returned
175*cdf0e10cSrcweir sal_Int64 PPPOptimizer::GetFileSize( const rtl::OUString& rURL )
176*cdf0e10cSrcweir {
177*cdf0e10cSrcweir 	sal_Int64 nFileSize = 0;
178*cdf0e10cSrcweir 	osl::DirectoryItem aItem;
179*cdf0e10cSrcweir 	if ( osl::DirectoryItem::get( rURL, aItem ) == osl::FileBase::E_None )
180*cdf0e10cSrcweir 	{
181*cdf0e10cSrcweir 		osl::FileStatus aStatus( osl_FileStatus_Mask_FileSize );
182*cdf0e10cSrcweir 		if ( aItem.getFileStatus( aStatus ) == osl::FileBase::E_None )
183*cdf0e10cSrcweir 		{
184*cdf0e10cSrcweir 			nFileSize = aStatus.getFileSize();
185*cdf0e10cSrcweir 		}
186*cdf0e10cSrcweir 	}
187*cdf0e10cSrcweir 	return nFileSize;
188*cdf0e10cSrcweir }
189*cdf0e10cSrcweir 
190*cdf0e10cSrcweir // -----------------------------------------------------------------------------
191*cdf0e10cSrcweir 
192*cdf0e10cSrcweir OUString PPPOptimizer_getImplementationName()
193*cdf0e10cSrcweir {
194*cdf0e10cSrcweir 	return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.PPPOptimizerImp" ) );
195*cdf0e10cSrcweir }
196*cdf0e10cSrcweir 
197*cdf0e10cSrcweir Sequence< OUString > PPPOptimizer_getSupportedServiceNames()
198*cdf0e10cSrcweir {
199*cdf0e10cSrcweir 	Sequence < OUString > aRet(1);
200*cdf0e10cSrcweir     OUString* pArray = aRet.getArray();
201*cdf0e10cSrcweir     pArray[0] =  OUString ( RTL_CONSTASCII_USTRINGPARAM( SERVICE_NAME ) );
202*cdf0e10cSrcweir     return aRet;
203*cdf0e10cSrcweir }
204*cdf0e10cSrcweir 
205*cdf0e10cSrcweir Reference< XInterface > PPPOptimizer_createInstance( const Reference< XComponentContext > & rSMgr )
206*cdf0e10cSrcweir 	throw( Exception )
207*cdf0e10cSrcweir {
208*cdf0e10cSrcweir 	return (cppu::OWeakObject*) new PPPOptimizer( rSMgr );
209*cdf0e10cSrcweir }
210