1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: analysis.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
35 #include <com/sun/star/sheet/XAddIn.hpp>
36 #include <com/sun/star/lang/XServiceName.hpp>
37 #include <com/sun/star/lang/XServiceInfo.hpp>
38 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
39 #include <com/sun/star/sheet/addin/XAnalysis.hpp>
40 #include <com/sun/star/sheet/LocalizedName.hpp>
41 #include <com/sun/star/sheet/XCompatibilityNames.hpp>
43 #include <cppuhelper/implbase5.hxx> // helper for implementations
45 #include "analysisdefs.hxx"
46 #include "analysishelper.hxx"
51 class ConvertDataList
;
55 REF( CSS::uno::XInterface
) SAL_CALL
AnalysisAddIn_CreateInstance( const REF( CSS::lang::XMultiServiceFactory
)& );
58 class AnalysisAddIn
: public cppu::WeakImplHelper5
<
60 CSS::sheet::XCompatibilityNames
,
61 CSS::sheet::addin::XAnalysis
,
62 CSS::lang::XServiceName
,
63 CSS::lang::XServiceInfo
>
66 CSS::lang::Locale aFuncLoc
;
67 CSS::lang::Locale
* pDefLocales
;
70 ConvertDataList
* pCDL
;
73 ScaAnyConverter aAnyConv
;
75 ResMgr
& GetResMgr( void ) THROWDEF_RTE
;
76 STRING
GetDisplFuncStr( sal_uInt16 nFuncNum
) THROWDEF_RTE
;
77 STRING
GetFuncDescrStr( sal_uInt16 nResId
, sal_uInt16 nStrIndex
) THROWDEF_RTE
;
78 void InitDefLocales( void );
79 inline const CSS::lang::Locale
& GetLocale( sal_uInt32 nInd
);
80 void InitData( void );
82 /// Converts an Any to sal_Int32 in the range from 0 to 4 (date calculation mode).
83 sal_Int32
getDateMode(
84 const CSS::uno::Reference
< CSS::beans::XPropertySet
>& xPropSet
,
85 const CSS::uno::Any
& rAny
)
86 throw( CSS::uno::RuntimeException
, CSS::lang::IllegalArgumentException
);
90 const CSS::uno::Reference
< CSS::lang::XMultiServiceFactory
>& xServiceFact
);
91 virtual ~AnalysisAddIn();
93 double FactDouble( sal_Int32 nNum
) THROWDEF_RTE_IAE
;
95 static STRING
getImplementationName_Static();
96 static SEQ( STRING
) getSupportedServiceNames_Static();
99 virtual STRING SAL_CALL
getProgrammaticFuntionName( const STRING
& aDisplayName
) THROWDEF_RTE
;
100 virtual STRING SAL_CALL
getDisplayFunctionName( const STRING
& aProgrammaticName
) THROWDEF_RTE
;
101 virtual STRING SAL_CALL
getFunctionDescription( const STRING
& aProgrammaticName
) THROWDEF_RTE
;
102 virtual STRING SAL_CALL
getDisplayArgumentName( const STRING
& aProgrammaticFunctionName
, sal_Int32 nArgument
) THROWDEF_RTE
;
103 virtual STRING SAL_CALL
getArgumentDescription( const STRING
& aProgrammaticFunctionName
, sal_Int32 nArgument
) THROWDEF_RTE
;
104 virtual STRING SAL_CALL
getProgrammaticCategoryName( const STRING
& aProgrammaticFunctionName
) THROWDEF_RTE
;
105 virtual STRING SAL_CALL
getDisplayCategoryName( const STRING
& aProgrammaticFunctionName
) THROWDEF_RTE
;
107 // XCompatibilityNames
108 virtual SEQofLocName SAL_CALL
getCompatibilityNames( const STRING
& aProgrammaticName
) THROWDEF_RTE
;
111 virtual void SAL_CALL
setLocale( const CSS::lang::Locale
& eLocale
) THROWDEF_RTE
;
112 virtual CSS::lang::Locale SAL_CALL
getLocale( ) THROWDEF_RTE
;
115 virtual STRING SAL_CALL
getServiceName( ) THROWDEF_RTE
;
118 virtual STRING SAL_CALL
getImplementationName( ) THROWDEF_RTE
;
119 virtual sal_Bool SAL_CALL
supportsService( const STRING
& ServiceName
) THROWDEF_RTE
;
120 virtual SEQ( STRING
) SAL_CALL
getSupportedServiceNames( ) THROWDEF_RTE
;
122 // methods from own interfaces start here
125 // virtual double SAL_CALL get_Test( constREFXPS&, sal_Int32 nMode, double f1, double f2, double f3 ) THROWDEF_RTE;
127 virtual sal_Int32 SAL_CALL
getWorkday( constREFXPS
&, sal_Int32 nStartDate
, sal_Int32 nDays
, const ANY
& aHDay
) THROWDEF_RTE_IAE
;
128 virtual double SAL_CALL
getYearfrac( constREFXPS
&, sal_Int32 nStartDate
, sal_Int32 nEndDate
, const ANY
& aMode
) THROWDEF_RTE_IAE
;
129 virtual sal_Int32 SAL_CALL
getEdate( constREFXPS
&, sal_Int32 nStartDate
, sal_Int32 nMonths
) THROWDEF_RTE_IAE
;
130 virtual sal_Int32 SAL_CALL
getWeeknum( constREFXPS
&, sal_Int32 nStartDate
, sal_Int32 nMode
) THROWDEF_RTE_IAE
;
131 virtual sal_Int32 SAL_CALL
getEomonth( constREFXPS
&, sal_Int32 nStartDate
, sal_Int32 nMonths
) THROWDEF_RTE_IAE
;
132 virtual sal_Int32 SAL_CALL
getNetworkdays( constREFXPS
&, sal_Int32 nStartDate
, sal_Int32 nEndDate
, const ANY
& aHDay
) THROWDEF_RTE_IAE
;
134 virtual sal_Int32 SAL_CALL
getIseven( sal_Int32 nVal
) THROWDEF_RTE_IAE
;
135 virtual sal_Int32 SAL_CALL
getIsodd( sal_Int32 nVal
) THROWDEF_RTE_IAE
;
137 virtual double SAL_CALL
getMultinomial( constREFXPS
& xOpt
, const SEQSEQ( sal_Int32
)& aVLst
, const SEQ( com::sun::star::uno::Any
)& aOptVLst
) THROWDEF_RTE_IAE
;
138 virtual double SAL_CALL
getSeriessum( double fX
, double fN
, double fM
, const SEQSEQ( double )& aCoeffList
) THROWDEF_RTE_IAE
;
139 virtual double SAL_CALL
getQuotient( double fNum
, double fDenum
) THROWDEF_RTE_IAE
;
141 virtual double SAL_CALL
getMround( double fNum
, double fMult
) THROWDEF_RTE_IAE
;
142 virtual double SAL_CALL
getSqrtpi( double fNum
) THROWDEF_RTE_IAE
;
144 virtual double SAL_CALL
getRandbetween( double fMin
, double fMax
) THROWDEF_RTE_IAE
;
146 virtual double SAL_CALL
getGcd( constREFXPS
& xOpt
, const SEQSEQ( double )& aVLst
, const SEQ( ANY
)& aOptVLst
) THROWDEF_RTE_IAE
;
147 virtual double SAL_CALL
getLcm( constREFXPS
& xOpt
, const SEQSEQ( double )& aVLst
, const SEQ( ANY
)& aOptVLst
) THROWDEF_RTE_IAE
;
149 virtual double SAL_CALL
getBesseli( double fNum
, sal_Int32 nOrder
) THROWDEF_RTE_IAE
;
150 virtual double SAL_CALL
getBesselj( double fNum
, sal_Int32 nOrder
) THROWDEF_RTE_IAE
;
151 virtual double SAL_CALL
getBesselk( double fNum
, sal_Int32 nOrder
) THROWDEF_RTE_IAE
;
152 virtual double SAL_CALL
getBessely( double fNum
, sal_Int32 nOrder
) THROWDEF_RTE_IAE
;
154 virtual STRING SAL_CALL
getBin2Oct( constREFXPS
& xOpt
, const STRING
& aNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
155 virtual double SAL_CALL
getBin2Dec( const STRING
& aNum
) THROWDEF_RTE_IAE
;
156 virtual STRING SAL_CALL
getBin2Hex( constREFXPS
& xOpt
, const STRING
& aNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
158 virtual STRING SAL_CALL
getOct2Bin( constREFXPS
& xOpt
, const STRING
& aNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
159 virtual double SAL_CALL
getOct2Dec( const STRING
& aNum
) THROWDEF_RTE_IAE
;
160 virtual STRING SAL_CALL
getOct2Hex( constREFXPS
& xOpt
, const STRING
& aNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
162 virtual STRING SAL_CALL
getDec2Bin( constREFXPS
& xOpt
, sal_Int32 fNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
163 virtual STRING SAL_CALL
getDec2Oct( constREFXPS
& xOpt
, sal_Int32 fNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
164 virtual STRING SAL_CALL
getDec2Hex( constREFXPS
& xOpt
, double fNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
166 virtual STRING SAL_CALL
getHex2Bin( constREFXPS
& xOpt
, const STRING
& aNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
167 virtual double SAL_CALL
getHex2Dec( const STRING
& aNum
) THROWDEF_RTE_IAE
;
168 virtual STRING SAL_CALL
getHex2Oct( constREFXPS
& xOpt
, const STRING
& aNum
, const ANY
& rPlaces
) THROWDEF_RTE_IAE
;
170 virtual sal_Int32 SAL_CALL
getDelta( constREFXPS
& xOpt
, double fNum1
, const ANY
& rNum2
) THROWDEF_RTE_IAE
;
172 virtual double SAL_CALL
getErf( constREFXPS
& xOpt
, double fLowerLimit
, const ANY
& rUpperLimit
) THROWDEF_RTE_IAE
;
173 virtual double SAL_CALL
getErfc( double fLowerLimit
) THROWDEF_RTE_IAE
;
175 virtual sal_Int32 SAL_CALL
getGestep( constREFXPS
& xOpt
, double fNum
, const ANY
& rStep
) THROWDEF_RTE_IAE
;
177 virtual double SAL_CALL
getFactdouble( sal_Int32 nNum
) THROWDEF_RTE_IAE
;
179 virtual double SAL_CALL
getImabs( const STRING
& aNum
) THROWDEF_RTE_IAE
;
180 virtual double SAL_CALL
getImaginary( const STRING
& aNum
) THROWDEF_RTE_IAE
;
181 virtual STRING SAL_CALL
getImpower( const STRING
& aNum
, double fPower
) THROWDEF_RTE_IAE
;
182 virtual double SAL_CALL
getImargument( const STRING
& aNum
) THROWDEF_RTE_IAE
;
183 virtual STRING SAL_CALL
getImcos( const STRING
& aNum
) THROWDEF_RTE_IAE
;
184 virtual STRING SAL_CALL
getImdiv( const STRING
& aDivident
, const STRING
& aDivisor
) THROWDEF_RTE_IAE
;
185 virtual STRING SAL_CALL
getImexp( const STRING
& aNum
) THROWDEF_RTE_IAE
;
186 virtual STRING SAL_CALL
getImconjugate( const STRING
& aNum
) THROWDEF_RTE_IAE
;
187 virtual STRING SAL_CALL
getImln( const STRING
& aNum
) THROWDEF_RTE_IAE
;
188 virtual STRING SAL_CALL
getImlog10( const STRING
& aNum
) THROWDEF_RTE_IAE
;
189 virtual STRING SAL_CALL
getImlog2( const STRING
& aNum
) THROWDEF_RTE_IAE
;
190 virtual STRING SAL_CALL
getImproduct( constREFXPS
& xOpt
, const SEQSEQ( STRING
)& aNum1
, const SEQ_ANY
& aNumList
) THROWDEF_RTE_IAE
;
191 virtual double SAL_CALL
getImreal( const STRING
& aNum
) THROWDEF_RTE_IAE
;
192 virtual STRING SAL_CALL
getImsin( const STRING
& aNum
) THROWDEF_RTE_IAE
;
193 virtual STRING SAL_CALL
getImsub( const STRING
& aNum1
, const STRING
& aNum2
) THROWDEF_RTE_IAE
;
194 virtual STRING SAL_CALL
getImsum( constREFXPS
& xOpt
, const SEQSEQ( STRING
)& aNum1
, const SEQ( ANY
)& aFollowingPars
) THROWDEF_RTE_IAE
;
196 virtual STRING SAL_CALL
getImsqrt( const STRING
& aNum
) THROWDEF_RTE_IAE
;
197 virtual STRING SAL_CALL
getComplex( double fReal
, double fImaginary
, const ANY
& rSuffix
) THROWDEF_RTE_IAE
;
199 virtual double SAL_CALL
getConvert( double fVal
, const STRING
& aFromUnit
, const STRING
& aToUnit
) THROWDEF_RTE_IAE
;
201 virtual double SAL_CALL
getAmordegrc( constREFXPS
&, double fCost
, sal_Int32 nDate
, sal_Int32 nFirstPer
, double fRestVal
, double fPer
, double fRate
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
202 virtual double SAL_CALL
getAmorlinc( constREFXPS
&, double fCost
, sal_Int32 nDate
, sal_Int32 nFirstPer
, double fRestVal
, double fPer
, double fRate
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
203 virtual double SAL_CALL
getAccrint( constREFXPS
& xOpt
, sal_Int32 nIssue
, sal_Int32 nFirstInter
, sal_Int32 nSettle
, double fRate
, const ANY
& rVal
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
204 virtual double SAL_CALL
getAccrintm( constREFXPS
& xOpt
, sal_Int32 nIssue
, sal_Int32 nSettle
, double fRate
, const ANY
& rVal
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
205 virtual double SAL_CALL
getReceived( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fInvest
, double fDisc
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
206 virtual double SAL_CALL
getDisc( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
, double fRedemp
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
207 virtual double SAL_CALL
getDuration( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fYield
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
208 virtual double SAL_CALL
getEffect( double fNominal
, sal_Int32 nPeriods
) THROWDEF_RTE_IAE
;
209 virtual double SAL_CALL
getCumprinc( double fRate
, sal_Int32 nNumPeriods
, double fVal
, sal_Int32 nStartPer
, sal_Int32 nEndPer
, sal_Int32 nPayType
) THROWDEF_RTE_IAE
;
210 virtual double SAL_CALL
getCumipmt( double fRate
, sal_Int32 nNumPeriods
, double fVal
, sal_Int32 nStartPer
, sal_Int32 nEndPer
, sal_Int32 nPayType
) THROWDEF_RTE_IAE
;
211 virtual double SAL_CALL
getPrice( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
212 virtual double SAL_CALL
getPricedisc( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
, double fRedemp
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
213 virtual double SAL_CALL
getPricemat( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, double fRate
, double fYield
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
214 virtual double SAL_CALL
getMduration( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fYield
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
215 virtual double SAL_CALL
getNominal( double fRate
, sal_Int32 nPeriods
) THROWDEF_RTE_IAE
;
216 virtual double SAL_CALL
getDollarfr( double fDollarDec
, sal_Int32 nFrac
) THROWDEF_RTE_IAE
;
217 virtual double SAL_CALL
getDollarde( double fDollarFrac
, sal_Int32 nFrac
) THROWDEF_RTE_IAE
;
218 virtual double SAL_CALL
getYield( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
219 virtual double SAL_CALL
getYielddisc( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
, double fRedemp
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
220 virtual double SAL_CALL
getYieldmat( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, double fRate
, double fPrice
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
221 virtual double SAL_CALL
getTbilleq( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
) THROWDEF_RTE_IAE
;
222 virtual double SAL_CALL
getTbillprice( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
) THROWDEF_RTE_IAE
;
223 virtual double SAL_CALL
getTbillyield( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
) THROWDEF_RTE_IAE
;
224 virtual double SAL_CALL
getOddfprice( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, sal_Int32 nFirstCoup
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
225 virtual double SAL_CALL
getOddfyield( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, sal_Int32 nFirstCoup
, double fRate
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
226 virtual double SAL_CALL
getOddlprice( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nLastInterest
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
227 virtual double SAL_CALL
getOddlyield( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nLastInterest
, double fRate
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
228 virtual double SAL_CALL
getXirr( constREFXPS
& xOpt
, const SEQSEQ( double )& rValues
, const SEQSEQ( sal_Int32
)& rDates
, const ANY
& rGuess
) THROWDEF_RTE_IAE
;
229 virtual double SAL_CALL
getXnpv( double fRate
, const SEQSEQ( double )& rValues
, const SEQSEQ( sal_Int32
)& rDates
) THROWDEF_RTE_IAE
;
230 virtual double SAL_CALL
getIntrate( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fInvest
, double fRedemp
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
231 virtual double SAL_CALL
getCoupncd( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
232 virtual double SAL_CALL
getCoupdays( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
233 virtual double SAL_CALL
getCoupdaysnc( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
234 virtual double SAL_CALL
getCoupdaybs( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
235 virtual double SAL_CALL
getCouppcd( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
236 virtual double SAL_CALL
getCoupnum( constREFXPS
& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const ANY
& rOptBase
) THROWDEF_RTE_IAE
;
237 virtual double SAL_CALL
getFvschedule( double fPrinc
, const SEQSEQ( double )& rSchedule
) THROWDEF_RTE_IAE
;
240 //------------------------------------------------------------------