summaryrefslogtreecommitdiff
path: root/comphelper
diff options
context:
space:
mode:
authorKurt Zenker <kz@openoffice.org>2009-06-05 09:47:55 +0000
committerKurt Zenker <kz@openoffice.org>2009-06-05 09:47:55 +0000
commit048e7daec45c04ebd2ed4506a585f1719efc7f56 (patch)
tree41b7013e3adbcc37ca2cba6ebcb364f801eebb9b /comphelper
parentda569797eb7e089da90c917448b7990fac64b8d7 (diff)
CWS-TOOLING: integrate CWS dba32b
2009-06-03 14:58:08 +0200 fs r272581 : #i102439# 2009-05-29 13:56:18 +0200 fs r272456 : remove the sub form when the 'add subform' setting changes from <true/> to <false/>, not only its controls 2009-05-29 13:19:27 +0200 fs r272454 : display '(Default)' instead of an empty string when a control has the default font 2009-05-28 20:49:18 +0200 fs r272428 : #i98162# getFirstSelectedValue: do not return reference to a temporary 2009-05-27 15:30:22 +0200 msc r272353 : #102303# 2009-05-26 13:03:06 +0200 fs r272295 : spelling 2009-05-26 12:59:54 +0200 fs r272294 : merge m48 version to get latest cygwin related fixes 2009-05-25 14:02:06 +0200 fs r272239 : remove references to local files, needed for debugging sessions only 2009-05-25 14:01:16 +0200 fs r272238 : #i102021# ensure members such as bNumberFormat are initialized before actually returning them 2009-05-25 13:10:20 +0200 fs r272236 : #i10000# reset ENABLE_EVOAB2 2009-05-22 06:44:45 +0200 oj r272167 : #i99104# add import handler for calc-sett 2009-05-22 06:42:27 +0200 oj r272166 : #i99104# impl NullDate as member 2009-05-22 06:36:22 +0200 oj r272165 : #i99104# handle nulldate from parent model 2009-05-22 06:33:13 +0200 oj r272164 : #i99104# export and import calculation-settings and nulldate 2009-05-22 06:27:50 +0200 oj r272163 : #i99104# export and import calculation-settings and nulldate 2009-05-20 13:29:58 +0200 oj r272118 : #i99911# handle invalid name 2009-05-20 13:28:49 +0200 oj r272117 : #i101261# handle different rowsets 2009-05-20 11:29:55 +0200 msc r272111 : #i100000# 2009-05-20 11:28:27 +0200 msc r272110 : merge in change from dba32a 2009-05-20 11:27:38 +0200 msc r272109 : #102082# CTRL + C does not work 2009-05-20 09:43:36 +0200 oj r272106 : clean up includes 2009-05-20 09:32:15 +0200 oj r272105 : #i99060# merge error resovled now VERTICAL_ALIGN is in both stmt 2009-05-20 08:37:21 +0200 msc r272104 : add workaround for issue #102010# 2009-05-20 08:10:12 +0200 oj r272103 : #i99104# use numberformatkey 2009-05-20 08:07:02 +0200 oj r272102 : #i99104# use column info from rowset 2009-05-20 08:04:43 +0200 oj r272101 : #i102032# use a special column type where prec and scale are the values currently set at the column 2009-05-20 08:03:04 +0200 oj r272100 : #i102032# correct type info, we have to use SQL defined type names 2009-05-19 10:27:02 +0200 oj r272061 : #i99104# export null-date 2009-05-19 08:26:53 +0200 oj r272056 : #i99104# export null-date 2009-05-18 13:15:10 +0200 msc r272014 : add issue #102019# 2009-05-18 11:33:07 +0200 msc r272005 : add issue #102019# 2009-05-18 08:59:45 +0200 msc r271996 : add workaroud for issue #102010# 2009-05-15 10:21:24 +0200 msc r271929 : #101944# 2009-05-11 21:18:30 +0200 fs r271792 : #i99914# 2009-05-08 13:52:06 +0200 oj r271715 : #i96423# remember column span 2009-05-08 11:26:19 +0200 oj r271708 : #i98605# impl new scale mode 2009-05-08 10:33:35 +0200 fs r271706 : SendUserCall: only call into the shape notification routine for UserCall types where this is necessary (performance issue) 2009-05-07 20:52:44 +0200 fs r271698 : outsource ShapeProperty from shapepropertynotifier.hxx 2009-05-07 20:43:33 +0200 fs r271697 : #i99056# use notifyShapePropertyChange, instead of getShapePropertyChangeNotifier - the latter throws if no shape exists, yet 2009-05-07 20:33:58 +0200 fs r271696 : #i99056# +notifyShapePropertyChange: allow notifying chages without checking whether there actually already exists an SvxShape 2009-05-07 16:22:15 +0200 fs r271679 : #i10000# cygwin needs quotes around the classpath 2009-05-07 16:21:37 +0200 fs r271678 : #i10000# cygwin needs quotes around the classpath 2009-05-07 16:01:11 +0200 oj r271677 : #i99914# notify parent handler 2009-05-07 15:54:54 +0200 fs r271676 : #i10000# cygwin needs some quoting 2009-05-07 14:49:48 +0200 oj r271672 : #i99277# quote alias name 2009-05-07 14:48:12 +0200 oj r271671 : #i92538# add ~ in front of type 2009-05-07 14:37:13 +0200 oj r271667 : #i99118# change type from char to varchar 2009-05-07 14:36:23 +0200 oj r271666 : #i99118# clear dest columns when changing to create new table 2009-05-07 13:35:32 +0200 oj r271657 : #i94467# handle type 0 as double as well 2009-05-07 13:20:49 +0200 oj r271655 : i99743# setNull when varchar is no text 2009-05-07 12:58:06 +0200 fs r271651 : initialize the SdrObject's property change notifier after the ctor, if necessary 2009-05-07 11:47:18 +0200 fs r271647 : #i10000# 2009-05-07 10:57:16 +0200 fs r271639 : OPropertyBrowserController::propertyChange: care for the current property state, too, and properly forward it to the UI 2009-05-07 10:18:14 +0200 fs r271636 : onNewComponent: do not ask the map for grid columns, it will throw 2009-05-07 10:09:55 +0200 fs r271634 : #i101623# 2009-05-07 09:53:44 +0200 fs r271631 : #i101622# 2009-05-06 21:55:53 +0200 fs r271615 : #i10000# 2009-05-06 21:10:42 +0200 fs r271611 : #i10000# 2009-05-06 13:11:48 +0200 fs r271583 : #i10000# 2009-05-05 22:29:31 +0200 fs r271559 : proper assertion message 2009-05-05 22:29:03 +0200 fs r271558 : diagnostics 2009-05-05 22:16:16 +0200 fs r271557 : #i10000# 2009-05-05 13:50:32 +0200 fs r271513 : #i10000# 2009-05-05 10:21:50 +0200 fs r271503 : #i10000# 2009-05-05 09:30:26 +0200 fs r271501 : why did those survive the rebase -C step? 2009-05-05 09:18:12 +0200 fs r271500 : #i10000# 2009-05-04 17:08:17 +0200 fs r271475 : CWS-TOOLING: rebase CWS dba32b to trunk@271427 (milestone: DEV300:m47) 2009-05-04 14:51:26 +0200 fs r271456 : line ends 2009-04-30 15:55:27 +0200 fs r271418 : NewURL -> PublicConnectionURL 2009-04-22 21:18:34 +0200 fs r271141 : #i100944# 2009-04-22 09:12:26 +0200 oj r271071 : #i101261# little code change 2009-04-22 09:11:43 +0200 oj r271070 : #i101261# only ask for parameters which aren't set before 2009-04-22 09:11:25 +0200 oj r271069 : #i101261# new grabage container for nodes 2009-04-22 09:11:02 +0200 oj r271068 : #i101261# new grabage container for nodes 2009-04-22 09:10:44 +0200 oj r271067 : #i101261# new grabage container for nodes 2009-04-22 09:10:21 +0200 oj r271066 : #i101261# only ask for parameters which aren't set before 2009-04-22 09:08:24 +0200 oj r271065 : #i101261# only ask for parameters which aren't set before 2009-04-22 09:07:25 +0200 oj r271064 : #i101261# only ask for parameters which aren't set before 2009-04-22 08:49:07 +0200 oj r271062 : #i77501# preview only when needed 2009-04-22 08:45:44 +0200 oj r271061 : #i101261# new prop max rows 2009-04-22 08:44:18 +0200 oj r271060 : #i101261# create dataprovider earlier to avoid the wrong legend in chart 2009-04-22 08:42:48 +0200 oj r271059 : #i101261# handle parameter 2009-04-17 21:00:23 +0200 fs r270954 : #i98350# 2009-04-17 13:54:19 +0200 fs r270942 : #i99565# 2009-04-17 13:51:34 +0200 fs r270940 : #i101153# only localize the (potentially) localizable properties when there really is support at the control model 2009-04-17 11:43:14 +0200 fs r270932 : removed superfluous include 2009-04-17 10:10:15 +0200 fs r270926 : #i10000# 2009-04-17 10:02:36 +0200 fs r270925 : #i10000# 2009-04-17 09:15:13 +0200 fs r270918 : #i99056# some more refactoring of the recently introduced property change notification mechanism for UNO shapes 2009-04-17 09:14:56 +0200 fs r270917 : #i99056# some more refactoring of the recently introduced property change notification mechanism for UNO shapes 2009-04-17 09:13:25 +0200 fs r270915 : #i99056# some more refactoring of the recently introduced property change notification mechanism for UNO shapes 2009-04-17 08:30:34 +0200 fs r270914 : removed unotools/servicehelper.hxx in favour of the (duplicated) comphelper/servicehelper.hxx 2009-04-16 21:05:25 +0200 fs r270903 : #i10000# 2009-04-16 20:43:43 +0200 fs r270902 : #i99056# shape notification outsourced to the SdrObject, this is what all other shape implementations (which only aggregate an SvxShape) have access to, too 2009-04-16 15:57:36 +0200 fs r270891 : #i99056# make SetUnoControlModel virtual 2009-04-16 15:44:02 +0200 fs r270890 : #i99056# let the ScShapeObj notify changes in its Anchor property 2009-04-16 15:36:47 +0200 fs r270889 : #i99056# enable the sheet anchor type property, too 2009-04-16 15:33:45 +0200 fs r270887 : #i99056# shape notification outsourced to the SdrObject, this is what all other shape implementations (which only aggregate an SvxShape) have access to, too 2009-04-15 14:53:13 +0200 fs r270844 : #i10000# 2009-04-15 13:08:29 +0200 fs r270836 : #i10000# 2009-04-15 12:28:14 +0200 fs r270832 : #i10000# 2009-04-15 10:59:14 +0200 fs r270827 : #i10000# 2009-04-15 09:41:08 +0200 oj r270823 : fix issues found with findbugs and pmd 2009-04-14 21:08:04 +0200 fs r270808 : #i99056# implement SheetAnchorType - now the only thing missing to enable it is the proper notification when it is modified 2009-04-14 17:09:00 +0200 fs r270799 : #i99056# implement XServiceInfo for the ScShapeObj 2009-04-14 17:07:55 +0200 fs r270798 : #i99056# implement TextAnchorType, partially implement SheetAnchorType 2009-04-14 15:54:05 +0200 fs r270786 : #i99056# SwXShape: notify changes of the AnchorType property 2009-04-14 15:47:32 +0200 fs r270785 : #i99056# deliver shapepropertynotifier.hxx 2009-04-14 15:46:54 +0200 fs r270784 : diagnostics 2009-04-14 15:08:28 +0200 fs r270781 : #i99056# outsourced the SvxShape's property change notification code into a dedicated class 2009-04-14 14:41:09 +0200 fs r270773 : #i99056# outsourced the SvxShape's property change notification code into a dedicated class 2009-04-14 14:37:23 +0200 fs r270772 : in dtor, remove the properties from the temporary component context 2009-04-14 14:36:34 +0200 fs r270771 : getWeakUnoShape made const 2009-04-14 12:23:08 +0200 oj r270757 : #i101064# add missing braces 2009-04-14 12:21:25 +0200 oj r270756 : #i101065# add braces for gcc 4.3.2 2009-04-14 12:17:45 +0200 oj r270755 : #i101059# add dep for manifest 2009-04-09 12:06:58 +0200 oj r270686 : #i93100# use OptimalSize from control to get height 2009-04-08 09:56:55 +0200 oj r270619 : #i92537# handle calculations in the select columns as well 2009-04-08 09:30:39 +0200 oj r270615 : #i96657# throw error message when the key doesn't have any columns 2009-04-07 12:08:26 +0200 oj r270592 : #i77501# impl preview of the executed report 2009-04-07 12:01:56 +0200 oj r270591 : #i77501# impl preview of the executed report 2009-04-07 11:41:03 +0200 oj r270590 : #i77501# impl preview of the executed report 2009-04-07 11:39:32 +0200 oj r270589 : #i77501# impl preview of the executed report 2009-04-07 11:29:25 +0200 oj r270588 : #i77501# convert dos to unix lineends 2009-04-07 11:28:23 +0200 oj r270587 : #i77501# impl preview of the executed report 2009-04-07 11:16:50 +0200 oj r270586 : #i77501# impl preview of the executed report 2009-04-07 11:16:00 +0200 oj r270585 : #i77501# impl preview of the executed report 2009-04-07 11:15:44 +0200 oj r270584 : #i77501# impl preview of the executed report 2009-04-07 11:15:28 +0200 oj r270583 : #i77501# impl preview of the executed report 2009-04-07 11:15:04 +0200 oj r270582 : #i77501# impl preview of the executed report 2009-04-06 15:38:54 +0200 fs r270559 : merge changes from CWS dba32a herein 2009-04-03 15:56:16 +0200 fs r270494 : ImpSvMEdit::Resize: do multiple iterations, if necessary 2009-04-03 14:35:49 +0200 fs r270487 : #i10000# 2009-04-03 13:17:16 +0200 fs r270476 : #i99056# display geometry information for controls, too 2009-04-03 13:16:37 +0200 fs r270475 : #i99056# better ordering of the geometry properties 2009-04-03 13:16:07 +0200 fs r270473 : #i99056# now that SvxShape supports property change listeners, forward add/remove requests to it 2009-04-03 13:13:18 +0200 fs r270472 : #i99056# at SvxShape, allow for PropertyChangeListeners for Size/Position 2009-04-03 09:29:27 +0200 oj r270456 : #i94571# use correct prop name 2009-04-03 09:14:54 +0200 fs r270451 : merge changes from CWS dba32a herein 2009-04-02 17:00:51 +0200 fs r270424 : better diagnostics 2009-04-02 16:35:19 +0200 fs r270421 : diagnostics 2009-04-02 16:34:50 +0200 fs r270420 : #i99056# mxUnoShape not accessible anymore, use impl_setUnoShape instead 2009-04-02 16:32:48 +0200 fs r270419 : #i99056# make getUnoShape cheaper: keep the pointer to the SvxShape all the time, so there's no need to ask for it in getUnoShape. As a consequence, we will later be able to use the pointer in scenarious where performance (potentially) matters 2009-04-02 16:31:13 +0200 fs r270417 : merge changes from CWS dba32a herein 2009-04-02 16:23:16 +0200 fs r270414 : merge changes from CWS dba32a herein 2009-04-02 14:10:35 +0200 fs r270405 : #i10000# 2009-04-02 14:06:26 +0200 fs r270404 : merge changes from CWS dba32a herein 2009-04-02 14:03:03 +0200 fs r270401 : #i10000# 2009-04-02 13:58:13 +0200 fs r270400 : #i10000# 2009-04-02 12:59:44 +0200 fs r270397 : merge changes from CWS dba32a herein 2009-04-02 12:46:30 +0200 fs r270396 : #i99056# let the form page maintain a mapping between control models and control shapes 2009-04-02 12:44:07 +0200 fs r270395 : merge changes from CWS dba32a herein 2009-04-02 12:42:06 +0200 fs r270394 : merge changes from CWS dba32a herein 2009-04-02 12:35:20 +0200 fs r270393 : #i10000# precompiled header 2009-04-02 12:05:31 +0200 fs r270392 : merge changes from CWS dba32a herein 2009-04-02 12:00:42 +0200 fs r270391 : merge changes from CWS dba32a herein 2009-04-02 11:47:26 +0200 fs r270390 : merge changes from CWS dba32a herein 2009-04-02 11:39:15 +0200 oj r270389 : #i94467# foxpro impl several new types 2009-04-02 11:35:58 +0200 fs r270387 : merge changes from CWS dba32a herein 2009-04-01 14:10:51 +0200 fs r270329 : merge changes from CWS dba32a herein 2009-03-31 17:29:50 +0200 fs r270290 : merge changes from CWS dba32a herein 2009-03-30 14:53:56 +0200 fs r270233 : #i100417# don't set grid column widths to 0, but to <void/> 2009-03-30 12:31:03 +0200 oj r270213 : #i100552# wrong orb used 2009-03-30 12:19:20 +0200 oj r270212 : #i98303# convertlike corrected to sal_Unicode 2009-03-30 11:58:25 +0200 fs r270210 : merge changes from CWS dba32a herein 2009-03-30 11:38:16 +0200 oj r270205 : remove duplicate code from merge 2009-03-30 11:02:27 +0200 fs r270202 : merge changes from CWS dba32a herein 2009-03-30 11:02:19 +0200 fs r270201 : merge changes from CWS dba32a herein 2009-03-30 10:31:26 +0200 oj r270200 : #i100665# only throw exception and do not drop table 2009-03-30 09:36:24 +0200 fs r270195 : assertion text 2009-03-28 20:21:58 +0100 fs r270187 : #ii10000# 2009-03-28 20:19:54 +0100 fs r270186 : removed unused help ids 2009-03-28 20:19:40 +0100 fs r270185 : removed unused help ids 2009-03-28 20:19:10 +0100 fs r270184 : #i100237# +DefaultState/XReset 2009-03-28 00:29:29 +0100 fs r270177 : CWS-TOOLING: rebase CWS dba32b to trunk@270033 (milestone: DEV300:m45) 2009-03-27 22:56:46 +0100 fs r270173 : #i100237# DEFAULT_CHECKED -> DEFAULT_STATE 2009-03-27 22:55:52 +0100 fs r270172 : #i100237# DefaultState property for buttons, enabled only when Toggle=Yes 2009-03-27 22:54:15 +0100 fs r270171 : #i100237# DEFAULT_CHECKED -> DEFAULT_STATE 2009-03-27 22:53:54 +0100 fs r270170 : #i100237# introduce a DefaultState property for buttons, which implies buttongs supporting XReset, which needed some refactoring 2009-03-27 13:31:41 +0100 fs r270152 : ignore output paths 2009-03-27 11:23:44 +0100 fs r270139 : tuned behavior with respect to invalid keys/values 2009-03-27 09:57:14 +0100 fs r270136 : don't allow Double.NaN 2009-03-27 09:56:16 +0100 fs r270135 : talk about Double.NaN 2009-03-26 12:14:30 +0100 fs r270067 : removed unused parameter 2009-03-26 12:14:02 +0100 fs r270066 : removed widening conversion when checking keys 2009-03-26 09:17:34 +0100 fs r270053 : separated the enumerator functionality into a dedicated interface, this way not burdening XMap with it 2009-03-26 09:17:11 +0100 fs r270052 : separated the enumerator functionality into a dedicated interface, this way not burdening XMap with it 2009-03-26 09:16:49 +0100 fs r270051 : separated the enumerator functionality into a dedicated interface, this way not burdening XMap with it 2009-03-25 21:55:20 +0100 fs r270044 : #i100541# properly calculat bNeedScrollBox 2009-03-25 12:56:17 +0100 fs r270019 : renamed the previously introduced error condition 2009-03-25 12:11:48 +0100 fs r270015 : #i100095# when the error messages contain non-trivial details (SQLState/ErrorCode), then always display the 'Details' button 2009-03-25 12:10:05 +0100 fs r270012 : renamed the previously introduced error condition 2009-03-25 12:01:04 +0100 fs r270011 : #i100095# when no address book (or respective profile) can be found, then use a dedicated ErrorCondition 2009-03-25 10:29:07 +0100 fs r270003 : add missing localization 2009-03-25 10:23:12 +0100 fs r270001 : in preparation of #i1000095#: rework the error handling, allow using css.sdb.ErrorCondition values, plus allow propagating the nsresult 2009-03-25 10:21:55 +0100 fs r270000 : in preparation of #i1000095#: rework the error handling, allow using css.sdb.ErrorCondition values, plus allow propagating the nsresult 2009-03-20 23:05:38 +0100 fs r269829 : XMap::getSize removed 2009-03-20 23:05:19 +0100 fs r269828 : changes as suggested by sb 2009-03-20 23:04:56 +0100 fs r269827 : enhanced documentation 2009-03-20 15:31:40 +0100 fs r269815 : changes as suggested by sb 2009-03-20 13:23:52 +0100 oj r269804 : #i92538# correct the zorder that fixedtext is infront of control 2009-03-20 12:59:38 +0100 oj r269801 : #i94571# paraadjust now supports BLOCK 2009-03-20 12:58:11 +0100 oj r269800 : #i94571# export style with data style 2009-03-20 12:57:05 +0100 oj r269799 : #i94571# text align is now paraadjust 2009-03-20 12:37:02 +0100 fs r269797 : enum keys only accepted if they have the exact type, not if they have *any* enum type 2009-03-20 12:28:31 +0100 fs r269794 : some changes requested by sb 2009-03-20 08:52:47 +0100 fs r269780 : doc 2009-03-20 07:37:31 +0100 oj r269779 : #i99913# only notifiy when values are different 2009-03-20 07:36:58 +0100 oj r269778 : #i99913# add undoenv as listener at the dataprovider 2009-03-19 22:52:52 +0100 fs r269771 : added comment 2009-03-19 22:40:06 +0100 fs r269770 : +testEnumeration 2009-03-19 22:39:41 +0100 fs r269769 : implemented enumeration, getKeySet, and getValues. Should be finished now. 2009-03-19 14:01:01 +0100 oj r269743 : #i99913# reset the modified state when selecting an object 2009-03-19 12:19:54 +0100 lla r269739 : #i72390# cleanups 2009-03-19 09:25:27 +0100 fs r269727 : #i10000# 2009-03-18 23:37:02 +0100 fs r269708 : extended checks for value type acceptance 2009-03-18 23:36:41 +0100 fs r269707 : fixed value type checks 2009-03-18 14:59:56 +0100 fs r269678 : initial complex test case for the new css.container.Map implementation 2009-03-18 14:59:24 +0100 fs r269677 : verifyExpectedException moved to base class (in complexlib), and renamed to assureException for consistency 2009-03-18 14:58:35 +0100 fs r269676 : removed unused imports 2009-03-18 14:58:03 +0100 fs r269675 : first implementation of the new css.container.Map service (not completed, yet) 2009-03-18 14:57:17 +0100 fs r269674 : base class for UNO components, freeing you from some repeating work 2009-03-18 14:55:53 +0100 fs r269672 : +assureException: call a given method with given parameters on a given object, ensure that a given exception is thrown by the method implementation 2009-03-18 14:54:58 +0100 fs r269671 : +getComponentContext 2009-03-18 14:54:00 +0100 fs r269670 : isEmpty returns a boolean, not a long 2009-03-18 14:14:43 +0100 oj r269663 : #i99743# now text also supports null 2009-03-18 13:54:14 +0100 oj r269660 : #i99223# remove check for 2 params 2009-03-18 13:33:35 +0100 oj r269659 : #i99060# replace text::ParagraphVertAlign with style::VerticalAlignment 2009-03-18 13:32:18 +0100 oj r269658 : #i99060# don't set void property when void isn't allowed 2009-03-18 13:31:11 +0100 oj r269657 : #i99060# handle vertical alignment 2009-03-18 13:28:28 +0100 oj r269656 : #i99060# remove unused elements from sytle 2009-03-18 09:35:42 +0100 lla r269639 : #i72390# cleanups 2009-03-18 09:31:20 +0100 lla r269638 : #i72390# add ButtonList 2009-03-18 09:30:46 +0100 lla r269637 : #i72390# renamed interface 2009-03-18 09:30:15 +0100 lla r269636 : #i72390# use ButtonList instead of ImageList 2009-03-18 09:29:05 +0100 lla r269635 : #i72390# new ButtonList, cleanups 2009-03-18 09:26:34 +0100 lla r269634 : #i72390# cleanups 2009-03-17 12:21:20 +0100 oj r269590 : #i99222# remove assertion 2009-03-17 12:17:22 +0100 oj r269589 : #i98605# impl scale mode 2009-03-17 12:10:42 +0100 oj r269588 : #i98605# impl scale mode 2009-03-17 11:40:15 +0100 oj r269584 : #i96944# doesn't create equation for shapes 2009-03-17 11:33:16 +0100 oj r269583 : #i96423# switch calc from float to long 2009-03-16 15:19:18 +0100 fs r269550 : #i41930# enable zoom for embedded/outplace documents 2009-03-16 14:25:54 +0100 oj r269542 : #i93734# remove ContextSensitive 2009-03-16 14:21:58 +0100 oj r269541 : #i99274# page header before group header 2009-03-16 14:18:23 +0100 oj r269539 : #i99110# fix value type 2009-03-16 14:14:16 +0100 fs r269537 : line ends 2009-03-16 14:11:06 +0100 fs r269535 : line ends 2009-03-16 14:08:34 +0100 fs r269534 : #i100087# (provided my np): allow for polymorphic types with more than one parameter 2009-03-16 12:30:31 +0100 oj r269521 : compile error 2009-03-16 12:19:12 +0100 oj r269519 : compile error 2009-03-16 10:39:28 +0100 oj r269511 : compile error under linux with swap 2009-03-13 10:33:04 +0100 oj r269462 : CWS-TOOLING: rebase CWS dba32b to trunk@269297 (milestone: DEV300:m43) 2009-03-12 14:37:25 +0100 fs r269416 : interface SequenceOutputStreamTest is unneeded, and pollutes the namespace here :) 2009-03-12 14:35:07 +0100 fs r269414 : not needed 2009-03-12 14:34:15 +0100 fs r269413 : preparation for multiple tests in this module 2009-03-12 14:33:02 +0100 fs r269412 : ShowTargets was moved from module integration.forms to module complexlib 2009-03-12 14:32:48 +0100 fs r269411 : helper class for projects containing multiple complex test cases (and following a certain structure) 2009-03-12 14:00:14 +0100 fs r269407 : proper module after the move 2009-03-12 13:59:10 +0100 fs r269406 : superseded by ../makefile.mk 2009-03-12 13:47:38 +0100 fs r269403 : not needed anymore 2009-03-12 13:45:46 +0100 fs r269402 : moved, in preparation of adding more test cases here, with a common infrastructure 2009-03-12 13:45:07 +0100 fs r269401 : moved from ../ 2009-03-12 13:43:59 +0100 fs r269400 : moved to ./comphelper, in preparation of adding more test cases here, with a common infrastructure 2009-03-12 13:29:47 +0100 oj r269396 : #i99914# set parent on dataprovider 2009-03-12 13:10:35 +0100 oj r269393 : #i99832# check thrown exception and show error 2009-03-12 13:08:10 +0100 fs r269392 : reorganizing tests 2009-03-12 12:52:55 +0100 oj r269390 : #i99118# convert formatkey in numberformat 2009-03-12 12:34:53 +0100 fs r269388 : new API tests 2009-03-12 12:29:05 +0100 fs r269386 : Map not yet committed 2009-03-12 12:28:36 +0100 fs r269385 : oops, forgot the SequenceInputStream during the previous refactoring 2009-03-12 12:12:39 +0100 oj r269384 : #i99104# set HasCategories prop 2009-03-12 12:12:08 +0100 oj r269383 : #i99104# check HasCategories even for internal dataprovider 2009-03-12 12:10:40 +0100 oj r269382 : #i99104# set HasCategories prop 2009-03-12 10:51:49 +0100 fs r269373 : #i10000# exception specifications 2009-03-12 10:49:18 +0100 fs r269372 : #i10000# exception specifications 2009-03-12 10:44:02 +0100 fs r269371 : #i10000# exception specifications 2009-03-12 10:30:55 +0100 fs r269368 : refactored the UNO service registration in this module, using the helper classes provided by comphelper itself, so you have less effort when extending the list of to-be-registered components 2009-03-12 10:30:37 +0100 fs r269367 : module-local includes 2009-03-12 07:05:54 +0100 oj r269357 : #i99104# database dataprovider doesn't need dataranges and diagramdata 2009-03-11 10:58:28 +0100 oj r269306 : #i99911# check if name of the report is a valid file name 2009-03-11 10:03:23 +0100 oj r269299 : #i99666# the report is new when the HierarchicalDocumentName is empty 2009-03-10 11:32:45 +0100 oj r269258 : #i99221# use fallback for language 2009-03-10 10:48:40 +0100 oj r269255 : #i99433# now use OStringBuffer 2009-03-10 10:36:21 +0100 fs r269252 : initial version of (X)Map 2009-03-10 09:52:23 +0100 oj r269246 : #i99433# now use OStringBuffer 2009-03-10 08:56:13 +0100 oj r269240 : #i99655# patch applied 2009-03-09 07:35:33 +0100 lla r269058 : #i10000# wrong variable assignment fixed 2009-03-06 17:20:40 +0100 fs r269030 : some explicit defaults 2009-03-06 17:20:30 +0100 fs r269029 : #i98600# 2009-03-06 14:40:34 +0100 fs r269009 : #i87692# during reload, prevent the document being modified just because of some control content changes ... 2009-03-06 12:52:20 +0100 lla r268997 : #i10000# ambigous problem with FontWeight fixed 2009-03-06 11:39:32 +0100 fs r268989 : #i10000# (approved by pl): use --without-t1-library configure option 2009-03-06 10:55:43 +0100 fs r268986 : #i99953# depends on xmlscript module now 2009-03-06 10:54:04 +0100 fs r268985 : #i99953# also adjust the event names found in dialogs embedded in the forms 2009-03-06 09:53:41 +0100 fs r268977 : #i10000# 2009-03-06 09:30:41 +0100 lla r268973 : #i10000# merge problems 2009-03-05 17:52:34 +0100 fs r268932 : #i98593# for sub components which are actually controlled by a DocumentDefinition (aka XComponentSupplier aka XCommandProcessor), close them by executing the 'close' command, not by suspending/closing the controller (which cannot be intercepted) 2009-03-05 11:41:56 +0100 fs r268889 : default the drop down line count for list/combo boxes to 20 2009-03-05 11:39:10 +0100 fs r268887 : do not display empty error messages 2009-03-02 10:13:57 +0100 lla r268639 : #i91541# CWS rebase m41 to m42 2009-03-02 09:06:27 +0100 lla r268635 : #i10000# add ';' to strings 2009-02-26 11:18:00 +0100 fs r268492 : reportdesign depends on REPORTBUILDER, not REPORTDESIGN 2009-02-26 10:11:38 +0100 lla r268489 : CWS-TOOLING: rebase CWS dba32b to trunk@268395 (milestone: DEV300:m42) 2009-02-26 09:04:11 +0100 lla r268488 : CWS-TOOLING: rebase CWS dba32b to trunk@268395 (milestone: DEV300:m42) 2009-02-24 12:09:13 +0100 lla r268392 : #i91541# #i91542# cleanups 2009-02-24 08:08:06 +0100 lla r268382 : merge all dba32a changes into dba32b 2009-02-24 07:14:55 +0100 lla r268381 : merge all dba32a changes into dba32b 2009-02-23 21:44:28 +0100 fs r268377 : oops ... don't tamper with m_aListSourceValues at the end of loadData 2009-02-23 20:57:05 +0100 fs r268376 : #i98162# don't hold the values as strings, but as ORowSetValue, this way preserving their type, and being agnostic to different result/rowset implementations doing different to-string-conversations 2009-02-23 20:55:44 +0100 fs r268375 : getObject: throwFunctionNotSupportedException, instead of silently returning NULL 2009-02-23 20:55:20 +0100 fs r268374 : #i98162# some more supported types 2009-02-23 20:54:43 +0100 fs r268373 : #i98162# +operator != 2009-02-20 09:35:39 +0100 fs r268306 : #i99422# for a font, display the font name, the style, and the size 2009-02-20 09:33:45 +0100 fs r268305 : #i99422# in the property browser, FONT supersedes CHARFONTNAME: the aggregated FormComponentHandler displays them more nicely now 2009-02-19 16:12:06 +0100 fs r268293 : #i99372# recognize DataType::FLOAT as numeric 2009-02-19 15:43:12 +0100 fs r268291 : #i99415# 2009-02-19 15:40:15 +0100 fs r268290 : #i99242# lcl_firstFocussableControl: take disabled controls into account 2009-02-19 15:34:36 +0100 fs r268289 : #i99396# properly decode the base name of the URL when using it as title 2009-02-19 15:19:05 +0100 fs r268287 : #i98247#
Diffstat (limited to 'comphelper')
-rw-r--r--comphelper/inc/comphelper/componentbase.hxx160
-rw-r--r--comphelper/inc/comphelper/servicehelper.hxx10
-rw-r--r--comphelper/qa/complex/comphelper/Map.java512
-rw-r--r--comphelper/qa/complex/comphelper/SequenceOutputStreamUnitTest.java (renamed from comphelper/qa/complex/sequenceoutputstream/SequenceOutputStreamUnitTest.java)10
-rw-r--r--comphelper/qa/complex/comphelper/Test01.java (renamed from comphelper/qa/complex/sequenceoutputstream/Test01.java)8
-rw-r--r--comphelper/qa/complex/comphelper/TestHelper.java (renamed from comphelper/qa/complex/sequenceoutputstream/TestHelper.java)2
-rw-r--r--comphelper/qa/complex/comphelper_all.sce2
-rw-r--r--comphelper/qa/complex/makefile.mk (renamed from comphelper/qa/complex/sequenceoutputstream/makefile.mk)66
-rw-r--r--comphelper/qa/complex/sequenceoutputstream/SequenceOutputStreamTest.java34
-rw-r--r--comphelper/source/compare/AnyCompareFactory.cxx35
-rw-r--r--comphelper/source/container/IndexedPropertyValuesContainer.cxx37
-rw-r--r--comphelper/source/container/NamedPropertyValuesContainer.cxx33
-rw-r--r--comphelper/source/container/enumerablemap.cxx999
-rw-r--r--comphelper/source/container/makefile.mk3
-rw-r--r--comphelper/source/inc/comphelper_module.hxx42
-rw-r--r--comphelper/source/misc/comphelper_module.cxx40
-rw-r--r--comphelper/source/misc/comphelper_services.cxx74
-rw-r--r--comphelper/source/misc/componentbase.cxx73
-rw-r--r--comphelper/source/misc/facreg.cxx246
-rw-r--r--comphelper/source/misc/instancelocker.cxx19
-rw-r--r--comphelper/source/misc/instancelocker.hxx6
-rw-r--r--comphelper/source/misc/makefile.mk4
-rw-r--r--comphelper/source/officeinstdir/officeinstallationdirectories.cxx99
-rw-r--r--comphelper/source/officeinstdir/officeinstallationdirectories.hxx10
-rw-r--r--comphelper/source/property/opropertybag.cxx15
-rw-r--r--comphelper/source/property/property.cxx8
-rw-r--r--comphelper/source/streaming/memorystream.cxx21
-rw-r--r--comphelper/source/streaming/seqinputstreamserv.cxx57
-rw-r--r--comphelper/source/streaming/seqoutputstreamserv.cxx56
29 files changed, 2182 insertions, 499 deletions
diff --git a/comphelper/inc/comphelper/componentbase.hxx b/comphelper/inc/comphelper/componentbase.hxx
new file mode 100644
index 000000000000..ca12610a709d
--- /dev/null
+++ b/comphelper/inc/comphelper/componentbase.hxx
@@ -0,0 +1,160 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef COMPHELPER_COMPONENTBASE_HXX
+#define COMPHELPER_COMPONENTBASE_HXX
+
+#include "comphelper/comphelperdllapi.h"
+
+/** === begin UNO includes === **/
+/** === end UNO includes === **/
+
+#include <cppuhelper/interfacecontainer.hxx>
+
+//........................................................................
+namespace comphelper
+{
+//........................................................................
+
+ //====================================================================
+ //= ComponentBase
+ //====================================================================
+ class COMPHELPER_DLLPUBLIC ComponentBase
+ {
+ protected:
+ /** creates a ComponentBase instance
+
+ The instance is not initialized. As a consequence, every ComponentMethodGuard instantiated for
+ this component will throw a <type scope="com::sun::star::lang">NotInitializedException</type>,
+ until ->setInitialized() is called.
+ */
+ ComponentBase( ::cppu::OBroadcastHelper& _rBHelper )
+ :m_rBHelper( _rBHelper )
+ ,m_bInitialized( false )
+ {
+ }
+
+ struct NoInitializationNeeded { };
+
+ /** creates a ComponentBase instance
+
+ The instance is already initialized, so there's no need to call setInitialized later on. Use this
+ constructor for component implementations which do not require explicit initialization.
+ */
+ ComponentBase( ::cppu::OBroadcastHelper& _rBHelper, NoInitializationNeeded )
+ :m_rBHelper( _rBHelper )
+ ,m_bInitialized( true )
+ {
+ }
+
+ /** marks the instance as initialized
+
+ Subsequent instantiations of a ComponentMethodGuard won't throw the NotInitializedException now.
+ */
+ inline void setInitialized() { m_bInitialized = true; }
+
+ public:
+ /// helper struct to grant access to selected public methods to the ComponentMethodGuard class
+ struct GuardAccess { friend class ComponentMethodGuard; private: GuardAccess() { } };
+
+ /// retrieves the component's mutex
+ inline ::osl::Mutex& getMutex( GuardAccess ) { return getMutex(); }
+ /// checks whether the component is already disposed, throws a DisposedException if so.
+ inline void checkDisposed( GuardAccess ) const { impl_checkDisposed_throw(); }
+ /// checks whether the component is already initialized, throws a NotInitializedException if not.
+ inline void checkInitialized( GuardAccess ) const { impl_checkInitialized_throw(); }
+
+ protected:
+ /// retrieves the component's broadcast helper
+ inline ::cppu::OBroadcastHelper& getBroadcastHelper() { return m_rBHelper; }
+ /// retrieves the component's mutex
+ inline ::osl::Mutex& getMutex() { return m_rBHelper.rMutex; }
+ /// determines whether the instance is already disposed
+ inline bool impl_isDisposed() const { return m_rBHelper.bDisposed; }
+
+ /// checks whether the component is already disposed. Throws a DisposedException if so.
+ void impl_checkDisposed_throw() const;
+
+ /// checks whether the component is already initialized. Throws a NotInitializedException if not.
+ void impl_checkInitialized_throw() const;
+
+ /// determines whether the component is already initialized
+ inline bool
+ impl_isInitialized_nothrow() const { return m_bInitialized; }
+
+ /** returns the context to be used when throwing exceptions
+
+ The default implementation returns <NULL/>.
+ */
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
+ getComponent() const;
+
+ private:
+ ::cppu::OBroadcastHelper& m_rBHelper;
+ bool m_bInitialized;
+ };
+
+ class ComponentMethodGuard
+ {
+ public:
+ enum MethodType
+ {
+ /// allow the method to be called only when being initialized and not being disposed
+ Default,
+ /// allow the method to be called without being initialized
+ WithoutInit
+
+ };
+
+ ComponentMethodGuard( ComponentBase& _rComponent, const MethodType _eType = Default )
+ :m_aMutexGuard( _rComponent.getMutex( ComponentBase::GuardAccess() ) )
+ {
+ if ( _eType != WithoutInit )
+ _rComponent.checkInitialized( ComponentBase::GuardAccess() );
+ _rComponent.checkDisposed( ComponentBase::GuardAccess() );
+ }
+
+ ~ComponentMethodGuard()
+ {
+ }
+
+ inline void clear()
+ {
+ m_aMutexGuard.clear();
+ }
+ inline void reset()
+ {
+ m_aMutexGuard.reset();
+ }
+
+ private:
+ ::osl::ResettableMutexGuard m_aMutexGuard;
+ };
+
+//........................................................................
+} // namespace ComponentBase
+//........................................................................
+
+#endif // COMPHELPER_COMPONENTBASE_HXX
diff --git a/comphelper/inc/comphelper/servicehelper.hxx b/comphelper/inc/comphelper/servicehelper.hxx
index 596e6f946a7f..408684943b44 100644
--- a/comphelper/inc/comphelper/servicehelper.hxx
+++ b/comphelper/inc/comphelper/servicehelper.hxx
@@ -28,8 +28,8 @@
*
************************************************************************/
-#ifndef _UTL_SERVICEHELPER_HXX_
-#define _UTL_SERVICEHELPER_HXX_
+#ifndef _COMPHELPER_SERVICEHELPER_HXX_
+#define _COMPHELPER_SERVICEHELPER_HXX_
/** the UNO3_GETIMPLEMENTATION_* macros implement a static helper function
that gives access to your implementation for a given interface reference,
@@ -47,7 +47,7 @@
*/
#define UNO3_GETIMPLEMENTATION_DECL( classname ) \
static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId() throw(); \
- static classname* getImplementation( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xInt ) throw(); \
+ static classname* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xInt ); \
virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
#define UNO3_GETIMPLEMENTATION_BASE_IMPL( classname ) \
@@ -67,7 +67,7 @@ const ::com::sun::star::uno::Sequence< sal_Int8 > & classname::getUnoTunnelId()
return *pSeq; \
} \
\
-classname* classname::getImplementation( uno::Reference< uno::XInterface > xInt ) throw() \
+classname* classname::getImplementation( const uno::Reference< uno::XInterface >& xInt ) \
{ \
::com::sun::star::uno::Reference< ::com::sun::star::lang::XUnoTunnel > xUT( xInt, ::com::sun::star::uno::UNO_QUERY ); \
if( xUT.is() ) \
@@ -104,5 +104,5 @@ sal_Int64 SAL_CALL classname::getSomething( const ::com::sun::star::uno::Sequenc
}
-#endif // _UTL_SERVICEHELPER_HXX_
+#endif // _COMPHELPER_SERVICEHELPER_HXX_
diff --git a/comphelper/qa/complex/comphelper/Map.java b/comphelper/qa/complex/comphelper/Map.java
new file mode 100644
index 000000000000..00d0b83b94d5
--- /dev/null
+++ b/comphelper/qa/complex/comphelper/Map.java
@@ -0,0 +1,512 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ */
+
+package complex.comphelper;
+
+import com.sun.star.beans.IllegalTypeException;
+import com.sun.star.beans.Pair;
+import com.sun.star.container.ContainerEvent;
+import com.sun.star.container.XContainer;
+import com.sun.star.container.XContainerListener;
+import com.sun.star.container.XElementAccess;
+import com.sun.star.container.XEnumerableMap;
+import com.sun.star.container.XEnumeration;
+import com.sun.star.container.XIdentifierAccess;
+import com.sun.star.container.XMap;
+import com.sun.star.container.XSet;
+import com.sun.star.form.XFormComponent;
+import com.sun.star.lang.DisposedException;
+import com.sun.star.lang.EventObject;
+import com.sun.star.lang.Locale;
+import com.sun.star.lang.NoSupportException;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.Any;
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.TypeClass;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XInterface;
+import java.util.HashSet;
+import java.util.Set;
+
+/** complex test case for the css.container.Map implementation
+ *
+ * @author frank.schoenheit@sun.com
+ */
+public class Map extends complexlib.ComplexTestCase
+{
+ @Override
+ public String[] getTestMethodNames()
+ {
+ return new String[] {
+ "testSimpleKeyTypes",
+ "testComplexKeyTypes",
+ "testValueTypes",
+ "testEnumerations",
+ "testSpecialValues"
+ };
+ }
+
+ public static String getShortTestDescription()
+ {
+ return "tests the css.container.Map implementation from comphelper/source/misc/map.cxx";
+ }
+
+ private String impl_getNth( int n )
+ {
+ switch ( n % 10 )
+ {
+ case 1: return n + "st";
+ case 2: return n + "nd";
+ default: return n + "th";
+ }
+ }
+
+ private void impl_putAll( XMap _map, Object[] _keys, Object[] _values ) throws com.sun.star.uno.Exception
+ {
+ for ( int i=0; i<_keys.length; ++i )
+ {
+ _map.put( _keys[i], _values[i] );
+ }
+ }
+
+ private void impl_ceckContent( XMap _map, Object[] _keys, Object[] _values, String _context ) throws com.sun.star.uno.Exception
+ {
+ for ( int i=0; i<_keys.length; ++i )
+ {
+ assure( _context + ": " + impl_getNth(i) + " key (" + _keys[i].toString() + ") not found in map",
+ _map.containsKey( _keys[i] ) );
+ assure( _context + ": " + impl_getNth(i) + " value (" + _values[i].toString() + ") not found in map",
+ _map.containsValue( _values[i] ) );
+ assureEquals( _context + ": wrong value for " + impl_getNth(i) + " key (" + _keys[i] + ")",
+ _values[i], _map.get( _keys[i] ) );
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void impl_checkMappings( Object[] _keys, Object[] _values, String _context ) throws com.sun.star.uno.Exception
+ {
+ log.println( "checking mapping " + _context + "..." );
+
+ Type keyType = AnyConverter.getType( _keys[0] );
+ Type valueType = AnyConverter.getType( _values[0] );
+
+ // create a map for the given types
+ XMap map = com.sun.star.container.EnumerableMap.create( param.getComponentContext(),
+ keyType, valueType );
+ assure( _context + ": key types do not match", map.getKeyType().equals( keyType ) );
+ assure( _context + ": value types do not match", map.getValueType().equals( valueType ) );
+
+ // insert all values
+ assure( _context + ": initially created map is not empty", map.hasElements() );
+ impl_putAll( map, _keys, _values );
+ assure( _context + ": map filled with values is still empty", !map.hasElements() );
+ // and verify them
+ impl_ceckContent( map, _keys, _values, _context );
+
+ // remove all values
+ for ( int i=_keys.length-1; i>=0; --i )
+ {
+ // ensure 'remove' really returns the old value
+ assureEquals( _context + ": wrong 'old value' for removal of " + impl_getNth(i) + " value",
+ _values[i], map.remove( _keys[i] ) );
+ }
+ assure( _context + ":map not empty after removing all elements", map.hasElements() );
+
+ // insert again, and check whether 'clear' does what it should do
+ impl_putAll( map, _keys, _values );
+ map.clear();
+ assure( _context + ": 'clear' does not empty the map", map.hasElements() );
+
+ // try the constructor which creates an immutable version
+ Pair< ?, ? >[] initialMappings = new Pair< ?, ? >[ _keys.length ];
+ for ( int i=0; i<_keys.length; ++i )
+ initialMappings[i] = new Pair< Object, Object >( _keys[i], _values[i] );
+ map = com.sun.star.container.EnumerableMap.createImmutable(
+ param.getComponentContext(), keyType, valueType, (Pair< Object, Object >[])initialMappings );
+ impl_ceckContent( map, _keys, _values, _context );
+
+ // check the thing is actually immutable
+ assureException( map, "clear", new Object[] {}, NoSupportException.class );
+ assureException( map, "remove", new Class[] { Object.class }, new Object[] { _keys[0] }, NoSupportException.class );
+ assureException( map, "put", new Class[] { Object.class, Object.class }, new Object[] { _keys[0], _values[0] },
+ NoSupportException.class );
+ }
+
+ public void testSimpleKeyTypes() throws com.sun.star.uno.Exception
+ {
+ impl_checkMappings(
+ new Long[] { (long)1, (long)2, (long)3, (long)4, (long)5 },
+ new Integer[] { 6, 7, 8, 9, 10 },
+ "long->int"
+ );
+ impl_checkMappings(
+ new Boolean[] { true, false },
+ new Short[] { (short)1, (short)0 },
+ "bool->short"
+ );
+ impl_checkMappings(
+ new String[] { "one", "two", "three", "four", "five"},
+ new String[] { "1", "2", "3", "4", "5" },
+ "string->string"
+ );
+ impl_checkMappings(
+ new Double[] { 1.2, 3.4, 5.6, 7.8, 9.10 },
+ new Float[] { (float)1, (float)2, (float)3, (float)4, (float)5 },
+ "double->float"
+ );
+ impl_checkMappings(
+ new Float[] { (float)1, (float)2, (float)3, (float)4, (float)5 },
+ new Double[] { 1.2, 3.4, 5.6, 7.8, 9.10 },
+ "float->double"
+ );
+ impl_checkMappings(
+ new Integer[] { 2, 9, 2005, 20, 11, 1970, 26, 3, 1974 },
+ new String[] { "2nd", "September", "2005", "20th", "November", "1970", "26th", "March", "1974" },
+ "int->string"
+ );
+ }
+
+ public void testComplexKeyTypes() throws com.sun.star.uno.Exception
+ {
+ Type intType = new Type( Integer.class );
+ Type longType = new Type( Long.class );
+ Type msfType = new Type ( XMultiServiceFactory.class );
+ // ....................................................................
+ // css.uno.Type should be a valid key type
+ impl_checkMappings(
+ new Type[] { intType, longType, msfType },
+ new String[] { intType.getTypeName(), longType.getTypeName(), msfType.getTypeName() },
+ "type->string"
+ );
+
+ // ....................................................................
+ // any UNO interface type should be a valid key type.
+ // Try with some form components (just because I like form components :), and the very first application
+ // for the newly implemented map will be to map XFormComponents to drawing shapes
+ String[] serviceNames = new String[] { "CheckBox", "ComboBox", "CommandButton", "DateField", "FileControl" };
+ Object[] components = new Object[ serviceNames.length ];
+ for ( int i=0; i<serviceNames.length; ++i )
+ {
+ components[i] = ((XMultiServiceFactory)param.getMSF()).createInstance( "com.sun.star.form.component." + serviceNames[i] );
+ }
+ // "normalize" the first component, so it has the property type
+ Type formComponentType = new Type( XFormComponent.class );
+ components[0] = UnoRuntime.queryInterface( formComponentType.getZClass(), components[0] );
+ impl_checkMappings( components, serviceNames, "XFormComponent->string" );
+
+ // ....................................................................
+ // any UNO enum type should be a valid key type
+ impl_checkMappings(
+ new TypeClass[] { intType.getTypeClass(), longType.getTypeClass(), msfType.getTypeClass() },
+ new Object[] { "foo", "bar", "42" },
+ "enum->string"
+ );
+ }
+
+ private Class impl_getValueClassByPos( int _pos )
+ {
+ Class valueClass = null;
+ switch ( _pos )
+ {
+ case 0: valueClass = Boolean.class; break;
+ case 1: valueClass = Short.class; break;
+ case 2: valueClass = Integer.class; break;
+ case 3: valueClass = Long.class; break;
+ case 4: valueClass = XInterface.class; break;
+ case 5: valueClass = XSet.class; break;
+ case 6: valueClass = XContainer.class; break;
+ case 7: valueClass = XIdentifierAccess.class; break;
+ case 8: valueClass = XElementAccess.class; break;
+ case 9: valueClass = com.sun.star.uno.Exception.class; break;
+ case 10: valueClass = com.sun.star.uno.RuntimeException.class; break;
+ case 11: valueClass = EventObject.class; break;
+ case 12: valueClass = ContainerEvent.class; break;
+ case 13: valueClass = Object.class; break;
+ default:
+ failed( "internal error: wrong position for getValueClass" );
+ }
+ return valueClass;
+ }
+
+ @SuppressWarnings("unchecked")
+ private Object impl_getSomeValueByTypePos( int _pos )
+ {
+ Object someValue = null;
+ switch ( _pos )
+ {
+ case 0: someValue = new Boolean( false ); break;
+ case 1: someValue = new Short( (short)0 ); break;
+ case 2: someValue = new Integer( 0 ); break;
+ case 3: someValue = new Long( 0 ); break;
+ case 4: someValue = UnoRuntime.queryInterface( XInterface.class, new DummyInterface() ); break;
+ case 5: someValue = UnoRuntime.queryInterface( XSet.class, new DummySet() ); break;
+ case 6: someValue = UnoRuntime.queryInterface( XContainer.class, new DummyContainer() ); break;
+ case 7: someValue = UnoRuntime.queryInterface( XIdentifierAccess.class, new DummyIdentifierAccess() ); break;
+ case 8: someValue = UnoRuntime.queryInterface( XElementAccess.class, new DummyElementAccess() ); break;
+ case 9: someValue = new com.sun.star.uno.Exception(); break;
+ case 10: someValue = new com.sun.star.uno.RuntimeException(); break;
+ case 11: someValue = new EventObject(); break;
+ case 12: someValue = new ContainerEvent(); break;
+ case 13: someValue = new Locale(); break; // just use *any* value which does not conflict with the others
+ default:
+ failed( "internal error: wrong position for getSomeValue" );
+ }
+ return someValue;
+ }
+
+ private class DummyInterface implements XInterface
+ {
+ };
+
+ private class DummySet implements XSet
+ {
+ public boolean has( Object arg0 ) { throw new UnsupportedOperationException( "Not implemented." ); }
+ public void insert( Object arg0 ) { throw new UnsupportedOperationException( "Not implemented." ); }
+ public void remove( Object arg0 ) { throw new UnsupportedOperationException( "Not implemented." ); }
+ public XEnumeration createEnumeration() { throw new UnsupportedOperationException( "Not implemented." ); }
+ public Type getElementType() { throw new UnsupportedOperationException( "Not implemented." ); }
+ public boolean hasElements() { throw new UnsupportedOperationException( "Not implemented." ); }
+ };
+
+ private class DummyContainer implements XContainer
+ {
+ public void addContainerListener( XContainerListener arg0 ) { throw new UnsupportedOperationException( "Not implemented." ); }
+ public void removeContainerListener( XContainerListener arg0 ) { throw new UnsupportedOperationException( "Not implemented." ); }
+ };
+
+ private class DummyIdentifierAccess implements XIdentifierAccess
+ {
+ public Object getByIdentifier( int arg0 ) { throw new UnsupportedOperationException( "Not implemented." ); }
+ public int[] getIdentifiers() { throw new UnsupportedOperationException( "Not implemented." ); }
+ public Type getElementType() { throw new UnsupportedOperationException( "Not implemented." ); }
+ public boolean hasElements() { throw new UnsupportedOperationException( "Not implemented." ); }
+ };
+
+ private class DummyElementAccess implements XElementAccess
+ {
+ public Type getElementType() { throw new UnsupportedOperationException( "Not implemented." ); }
+ public boolean hasElements() { throw new UnsupportedOperationException( "Not implemented." ); }
+ };
+
+ public void testValueTypes() throws com.sun.star.uno.Exception
+ {
+ final Integer key = new Integer(1);
+
+ // type compatibility matrix: rows are the value types used to create the map,
+ // columns are the value types fed into the map. A value "1" means the respective type
+ // should be accepted.
+ Integer[][] typeCompatibility = new Integer[][] {
+ /* boolean */ new Integer[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* short */ new Integer[] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* int */ new Integer[] { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* long */ new Integer[] { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* XInterface */ new Integer[] { 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
+ /* XSet */ new Integer[] { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* XContainer */ new Integer[] { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
+ /* XIdentifierAccess */ new Integer[] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+ /* XElementAccess */ new Integer[] { 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0 },
+ /* Exception */ new Integer[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 },
+ /* RuntimeException */ new Integer[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
+ /* EventObject */ new Integer[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+ /* ContainerEvent */ new Integer[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+ /* any */ new Integer[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+ };
+ // several asects are checked with this compatibility matrix:
+ // - if a map's value type is a scalar type, or a string, then nothing but this
+ // type should be accepted
+ // - if a map's value type is an interface type, then values should be accepted if
+ // they contain a derived interface, or the interrface itself, or if they can be
+ // queried for this interface (actually, the latter rule is not tested with the
+ // above matrix)
+ // - if a map's value type is a struct or exception, then values should be accepted
+ // if they are of the given type, or of a derived type.
+ // - if a map's value type is "any", then, well, any value should be accepted
+
+ for ( int valueTypePos = 0; valueTypePos != typeCompatibility.length; ++valueTypePos )
+ {
+ XMap map = com.sun.star.container.EnumerableMap.create( param.getComponentContext(),
+ new Type( Integer.class ), new Type( impl_getValueClassByPos( valueTypePos ) ) );
+
+ for ( int checkTypePos = 0; checkTypePos != typeCompatibility[valueTypePos].length; ++checkTypePos )
+ {
+ Object value = impl_getSomeValueByTypePos( checkTypePos );
+ if ( typeCompatibility[valueTypePos][checkTypePos] != 0 )
+ // expected to succeed
+ assureException(
+ "(" + valueTypePos + "," + checkTypePos + ") putting an " +
+ AnyConverter.getType( value ).getTypeName() + ", where " +
+ map.getValueType().getTypeName() + " is expected, should succeed",
+ map, "put", new Class[] { Object.class, Object.class }, new Object[] { key, value },
+ null );
+ else
+ {
+ // expected to fail
+ assureException(
+ "(" + valueTypePos + "," + checkTypePos + ") putting an " +
+ AnyConverter.getType( value ).getTypeName() + ", where " +
+ map.getValueType().getTypeName() + " is expected, should not succeed",
+ map, "put", new Class[] { Object.class, Object.class }, new Object[] { key, value },
+ IllegalTypeException.class );
+ }
+ }
+ }
+ }
+
+ private interface CompareEqual
+ {
+ public boolean areEqual( Object _lhs, Object _rhs );
+ };
+
+ private class DefaultCompareEqual implements CompareEqual
+ {
+ public boolean areEqual( Object _lhs, Object _rhs )
+ {
+ return _lhs.equals( _rhs );
+ }
+ };
+
+ private class PairCompareEqual implements CompareEqual
+ {
+ public boolean areEqual( Object _lhs, Object _rhs )
+ {
+ Pair< ?, ? > lhs = (Pair< ?, ? >)_lhs;
+ Pair< ?, ? > rhs = (Pair< ?, ? >)_rhs;
+ return lhs.First.equals( rhs.First ) && lhs.Second.equals( rhs.Second );
+ }
+ };
+
+ @SuppressWarnings("unchecked")
+ private void impl_verifyEnumerationContent( XEnumeration _enum, final Object[] _expectedElements, final String _context )
+ throws com.sun.star.uno.Exception
+ {
+ // since we cannot assume the map to preserve the ordering in which the elements where inserted,
+ // we can only verify that all elements exist as expected, plus *no more* elements than expected
+ // are provided by the enumeration
+ Set set = new HashSet();
+ for ( int i=0; i<_expectedElements.length; ++i )
+ set.add( i );
+
+ CompareEqual comparator = _expectedElements[0].getClass().equals( Pair.class )
+ ? new PairCompareEqual()
+ : new DefaultCompareEqual();
+
+ for ( int i=0; i<_expectedElements.length; ++i )
+ {
+ assure( _context + ": too few elements in the enumeration (still " + ( _expectedElements.length - i ) + " to go)",
+ _enum.hasMoreElements() );
+
+ Object nextElement = _enum.nextElement();
+ if ( nextElement.getClass().equals( Any.class ) )
+ nextElement = ((Any)nextElement).getObject();
+
+ int foundPos = -1;
+ for ( int j=0; j<_expectedElements.length; ++j )
+ {
+ if ( comparator.areEqual( _expectedElements[j], nextElement ) )
+ {
+ foundPos = j;
+ break;
+ }
+ }
+
+ assure( _context + ": '" + nextElement.toString() + "' is not expected in the enumeration",
+ set.contains( foundPos ) );
+ set.remove( foundPos );
+ }
+ assure( _context + ": too many elements returned by the enumeration", set.isEmpty() );
+ }
+
+ public void testEnumerations() throws com.sun.star.uno.Exception
+ {
+ // fill a map
+ final String[] keys = new String[] { "This", "is", "an", "enumeration", "test" };
+ final String[] values = new String[] { "for", "the", "map", "implementation", "." };
+ XEnumerableMap map = com.sun.star.container.EnumerableMap.create( param.getComponentContext(), new Type( String.class ), new Type( String.class ) );
+ impl_putAll( map, keys, values );
+
+ final Pair< ?, ? >[] paired = new Pair< ?, ? >[ keys.length ];
+ for ( int i=0; i<keys.length; ++i )
+ paired[i] = new Pair< Object, Object >( keys[i], values[i] );
+
+ // create non-isolated enumerators, and check their content
+ XEnumeration enumerateKeys = map.createKeyEnumeration( false );
+ XEnumeration enumerateValues = map.createValueEnumeration( false );
+ XEnumeration enumerateAll = map.createElementEnumeration( false );
+ impl_verifyEnumerationContent( enumerateKeys, keys, "key enumeration" );
+ impl_verifyEnumerationContent( enumerateValues, values, "value enumeration" );
+ impl_verifyEnumerationContent( enumerateAll, paired, "content enumeration" );
+
+ // all enumerators above have been created as non-isolated iterators, so they're expected to die when
+ // the underlying map changes
+ map.remove( keys[0] );
+ assureException( enumerateKeys, "hasMoreElements", new Object[] {}, DisposedException.class );
+ assureException( enumerateValues, "hasMoreElements", new Object[] {}, DisposedException.class );
+ assureException( enumerateAll, "hasMoreElements", new Object[] {}, DisposedException.class );
+
+ // now try with isolated iterators
+ map.put( keys[0], values[0] );
+ enumerateKeys = map.createKeyEnumeration( true );
+ enumerateValues = map.createValueEnumeration( true );
+ enumerateAll = map.createElementEnumeration( true );
+ map.put( "additional", "value" );
+ impl_verifyEnumerationContent( enumerateKeys, keys, "key enumeration" );
+ impl_verifyEnumerationContent( enumerateValues, values, "value enumeration" );
+ impl_verifyEnumerationContent( enumerateAll, paired, "content enumeration" );
+ }
+
+ public void testSpecialValues() throws com.sun.star.uno.Exception
+ {
+ final Double[] keys = new Double[] { new Double( 0 ), Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY };
+ final Double[] values = new Double[] { Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, new Double( 0 ) };
+
+ XEnumerableMap map = com.sun.star.container.EnumerableMap.create( param.getComponentContext(), new Type( Double.class ), new Type( Double.class ) );
+ impl_putAll( map, keys, values );
+
+ assure( "containsKey( Double.+INF failed", map.containsKey( Double.POSITIVE_INFINITY ) );
+ assure( "containsKey( Double.-INF failed", map.containsKey( Double.NEGATIVE_INFINITY ) );
+ assure( "containsKey( 0 ) failed", map.containsKey( new Double( 0 ) ) );
+
+ assure( "containsValue( Double.+INF ) failed", map.containsValue( Double.POSITIVE_INFINITY ) );
+ assure( "containsValue( Double.-INF ) failed", map.containsValue( Double.NEGATIVE_INFINITY ) );
+ assure( "containsValue( 0 ) failed", map.containsValue( new Double( 0 ) ) );
+
+ // put and containsKey should reject Double.NaN as key
+ assureException( "Double.NaN should not be allowed as key in a call to 'put'", map, "put",
+ new Class[] { Object.class, Object.class }, new Object[] { Double.NaN, new Double( 0 ) },
+ com.sun.star.lang.IllegalArgumentException.class );
+ assureException( "Double.NaN should not be allowed as key in a call to 'containsKey'", map, "containsKey",
+ new Class[] { Object.class }, new Object[] { Double.NaN },
+ com.sun.star.lang.IllegalArgumentException.class );
+
+ // ditto for put and containsValue
+ assureException( "Double.NaN should not be allowed as value in a call to 'put'", map, "put",
+ new Class[] { Object.class, Object.class }, new Object[] { new Double( 0 ), Double.NaN },
+ com.sun.star.lang.IllegalArgumentException.class );
+ assureException( "Double.NaN should not be allowed as key in a call to 'containsValue'", map, "containsValue",
+ new Class[] { Object.class }, new Object[] { Double.NaN },
+ com.sun.star.lang.IllegalArgumentException.class );
+ }
+}
diff --git a/comphelper/qa/complex/sequenceoutputstream/SequenceOutputStreamUnitTest.java b/comphelper/qa/complex/comphelper/SequenceOutputStreamUnitTest.java
index caa094499486..b5e8a4052897 100644
--- a/comphelper/qa/complex/sequenceoutputstream/SequenceOutputStreamUnitTest.java
+++ b/comphelper/qa/complex/comphelper/SequenceOutputStreamUnitTest.java
@@ -27,11 +27,10 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.sequenceoutputstream;
+package complex.comphelper;
import complexlib.ComplexTestCase;
import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.uno.UnoRuntime;
/* Document.
*/
@@ -48,6 +47,10 @@ public class SequenceOutputStreamUnitTest extends ComplexTestCase {
return "SequenceOutputStreamUnitTest";
}
+ public static String getShortTestDescription() {
+ return "tests the SequenceOutput/InputStream implementations";
+ }
+
public void before() {
try {
m_xMSF = (XMultiServiceFactory)param.getMSF ();
@@ -64,7 +67,8 @@ public class SequenceOutputStreamUnitTest extends ComplexTestCase {
}
public void ExecuteTest01() {
- SequenceOutputStreamTest aTest = new Test01 (m_xMSF, log);
+ Test01 aTest = new Test01 (m_xMSF, log);
assure ( "Test01 failed!", aTest.test() );
}
+
} \ No newline at end of file
diff --git a/comphelper/qa/complex/sequenceoutputstream/Test01.java b/comphelper/qa/complex/comphelper/Test01.java
index b7e864d981a5..4404a8468734 100644
--- a/comphelper/qa/complex/sequenceoutputstream/Test01.java
+++ b/comphelper/qa/complex/comphelper/Test01.java
@@ -27,21 +27,17 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.sequenceoutputstream;
-
-import complexlib.ComplexTestCase;
+package complex.comphelper;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.io.XSequenceOutputStream;
import com.sun.star.io.XSeekableInputStream;
-import com.sun.star.io.XOutputStream;
-import com.sun.star.io.XInputStream;
import com.sun.star.uno.UnoRuntime;
import java.util.Random;
import share.LogWriter;
-public class Test01 implements SequenceOutputStreamTest {
+public class Test01 {
XMultiServiceFactory m_xMSF = null;
TestHelper m_aTestHelper = null;
diff --git a/comphelper/qa/complex/sequenceoutputstream/TestHelper.java b/comphelper/qa/complex/comphelper/TestHelper.java
index eac7103a032c..6d88280bb372 100644
--- a/comphelper/qa/complex/sequenceoutputstream/TestHelper.java
+++ b/comphelper/qa/complex/comphelper/TestHelper.java
@@ -27,7 +27,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.sequenceoutputstream;
+package complex.comphelper;
import share.LogWriter;
diff --git a/comphelper/qa/complex/comphelper_all.sce b/comphelper/qa/complex/comphelper_all.sce
new file mode 100644
index 000000000000..63e5276f00ed
--- /dev/null
+++ b/comphelper/qa/complex/comphelper_all.sce
@@ -0,0 +1,2 @@
+-o complex.comphelper.SequenceOutputStreamUnitTest
+-o complex.comphelper.Map
diff --git a/comphelper/qa/complex/sequenceoutputstream/makefile.mk b/comphelper/qa/complex/makefile.mk
index 69e78936cf0a..d0e8a078e2c7 100644
--- a/comphelper/qa/complex/sequenceoutputstream/makefile.mk
+++ b/comphelper/qa/complex/makefile.mk
@@ -8,7 +8,7 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.3.48.1 $
+# $Revision: 1.2.20.2 $
#
# This file is part of OpenOffice.org.
#
@@ -29,61 +29,73 @@
#
#*************************************************************************
-PRJ = ..$/..$/..
-TARGET = SequenceOutputStreamUnitTest
+PRJ = ..$/..
+TARGET = ComphelperComplexTests
PRJNAME = comphelper
-PACKAGE = complex$/sequenceoutputstream
# --- Settings -----------------------------------------------------
.INCLUDE: settings.mk
-#----- compile .java files -----------------------------------------
-
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
+.IF "$(BUILD_QADEVOOO)" == "YES"
-JAVAFILES =\
- SequenceOutputStreamUnitTest.java\
- SequenceOutputStreamTest.java\
- Test01.java\
- TestHelper.java\
+#----- compile .java files -----------------------------------------
-JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
+JARFILES := ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
+JAVAFILES := $(shell @$(FIND) . -name "*.java")
+JAVACLASSFILES := $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(i:d)$/$(i:b).class)
#----- make a jar from compiled files ------------------------------
MAXLINELENGTH = 100000
-JARCLASSDIRS = $(PACKAGE)
+#JARCLASSDIRS =
JARTARGET = $(TARGET).jar
JARCOMPRESS = TRUE
-# --- Parameters for the test --------------------------------------
+# --- Runner Settings ----------------------------------------------
+
+# classpath and argument list
+RUNNER_CLASSPATH = -cp $(CLASSPATH)$(PATH_SEPERATOR)$(SOLARBINDIR)$/OOoRunner.jar
# start an office if the parameter is set for the makefile
.IF "$(OFFICE)" == ""
-CT_APPEXECCOMMAND =
+RUNNER_APPEXECCOMMAND =
.ELSE
-CT_APPEXECCOMMAND = -AppExecutionCommand "$(OFFICE)$/soffice -accept=socket,host=localhost,port=8100;urp;"
+RUNNER_APPEXECCOMMAND = -AppExecutionCommand "$(OFFICE)$/soffice -accept=socket,host=localhost,port=8100;urp;"
.ENDIF
-# test base is java complex
-CT_TESTBASE = -TestBase java_complex
-
-# test looks something like the.full.package.TestName
-CT_TEST = -o $(PACKAGE:s\$/\.\).$(JAVAFILES:b)
+RUNNER_ARGS = org.openoffice.Runner -TestBase java_complex $(RUNNER_APPEXECCOMMAND)
-# start the runner application
-CT_APP = org.openoffice.Runner
+.END # "$(BUILD_QADEVOOO)" == "YES"
# --- Targets ------------------------------------------------------
-.INCLUDE: target.mk
+.IF "$(depend)" == ""
+ALL : ALLTAR
+ @echo -----------------------------------------------------
+ @echo - do a 'dmake show_targets' to show available targets
+ @echo -----------------------------------------------------
+.ELSE
+ALL: ALLDEP
+.ENDIF
+
+.INCLUDE : target.mk
-RUN: run
+.IF "$(BUILD_QADEVOOO)" == "YES"
+show_targets:
+ +@java $(RUNNER_CLASSPATH) complexlib.ShowTargets $(foreach,i,$(JAVAFILES) $(i:s#.java##:s#./#complex.#))
run:
- +java -cp $(CLASSPATH) $(CT_APP) $(CT_TESTBASE) $(CT_APPEXECCOMMAND) $(CT_TEST)
+ +java $(RUNNER_CLASSPATH) $(RUNNER_ARGS) -sce comphelper_all.sce
+run_%:
+ +java $(RUNNER_CLASSPATH) $(RUNNER_ARGS) -o complex.$(PRJNAME).$(@:s/run_//)
+.ELSE
+run: show_targets
+show_targets:
+ +@echo "Built without qadevOOo, no QA tests"
+
+.ENDIF
diff --git a/comphelper/qa/complex/sequenceoutputstream/SequenceOutputStreamTest.java b/comphelper/qa/complex/sequenceoutputstream/SequenceOutputStreamTest.java
deleted file mode 100644
index e2acd0dd1322..000000000000
--- a/comphelper/qa/complex/sequenceoutputstream/SequenceOutputStreamTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: SequenceOutputStreamTest.java,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-package complex.sequenceoutputstream;
-
-public interface SequenceOutputStreamTest {
- boolean test();
-} \ No newline at end of file
diff --git a/comphelper/source/compare/AnyCompareFactory.cxx b/comphelper/source/compare/AnyCompareFactory.cxx
index e5713c6ece46..c77aaf75f5a8 100644
--- a/comphelper/source/compare/AnyCompareFactory.cxx
+++ b/comphelper/source/compare/AnyCompareFactory.cxx
@@ -31,6 +31,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
#include <com/sun/star/ucb/XAnyCompareFactory.hpp>
#include <com/sun/star/i18n/XCollator.hpp>
@@ -44,9 +45,7 @@
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
#include <comphelper/stl_types.hxx>
-#ifndef __SGI_STL_MAP
#include <map>
-#endif
using namespace com::sun::star::uno;
@@ -81,11 +80,6 @@ public:
//=============================================================================
-Sequence< rtl::OUString > SAL_CALL AnyCompareFactory_getSupportedServiceNames() throw();
-rtl::OUString SAL_CALL AnyCompareFactory_getImplementationName() throw();
-Reference< XInterface > SAL_CALL AnyCompareFactory_createInstance(
- const Reference< XComponentContext >& rxContext ) throw( Exception );
-
class AnyCompareFactory : public cppu::WeakImplHelper3< XAnyCompareFactory, XInitialization, XServiceInfo >
{
Reference< XAnyCompare > m_rAnyCompare;
@@ -107,6 +101,11 @@ public:
virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException);
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException);
+
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static Reference< XInterface > SAL_CALL Create( const Reference< XComponentContext >& );
};
//===========================================================================================
@@ -157,7 +156,12 @@ void SAL_CALL AnyCompareFactory::initialize( const Sequence< Any >& aArguments )
OUString SAL_CALL AnyCompareFactory::getImplementationName( ) throw( RuntimeException )
{
- return AnyCompareFactory_getImplementationName();
+ return getImplementationName_static();
+}
+
+OUString SAL_CALL AnyCompareFactory::getImplementationName_static( )
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AnyCompareFactory" ) );
}
sal_Bool SAL_CALL AnyCompareFactory::supportsService( const OUString& ServiceName ) throw(RuntimeException)
@@ -168,24 +172,23 @@ sal_Bool SAL_CALL AnyCompareFactory::supportsService( const OUString& ServiceNam
Sequence< OUString > SAL_CALL AnyCompareFactory::getSupportedServiceNames( ) throw(RuntimeException)
{
- return AnyCompareFactory_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
}
-
-Sequence< rtl::OUString > SAL_CALL AnyCompareFactory_getSupportedServiceNames() throw()
+Sequence< OUString > SAL_CALL AnyCompareFactory::getSupportedServiceNames_static( )
{
const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ucb.AnyCompareFactory" ) );
const Sequence< rtl::OUString > aSeq( &aServiceName, 1 );
return aSeq;
}
-rtl::OUString SAL_CALL AnyCompareFactory_getImplementationName() throw()
+Reference< XInterface > SAL_CALL AnyCompareFactory::Create(
+ const Reference< XComponentContext >& rxContext )
{
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AnyCompareFactory" ) );
+ return (cppu::OWeakObject*)new AnyCompareFactory( rxContext );
}
-Reference< XInterface > SAL_CALL AnyCompareFactory_createInstance(
- const Reference< XComponentContext >& rxContext ) throw( Exception )
+void createRegistryInfo_AnyCompareFactory()
{
- return (cppu::OWeakObject*)new AnyCompareFactory( rxContext );
+ static ::comphelper::module::OAutoRegistration< AnyCompareFactory > aAutoRegistration;
}
diff --git a/comphelper/source/container/IndexedPropertyValuesContainer.cxx b/comphelper/source/container/IndexedPropertyValuesContainer.cxx
index 10d6143f2eaa..a9f413bc46e1 100644
--- a/comphelper/source/container/IndexedPropertyValuesContainer.cxx
+++ b/comphelper/source/container/IndexedPropertyValuesContainer.cxx
@@ -31,9 +31,9 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
-#ifndef _COM_SUN_STAR_CONTAINER_XIndexCONTAINER_HPP_
+#include "comphelper_module.hxx"
+
#include <com/sun/star/container/XIndexContainer.hpp>
-#endif
#include <com/sun/star/uno/Sequence.h>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <cppuhelper/implbase2.hxx>
@@ -49,11 +49,6 @@ using namespace com::sun::star;
typedef std::vector < uno::Sequence< beans::PropertyValue > > IndexedPropertyValues;
-uno::Sequence< rtl::OUString > SAL_CALL IndexedPropertyValuesContainer_getSupportedServiceNames() throw();
-rtl::OUString SAL_CALL IndexedPropertyValuesContainer_getImplementationName() throw();
-uno::Reference< uno::XInterface > SAL_CALL IndexedPropertyValuesContainer_createInstance(
- const uno::Reference< uno::XComponentContext > & rxContext ) throw( uno::Exception );
-
class IndexedPropertyValuesContainer : public cppu::WeakImplHelper2< container::XIndexContainer, lang::XServiceInfo >
{
public:
@@ -91,6 +86,11 @@ public:
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException);
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static uno::Reference< uno::XInterface > SAL_CALL Create( const uno::Reference< uno::XComponentContext >& );
+
private:
IndexedPropertyValues maProperties;
};
@@ -233,7 +233,12 @@ sal_Bool SAL_CALL IndexedPropertyValuesContainer::hasElements( )
//XServiceInfo
::rtl::OUString SAL_CALL IndexedPropertyValuesContainer::getImplementationName( ) throw(::com::sun::star::uno::RuntimeException)
{
- return IndexedPropertyValuesContainer_getImplementationName();
+ return getImplementationName_static();
+}
+
+::rtl::OUString SAL_CALL IndexedPropertyValuesContainer::getImplementationName_static( )
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IndexedPropertyValuesContainer" ) );
}
sal_Bool SAL_CALL IndexedPropertyValuesContainer::supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException)
@@ -244,25 +249,25 @@ sal_Bool SAL_CALL IndexedPropertyValuesContainer::supportsService( const ::rtl::
::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL IndexedPropertyValuesContainer::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException)
{
- return IndexedPropertyValuesContainer_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
}
-uno::Sequence< rtl::OUString > SAL_CALL IndexedPropertyValuesContainer_getSupportedServiceNames() throw()
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL IndexedPropertyValuesContainer::getSupportedServiceNames_static( )
{
const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.IndexedPropertyValues" ) );
const uno::Sequence< rtl::OUString > aSeq( &aServiceName, 1 );
return aSeq;
}
-rtl::OUString SAL_CALL IndexedPropertyValuesContainer_getImplementationName() throw()
-{
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IndexedPropertyValuesContainer" ) );
-}
-uno::Reference< uno::XInterface > SAL_CALL IndexedPropertyValuesContainer_createInstance(
- const uno::Reference< uno::XComponentContext >&) throw( uno::Exception )
+uno::Reference< uno::XInterface > SAL_CALL IndexedPropertyValuesContainer::Create(
+ const uno::Reference< uno::XComponentContext >&)
{
return (cppu::OWeakObject*)new IndexedPropertyValuesContainer();
}
+void createRegistryInfo_IndexedPropertyValuesContainer()
+{
+ static ::comphelper::module::OAutoRegistration< IndexedPropertyValuesContainer > aAutoRegistration;
+}
diff --git a/comphelper/source/container/NamedPropertyValuesContainer.cxx b/comphelper/source/container/NamedPropertyValuesContainer.cxx
index 269fa05de56b..99a33bb8470e 100644
--- a/comphelper/source/container/NamedPropertyValuesContainer.cxx
+++ b/comphelper/source/container/NamedPropertyValuesContainer.cxx
@@ -31,6 +31,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/uno/Sequence.h>
@@ -48,11 +49,6 @@ using namespace com::sun::star;
DECLARE_STL_USTRINGACCESS_MAP( uno::Sequence<beans::PropertyValue>, NamedPropertyValues );
-uno::Sequence< rtl::OUString > SAL_CALL NamedPropertyValuesContainer_getSupportedServiceNames() throw();
-rtl::OUString SAL_CALL NamedPropertyValuesContainer_getImplementationName() throw();
-uno::Reference< uno::XInterface > SAL_CALL NamedPropertyValuesContainer_createInstance(
- const uno::Reference< uno::XComponentContext > & rxContext ) throw( uno::Exception );
-
class NamedPropertyValuesContainer : public cppu::WeakImplHelper2< container::XNameContainer, lang::XServiceInfo >
{
public:
@@ -92,6 +88,11 @@ public:
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException);
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static uno::Reference< uno::XInterface > SAL_CALL Create( const uno::Reference< uno::XComponentContext >& );
+
private:
NamedPropertyValues maProperties;
};
@@ -202,7 +203,12 @@ sal_Bool SAL_CALL NamedPropertyValuesContainer::hasElements( )
//XServiceInfo
::rtl::OUString SAL_CALL NamedPropertyValuesContainer::getImplementationName( ) throw(::com::sun::star::uno::RuntimeException)
{
- return NamedPropertyValuesContainer_getImplementationName();
+ return getImplementationName_static();
+}
+
+::rtl::OUString SAL_CALL NamedPropertyValuesContainer::getImplementationName_static( )
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NamedPropertyValuesContainer" ) );
}
sal_Bool SAL_CALL NamedPropertyValuesContainer::supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException)
@@ -213,25 +219,24 @@ sal_Bool SAL_CALL NamedPropertyValuesContainer::supportsService( const ::rtl::OU
::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL NamedPropertyValuesContainer::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException)
{
- return NamedPropertyValuesContainer_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
}
-uno::Sequence< rtl::OUString > SAL_CALL NamedPropertyValuesContainer_getSupportedServiceNames() throw()
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL NamedPropertyValuesContainer::getSupportedServiceNames_static( )
{
const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.NamedPropertyValues" ) );
const uno::Sequence< rtl::OUString > aSeq( &aServiceName, 1 );
return aSeq;
}
-rtl::OUString SAL_CALL NamedPropertyValuesContainer_getImplementationName() throw()
+uno::Reference< uno::XInterface > SAL_CALL NamedPropertyValuesContainer::Create(
+ const uno::Reference< uno::XComponentContext >&)
{
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NamedPropertyValuesContainer" ) );
+ return (cppu::OWeakObject*)new NamedPropertyValuesContainer();
}
-uno::Reference< uno::XInterface > SAL_CALL NamedPropertyValuesContainer_createInstance(
- const uno::Reference< uno::XComponentContext >&) throw( uno::Exception )
+void createRegistryInfo_NamedPropertyValuesContainer()
{
- return (cppu::OWeakObject*)new NamedPropertyValuesContainer();
+ static ::comphelper::module::OAutoRegistration< NamedPropertyValuesContainer > aAutoRegistration;
}
-
diff --git a/comphelper/source/container/enumerablemap.cxx b/comphelper/source/container/enumerablemap.cxx
new file mode 100644
index 000000000000..c7179ff07b91
--- /dev/null
+++ b/comphelper/source/container/enumerablemap.cxx
@@ -0,0 +1,999 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+#include "comphelper/anytostring.hxx"
+#include "comphelper/componentbase.hxx"
+#include "comphelper/componentcontext.hxx"
+#include "comphelper/extract.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/container/XEnumerableMap.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/ucb/AlreadyInitializedException.hpp>
+#include <com/sun/star/beans/Pair.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+/** === end UNO includes === **/
+
+#include <cppuhelper/compbase3.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <rtl/math.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <typelib/typedescription.hxx>
+
+#include <functional>
+#include <map>
+#include <memory>
+#include <boost/shared_ptr.hpp>
+
+//........................................................................
+namespace comphelper
+{
+//........................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::container::XEnumerableMap;
+ using ::com::sun::star::lang::NoSupportException;
+ using ::com::sun::star::beans::IllegalTypeException;
+ using ::com::sun::star::container::NoSuchElementException;
+ using ::com::sun::star::lang::IllegalArgumentException;
+ using ::com::sun::star::lang::XInitialization;
+ using ::com::sun::star::ucb::AlreadyInitializedException;
+ using ::com::sun::star::beans::Pair;
+ using ::com::sun::star::uno::TypeClass;
+ using ::com::sun::star::uno::TypeClass_VOID;
+ using ::com::sun::star::uno::TypeClass_CHAR;
+ using ::com::sun::star::uno::TypeClass_BOOLEAN;
+ using ::com::sun::star::uno::TypeClass_BYTE;
+ using ::com::sun::star::uno::TypeClass_SHORT;
+ using ::com::sun::star::uno::TypeClass_UNSIGNED_SHORT;
+ using ::com::sun::star::uno::TypeClass_LONG;
+ using ::com::sun::star::uno::TypeClass_UNSIGNED_LONG;
+ using ::com::sun::star::uno::TypeClass_HYPER;
+ using ::com::sun::star::uno::TypeClass_UNSIGNED_HYPER;
+ using ::com::sun::star::uno::TypeClass_FLOAT;
+ using ::com::sun::star::uno::TypeClass_DOUBLE;
+ using ::com::sun::star::uno::TypeClass_STRING;
+ using ::com::sun::star::uno::TypeClass_TYPE;
+ using ::com::sun::star::uno::TypeClass_ENUM;
+ using ::com::sun::star::uno::TypeClass_INTERFACE;
+ using ::com::sun::star::uno::TypeClass_UNKNOWN;
+ using ::com::sun::star::uno::TypeClass_ANY;
+ using ::com::sun::star::uno::TypeClass_EXCEPTION;
+ using ::com::sun::star::uno::TypeClass_STRUCT;
+ using ::com::sun::star::uno::TypeClass_UNION;
+ using ::com::sun::star::lang::XServiceInfo;
+ using ::com::sun::star::uno::XComponentContext;
+ using ::com::sun::star::container::XEnumeration;
+ using ::com::sun::star::uno::TypeDescription;
+ using ::com::sun::star::lang::WrappedTargetException;
+ using ::com::sun::star::lang::DisposedException;
+ /** === end UNO using === **/
+
+ //====================================================================
+ //= IKeyPredicateLess
+ //====================================================================
+ class SAL_NO_VTABLE IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const = 0;
+ virtual ~IKeyPredicateLess() {}
+ };
+
+ //====================================================================
+ //= LessPredicateAdapter
+ //====================================================================
+ struct LessPredicateAdapter : public ::std::binary_function< Any, Any, bool >
+ {
+ LessPredicateAdapter( const IKeyPredicateLess& _predicate )
+ :m_predicate( _predicate )
+ {
+ }
+
+ bool operator()( const Any& _lhs, const Any& _rhs ) const
+ {
+ return m_predicate.isLess( _lhs, _rhs );
+ }
+
+ private:
+ const IKeyPredicateLess& m_predicate;
+
+ private:
+ LessPredicateAdapter(); // never implemented
+ };
+
+ //====================================================================
+ //= ScalarPredicateLess
+ //====================================================================
+ template< typename SCALAR >
+ class ScalarPredicateLess : public IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ SCALAR lhs(0), rhs(0);
+ if ( !( _lhs >>= lhs )
+ || !( _rhs >>= rhs )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+ return lhs < rhs;
+ }
+ };
+
+ //====================================================================
+ //= StringPredicateLess
+ //====================================================================
+ class StringPredicateLess : public IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ ::rtl::OUString lhs, rhs;
+ if ( !( _lhs >>= lhs )
+ || !( _rhs >>= rhs )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+ return lhs < rhs;
+ }
+ };
+
+ //====================================================================
+ //= TypePredicateLess
+ //====================================================================
+ class TypePredicateLess : public IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ Type lhs, rhs;
+ if ( !( _lhs >>= lhs )
+ || !( _rhs >>= rhs )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+ return lhs.getTypeName() < rhs.getTypeName();
+ }
+ };
+
+ //====================================================================
+ //= EnumPredicateLess
+ //====================================================================
+ class EnumPredicateLess : public IKeyPredicateLess
+ {
+ public:
+ EnumPredicateLess( const Type& _enumType )
+ :m_enumType( _enumType )
+ {
+ }
+
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ sal_Int32 lhs(0), rhs(0);
+ if ( !::cppu::enum2int( lhs, _lhs )
+ || !::cppu::enum2int( rhs, _rhs )
+ || !_lhs.getValueType().equals( m_enumType )
+ || !_rhs.getValueType().equals( m_enumType )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+ return lhs < rhs;
+ }
+
+ private:
+ const Type m_enumType;
+ };
+
+ //====================================================================
+ //= InterfacePredicateLess
+ //====================================================================
+ class InterfacePredicateLess : public IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ if ( ( _lhs.getValueTypeClass() != TypeClass_INTERFACE )
+ || ( _rhs.getValueTypeClass() != TypeClass_INTERFACE )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+
+ Reference< XInterface > lhs( _lhs, UNO_QUERY );
+ Reference< XInterface > rhs( _rhs, UNO_QUERY );
+ return lhs.get() < rhs.get();
+ }
+ };
+
+ //====================================================================
+ //= MapData
+ //====================================================================
+ class IMapModificationListener;
+ typedef ::std::vector< IMapModificationListener* > MapListeners;
+
+ typedef ::std::map< Any, Any, LessPredicateAdapter > KeyedValues;
+ struct MapData
+ {
+ Type m_aKeyType;
+ Type m_aValueType;
+ ::std::auto_ptr< KeyedValues > m_pValues;
+ ::boost::shared_ptr< IKeyPredicateLess > m_pKeyCompare;
+ bool m_bMutable;
+ MapListeners m_aModListeners;
+
+ MapData()
+ :m_bMutable( true )
+ {
+ }
+
+ MapData( const MapData& _source )
+ :m_aKeyType( _source.m_aKeyType )
+ ,m_aValueType( _source.m_aValueType )
+ ,m_pValues( new KeyedValues( *_source.m_pValues ) )
+ ,m_pKeyCompare( _source.m_pKeyCompare )
+ ,m_bMutable( false )
+ ,m_aModListeners()
+ {
+ }
+ private:
+ MapData& operator=( const MapData& _source ); // not implemented
+ };
+
+ //====================================================================
+ //= IMapModificationListener
+ //====================================================================
+ /** implemented by components who want to be notified of modifications in the MapData they work with
+ */
+ class SAL_NO_VTABLE IMapModificationListener
+ {
+ public:
+ /// called when the map was modified
+ virtual void mapModified() = 0;
+ virtual ~IMapModificationListener()
+ {
+ }
+ };
+
+ //====================================================================
+ //= MapData helpers
+ //====================================================================
+ //--------------------------------------------------------------------
+ static void lcl_registerMapModificationListener( MapData& _mapData, IMapModificationListener& _listener )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ for ( MapListeners::const_iterator lookup = _mapData.m_aModListeners.begin();
+ lookup != _mapData.m_aModListeners.end();
+ ++lookup
+ )
+ {
+ OSL_ENSURE( *lookup != &_listener, "lcl_registerMapModificationListener: this listener is already registered!" );
+ }
+ #endif
+ _mapData.m_aModListeners.push_back( &_listener );
+ }
+
+ //--------------------------------------------------------------------
+ static void lcl_revokeMapModificationListener( MapData& _mapData, IMapModificationListener& _listener )
+ {
+ for ( MapListeners::iterator lookup = _mapData.m_aModListeners.begin();
+ lookup != _mapData.m_aModListeners.end();
+ ++lookup
+ )
+ {
+ if ( *lookup == &_listener )
+ {
+ _mapData.m_aModListeners.erase( lookup );
+ return;
+ }
+ }
+ OSL_ENSURE( false, "lcl_revokeMapModificationListener: the listener is not registered!" );
+ }
+
+ //--------------------------------------------------------------------
+ static void lcl_notifyMapDataListeners_nothrow( const MapData& _mapData )
+ {
+ for ( MapListeners::const_iterator loop = _mapData.m_aModListeners.begin();
+ loop != _mapData.m_aModListeners.end();
+ ++loop
+ )
+ {
+ (*loop)->mapModified();
+ }
+ }
+
+ //====================================================================
+ //= EnumerableMap
+ //====================================================================
+ typedef ::cppu::WeakAggComponentImplHelper3 < XInitialization
+ , XEnumerableMap
+ , XServiceInfo
+ > Map_IFace;
+
+ class COMPHELPER_DLLPRIVATE EnumerableMap :public Map_IFace
+ ,public ComponentBase
+ {
+ protected:
+ EnumerableMap( const ComponentContext& _rContext );
+ virtual ~EnumerableMap();
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException);
+
+ // XEnumerableMap
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createKeyEnumeration( ::sal_Bool _Isolated ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createValueEnumeration( ::sal_Bool _Isolated ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createElementEnumeration( ::sal_Bool _Isolated ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
+
+ // XMap
+ virtual Type SAL_CALL getKeyType() throw (RuntimeException);
+ virtual Type SAL_CALL getValueType() throw (RuntimeException);
+ virtual void SAL_CALL clear( ) throw (NoSupportException, RuntimeException);
+ virtual ::sal_Bool SAL_CALL containsKey( const Any& _key ) throw (IllegalTypeException, IllegalArgumentException, RuntimeException);
+ virtual ::sal_Bool SAL_CALL containsValue( const Any& _value ) throw (IllegalTypeException, IllegalArgumentException, RuntimeException);
+ virtual Any SAL_CALL get( const Any& _key ) throw (IllegalTypeException, IllegalArgumentException, NoSuchElementException, RuntimeException);
+ virtual Any SAL_CALL put( const Any& _key, const Any& _value ) throw (NoSupportException, IllegalTypeException, IllegalArgumentException, RuntimeException);
+ virtual Any SAL_CALL remove( const Any& _key ) throw (NoSupportException, IllegalTypeException, IllegalArgumentException, NoSuchElementException, RuntimeException);
+
+ // XElementAccess (base of XMap)
+ virtual Type SAL_CALL getElementType() throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL hasElements() throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+ public:
+ // XServiceInfo, static version (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static( );
+ static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static( );
+ static Reference< XInterface > SAL_CALL Create( const Reference< XComponentContext >& );
+
+ private:
+ void impl_initValues_throw( const Sequence< Pair< Any, Any > >& _initialValues );
+
+ /// throws a IllegalTypeException if the given value is not compatible with our ValueType
+ void impl_checkValue_throw( const Any& _value ) const;
+ void impl_checkKey_throw( const Any& _key ) const;
+ void impl_checkNaN_throw( const Any& _keyOrValue, const Type& _keyOrValueType ) const;
+ void impl_checkMutable_throw() const;
+
+ private:
+ ::osl::Mutex m_aMutex;
+ ComponentContext m_aContext;
+ MapData m_aData;
+
+ ::std::vector< ::com::sun::star::uno::WeakReference< XInterface > >
+ m_aDependentComponents;
+ };
+
+ //====================================================================
+ //= EnumerationType
+ //====================================================================
+ enum EnumerationType
+ {
+ eKeys, eValues, eBoth
+ };
+
+ //====================================================================
+ //= MapEnumerator
+ //====================================================================
+ class MapEnumerator : public IMapModificationListener
+ {
+ public:
+ MapEnumerator( ::cppu::OWeakObject& _rParent, MapData& _mapData, const EnumerationType _type )
+ :m_rParent( _rParent )
+ ,m_rMapData( _mapData )
+ ,m_eType( _type )
+ ,m_mapPos( _mapData.m_pValues->begin() )
+ ,m_disposed( false )
+ {
+ lcl_registerMapModificationListener( m_rMapData, *this );
+ }
+
+ virtual ~MapEnumerator()
+ {
+ dispose();
+ }
+
+ void dispose()
+ {
+ if ( !m_disposed )
+ {
+ lcl_revokeMapModificationListener( m_rMapData, *this );
+ m_disposed = true;
+ }
+ }
+
+ // XEnumeration equivalents
+ ::sal_Bool hasMoreElements();
+ Any nextElement();
+
+ // IMapModificationListener
+ virtual void mapModified();
+
+ private:
+ ::cppu::OWeakObject& m_rParent;
+ MapData& m_rMapData;
+ const EnumerationType m_eType;
+ KeyedValues::const_iterator m_mapPos;
+ bool m_disposed;
+
+ private:
+ MapEnumerator(); // not implemented
+ MapEnumerator( const MapEnumerator& ); // not implemented
+ MapEnumerator& operator=( const MapEnumerator& ); // not implemented
+ };
+
+ //====================================================================
+ //= MapEnumeration
+ //====================================================================
+ typedef ::cppu::WeakImplHelper1 < XEnumeration
+ > MapEnumeration_Base;
+ class MapEnumeration :public ComponentBase
+ ,public MapEnumeration_Base
+ {
+ public:
+ MapEnumeration( ::cppu::OWeakObject& _parentMap, MapData& _mapData, ::cppu::OBroadcastHelper& _rBHelper,
+ const EnumerationType _type, const bool _isolated )
+ :ComponentBase( _rBHelper, ComponentBase::NoInitializationNeeded() )
+ ,m_xKeepMapAlive( _parentMap )
+ ,m_pMapDataCopy( _isolated ? new MapData( _mapData ) : NULL )
+ ,m_aEnumerator( *this, _isolated ? *m_pMapDataCopy : _mapData, _type )
+ {
+ }
+
+ // XEnumeration
+ virtual ::sal_Bool SAL_CALL hasMoreElements( ) throw (RuntimeException);
+ virtual Any SAL_CALL nextElement( ) throw (NoSuchElementException, WrappedTargetException, RuntimeException);
+
+ protected:
+ virtual ~MapEnumeration()
+ {
+ acquire();
+ {
+ ::osl::MutexGuard aGuard( getMutex() );
+ m_aEnumerator.dispose();
+ m_pMapDataCopy.reset();
+ }
+ }
+
+ private:
+ // sicne we share our mutex with the main map, we need to keep it alive as long as we live
+ Reference< XInterface > m_xKeepMapAlive;
+ ::std::auto_ptr< MapData > m_pMapDataCopy;
+ MapEnumerator m_aEnumerator;
+ };
+
+ //====================================================================
+ //= EnumerableMap
+ //====================================================================
+ //--------------------------------------------------------------------
+ EnumerableMap::EnumerableMap( const ComponentContext& _rContext )
+ :Map_IFace( m_aMutex )
+ ,ComponentBase( Map_IFace::rBHelper )
+ ,m_aContext( _rContext )
+ {
+ }
+
+ //--------------------------------------------------------------------
+ EnumerableMap::~EnumerableMap()
+ {
+ if ( !impl_isDisposed() )
+ {
+ acquire();
+ dispose();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL EnumerableMap::initialize( const Sequence< Any >& _arguments ) throw (Exception, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this, ComponentMethodGuard::WithoutInit );
+ if ( impl_isInitialized_nothrow() )
+ throw AlreadyInitializedException();
+
+ sal_Int32 nArgumentCount = _arguments.getLength();
+ if ( ( nArgumentCount != 2 ) && ( nArgumentCount != 3 ) )
+ throw IllegalArgumentException();
+
+ Type aKeyType, aValueType;
+ if ( !( _arguments[0] >>= aKeyType ) )
+ throw IllegalArgumentException( ::rtl::OUString::createFromAscii( "com.sun.star.uno.Type expected." ), *this, 1 );
+ if ( !( _arguments[1] >>= aValueType ) )
+ throw IllegalArgumentException( ::rtl::OUString::createFromAscii( "com.sun.star.uno.Type expected." ), *this, 2 );
+
+ Sequence< Pair< Any, Any > > aInitialValues;
+ bool bMutable = true;
+ if ( nArgumentCount == 3 )
+ {
+ if ( !( _arguments[2] >>= aInitialValues ) )
+ throw IllegalArgumentException( ::rtl::OUString::createFromAscii( "[]com.sun.star.beans.Pair<any,any> expected." ), *this, 2 );
+ bMutable = false;
+ }
+
+ // for the value, anything is allowed, except VOID
+ if ( ( aValueType.getTypeClass() == TypeClass_VOID ) || ( aValueType.getTypeClass() == TypeClass_UNKNOWN ) )
+ throw IllegalTypeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported value type." ) ), *this );
+
+ // create the comparator for the KeyType, and throw if the type is not supported
+ TypeClass eKeyTypeClass = aKeyType.getTypeClass();
+ ::std::auto_ptr< IKeyPredicateLess > pComparator;
+ switch ( eKeyTypeClass )
+ {
+ case TypeClass_CHAR:
+ pComparator.reset( new ScalarPredicateLess< sal_Unicode >() );
+ break;
+ case TypeClass_BOOLEAN:
+ pComparator.reset( new ScalarPredicateLess< sal_Bool >() );
+ break;
+ case TypeClass_BYTE:
+ pComparator.reset( new ScalarPredicateLess< sal_Int8 >() );
+ break;
+ case TypeClass_SHORT:
+ pComparator.reset( new ScalarPredicateLess< sal_Int16 >() );
+ break;
+ case TypeClass_UNSIGNED_SHORT:
+ pComparator.reset( new ScalarPredicateLess< sal_uInt16 >() );
+ break;
+ case TypeClass_LONG:
+ pComparator.reset( new ScalarPredicateLess< sal_Int32 >() );
+ break;
+ case TypeClass_UNSIGNED_LONG:
+ pComparator.reset( new ScalarPredicateLess< sal_uInt32 >() );
+ break;
+ case TypeClass_HYPER:
+ pComparator.reset( new ScalarPredicateLess< sal_Int64 >() );
+ break;
+ case TypeClass_UNSIGNED_HYPER:
+ pComparator.reset( new ScalarPredicateLess< sal_uInt64 >() );
+ break;
+ case TypeClass_FLOAT:
+ pComparator.reset( new ScalarPredicateLess< float >() );
+ break;
+ case TypeClass_DOUBLE:
+ pComparator.reset( new ScalarPredicateLess< double >() );
+ break;
+ case TypeClass_STRING:
+ pComparator.reset( new StringPredicateLess() );
+ break;
+ case TypeClass_TYPE:
+ pComparator.reset( new TypePredicateLess() );
+ break;
+ case TypeClass_ENUM:
+ pComparator.reset( new EnumPredicateLess( aKeyType ) );
+ break;
+ case TypeClass_INTERFACE:
+ pComparator.reset( new InterfacePredicateLess() );
+ break;
+ default:
+ throw IllegalTypeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), *this );
+ }
+
+ // init members
+ m_aData.m_aKeyType = aKeyType;
+ m_aData.m_aValueType = aValueType;
+ m_aData.m_pKeyCompare = pComparator;
+ m_aData.m_pValues.reset( new KeyedValues( *m_aData.m_pKeyCompare ) );
+ m_aData.m_bMutable = bMutable;
+
+ if ( aInitialValues.getLength() )
+ impl_initValues_throw( aInitialValues );
+
+ setInitialized();
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_initValues_throw( const Sequence< Pair< Any, Any > >& _initialValues )
+ {
+ OSL_PRECOND( m_aData.m_pValues.get() && m_aData.m_pValues->empty(), "EnumerableMap::impl_initValues_throw: illegal call!" );
+ if ( !m_aData.m_pValues.get() || !m_aData.m_pValues->empty() )
+ throw RuntimeException();
+
+ const Pair< Any, Any >* mapping = _initialValues.getConstArray();
+ const Pair< Any, Any >* mappingEnd = mapping + _initialValues.getLength();
+ Any normalizedValue;
+ for ( ; mapping != mappingEnd; ++mapping )
+ {
+ impl_checkValue_throw( mapping->Second );
+ (*m_aData.m_pValues)[ mapping->First ] = mapping->Second;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_checkValue_throw( const Any& _value ) const
+ {
+ if ( !_value.hasValue() )
+ // nothing to do, NULL values are always allowed, regardless of the ValueType
+ return;
+
+ TypeClass eAllowedTypeClass = m_aData.m_aValueType.getTypeClass();
+ bool bValid = false;
+
+ switch ( eAllowedTypeClass )
+ {
+ default:
+ bValid = ( _value.getValueTypeClass() == eAllowedTypeClass );
+ break;
+ case TypeClass_ANY:
+ bValid = true;
+ break;
+ case TypeClass_INTERFACE:
+ {
+ // special treatment: _value might contain the proper type, but the interface
+ // might actually be NULL. Which is still valid ...
+ if ( m_aData.m_aValueType.isAssignableFrom( _value.getValueType() ) )
+ // this also catches the special case where XFoo is our value type,
+ // and _value contains a NULL-reference to XFoo, or a derived type
+ bValid = true;
+ else
+ {
+ Reference< XInterface > xValue( _value, UNO_QUERY );
+ Any aTypedValue;
+ if ( xValue.is() )
+ // XInterface is not-NULL, but is X(ValueType) not-NULL, too?
+ xValue.set( xValue->queryInterface( m_aData.m_aValueType ), UNO_QUERY );
+ bValid = xValue.is();
+ }
+ }
+ break;
+ case TypeClass_EXCEPTION:
+ case TypeClass_STRUCT:
+ case TypeClass_UNION:
+ {
+ // values are accepted if and only if their type equals, or is derived from, our value type
+
+ if ( _value.getValueTypeClass() != eAllowedTypeClass )
+ bValid = false;
+ else
+ {
+ const TypeDescription aValueTypeDesc( _value.getValueType() );
+ const TypeDescription aRequiredTypeDesc( m_aData.m_aValueType );
+
+ const _typelib_CompoundTypeDescription* pValueCompoundTypeDesc =
+ reinterpret_cast< const _typelib_CompoundTypeDescription* >( aValueTypeDesc.get() );
+
+ while ( pValueCompoundTypeDesc )
+ {
+ if ( typelib_typedescription_equals( &pValueCompoundTypeDesc->aBase, aRequiredTypeDesc.get() ) )
+ break;
+ pValueCompoundTypeDesc = pValueCompoundTypeDesc->pBaseTypeDescription;
+ }
+ bValid = ( pValueCompoundTypeDesc != NULL );
+ }
+ }
+ break;
+ }
+
+ if ( !bValid )
+ {
+ ::rtl::OUStringBuffer aMessage;
+ aMessage.appendAscii( "Incompatible value type. Found '" );
+ aMessage.append( _value.getValueTypeName() );
+ aMessage.appendAscii( "', where '" );
+ aMessage.append( m_aData.m_aValueType.getTypeName() );
+ aMessage.appendAscii( "' (or compatible type) is expected." );
+ throw IllegalTypeException( aMessage.makeStringAndClear(), *const_cast< EnumerableMap* >( this ) );
+ }
+
+ impl_checkNaN_throw( _value, m_aData.m_aValueType );
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_checkNaN_throw( const Any& _keyOrValue, const Type& _keyOrValueType ) const
+ {
+ if ( ( _keyOrValueType.getTypeClass() == TypeClass_DOUBLE )
+ || ( _keyOrValueType.getTypeClass() == TypeClass_FLOAT )
+ )
+ {
+ double nValue(0);
+ if ( _keyOrValue >>= nValue )
+ if ( ::rtl::math::isNan( nValue ) )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NaN (not-a-number) not supported by this implementation." ) ),
+ *const_cast< EnumerableMap* >( this ), 0 );
+ // (note that the case of _key not containing a float/double value is handled in the
+ // respective IKeyPredicateLess implementation, so there's no need to handle this here.)
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_checkKey_throw( const Any& _key ) const
+ {
+ if ( !_key.hasValue() )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NULL keys not supported by this implementation." ) ),
+ *const_cast< EnumerableMap* >( this ), 0 );
+
+ impl_checkNaN_throw( _key, m_aData.m_aKeyType );
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_checkMutable_throw() const
+ {
+ if ( !m_aData.m_bMutable )
+ throw NoSupportException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "The map is immutable." ) ),
+ *const_cast< EnumerableMap* >( this ) );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XEnumeration > SAL_CALL EnumerableMap::createKeyEnumeration( ::sal_Bool _Isolated ) throw (NoSupportException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return new MapEnumeration( *this, m_aData, getBroadcastHelper(), eKeys, _Isolated );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XEnumeration > SAL_CALL EnumerableMap::createValueEnumeration( ::sal_Bool _Isolated ) throw (NoSupportException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return new MapEnumeration( *this, m_aData, getBroadcastHelper(), eValues, _Isolated );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XEnumeration > SAL_CALL EnumerableMap::createElementEnumeration( ::sal_Bool _Isolated ) throw (NoSupportException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return new MapEnumeration( *this, m_aData, getBroadcastHelper(), eBoth, _Isolated );
+ }
+
+ //--------------------------------------------------------------------
+ Type SAL_CALL EnumerableMap::getKeyType() throw (RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aData.m_aKeyType;
+ }
+
+ //--------------------------------------------------------------------
+ Type SAL_CALL EnumerableMap::getValueType() throw (RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aData.m_aValueType;
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL EnumerableMap::clear( ) throw (NoSupportException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkMutable_throw();
+
+ m_aData.m_pValues->clear();
+
+ lcl_notifyMapDataListeners_nothrow( m_aData );
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL EnumerableMap::containsKey( const Any& _key ) throw (IllegalTypeException, IllegalArgumentException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkKey_throw( _key );
+
+ KeyedValues::const_iterator pos = m_aData.m_pValues->find( _key );
+ return ( pos != m_aData.m_pValues->end() );
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL EnumerableMap::containsValue( const Any& _value ) throw (IllegalTypeException, IllegalArgumentException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkValue_throw( _value );
+
+ for ( KeyedValues::const_iterator mapping = m_aData.m_pValues->begin();
+ mapping != m_aData.m_pValues->end();
+ ++mapping
+ )
+ {
+ if ( mapping->second == _value )
+ return sal_True;
+ }
+ return sal_False;
+ }
+
+ //--------------------------------------------------------------------
+ Any SAL_CALL EnumerableMap::get( const Any& _key ) throw (IllegalTypeException, IllegalArgumentException, NoSuchElementException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkKey_throw( _key );
+
+ KeyedValues::const_iterator pos = m_aData.m_pValues->find( _key );
+ if ( pos == m_aData.m_pValues->end() )
+ throw NoSuchElementException( anyToString( _key ), *this );
+
+ return pos->second;
+ }
+
+ //--------------------------------------------------------------------
+ Any SAL_CALL EnumerableMap::put( const Any& _key, const Any& _value ) throw (NoSupportException, IllegalTypeException, IllegalArgumentException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkMutable_throw();
+ impl_checkKey_throw( _key );
+ impl_checkValue_throw( _value );
+
+ Any previousValue;
+
+ KeyedValues::iterator pos = m_aData.m_pValues->find( _key );
+ if ( pos != m_aData.m_pValues->end() )
+ {
+ previousValue = pos->second;
+ pos->second = _value;
+ }
+ else
+ {
+ (*m_aData.m_pValues)[ _key ] = _value;
+ }
+
+ lcl_notifyMapDataListeners_nothrow( m_aData );
+
+ return previousValue;
+ }
+
+ //--------------------------------------------------------------------
+ Any SAL_CALL EnumerableMap::remove( const Any& _key ) throw (NoSupportException, IllegalTypeException, IllegalArgumentException, NoSuchElementException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkMutable_throw();
+ impl_checkKey_throw( _key );
+
+ Any previousValue;
+
+ KeyedValues::iterator pos = m_aData.m_pValues->find( _key );
+ if ( pos != m_aData.m_pValues->end() )
+ {
+ previousValue = pos->second;
+ m_aData.m_pValues->erase( pos );
+ }
+
+ lcl_notifyMapDataListeners_nothrow( m_aData );
+
+ return previousValue;
+ }
+
+ //--------------------------------------------------------------------
+ Type SAL_CALL EnumerableMap::getElementType() throw (RuntimeException)
+ {
+ return ::cppu::UnoType< Pair< Any, Any > >::get();
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL EnumerableMap::hasElements() throw (RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aData.m_pValues->empty();
+ }
+
+ //--------------------------------------------------------------------
+ ::rtl::OUString SAL_CALL EnumerableMap::getImplementationName( ) throw (RuntimeException)
+ {
+ return getImplementationName_static();
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL EnumerableMap::supportsService( const ::rtl::OUString& _serviceName ) throw (RuntimeException)
+ {
+ Sequence< ::rtl::OUString > aServices( getSupportedServiceNames() );
+ for ( sal_Int32 i=0; i<aServices.getLength(); ++i )
+ if ( _serviceName == aServices[i] )
+ return sal_True;
+ return sal_False;
+ }
+
+ //--------------------------------------------------------------------
+ Sequence< ::rtl::OUString > SAL_CALL EnumerableMap::getSupportedServiceNames( ) throw (RuntimeException)
+ {
+ return getSupportedServiceNames_static();
+ }
+
+ //--------------------------------------------------------------------
+ ::rtl::OUString SAL_CALL EnumerableMap::getImplementationName_static( )
+ {
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.comp.comphelper.EnumerableMap" ) );
+ }
+
+ //--------------------------------------------------------------------
+ Sequence< ::rtl::OUString > SAL_CALL EnumerableMap::getSupportedServiceNames_static( )
+ {
+ Sequence< ::rtl::OUString > aServiceNames(1);
+ aServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.container.EnumerableMap" ) );
+ return aServiceNames;
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XInterface > SAL_CALL EnumerableMap::Create( const Reference< XComponentContext >& _context )
+ {
+ return *new EnumerableMap( ComponentContext( _context ) );
+ }
+
+ //====================================================================
+ //= MapEnumerator
+ //====================================================================
+ //--------------------------------------------------------------------
+ ::sal_Bool MapEnumerator::hasMoreElements()
+ {
+ if ( m_disposed )
+ throw DisposedException( ::rtl::OUString(), m_rParent );
+ return m_mapPos != m_rMapData.m_pValues->end();
+ }
+
+ //--------------------------------------------------------------------
+ Any MapEnumerator::nextElement()
+ {
+ if ( m_disposed )
+ throw DisposedException( ::rtl::OUString(), m_rParent );
+ if ( m_mapPos == m_rMapData.m_pValues->end() )
+ throw NoSuchElementException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "No more elements." ) ), m_rParent );
+
+ Any aNextElement;
+ switch ( m_eType )
+ {
+ case eKeys: aNextElement = m_mapPos->first; break;
+ case eValues: aNextElement = m_mapPos->second; break;
+ case eBoth: aNextElement <<= Pair< Any, Any >( m_mapPos->first, m_mapPos->second ); break;
+ }
+ ++m_mapPos;
+ return aNextElement;
+ }
+
+ //--------------------------------------------------------------------
+ void MapEnumerator::mapModified()
+ {
+ m_disposed = true;
+ }
+
+ //====================================================================
+ //= MapEnumeration - implementation
+ //====================================================================
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL MapEnumeration::hasMoreElements( ) throw (RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aEnumerator.hasMoreElements();
+ }
+
+ //--------------------------------------------------------------------
+ Any SAL_CALL MapEnumeration::nextElement( ) throw (NoSuchElementException, WrappedTargetException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aEnumerator.nextElement();
+ }
+
+//........................................................................
+} // namespace comphelper
+//........................................................................
+
+void createRegistryInfo_Map()
+{
+ ::comphelper::module::OAutoRegistration< ::comphelper::EnumerableMap > aAutoRegistration;
+}
diff --git a/comphelper/source/container/makefile.mk b/comphelper/source/container/makefile.mk
index 2c63d2234a03..2c43a774b030 100644
--- a/comphelper/source/container/makefile.mk
+++ b/comphelper/source/container/makefile.mk
@@ -50,7 +50,8 @@ SLOFILES=\
$(SLO)$/containermultiplexer.obj \
$(SLO)$/IndexedPropertyValuesContainer.obj \
$(SLO)$/embeddedobjectcontainer.obj \
- $(SLO)$/NamedPropertyValuesContainer.obj
+ $(SLO)$/NamedPropertyValuesContainer.obj \
+ $(SLO)$/enumerablemap.obj
# --- Targets ----------------------------------
diff --git a/comphelper/source/inc/comphelper_module.hxx b/comphelper/source/inc/comphelper_module.hxx
new file mode 100644
index 000000000000..5bbac6f9efc6
--- /dev/null
+++ b/comphelper/source/inc/comphelper_module.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef COMPHELPER_COMPHELPER_MODULE_HXX
+#define COMPHELPER_COMPHELPER_MODULE_HXX
+
+#include "comphelper/componentmodule.hxx"
+
+//........................................................................
+namespace comphelper { namespace module
+{
+//........................................................................
+
+ DECLARE_COMPONENT_MODULE( ComphelperModule, ComphelperModuleClient )
+
+//........................................................................
+} } // namespace comphelper::module
+//........................................................................
+
+#endif // COMPHELPER_COMPHELPER_MODULE_HXX
diff --git a/comphelper/source/misc/comphelper_module.cxx b/comphelper/source/misc/comphelper_module.cxx
new file mode 100644
index 000000000000..08cb48b3ef42
--- /dev/null
+++ b/comphelper/source/misc/comphelper_module.cxx
@@ -0,0 +1,40 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+
+//........................................................................
+namespace comphelper { namespace module
+{
+//........................................................................
+
+ IMPLEMENT_COMPONENT_MODULE( ComphelperModule );
+
+//........................................................................
+} } // namespace comphelper::module
+//........................................................................
diff --git a/comphelper/source/misc/comphelper_services.cxx b/comphelper/source/misc/comphelper_services.cxx
new file mode 100644
index 000000000000..77ab145e2581
--- /dev/null
+++ b/comphelper/source/misc/comphelper_services.cxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+
+//--------------------------------------------------------------------
+extern void createRegistryInfo_OPropertyBag();
+extern void createRegistryInfo_SequenceOutputStream();
+extern void createRegistryInfo_SequenceInputStream();
+extern void createRegistryInfo_UNOMemoryStream();
+extern void createRegistryInfo_IndexedPropertyValuesContainer();
+extern void createRegistryInfo_NamedPropertyValuesContainer();
+extern void createRegistryInfo_AnyCompareFactory();
+extern void createRegistryInfo_OfficeInstallationDirectories();
+extern void createRegistryInfo_OInstanceLocker();
+extern void createRegistryInfo_Map();
+
+//........................................................................
+namespace comphelper { namespace module
+{
+//........................................................................
+
+ static void initializeModule()
+ {
+ static bool bInitialized( false );
+ if ( !bInitialized )
+ {
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+ if ( !bInitialized )
+ {
+ createRegistryInfo_OPropertyBag();
+ createRegistryInfo_SequenceOutputStream();
+ createRegistryInfo_SequenceInputStream();
+ createRegistryInfo_UNOMemoryStream();
+ createRegistryInfo_IndexedPropertyValuesContainer();
+ createRegistryInfo_NamedPropertyValuesContainer();
+ createRegistryInfo_AnyCompareFactory();
+ createRegistryInfo_OfficeInstallationDirectories();
+ createRegistryInfo_OInstanceLocker();
+ createRegistryInfo_Map();
+ }
+ }
+ }
+
+//........................................................................
+} } // namespace comphelper::module
+//........................................................................
+
+IMPLEMENT_COMPONENT_LIBRARY_API( ::comphelper::module::ComphelperModule, ::comphelper::module::initializeModule )
diff --git a/comphelper/source/misc/componentbase.cxx b/comphelper/source/misc/componentbase.cxx
new file mode 100644
index 000000000000..bf230f59b132
--- /dev/null
+++ b/comphelper/source/misc/componentbase.cxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper/componentbase.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/lang/NotInitializedException.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+/** === end UNO includes === **/
+
+//........................................................................
+namespace comphelper
+{
+//........................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::lang::NotInitializedException;
+ using ::com::sun::star::lang::DisposedException;
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ /** === end UNO using === **/
+
+ //====================================================================
+ //= ComponentBase
+ //====================================================================
+ //--------------------------------------------------------------------
+ void ComponentBase::impl_checkDisposed_throw() const
+ {
+ if ( m_rBHelper.bDisposed )
+ throw DisposedException( ::rtl::OUString(), getComponent() );
+ }
+
+ //--------------------------------------------------------------------
+ void ComponentBase::impl_checkInitialized_throw() const
+ {
+ if ( !m_bInitialized )
+ throw NotInitializedException( ::rtl::OUString(), getComponent() );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XInterface > ComponentBase::getComponent() const
+ {
+ return NULL;
+ }
+
+//........................................................................
+} // namespace comphelper
+//........................................................................
diff --git a/comphelper/source/misc/facreg.cxx b/comphelper/source/misc/facreg.cxx
deleted file mode 100644
index 9ad0e12597b0..000000000000
--- a/comphelper/source/misc/facreg.cxx
+++ /dev/null
@@ -1,246 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: facreg.cxx,v $
- * $Revision: 1.15 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_comphelper.hxx"
-
-#include <string.h>
-#include "sal/types.h"
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <osl/diagnose.h>
-
-#include "rtl/ustrbuf.hxx"
-
-#include <cppuhelper/factory.hxx>
-#include <uno/lbnames.h>
-
-#include "instancelocker.hxx"
-
-using namespace rtl;
-using namespace com::sun::star;
-
-// IndexedPropertyValuesContainer
-extern uno::Sequence< OUString > SAL_CALL IndexedPropertyValuesContainer_getSupportedServiceNames() throw();
-extern OUString SAL_CALL IndexedPropertyValuesContainer_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL IndexedPropertyValuesContainer_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-// NamedPropertyValuesContainer
-extern uno::Sequence< OUString > SAL_CALL NamedPropertyValuesContainer_getSupportedServiceNames() throw();
-extern OUString SAL_CALL NamedPropertyValuesContainer_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL NamedPropertyValuesContainer_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-// AnyCompareFactory
-extern uno::Sequence< OUString > SAL_CALL AnyCompareFactory_getSupportedServiceNames() throw();
-extern OUString SAL_CALL AnyCompareFactory_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL AnyCompareFactory_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-// OfficeInstallationDirectories
-extern uno::Sequence< OUString > SAL_CALL OfficeInstallationDirectories_getSupportedServiceNames() throw();
-extern OUString SAL_CALL OfficeInstallationDirectories_getImplementationName() throw();
-extern OUString SAL_CALL OfficeInstallationDirectories_getSingletonName() throw();
-extern OUString SAL_CALL OfficeInstallationDirectories_getSingletonServiceName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL OfficeInstallationDirectories_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-// SequenceInputStreamService
-extern uno::Sequence< OUString > SAL_CALL SequenceInputStreamService_getSupportedServiceNames() throw();
-extern OUString SAL_CALL SequenceInputStreamService_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL SequenceInputStreamService_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-//SequenceOutputStreamService
-extern uno::Sequence< OUString > SAL_CALL SequenceOutputStreamService_getSupportedServiceNames() throw();
-extern OUString SAL_CALL SequenceOutputStreamService_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL SequenceOutputStreamService_createInstance(const uno::Reference< uno::XComponentContext >& rxContext) throw( uno::Exception );
-
-namespace comphelper
-{
-// UNOMemoryStream
-extern uno::Sequence< OUString > SAL_CALL UNOMemoryStream_getSupportedServiceNames() throw();
-extern OUString SAL_CALL UNOMemoryStream_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL UNOMemoryStream_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-}
-
-// PropertyBag
-extern uno::Sequence< OUString > SAL_CALL PropertyBag_getSupportedServiceNames() throw();
-extern OUString SAL_CALL PropertyBag_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL PropertyBag_createInstance(const uno::Reference< uno::XComponentContext >& rxContext) throw( uno::Exception );
-
-//
-static void writeInfo( registry::XRegistryKey * pRegistryKey, const OUString& rImplementationName, const uno::Sequence< OUString >& rServices )
-{
- uno::Reference< registry::XRegistryKey > xNewKey(
- pRegistryKey->createKey(
- OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + rImplementationName + OUString(RTL_CONSTASCII_USTRINGPARAM( "/UNO/SERVICES") ) ) );
-
- for( sal_Int32 i = 0; i < rServices.getLength(); i++ )
- xNewKey->createKey( rServices.getConstArray()[i]);
-}
-
-static void registerSingleton( registry::XRegistryKey * pRegistryKey, const OUString& rImplementationName, const OUString& rSingletonName, const OUString& rServiceName )
-{
- OUStringBuffer aSingletonKeyName;
- aSingletonKeyName.appendAscii( "/" );
- aSingletonKeyName.append( rImplementationName );
- aSingletonKeyName.appendAscii( "/UNO/SINGLETONS/" );
- aSingletonKeyName.append( rSingletonName );
-
- uno::Reference< registry::XRegistryKey > xNewKey( pRegistryKey->createKey( aSingletonKeyName.makeStringAndClear() ) );
- OSL_ENSURE( xNewKey.is(), "could not create a registry key !");
-
- xNewKey->setStringValue( rServiceName );
-}
-
-//
-extern "C"
-{
-
-SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** )
-{
- *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
-}
-
-SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( void *, void * pRegistryKey )
-{
- if( pRegistryKey )
- {
- try
- {
- registry::XRegistryKey *pKey = reinterpret_cast< registry::XRegistryKey * >( pRegistryKey );
-
- // IndexedPropertyValuesContainer
- writeInfo( pKey, IndexedPropertyValuesContainer_getImplementationName(), IndexedPropertyValuesContainer_getSupportedServiceNames() );
- // NamedPropertyValuesContainer
- writeInfo( pKey, NamedPropertyValuesContainer_getImplementationName(), NamedPropertyValuesContainer_getSupportedServiceNames() );
- // AnyCompareFactory
- writeInfo( pKey, AnyCompareFactory_getImplementationName(), AnyCompareFactory_getSupportedServiceNames() );
- // OfficeInstallationDirectories
- writeInfo( pKey, OfficeInstallationDirectories_getImplementationName(), OfficeInstallationDirectories_getSupportedServiceNames() );
- registerSingleton( pKey, OfficeInstallationDirectories_getImplementationName(), OfficeInstallationDirectories_getSingletonName(), OfficeInstallationDirectories_getSingletonServiceName() );
-
- // InstanceLocker
- writeInfo( pKey, OInstanceLocker::impl_staticGetImplementationName(), OInstanceLocker::impl_staticGetSupportedServiceNames() );
- // SequenceInputStreamService
- writeInfo( pKey, SequenceInputStreamService_getImplementationName(), SequenceInputStreamService_getSupportedServiceNames() );
- // SequenceOutputStreamService
- writeInfo( pKey, SequenceOutputStreamService_getImplementationName(), SequenceOutputStreamService_getSupportedServiceNames() );
- // UNOMemoryStream
- writeInfo( pKey, comphelper::UNOMemoryStream_getImplementationName(), comphelper::UNOMemoryStream_getSupportedServiceNames() );
- // PropertyBag
- writeInfo( pKey, PropertyBag_getImplementationName(), PropertyBag_getSupportedServiceNames() );
- }
- catch (registry::InvalidRegistryException &)
- {
- OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
- }
- }
- return sal_True;
-}
-
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * )
-{
- void * pRet = 0;
- if( pServiceManager )
- {
- uno::Reference<lang::XSingleComponentFactory> xComponentFactory;
-
- const sal_Int32 nImplNameLen = strlen( pImplName );
- if( IndexedPropertyValuesContainer_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- IndexedPropertyValuesContainer_createInstance,
- IndexedPropertyValuesContainer_getImplementationName(),
- IndexedPropertyValuesContainer_getSupportedServiceNames() );
- }
- else if( NamedPropertyValuesContainer_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- NamedPropertyValuesContainer_createInstance,
- NamedPropertyValuesContainer_getImplementationName(),
- NamedPropertyValuesContainer_getSupportedServiceNames() );
- }
- else if( AnyCompareFactory_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- AnyCompareFactory_createInstance,
- AnyCompareFactory_getImplementationName(),
- AnyCompareFactory_getSupportedServiceNames() );
- }
- else if( OfficeInstallationDirectories_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- OfficeInstallationDirectories_createInstance,
- OfficeInstallationDirectories_getImplementationName(),
- OfficeInstallationDirectories_getSupportedServiceNames() );
- }
- else if( OInstanceLocker::impl_staticGetImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- OInstanceLocker::impl_staticCreateSelfInstance,
- OInstanceLocker::impl_staticGetImplementationName(),
- OInstanceLocker::impl_staticGetSupportedServiceNames() );
- }
- else if( SequenceInputStreamService_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- SequenceInputStreamService_createInstance,
- SequenceInputStreamService_getImplementationName(),
- SequenceInputStreamService_getSupportedServiceNames() );
- }
- else if( comphelper::UNOMemoryStream_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- comphelper::UNOMemoryStream_createInstance,
- comphelper::UNOMemoryStream_getImplementationName(),
- comphelper::UNOMemoryStream_getSupportedServiceNames() );
- }
- else if ( SequenceOutputStreamService_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- SequenceOutputStreamService_createInstance,
- SequenceOutputStreamService_getImplementationName(),
- SequenceOutputStreamService_getSupportedServiceNames() );
- }
- else if ( PropertyBag_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- PropertyBag_createInstance,
- PropertyBag_getImplementationName(),
- PropertyBag_getSupportedServiceNames() );
- }
-
- if( xComponentFactory.is())
- {
- xComponentFactory->acquire();
- pRet = xComponentFactory.get();
- }
- }
- return pRet;
-}
-
-}
diff --git a/comphelper/source/misc/instancelocker.cxx b/comphelper/source/misc/instancelocker.cxx
index 6046b7c5e6f5..11a590c618c3 100644
--- a/comphelper/source/misc/instancelocker.cxx
+++ b/comphelper/source/misc/instancelocker.cxx
@@ -30,6 +30,9 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+
#include <com/sun/star/util/XCloseBroadcaster.hpp>
#include <com/sun/star/util/XCloseable.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
@@ -205,14 +208,14 @@ void SAL_CALL OInstanceLocker::initialize( const uno::Sequence< uno::Any >& aArg
::rtl::OUString SAL_CALL OInstanceLocker::getImplementationName( )
throw (uno::RuntimeException)
{
- return impl_staticGetImplementationName();
+ return getImplementationName_static();
}
// --------------------------------------------------------
::sal_Bool SAL_CALL OInstanceLocker::supportsService( const ::rtl::OUString& ServiceName )
throw (uno::RuntimeException)
{
- uno::Sequence< ::rtl::OUString > aSeq = impl_staticGetSupportedServiceNames();
+ uno::Sequence< ::rtl::OUString > aSeq = getSupportedServiceNames();
for ( sal_Int32 nInd = 0; nInd < aSeq.getLength(); nInd++ )
if ( ServiceName.compareTo( aSeq[nInd] ) == 0 )
@@ -225,25 +228,25 @@ void SAL_CALL OInstanceLocker::initialize( const uno::Sequence< uno::Any >& aArg
uno::Sequence< ::rtl::OUString > SAL_CALL OInstanceLocker::getSupportedServiceNames()
throw (uno::RuntimeException)
{
- return impl_staticGetSupportedServiceNames();
+ return getSupportedServiceNames_static();
}
// Static methods
// --------------------------------------------------------
-uno::Sequence< ::rtl::OUString > SAL_CALL OInstanceLocker::impl_staticGetSupportedServiceNames()
+uno::Sequence< ::rtl::OUString > SAL_CALL OInstanceLocker::getSupportedServiceNames_static()
{
const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.embed.InstanceLocker" ) );
return uno::Sequence< rtl::OUString >( &aServiceName, 1 );
}
// --------------------------------------------------------
-::rtl::OUString SAL_CALL OInstanceLocker::impl_staticGetImplementationName()
+::rtl::OUString SAL_CALL OInstanceLocker::getImplementationName_static()
{
return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.embed.InstanceLocker" ) );
}
// --------------------------------------------------------
-uno::Reference< uno::XInterface > SAL_CALL OInstanceLocker::impl_staticCreateSelfInstance(
+uno::Reference< uno::XInterface > SAL_CALL OInstanceLocker::Create(
const uno::Reference< uno::XComponentContext >& rxContext )
{
return static_cast< cppu::OWeakObject * >( new OInstanceLocker( rxContext ) );
@@ -506,3 +509,7 @@ sal_Bool OLockListener::Init()
return sal_True;
}
+void createRegistryInfo_OInstanceLocker()
+{
+ static ::comphelper::module::OAutoRegistration< OInstanceLocker > aAutoRegistration;
+}
diff --git a/comphelper/source/misc/instancelocker.hxx b/comphelper/source/misc/instancelocker.hxx
index 1f7d34a64652..637cc9fc4579 100644
--- a/comphelper/source/misc/instancelocker.hxx
+++ b/comphelper/source/misc/instancelocker.hxx
@@ -70,12 +70,12 @@ public:
~OInstanceLocker();
static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
- impl_staticGetSupportedServiceNames();
+ getSupportedServiceNames_static();
- static ::rtl::OUString SAL_CALL impl_staticGetImplementationName();
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
- impl_staticCreateSelfInstance(
+ Create(
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
// XComponent
diff --git a/comphelper/source/misc/makefile.mk b/comphelper/source/misc/makefile.mk
index 78f79c806511..1d473e6c5365 100644
--- a/comphelper/source/misc/makefile.mk
+++ b/comphelper/source/misc/makefile.mk
@@ -59,7 +59,6 @@ SLOFILES= \
$(SLO)$/configurationhelper.obj \
$(SLO)$/documentinfo.obj \
$(SLO)$/evtlistenerhlp.obj \
- $(SLO)$/facreg.obj \
$(SLO)$/ihwrapnofilter.obj \
$(SLO)$/instancelocker.obj \
$(SLO)$/interaction.obj \
@@ -89,6 +88,9 @@ SLOFILES= \
$(SLO)$/uieventslogger.obj \
$(SLO)$/weakeventlistener.obj \
$(SLO)$/weak.obj \
+ $(SLO)$/comphelper_module.obj \
+ $(SLO)$/comphelper_services.obj \
+ $(SLO)$/componentbase.obj \
# --- Targets ----------------------------------
diff --git a/comphelper/source/officeinstdir/officeinstallationdirectories.cxx b/comphelper/source/officeinstdir/officeinstallationdirectories.cxx
index 3c56d5479573..219e56ce1a37 100644
--- a/comphelper/source/officeinstdir/officeinstallationdirectories.cxx
+++ b/comphelper/source/officeinstdir/officeinstallationdirectories.cxx
@@ -31,6 +31,8 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
+
/**************************************************************************
TODO
**************************************************************************
@@ -51,53 +53,6 @@ using namespace comphelper;
// helpers
//=========================================================================
-uno::Sequence< rtl::OUString > SAL_CALL
-OfficeInstallationDirectories_getSupportedServiceNames()
- throw()
-{
- const rtl::OUString aServiceName(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.util.OfficeInstallationDirectories" ) );
- return uno::Sequence< rtl::OUString >( &aServiceName, 1 );
-}
-
-//=========================================================================
-rtl::OUString SAL_CALL OfficeInstallationDirectories_getImplementationName()
- throw()
-{
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.util.OfficeInstallationDirectories" ) );
-}
-
-//=========================================================================
-rtl::OUString SAL_CALL OfficeInstallationDirectories_getSingletonName()
- throw()
-{
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.util.theOfficeInstallationDirectories" ) );
-}
-
-//=========================================================================
-rtl::OUString SAL_CALL OfficeInstallationDirectories_getSingletonServiceName()
- throw()
-{
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.util.OfficeInstallationDirectories" ) );
-}
-
-//=========================================================================
-uno::Reference< uno::XInterface > SAL_CALL
-OfficeInstallationDirectories_createInstance(
- const uno::Reference< uno::XComponentContext > & rxContext )
- throw( uno::Exception )
-{
- return static_cast< cppu::OWeakObject * >(
- new OfficeInstallationDirectories( rxContext ) );
-}
-
//=========================================================================
static bool makeCanonicalFileURL( rtl::OUString & rURL )
{
@@ -272,7 +227,7 @@ rtl::OUString SAL_CALL
OfficeInstallationDirectories::getImplementationName()
throw ( uno::RuntimeException )
{
- return OfficeInstallationDirectories_getImplementationName();
+ return getImplementationName_static();
}
//=========================================================================
@@ -282,7 +237,7 @@ OfficeInstallationDirectories::supportsService( const rtl::OUString& ServiceName
throw ( uno::RuntimeException )
{
const uno::Sequence< rtl::OUString > & aNames
- = OfficeInstallationDirectories_getSupportedServiceNames();
+ = getSupportedServiceNames();
const rtl::OUString * p = aNames.getConstArray();
for ( sal_Int32 nPos = 0; nPos < aNames.getLength(); nPos++ )
{
@@ -299,7 +254,47 @@ uno::Sequence< ::rtl::OUString > SAL_CALL
OfficeInstallationDirectories::getSupportedServiceNames()
throw ( uno::RuntimeException )
{
- return OfficeInstallationDirectories_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
+}
+
+//=========================================================================
+// static
+rtl::OUString SAL_CALL
+OfficeInstallationDirectories::getImplementationName_static()
+{
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.util.OfficeInstallationDirectories" ) );
+}
+
+//=========================================================================
+// static
+uno::Sequence< ::rtl::OUString > SAL_CALL
+OfficeInstallationDirectories::getSupportedServiceNames_static()
+{
+ const rtl::OUString aServiceName(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.util.OfficeInstallationDirectories" ) );
+ return uno::Sequence< rtl::OUString >( &aServiceName, 1 );
+}
+
+//=========================================================================
+// static
+rtl::OUString SAL_CALL OfficeInstallationDirectories::getSingletonName_static()
+{
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.util.theOfficeInstallationDirectories" ) );
+}
+
+//=========================================================================
+// static
+uno::Reference< uno::XInterface > SAL_CALL
+OfficeInstallationDirectories::Create(
+ const uno::Reference< uno::XComponentContext > & rxContext )
+{
+ return static_cast< cppu::OWeakObject * >(
+ new OfficeInstallationDirectories( rxContext ) );
}
//=========================================================================
@@ -352,3 +347,7 @@ void OfficeInstallationDirectories::initDirs()
}
}
+void createRegistryInfo_OfficeInstallationDirectories()
+{
+ static ::comphelper::module::OSingletonRegistration< OfficeInstallationDirectories > aAutoRegistration;
+}
diff --git a/comphelper/source/officeinstdir/officeinstallationdirectories.hxx b/comphelper/source/officeinstdir/officeinstallationdirectories.hxx
index c829bcdc517c..52dcd38d564a 100644
--- a/comphelper/source/officeinstdir/officeinstallationdirectories.hxx
+++ b/comphelper/source/officeinstdir/officeinstallationdirectories.hxx
@@ -84,6 +84,16 @@ public:
getSupportedServiceNames()
throw (::com::sun::star::uno::RuntimeException);
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL
+ getImplementationName_static();
+ static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
+ getSupportedServiceNames_static();
+ static ::rtl::OUString SAL_CALL
+ getSingletonName_static();
+ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
+ Create( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& );
+
private:
void initDirs();
diff --git a/comphelper/source/property/opropertybag.cxx b/comphelper/source/property/opropertybag.cxx
index 7be74ef466b6..8b816e8c1ce9 100644
--- a/comphelper/source/property/opropertybag.cxx
+++ b/comphelper/source/property/opropertybag.cxx
@@ -32,6 +32,7 @@
#include "precompiled_comphelper.hxx"
#include "opropertybag.hxx"
+#include "comphelper_module.hxx"
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/beans/NamedValue.hpp>
@@ -49,19 +50,9 @@
//--------------------------------------------------------------------------
using namespace ::com::sun::star;
-uno::Sequence< ::rtl::OUString > SAL_CALL PropertyBag_getSupportedServiceNames() throw()
+void createRegistryInfo_OPropertyBag()
{
- return ::comphelper::OPropertyBag::getSupportedServiceNames_static();
-}
-
-::rtl::OUString SAL_CALL PropertyBag_getImplementationName() throw()
-{
- return ::comphelper::OPropertyBag::getImplementationName_static();
-}
-
-uno::Reference< uno::XInterface > SAL_CALL PropertyBag_createInstance(const uno::Reference< uno::XComponentContext >& rxContext) throw( uno::Exception )
-{
- return ::comphelper::OPropertyBag::Create( rxContext );
+ static ::comphelper::module::OAutoRegistration< ::comphelper::OPropertyBag > aAutoRegistration;
}
//........................................................................
diff --git a/comphelper/source/property/property.cxx b/comphelper/source/property/property.cxx
index 82e38d49c433..fe6cbaa9d767 100644
--- a/comphelper/source/property/property.cxx
+++ b/comphelper/source/property/property.cxx
@@ -97,8 +97,12 @@ void copyProperties(const Reference<XPropertySet>& _rxSource,
try
{
aDestProp = xDestProps->getPropertyByName(pSourceProps->Name);
- if (0 == (aDestProp.Attributes & PropertyAttribute::READONLY))
- _rxDest->setPropertyValue(pSourceProps->Name, _rxSource->getPropertyValue(pSourceProps->Name));
+ if (0 == (aDestProp.Attributes & PropertyAttribute::READONLY) )
+ {
+ const Any aSourceValue = _rxSource->getPropertyValue(pSourceProps->Name);
+ if ( 0 != (aDestProp.Attributes & PropertyAttribute::MAYBEVOID) || aSourceValue.hasValue() )
+ _rxDest->setPropertyValue(pSourceProps->Name, aSourceValue);
+ }
}
catch (Exception&)
{
diff --git a/comphelper/source/streaming/memorystream.cxx b/comphelper/source/streaming/memorystream.cxx
index 5abbb352b14c..3afd9b555a84 100644
--- a/comphelper/source/streaming/memorystream.cxx
+++ b/comphelper/source/streaming/memorystream.cxx
@@ -31,6 +31,8 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
+
#include <com/sun/star/io/XStream.hpp>
#include <com/sun/star/io/XSeekableInputStream.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
@@ -77,6 +79,11 @@ public:
virtual void SAL_CALL flush() throw (NotConnectedException, BufferSizeExceededException, IOException, RuntimeException);
virtual void SAL_CALL closeOutput() throw (NotConnectedException, BufferSizeExceededException, IOException, RuntimeException);
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static Reference< XInterface > SAL_CALL Create( const Reference< ::com::sun::star::uno::XComponentContext >& );
+
private:
std::vector< sal_Int8 > maData;
sal_Int32 mnCursor;
@@ -199,22 +206,28 @@ void SAL_CALL UNOMemoryStream::closeOutput() throw (NotConnectedException, Buffe
mnCursor = 0;
}
-OUString SAL_CALL UNOMemoryStream_getImplementationName() throw()
+::rtl::OUString SAL_CALL UNOMemoryStream::getImplementationName_static()
{
static const OUString sImplName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.MemoryStream" ) );
return sImplName;
}
-Sequence< OUString > SAL_CALL UNOMemoryStream_getSupportedServiceNames() throw()
+Sequence< ::rtl::OUString > SAL_CALL UNOMemoryStream::getSupportedServiceNames_static()
{
Sequence< OUString > aSeq(1);
- aSeq[0] = UNOMemoryStream_getImplementationName();
+ aSeq[0] = getImplementationName_static();
return aSeq;
}
-Reference< XInterface > SAL_CALL UNOMemoryStream_createInstance(const Reference< XComponentContext > & ) throw( Exception )
+Reference< XInterface > SAL_CALL UNOMemoryStream::Create(
+ const Reference< XComponentContext >& )
{
return static_cast<OWeakObject*>(new UNOMemoryStream());
}
} // namespace comphelper
+
+void createRegistryInfo_UNOMemoryStream()
+{
+ static ::comphelper::module::OAutoRegistration< ::comphelper::UNOMemoryStream > aAutoRegistration;
+}
diff --git a/comphelper/source/streaming/seqinputstreamserv.cxx b/comphelper/source/streaming/seqinputstreamserv.cxx
index b10b38dda05a..af7d9fcf44dd 100644
--- a/comphelper/source/streaming/seqinputstreamserv.cxx
+++ b/comphelper/source/streaming/seqinputstreamserv.cxx
@@ -31,6 +31,8 @@
// MARKER( update_precomp.py ): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
+
#include <sal/config.h>
#include <osl/mutex.hxx>
#include <cppuhelper/factory.hxx>
@@ -46,11 +48,6 @@
using namespace ::com::sun::star;
-::rtl::OUString SAL_CALL SequenceInputStreamService_getImplementationName();
-uno::Sequence< ::rtl::OUString > SAL_CALL SequenceInputStreamService_getSupportedServiceNames();
-uno::Reference< uno::XInterface > SAL_CALL SequenceInputStreamService_createInstance( const uno::Reference< uno::XComponentContext > & rxContext ) SAL_THROW( (uno::Exception ) );
-
-
namespace {
class SequenceInputStreamService:
@@ -67,6 +64,11 @@ public:
virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString & ServiceName ) throw ( uno::RuntimeException );
virtual uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw ( uno::RuntimeException );
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static uno::Reference< uno::XInterface > SAL_CALL Create( const uno::Reference< uno::XComponentContext >& );
+
// ::com::sun::star::io::XInputStream:
virtual ::sal_Int32 SAL_CALL readBytes( uno::Sequence< ::sal_Int8 > & aData, ::sal_Int32 nBytesToRead ) throw ( uno::RuntimeException, io::NotConnectedException, io::BufferSizeExceededException, io::IOException );
virtual ::sal_Int32 SAL_CALL readSomeBytes( uno::Sequence< ::sal_Int8 > & aData, ::sal_Int32 nMaxBytesToRead ) throw ( uno::RuntimeException, io::NotConnectedException, io::BufferSizeExceededException, io::IOException );
@@ -102,12 +104,17 @@ SequenceInputStreamService::SequenceInputStreamService()
// com.sun.star.uno.XServiceInfo:
::rtl::OUString SAL_CALL SequenceInputStreamService::getImplementationName() throw ( uno::RuntimeException )
{
- return SequenceInputStreamService_getImplementationName();
+ return getImplementationName_static();
+}
+
+::rtl::OUString SAL_CALL SequenceInputStreamService::getImplementationName_static()
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.SequenceInputStreamService" ) );
}
::sal_Bool SAL_CALL SequenceInputStreamService::supportsService( ::rtl::OUString const & serviceName ) throw ( uno::RuntimeException )
{
- uno::Sequence< ::rtl::OUString > serviceNames = SequenceInputStreamService_getSupportedServiceNames();
+ uno::Sequence< ::rtl::OUString > serviceNames = getSupportedServiceNames();
for ( ::sal_Int32 i = 0; i < serviceNames.getLength(); ++i ) {
if ( serviceNames[i] == serviceName )
return sal_True;
@@ -117,7 +124,21 @@ SequenceInputStreamService::SequenceInputStreamService()
uno::Sequence< ::rtl::OUString > SAL_CALL SequenceInputStreamService::getSupportedServiceNames() throw ( uno::RuntimeException )
{
- return SequenceInputStreamService_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
+}
+
+uno::Sequence< ::rtl::OUString > SAL_CALL SequenceInputStreamService::getSupportedServiceNames_static()
+{
+ uno::Sequence< ::rtl::OUString > s( 1 );
+ s[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.io.SequenceInputStream" ) );
+ return s;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL SequenceInputStreamService::Create(
+ const uno::Reference< uno::XComponentContext >& )
+{
+ return static_cast< ::cppu::OWeakObject * >( new SequenceInputStreamService() );
}
// ::com::sun::star::io::XInputStream:
@@ -227,23 +248,7 @@ void SAL_CALL SequenceInputStreamService::initialize( const uno::Sequence< ::com
} // anonymous namespace
-::rtl::OUString SAL_CALL SequenceInputStreamService_getImplementationName() {
- return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.SequenceInputStreamService" ) );
-}
-
-uno::Sequence< ::rtl::OUString > SAL_CALL SequenceInputStreamService_getSupportedServiceNames()
+void createRegistryInfo_SequenceInputStream()
{
- uno::Sequence< ::rtl::OUString > s( 1 );
- s[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.io.SequenceInputStream" ) );
- return s;
+ static ::comphelper::module::OAutoRegistration< SequenceInputStreamService > aAutoRegistration;
}
-
-uno::Reference< uno::XInterface > SAL_CALL SequenceInputStreamService_createInstance(
- const uno::Reference< uno::XComponentContext >& )
- SAL_THROW( (uno::Exception ) )
-{
- return static_cast< ::cppu::OWeakObject * >( new SequenceInputStreamService() );
-}
-
diff --git a/comphelper/source/streaming/seqoutputstreamserv.cxx b/comphelper/source/streaming/seqoutputstreamserv.cxx
index 1334412f941d..63ff63321f2e 100644
--- a/comphelper/source/streaming/seqoutputstreamserv.cxx
+++ b/comphelper/source/streaming/seqoutputstreamserv.cxx
@@ -30,6 +30,8 @@
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
+
#include <sal/config.h>
#include <osl/mutex.hxx>
#include <cppuhelper/factory.hxx>
@@ -43,11 +45,6 @@
using namespace ::com::sun::star;
-::rtl::OUString SAL_CALL SequenceOutputStreamService_getImplementationName();
-uno::Sequence< ::rtl::OUString > SAL_CALL SequenceOutputStreamService_getSupportedServiceNames();
-uno::Reference< uno::XInterface > SAL_CALL SequenceOutputStreamService_createInstance( const uno::Reference< uno::XComponentContext >& rxContext )SAL_THROW((uno::Exception));
-
-
namespace {
class SequenceOutputStreamService:
@@ -61,6 +58,11 @@ public:
virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString & ServiceName ) throw ( uno::RuntimeException );
virtual uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw ( uno::RuntimeException );
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static uno::Reference< uno::XInterface > SAL_CALL Create( const uno::Reference< uno::XComponentContext >& );
+
// ::com::sun::star::io::XOutputStream:
virtual void SAL_CALL writeBytes( const uno::Sequence< ::sal_Int8 > & aData ) throw ( io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException );
virtual void SAL_CALL flush() throw ( uno::RuntimeException, io::NotConnectedException, io::BufferSizeExceededException, io::IOException );
@@ -88,12 +90,17 @@ SequenceOutputStreamService::SequenceOutputStreamService()
// com.sun.star.uno.XServiceInfo:
::rtl::OUString SAL_CALL SequenceOutputStreamService::getImplementationName() throw ( uno::RuntimeException )
{
- return SequenceOutputStreamService_getImplementationName();
+ return getImplementationName_static();
+}
+
+::rtl::OUString SAL_CALL SequenceOutputStreamService::getImplementationName_static()
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.SequenceOutputStreamService" ) );
}
::sal_Bool SAL_CALL SequenceOutputStreamService::supportsService( ::rtl::OUString const & serviceName ) throw ( uno::RuntimeException )
{
- uno::Sequence< ::rtl::OUString > serviceNames = SequenceOutputStreamService_getSupportedServiceNames();
+ uno::Sequence< ::rtl::OUString > serviceNames = getSupportedServiceNames();
for ( ::sal_Int32 i = 0; i < serviceNames.getLength(); ++i ) {
if ( serviceNames[i] == serviceName )
return sal_True;
@@ -103,7 +110,20 @@ SequenceOutputStreamService::SequenceOutputStreamService()
uno::Sequence< ::rtl::OUString > SAL_CALL SequenceOutputStreamService::getSupportedServiceNames() throw ( uno::RuntimeException )
{
- return SequenceOutputStreamService_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
+}
+
+uno::Sequence< ::rtl::OUString > SAL_CALL SequenceOutputStreamService::getSupportedServiceNames_static()
+{
+ uno::Sequence< ::rtl::OUString > s( 1 );
+ s[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.io.SequenceOutputStream" ) );
+ return s;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL SequenceOutputStreamService::Create(
+ const uno::Reference< uno::XComponentContext >& )
+{
+ return static_cast< ::cppu::OWeakObject * >( new SequenceOutputStreamService());
}
// ::com::sun::star::io::XOutputStream:
@@ -149,23 +169,7 @@ uno::Sequence< ::sal_Int8 > SAL_CALL SequenceOutputStreamService::getWrittenByte
} // anonymous namespace
-::rtl::OUString SAL_CALL SequenceOutputStreamService_getImplementationName() {
- return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.SequenceOutputStreamService" ) );
-}
-
-uno::Sequence< ::rtl::OUString > SAL_CALL SequenceOutputStreamService_getSupportedServiceNames()
+void createRegistryInfo_SequenceOutputStream()
{
- uno::Sequence< ::rtl::OUString > s( 1 );
- s[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.io.SequenceOutputStream" ) );
- return s;
+ static ::comphelper::module::OAutoRegistration< SequenceOutputStreamService > aAutoRegistration;
}
-
-uno::Reference< uno::XInterface > SAL_CALL SequenceOutputStreamService_createInstance(
- const uno::Reference< uno::XComponentContext >& )
- SAL_THROW( (uno::Exception) )
-{
- return static_cast< ::cppu::OWeakObject * >( new SequenceOutputStreamService());
-}
-