xref: /AOO41X/main/xmloff/inc/xmloff/xmlexppr.hxx (revision ecfe53c5d1886e1e0d215b0d140d05282ab1c477)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _XMLOFF_XMLEXPPR_HXX
25 #define _XMLOFF_XMLEXPPR_HXX
26 
27 #include "sal/config.h"
28 #include "xmloff/dllapi.h"
29 #include <xmloff/xmlprmap.hxx>
30 #include <xmloff/uniref.hxx>
31 
32 namespace rtl { class OUString; }
33 
34 class SvXMLUnitConverter;
35 class SvXMLAttributeList;
36 class SvXMLNamespaceMap;
37 class SvUShorts;
38 class FilterPropertiesInfos_Impl;
39 class SvXMLExport;
40 
41 #define XML_EXPORT_FLAG_DEFAULTS    0x0001      // export also default items
42 #define XML_EXPORT_FLAG_DEEP        0x0002      // export also items from
43                                                 // parent item sets
44 #define XML_EXPORT_FLAG_EMPTY       0x0004      // export attribs element
45                                                 // even if its empty
46 #define XML_EXPORT_FLAG_IGN_WS      0x0008
47 
48 class XMLOFF_DLLPUBLIC SvXMLExportPropertyMapper : public UniRefBase
49 {
50     UniReference< SvXMLExportPropertyMapper> mxNextMapper;
51 
52     FilterPropertiesInfos_Impl *pCache;
53 
54 protected:
55     UniReference< XMLPropertySetMapper > maPropMapper;
56 
57     rtl::OUString maStyleName;
58 
59     /** Filter all properties we don't want to export:
60         Take all properties of the XPropertySet which are also found in the
61         XMLPropertyMapEntry-array and which are not set directly (so, the value isn't
62         default and isn't inherited, apart from bDefault is true)
63         After this process It'll called 'Contextfilter' for application-specific
64         filter-processes. */
65     ::std::vector< XMLPropertyState > _Filter(
66             const ::com::sun::star::uno::Reference<
67                     ::com::sun::star::beans::XPropertySet > rPropSet,
68             const sal_Bool bDefault ) const;
69 
70     /** Application-specific filter. By default do nothing. */
71     virtual void ContextFilter(
72             ::std::vector< XMLPropertyState >& rProperties,
73             ::com::sun::star::uno::Reference<
74                     ::com::sun::star::beans::XPropertySet > rPropSet ) const;
75 
76     /** fills the given attribute list with the items in the given set */
77     void _exportXML( sal_uInt16 nPropType, sal_uInt16& rPropTypeFlags,
78                      SvXMLAttributeList& rAttrList,
79                      const ::std::vector< XMLPropertyState >& rProperties,
80                      const SvXMLUnitConverter& rUnitConverter,
81                      const SvXMLNamespaceMap& rNamespaceMap,
82                      sal_uInt16 nFlags,
83                      SvUShorts* pIndexArray,
84                      sal_Int32 nPropMapStartIdx, sal_Int32 nPropMapEndIdx ) const;
85 
86     void _exportXML( SvXMLAttributeList& rAttrList,
87                      const XMLPropertyState& rProperty,
88                      const SvXMLUnitConverter& rUnitConverter,
89                      const SvXMLNamespaceMap& rNamespaceMap,
90                      sal_uInt16 nFlags,
91                      const ::std::vector< XMLPropertyState > *pProperties = 0,
92                      sal_uInt32 nIdx = 0 ) const;
93 
94     void exportElementItems(
95             SvXMLExport& rExport,
96             const ::std::vector< XMLPropertyState >& rProperties,
97             sal_uInt16 nFlags,
98             const SvUShorts& rIndexArray ) const;
99 
100 public:
101 
102     SvXMLExportPropertyMapper(
103             const UniReference< XMLPropertySetMapper >& rMapper );
104     virtual ~SvXMLExportPropertyMapper();
105 
106     // Add a ExportPropertyMapper at the end of the import mapper chain.
107     // The added mapper MUST not be used outside the Mapper chain any longer,
108     // because its PropertyMapper will be replaced.
109     void ChainExportMapper(
110         const UniReference< SvXMLExportPropertyMapper>& rMapper );
111 
112     /** Filter all properties we don't want to export:
113         Take all properties of the XPropertySet which are also found in the
114         XMLPropertyMapEntry-array and which are not set directly (so, the value isn't
115         default and isn't inherited)
116         After this process It'll called 'Contextfilter' for application-specific
117         filter-processes. */
Filter(const::com::sun::star::uno::Reference<::com::sun::star::beans::XPropertySet> rPropSet) const118     ::std::vector< XMLPropertyState > Filter(
119             const ::com::sun::star::uno::Reference<
120                     ::com::sun::star::beans::XPropertySet > rPropSet ) const
121                     { return _Filter(rPropSet, sal_False); }
122 
123     /** Like Filter(), excepti that:
124       * - only properties that have the map flag MID_FLAG_DEFAULT_ITEM_EXPORT
125       *   set are exported,
126       * - instead of the property's value, its defualt value is exported.
127       */
FilterDefaults(const::com::sun::star::uno::Reference<::com::sun::star::beans::XPropertySet> rPropSet) const128     ::std::vector< XMLPropertyState > FilterDefaults(
129             const ::com::sun::star::uno::Reference<
130                     ::com::sun::star::beans::XPropertySet > rPropSet ) const
131                     { return _Filter(rPropSet, sal_True); }
132 
133     /** Compare to arrays of XMLPropertyState */
134     sal_Bool Equals( const ::std::vector< XMLPropertyState >& aProperties1,
135                      const ::std::vector< XMLPropertyState >& aProperties2 ) const;
136 
137     /** fills the given attribute list with the items in the given set */
138     void exportXML(
139            SvXMLAttributeList& rAttrList,
140            const ::std::vector< XMLPropertyState >& rProperties,
141            const SvXMLUnitConverter& rUnitConverter,
142            const SvXMLNamespaceMap& rNamespaceMap,
143            sal_uInt16 nFlags = 0 ) const;
144     /** like above but only properties whose property map index is within the
145         specified range are exported */
146     void exportXML(
147            SvXMLAttributeList& rAttrList,
148            const ::std::vector< XMLPropertyState >& rProperties,
149            const SvXMLUnitConverter& rUnitConverter,
150            const SvXMLNamespaceMap& rNamespaceMap,
151            sal_Int32 nPropMapStartIdx, sal_Int32 nPropMapEndIdx,
152            sal_uInt16 nFlags = 0 ) const;
153 
154     /** fills the given attribute list with the representation of one item */
155     void exportXML(
156            SvXMLAttributeList& rAttrList,
157            const XMLPropertyState& rProperty,
158            const SvXMLUnitConverter& rUnitConverter,
159            const SvXMLNamespaceMap& rNamespaceMap,
160            sal_uInt16 nFlags = 0 ) const;
161 
162     void exportXML(
163             SvXMLExport& rExport,
164             const ::std::vector< XMLPropertyState >& rProperties,
165             sal_uInt16 nFlags = 0 ) const;
166 
167     /** like above but only properties whose property map index is within the
168         specified range are exported */
169     void exportXML(
170             SvXMLExport& rExport,
171             const ::std::vector< XMLPropertyState >& rProperties,
172             sal_Int32 nPropMapStartIdx, sal_Int32 nPropMapEndIdx,
173             sal_uInt16 nFlags = 0 ) const;
174 
175     /** this method is called for every item that has the
176         MID_FLAG_ELEMENT_EXPORT flag set */
177     virtual void handleElementItem(
178             SvXMLExport& rExport,
179             const XMLPropertyState& rProperty,
180             sal_uInt16 nFlags,
181             const ::std::vector< XMLPropertyState > *pProperties = 0,
182             sal_uInt32 nIdx = 0 ) const;
183 
184     /** this method is called for every item that has the
185         MID_FLAG_SPECIAL_ITEM_EXPORT flag set */
186     virtual void handleSpecialItem(
187             SvXMLAttributeList& rAttrList,
188             const XMLPropertyState& rProperty,
189             const SvXMLUnitConverter& rUnitConverter,
190             const SvXMLNamespaceMap& rNamespaceMap,
191             const ::std::vector< XMLPropertyState > *pProperties = 0,
192             sal_uInt32 nIdx = 0 ) const;
193 
194     inline const UniReference< XMLPropertySetMapper >&
getPropertySetMapper() const195         getPropertySetMapper() const { return maPropMapper; }
196 
SetStyleName(const rtl::OUString & rStyleName)197     void SetStyleName( const rtl::OUString& rStyleName ) { maStyleName = rStyleName; }
198 };
199 
200 #endif  //  _XMLOFF_XMLEXPPR_HXX
201