1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_SCADDINS_SOURCE_ANALYSIS_ANALYSIS_HXX
21 #define INCLUDED_SCADDINS_SOURCE_ANALYSIS_ANALYSIS_HXX
24 #include <com/sun/star/sheet/XAddIn.hpp>
25 #include <com/sun/star/lang/XServiceName.hpp>
26 #include <com/sun/star/lang/XServiceInfo.hpp>
27 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
28 #include <com/sun/star/sheet/addin/XAnalysis.hpp>
29 #include <com/sun/star/sheet/LocalizedName.hpp>
30 #include <com/sun/star/sheet/XCompatibilityNames.hpp>
31 #include <com/sun/star/sheet/NoConvergenceException.hpp>
33 #include <cppuhelper/implbase.hxx>
35 #include "analysisdefs.hxx"
36 #include "analysishelper.hxx"
38 namespace sca
{ namespace analysis
{
39 class ConvertDataList
;
44 css::uno::Reference
< css::uno::XInterface
> SAL_CALL
AnalysisAddIn_CreateInstance( const css::uno::Reference
< css::lang::XMultiServiceFactory
>& );
47 class AnalysisAddIn
: public cppu::WeakImplHelper
<
49 css::sheet::XCompatibilityNames
,
50 css::sheet::addin::XAnalysis
,
51 css::lang::XServiceName
,
52 css::lang::XServiceInfo
>
55 css::lang::Locale aFuncLoc
;
56 css::lang::Locale
* pDefLocales
;
57 sca::analysis::FuncDataList
* pFD
;
59 sca::analysis::ConvertDataList
* pCDL
;
62 sca::analysis::ScaAnyConverter aAnyConv
;
64 /// @throws css::uno::RuntimeException
66 /// @throws css::uno::RuntimeException
67 OUString
GetFuncDescrStr( sal_uInt16 nResId
, sal_uInt16 nStrIndex
);
68 void InitDefLocales();
69 inline const css::lang::Locale
& GetLocale( sal_uInt32 nInd
);
72 /// Converts an Any to sal_Int32 in the range from 0 to 4 (date calculation mode).
74 /// @throws css::uno::RuntimeException
75 /// @throws css::lang::IllegalArgumentException
76 sal_Int32
getDateMode(
77 const css::uno::Reference
< css::beans::XPropertySet
>& xPropSet
,
78 const css::uno::Any
& rAny
);
81 explicit AnalysisAddIn(
82 const css::uno::Reference
< css::uno::XComponentContext
>& xContext
);
83 virtual ~AnalysisAddIn() override
;
85 /// @throws css::uno::RuntimeException
86 /// @throws css::lang::IllegalArgumentException
87 double FactDouble( sal_Int32 nNum
);
89 static OUString
getImplementationName_Static();
90 static css::uno::Sequence
< OUString
> getSupportedServiceNames_Static();
93 virtual OUString SAL_CALL
getProgrammaticFuntionName( const OUString
& aDisplayName
) override
;
94 virtual OUString SAL_CALL
getDisplayFunctionName( const OUString
& aProgrammaticName
) override
;
95 virtual OUString SAL_CALL
getFunctionDescription( const OUString
& aProgrammaticName
) override
;
96 virtual OUString SAL_CALL
getDisplayArgumentName( const OUString
& aProgrammaticFunctionName
, sal_Int32 nArgument
) override
;
97 virtual OUString SAL_CALL
getArgumentDescription( const OUString
& aProgrammaticFunctionName
, sal_Int32 nArgument
) override
;
98 virtual OUString SAL_CALL
getProgrammaticCategoryName( const OUString
& aProgrammaticFunctionName
) override
;
99 virtual OUString SAL_CALL
getDisplayCategoryName( const OUString
& aProgrammaticFunctionName
) override
;
101 // XCompatibilityNames
102 virtual css::uno::Sequence
< css::sheet::LocalizedName
> SAL_CALL
getCompatibilityNames( const OUString
& aProgrammaticName
) override
;
105 virtual void SAL_CALL
setLocale( const css::lang::Locale
& eLocale
) override
;
106 virtual css::lang::Locale SAL_CALL
getLocale( ) override
;
109 virtual OUString SAL_CALL
getServiceName( ) override
;
112 virtual OUString SAL_CALL
getImplementationName( ) override
;
113 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
114 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames( ) override
;
116 // methods from own interfaces start here
119 // virtual double SAL_CALL get_Test( const css::uno::Reference< css::beans::XPropertySet >&, sal_Int32 nMode, double f1, double f2, double f3 ) throw( css::uno::RuntimeException );
121 virtual sal_Int32 SAL_CALL
getWorkday( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nDays
, const css::uno::Any
& aHDay
) override
;
122 virtual double SAL_CALL
getYearfrac( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nEndDate
, const css::uno::Any
& aMode
) override
;
123 virtual sal_Int32 SAL_CALL
getEdate( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nMonths
) override
;
124 virtual sal_Int32 SAL_CALL
getWeeknum( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nMode
) override
;
125 virtual sal_Int32 SAL_CALL
getEomonth( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nMonths
) override
;
126 virtual sal_Int32 SAL_CALL
getNetworkdays( const css::uno::Reference
< css::beans::XPropertySet
>&, sal_Int32 nStartDate
, sal_Int32 nEndDate
, const css::uno::Any
& aHDay
) override
;
128 virtual sal_Int32 SAL_CALL
getIseven( sal_Int32 nVal
) override
;
129 virtual sal_Int32 SAL_CALL
getIsodd( sal_Int32 nVal
) override
;
131 virtual double SAL_CALL
getMultinomial( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< sal_Int32
> >& aVLst
, const css::uno::Sequence
< css::uno::Any
>& aOptVLst
) override
;
132 virtual double SAL_CALL
getSeriessum( double fX
, double fN
, double fM
, const css::uno::Sequence
< css::uno::Sequence
< double > >& aCoeffList
) override
;
133 virtual double SAL_CALL
getQuotient( double fNum
, double fDenum
) override
;
135 virtual double SAL_CALL
getMround( double fNum
, double fMult
) override
;
136 virtual double SAL_CALL
getSqrtpi( double fNum
) override
;
138 virtual double SAL_CALL
getRandbetween( double fMin
, double fMax
) override
;
140 virtual double SAL_CALL
getGcd( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< double > >& aVLst
, const css::uno::Sequence
< css::uno::Any
>& aOptVLst
) override
;
141 virtual double SAL_CALL
getLcm( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< double > >& aVLst
, const css::uno::Sequence
< css::uno::Any
>& aOptVLst
) override
;
143 virtual double SAL_CALL
getBesseli( double fNum
, sal_Int32 nOrder
) override
;
144 virtual double SAL_CALL
getBesselj( double fNum
, sal_Int32 nOrder
) override
;
145 virtual double SAL_CALL
getBesselk( double fNum
, sal_Int32 nOrder
) override
;
146 virtual double SAL_CALL
getBessely( double fNum
, sal_Int32 nOrder
) override
;
148 virtual OUString SAL_CALL
getBin2Oct( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
149 virtual double SAL_CALL
getBin2Dec( const OUString
& aNum
) override
;
150 virtual OUString SAL_CALL
getBin2Hex( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
152 virtual OUString SAL_CALL
getOct2Bin( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
153 virtual double SAL_CALL
getOct2Dec( const OUString
& aNum
) override
;
154 virtual OUString SAL_CALL
getOct2Hex( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
156 virtual OUString SAL_CALL
getDec2Bin( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 fNum
, const css::uno::Any
& rPlaces
) override
;
157 virtual OUString SAL_CALL
getDec2Oct( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 fNum
, const css::uno::Any
& rPlaces
) override
;
158 virtual OUString SAL_CALL
getDec2Hex( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, double fNum
, const css::uno::Any
& rPlaces
) override
;
160 virtual OUString SAL_CALL
getHex2Bin( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
161 virtual double SAL_CALL
getHex2Dec( const OUString
& aNum
) override
;
162 virtual OUString SAL_CALL
getHex2Oct( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const OUString
& aNum
, const css::uno::Any
& rPlaces
) override
;
164 virtual sal_Int32 SAL_CALL
getDelta( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, double fNum1
, const css::uno::Any
& rNum2
) override
;
166 virtual double SAL_CALL
getErf( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, double fLowerLimit
, const css::uno::Any
& rUpperLimit
) override
;
167 virtual double SAL_CALL
getErfc( double fLowerLimit
) override
;
169 virtual sal_Int32 SAL_CALL
getGestep( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, double fNum
, const css::uno::Any
& rStep
) override
;
171 virtual double SAL_CALL
getFactdouble( sal_Int32 nNum
) override
;
173 virtual double SAL_CALL
getImabs( const OUString
& aNum
) override
;
174 virtual double SAL_CALL
getImaginary( const OUString
& aNum
) override
;
175 virtual OUString SAL_CALL
getImpower( const OUString
& aNum
, double fPower
) override
;
176 virtual double SAL_CALL
getImargument( const OUString
& aNum
) override
;
177 virtual OUString SAL_CALL
getImcos( const OUString
& aNum
) override
;
178 virtual OUString SAL_CALL
getImdiv( const OUString
& aDivident
, const OUString
& aDivisor
) override
;
179 virtual OUString SAL_CALL
getImexp( const OUString
& aNum
) override
;
180 virtual OUString SAL_CALL
getImconjugate( const OUString
& aNum
) override
;
181 virtual OUString SAL_CALL
getImln( const OUString
& aNum
) override
;
182 virtual OUString SAL_CALL
getImlog10( const OUString
& aNum
) override
;
183 virtual OUString SAL_CALL
getImlog2( const OUString
& aNum
) override
;
184 virtual OUString SAL_CALL
getImproduct( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< OUString
> >& aNum1
, const css::uno::Sequence
< css::uno::Any
>& aNumList
) override
;
185 virtual double SAL_CALL
getImreal( const OUString
& aNum
) override
;
186 virtual OUString SAL_CALL
getImsin( const OUString
& aNum
) override
;
187 virtual OUString SAL_CALL
getImsub( const OUString
& aNum1
, const OUString
& aNum2
) override
;
188 virtual OUString SAL_CALL
getImsum( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< OUString
> >& aNum1
, const css::uno::Sequence
< css::uno::Any
>& aFollowingPars
) override
;
190 virtual OUString SAL_CALL
getImsqrt( const OUString
& aNum
) override
;
191 virtual OUString SAL_CALL
getImtan( const OUString
& aNum
) override
;
192 virtual OUString SAL_CALL
getImsec( const OUString
& aNum
) override
;
193 virtual OUString SAL_CALL
getImcsc( const OUString
& aNum
) override
;
194 virtual OUString SAL_CALL
getImcot( const OUString
& aNum
) override
;
195 virtual OUString SAL_CALL
getImsinh( const OUString
& aNum
) override
;
196 virtual OUString SAL_CALL
getImcosh( const OUString
& aNum
) override
;
197 virtual OUString SAL_CALL
getImsech( const OUString
& aNum
) override
;
198 virtual OUString SAL_CALL
getImcsch( const OUString
& aNum
) override
;
199 virtual OUString SAL_CALL
getComplex( double fReal
, double fImaginary
, const css::uno::Any
& rSuffix
) override
;
201 virtual double SAL_CALL
getConvert( double fVal
, const OUString
& aFromUnit
, const OUString
& aToUnit
) override
;
203 virtual double SAL_CALL
getAmordegrc( const css::uno::Reference
< css::beans::XPropertySet
>&, double fCost
, sal_Int32 nDate
, sal_Int32 nFirstPer
, double fRestVal
, double fPer
, double fRate
, const css::uno::Any
& rOptBase
) override
;
204 virtual double SAL_CALL
getAmorlinc( const css::uno::Reference
< css::beans::XPropertySet
>&, double fCost
, sal_Int32 nDate
, sal_Int32 nFirstPer
, double fRestVal
, double fPer
, double fRate
, const css::uno::Any
& rOptBase
) override
;
205 virtual double SAL_CALL
getAccrint( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nIssue
, sal_Int32 nFirstInter
, sal_Int32 nSettle
, double fRate
, const css::uno::Any
& rVal
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
206 virtual double SAL_CALL
getAccrintm( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nIssue
, sal_Int32 nSettle
, double fRate
, const css::uno::Any
& rVal
, const css::uno::Any
& rOptBase
) override
;
207 virtual double SAL_CALL
getReceived( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fInvest
, double fDisc
, const css::uno::Any
& rOptBase
) override
;
208 virtual double SAL_CALL
getDisc( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
, double fRedemp
, const css::uno::Any
& rOptBase
) override
;
209 virtual double SAL_CALL
getDuration( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fYield
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
210 virtual double SAL_CALL
getEffect( double fNominal
, sal_Int32 nPeriods
) override
;
211 virtual double SAL_CALL
getCumprinc( double fRate
, sal_Int32 nNumPeriods
, double fVal
, sal_Int32 nStartPer
, sal_Int32 nEndPer
, sal_Int32 nPayType
) override
;
212 virtual double SAL_CALL
getCumipmt( double fRate
, sal_Int32 nNumPeriods
, double fVal
, sal_Int32 nStartPer
, sal_Int32 nEndPer
, sal_Int32 nPayType
) override
;
213 virtual double SAL_CALL
getPrice( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
214 virtual double SAL_CALL
getPricedisc( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
, double fRedemp
, const css::uno::Any
& rOptBase
) override
;
215 virtual double SAL_CALL
getPricemat( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, double fRate
, double fYield
, const css::uno::Any
& rOptBase
) override
;
216 virtual double SAL_CALL
getMduration( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fYield
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
217 virtual double SAL_CALL
getNominal( double fRate
, sal_Int32 nPeriods
) override
;
218 virtual double SAL_CALL
getDollarfr( double fDollarDec
, sal_Int32 nFrac
) override
;
219 virtual double SAL_CALL
getDollarde( double fDollarFrac
, sal_Int32 nFrac
) override
;
220 virtual double SAL_CALL
getYield( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fCoup
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
221 virtual double SAL_CALL
getYielddisc( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
, double fRedemp
, const css::uno::Any
& rOptBase
) override
;
222 virtual double SAL_CALL
getYieldmat( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, double fRate
, double fPrice
, const css::uno::Any
& rOptBase
) override
;
223 virtual double SAL_CALL
getTbilleq( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
) override
;
224 virtual double SAL_CALL
getTbillprice( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fDisc
) override
;
225 virtual double SAL_CALL
getTbillyield( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fPrice
) override
;
226 virtual double SAL_CALL
getOddfprice( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, sal_Int32 nFirstCoup
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
227 virtual double SAL_CALL
getOddfyield( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nIssue
, sal_Int32 nFirstCoup
, double fRate
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
228 virtual double SAL_CALL
getOddlprice( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nLastInterest
, double fRate
, double fYield
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
229 virtual double SAL_CALL
getOddlyield( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nLastInterest
, double fRate
, double fPrice
, double fRedemp
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
230 virtual double SAL_CALL
getXirr( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, const css::uno::Sequence
< css::uno::Sequence
< double > >& rValues
, const css::uno::Sequence
< css::uno::Sequence
< sal_Int32
> >& rDates
, const css::uno::Any
& rGuess
) override
;
231 virtual double SAL_CALL
getXnpv( double fRate
, const css::uno::Sequence
< css::uno::Sequence
< double > >& rValues
, const css::uno::Sequence
< css::uno::Sequence
< sal_Int32
> >& rDates
) override
;
232 virtual double SAL_CALL
getIntrate( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, double fInvest
, double fRedemp
, const css::uno::Any
& rOptBase
) override
;
233 virtual double SAL_CALL
getCoupncd( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
234 virtual double SAL_CALL
getCoupdays( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
235 virtual double SAL_CALL
getCoupdaysnc( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
236 virtual double SAL_CALL
getCoupdaybs( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
237 virtual double SAL_CALL
getCouppcd( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
238 virtual double SAL_CALL
getCoupnum( const css::uno::Reference
< css::beans::XPropertySet
>& xOpt
, sal_Int32 nSettle
, sal_Int32 nMat
, sal_Int32 nFreq
, const css::uno::Any
& rOptBase
) override
;
239 virtual double SAL_CALL
getFvschedule( double fPrinc
, const css::uno::Sequence
< css::uno::Sequence
< double > >& rSchedule
) override
;
244 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */