| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _XMLOFF_PROPERTYHANDLERFACTORY_HXX |
| #define _XMLOFF_PROPERTYHANDLERFACTORY_HXX |
| |
| #include "sal/config.h" |
| #include "xmloff/dllapi.h" |
| #include "sal/types.h" |
| |
| #ifndef __SGI_STL_MAP |
| #include <map> |
| #endif |
| #include <xmloff/uniref.hxx> |
| #include <xmloff/xmlprhdl.hxx> |
| |
| /** |
| This class is a base-class to create XMLPropertyHandler. |
| It creates PropertyHandler for given XML-types and store |
| them in an internal cache. They'll be deleted at destruction- |
| time. |
| For create your own PropertyHandler for specific XML-types |
| you have to override the virtual method GetPropertyHandler |
| ( see below ). |
| */ |
| class XMLOFF_DLLPUBLIC XMLPropertyHandlerFactory : public UniRefBase |
| { |
| public: |
| virtual ~XMLPropertyHandlerFactory(); |
| |
| /** |
| This method retrieves a PropertyHandler for the given XML-type. |
| To extend this method for more XML-types override this method |
| like the example below. If you call the method of the base-class |
| you get propertyhandler for basic-XML-types ( e.g. for color, percent, ... ). |
| Afetr that you could create your new XML-types. After creating a new type |
| you have to put the pointer into the cache via the method |
| PutHdlCache( sal_Int32 , XMLPropertyHandler* ). |
| |
| virtual const XMLPropertyHandler* GetPropertyHandler( sal_Int32 nType ) const |
| { |
| XMLPropertyHandler* pHdl = XMLPropertyHandlerFactory::GetPropertyHandler( nType ); |
| |
| if( !pHdl ) |
| { |
| switch( nType ) |
| { |
| case XML_TYPE_XYZ : |
| pHdl = new XML_xyz_PropHdl; |
| break; |
| case ... |
| : |
| : |
| } |
| |
| if( pHdl ) |
| PutHdlCache( nType, pHdl ); |
| } |
| |
| return pHdl; |
| } |
| */ |
| virtual const XMLPropertyHandler* GetPropertyHandler( sal_Int32 nType ) const; |
| |
| /** helper method to statically create a property handler; this will not |
| * use the handler cache. This method should only be called in special |
| * circumstances; calling GetPropertyHandler is almost always |
| * preferable. */ |
| static const XMLPropertyHandler* CreatePropertyHandler( sal_Int32 nType ); |
| |
| protected: |
| /** Retrieves a PropertyHandler from the internal cache */ |
| XMLPropertyHandler* GetHdlCache( sal_Int32 nType ) const; |
| /** Puts a PropertyHandler into the internal cache */ |
| void PutHdlCache( sal_Int32 nType, const XMLPropertyHandler* pHdl ) const; |
| |
| private: |
| /** Retrieves ( creates if necessary ) PropertyHandler for |
| basic XML-types */ |
| SAL_DLLPRIVATE const XMLPropertyHandler* GetBasicHandler( sal_Int32 nType ) |
| const; |
| |
| typedef ::std::map< sal_Int32, XMLPropertyHandler* > CacheMap; |
| CacheMap maHandlerCache; |
| }; |
| |
| #endif // _XMLOFF_PROPERTYHANDLERFACTORY_HXX |