Bump version to 4.3-4
[LibreOffice.git] / i18npool / source / calendar / calendarImpl.cxx
blobb0f897705eeeac2b2d6c79e04a5f8cb62c54dc3e
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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 #include "calendarImpl.hxx"
21 #include "localedata.hxx"
22 #include <comphelper/processfactory.hxx>
23 #include <cppuhelper/supportsservice.hxx>
25 using namespace ::com::sun::star::uno;
26 using namespace ::com::sun::star::lang;
28 namespace com { namespace sun { namespace star { namespace i18n {
30 #define ERROR RuntimeException()
32 CalendarImpl::CalendarImpl(const Reference< XComponentContext > &rxContext) : m_xContext(rxContext)
36 CalendarImpl::~CalendarImpl()
38 // Clear lookuptable
39 for (size_t l = 0; l < lookupTable.size(); l++)
40 delete lookupTable[l];
41 lookupTable.clear();
44 void SAL_CALL
45 CalendarImpl::loadDefaultCalendar( const Locale& rLocale ) throw(RuntimeException, std::exception)
47 Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale);
48 for (sal_Int32 i = 0; i < xC.getLength(); i++) {
49 if (xC[i].Default) {
50 loadCalendar(xC[i].Name, rLocale);
51 return;
54 throw ERROR;
57 void SAL_CALL
58 CalendarImpl::loadCalendar(const OUString& uniqueID, const Locale& rLocale ) throw (RuntimeException, std::exception)
60 Reference < XCalendar3 > xOldCalendar( xCalendar ); // backup
61 sal_Int32 i;
63 for (i = 0; i < sal::static_int_cast<sal_Int32>(lookupTable.size()); i++) {
64 lookupTableItem *listItem = lookupTable[i];
65 if (uniqueID == listItem->uniqueID) {
66 xCalendar = listItem->xCalendar;
67 break;
71 if (i >= sal::static_int_cast<sal_Int32>(lookupTable.size())) {
72 Reference < XInterface > xI = m_xContext->getServiceManager()->createInstanceWithContext(
73 OUString("com.sun.star.i18n.Calendar_") + uniqueID, m_xContext);
75 if ( ! xI.is() ) {
76 // check if the calendar is defined in localedata, load gregorian calendar service.
77 Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale);
78 for (i = 0; i < xC.getLength(); i++) {
79 if (uniqueID == xC[i].Name) {
80 xI = m_xContext->getServiceManager()->createInstanceWithContext("com.sun.star.i18n.Calendar_gregorian", m_xContext);
81 break;
86 if ( xI.is() )
87 xCalendar.set(xI, UNO_QUERY);
88 else
89 throw ERROR;
91 lookupTable.push_back( new lookupTableItem(uniqueID, xCalendar) );
94 if ( !xCalendar.is() )
96 xCalendar = xOldCalendar;
97 throw ERROR;
102 xCalendar->loadCalendar(uniqueID, rLocale);
104 catch ( Exception& )
105 { // restore previous calendar and re-throw
106 xCalendar = xOldCalendar;
107 throw;
111 Calendar2 SAL_CALL
112 CalendarImpl::getLoadedCalendar2() throw(RuntimeException, std::exception)
114 if (xCalendar.is())
115 return xCalendar->getLoadedCalendar2();
116 else
117 throw ERROR ;
120 Calendar SAL_CALL
121 CalendarImpl::getLoadedCalendar() throw(RuntimeException, std::exception)
123 if (xCalendar.is())
124 return xCalendar->getLoadedCalendar();
125 else
126 throw ERROR ;
129 Sequence< OUString > SAL_CALL
130 CalendarImpl::getAllCalendars( const Locale& rLocale ) throw(RuntimeException, std::exception)
132 Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale);
133 sal_Int32 nLen = xC.getLength();
134 Sequence< OUString > xSeq( nLen );
135 for (sal_Int32 i = 0; i < nLen; i++)
136 xSeq[i] = xC[i].Name;
137 return xSeq;
140 void SAL_CALL
141 CalendarImpl::setDateTime( double timeInDays ) throw(RuntimeException, std::exception)
143 if (xCalendar.is())
144 xCalendar->setDateTime( timeInDays );
145 else
146 throw ERROR ;
149 double SAL_CALL
150 CalendarImpl::getDateTime() throw(RuntimeException, std::exception)
152 if (xCalendar.is())
153 return xCalendar->getDateTime();
154 else
155 throw ERROR ;
158 OUString SAL_CALL
159 CalendarImpl::getUniqueID() throw(RuntimeException, std::exception)
161 if (xCalendar.is())
162 return xCalendar->getUniqueID();
163 else
164 throw ERROR ;
167 void SAL_CALL
168 CalendarImpl::setValue( sal_Int16 fieldIndex, sal_Int16 value ) throw(RuntimeException, std::exception)
170 if (xCalendar.is())
171 xCalendar->setValue( fieldIndex, value );
172 else
173 throw ERROR ;
176 sal_Int16 SAL_CALL
177 CalendarImpl::getValue( sal_Int16 fieldIndex ) throw(RuntimeException, std::exception)
179 if (xCalendar.is())
180 return xCalendar->getValue( fieldIndex );
181 else
182 throw ERROR ;
185 void SAL_CALL
186 CalendarImpl::addValue( sal_Int16 fieldIndex, sal_Int32 amount ) throw(RuntimeException, std::exception)
188 if (xCalendar.is())
189 xCalendar->addValue( fieldIndex, amount);
190 else
191 throw ERROR ;
194 sal_Int16 SAL_CALL
195 CalendarImpl::getFirstDayOfWeek() throw(RuntimeException, std::exception)
197 if (xCalendar.is())
198 return xCalendar->getFirstDayOfWeek();
199 else
200 throw ERROR ;
203 void SAL_CALL
204 CalendarImpl::setFirstDayOfWeek( sal_Int16 day )
205 throw(RuntimeException, std::exception)
207 if (xCalendar.is())
208 xCalendar->setFirstDayOfWeek(day);
209 else
210 throw ERROR ;
213 void SAL_CALL
214 CalendarImpl::setMinimumNumberOfDaysForFirstWeek( sal_Int16 days ) throw(RuntimeException, std::exception)
216 if (xCalendar.is())
217 xCalendar->setMinimumNumberOfDaysForFirstWeek(days);
218 else
219 throw ERROR ;
222 sal_Int16 SAL_CALL
223 CalendarImpl::getMinimumNumberOfDaysForFirstWeek() throw(RuntimeException, std::exception)
225 if (xCalendar.is())
226 return xCalendar->getMinimumNumberOfDaysForFirstWeek();
227 else
228 throw ERROR ;
232 OUString SAL_CALL
233 CalendarImpl::getDisplayName( sal_Int16 displayIndex, sal_Int16 idx, sal_Int16 nameType ) throw(RuntimeException, std::exception)
235 if (xCalendar.is())
236 return xCalendar->getDisplayName( displayIndex, idx, nameType );
237 else
238 throw ERROR ;
241 sal_Int16 SAL_CALL
242 CalendarImpl::getNumberOfMonthsInYear() throw(RuntimeException, std::exception)
244 if (xCalendar.is())
245 return xCalendar->getNumberOfMonthsInYear();
246 else
247 throw ERROR ;
251 sal_Int16 SAL_CALL
252 CalendarImpl::getNumberOfDaysInWeek() throw(RuntimeException, std::exception)
254 if (xCalendar.is())
255 return xCalendar->getNumberOfDaysInWeek();
256 else
257 throw ERROR ;
261 Sequence< CalendarItem > SAL_CALL
262 CalendarImpl::getDays() throw(RuntimeException, std::exception)
264 if (xCalendar.is())
265 return xCalendar->getDays();
266 else
267 throw ERROR ;
271 Sequence< CalendarItem > SAL_CALL
272 CalendarImpl::getMonths() throw(RuntimeException, std::exception)
274 if (xCalendar.is())
275 return xCalendar->getMonths();
276 else
277 throw ERROR ;
281 Sequence< CalendarItem2 > SAL_CALL
282 CalendarImpl::getDays2() throw(RuntimeException, std::exception)
284 if (xCalendar.is())
285 return xCalendar->getDays2();
286 else
287 throw ERROR ;
291 Sequence< CalendarItem2 > SAL_CALL
292 CalendarImpl::getMonths2() throw(RuntimeException, std::exception)
294 if (xCalendar.is())
295 return xCalendar->getMonths2();
296 else
297 throw ERROR ;
301 Sequence< CalendarItem2 > SAL_CALL
302 CalendarImpl::getGenitiveMonths2() throw(RuntimeException, std::exception)
304 if (xCalendar.is())
305 return xCalendar->getGenitiveMonths2();
306 else
307 throw ERROR ;
311 Sequence< CalendarItem2 > SAL_CALL
312 CalendarImpl::getPartitiveMonths2() throw(RuntimeException, std::exception)
314 if (xCalendar.is())
315 return xCalendar->getPartitiveMonths2();
316 else
317 throw ERROR ;
321 sal_Bool SAL_CALL
322 CalendarImpl::isValid() throw(RuntimeException, std::exception)
324 if (xCalendar.is())
325 return xCalendar->isValid();
326 else
327 throw ERROR ;
330 OUString SAL_CALL
331 CalendarImpl::getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode )
332 throw (RuntimeException, std::exception)
334 if (xCalendar.is())
335 return xCalendar->getDisplayString(nCalendarDisplayCode, nNativeNumberMode);
336 else
337 throw ERROR ;
340 OUString SAL_CALL
341 CalendarImpl::getImplementationName(void) throw( RuntimeException, std::exception )
343 return OUString("com.sun.star.i18n.CalendarImpl");
346 sal_Bool SAL_CALL
347 CalendarImpl::supportsService(const OUString& rServiceName) throw( RuntimeException, std::exception )
349 return cppu::supportsService(this, rServiceName);
352 Sequence< OUString > SAL_CALL
353 CalendarImpl::getSupportedServiceNames(void) throw( RuntimeException, std::exception )
355 Sequence< OUString > aRet(1);
356 aRet[0] = "com.sun.star.i18n.LocaleCalendar";
357 return aRet;
360 }}}}
362 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */