1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _SDXMLIMP_IMPL_HXX
29 #define _SDXMLIMP_IMPL_HXX
30 
31 #include <com/sun/star/drawing/XDrawPage.hpp>
32 #include <com/sun/star/frame/XModel.hpp>
33 #include <com/sun/star/task/XStatusIndicator.hpp>
34 #include <xmloff/xmltkmap.hxx>
35 #include <com/sun/star/container/XNameAccess.hpp>
36 
37 #ifndef __SGI_STL_VECTOR
38 #include <vector>
39 #endif
40 #include <xmloff/xmlimp.hxx>
41 
42 //////////////////////////////////////////////////////////////////////////////
43 
44 enum SdXMLDocElemTokenMap
45 {
46 	XML_TOK_DOC_FONTDECLS,
47 	XML_TOK_DOC_STYLES,
48 	XML_TOK_DOC_AUTOSTYLES,
49 	XML_TOK_DOC_MASTERSTYLES,
50 	XML_TOK_DOC_META,
51 	XML_TOK_DOC_BODY,
52 	XML_TOK_DOC_SCRIPT,
53 	XML_TOK_DOC_SETTINGS,
54 	XML_TOK_OFFICE_END = XML_TOK_UNKNOWN
55 };
56 
57 enum SdXMLBodyElemTokenMap
58 {
59 	XML_TOK_BODY_PAGE,
60 	XML_TOK_BODY_SETTINGS,
61 	XML_TOK_BODY_HEADER_DECL,
62 	XML_TOK_BODY_FOOTER_DECL,
63 	XML_TOK_BODY_DATE_TIME_DECL
64 };
65 
66 enum SdXMLStylesElemTokenMap
67 {
68 	XML_TOK_STYLES_MASTER_PAGE,
69 	XML_TOK_STYLES_STYLE,
70 	XML_TOK_STYLES_PAGE_MASTER,
71 	XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT
72 };
73 
74 enum SdXMLAutoStylesElemTokenMap
75 {
76 	XML_TOK_AUTOSTYLES_STYLE
77 };
78 
79 enum SdXMLMasterPageElemTokenMap
80 {
81 	XML_TOK_MASTERPAGE_STYLE,
82 	XML_TOK_MASTERPAGE_NOTES
83 };
84 
85 enum SdXMLMasterPageAttrTokenMap
86 {
87 	XML_TOK_MASTERPAGE_NAME,
88 	XML_TOK_MASTERPAGE_DISPLAY_NAME,
89 	XML_TOK_MASTERPAGE_PAGE_MASTER_NAME,
90 	XML_TOK_MASTERPAGE_STYLE_NAME,
91 	XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME,
92 	XML_TOK_MASTERPAGE_USE_HEADER_NAME,
93 	XML_TOK_MASTERPAGE_USE_FOOTER_NAME,
94 	XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME
95 };
96 
97 enum SdXMLPageMasterAttrTokenMap
98 {
99 	XML_TOK_PAGEMASTER_NAME
100 };
101 
102 enum SdXMLPageMasterStyleAttrTokenMap
103 {
104 	XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP,
105 	XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM,
106 	XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT,
107 	XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT,
108 	XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH,
109 	XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT,
110 	XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION
111 };
112 
113 enum SdXMLDocStyleAttrTokenMap
114 {
115 	XML_TOK_DOCSTYLE_NAME,
116 	XML_TOK_DOCSTYLE_FAMILY,
117 	XML_TOK_DOCSTYLE_PARENT_STYLE_NAME,
118 	XML_TOK_DOCSTYLE_AUTOMATIC
119 };
120 
121 enum SdXMLDocStyleElemTokenMap
122 {
123 	XML_TOK_DOCSTYLE_PROPERTIES,
124 	XML_TOK_DOCSTYLE_PRESENTATION_PLACEHOLDER
125 };
126 
127 enum SdXMLDrawPageAttrTokenMap
128 {
129 	XML_TOK_DRAWPAGE_NAME,
130 	XML_TOK_DRAWPAGE_STYLE_NAME,
131 	XML_TOK_DRAWPAGE_MASTER_PAGE_NAME,
132 	XML_TOK_DRAWPAGE_PAGE_LAYOUT_NAME,
133     XML_TOK_DRAWPAGE_DRAWID,
134     XML_TOK_DRAWPAGE_XMLID,
135 	XML_TOK_DRAWPAGE_HREF,
136 	XML_TOK_DRAWPAGE_USE_HEADER_NAME,
137 	XML_TOK_DRAWPAGE_USE_FOOTER_NAME,
138 	XML_TOK_DRAWPAGE_USE_DATE_TIME_NAME
139 };
140 
141 enum SdXMLDrawPageElemTokenMap
142 {
143 	XML_TOK_DRAWPAGE_NOTES,
144 	XML_TOK_DRAWPAGE_PAR,
145 	XML_TOK_DRAWPAGE_SEQ
146 };
147 
148 enum SdXMLPresentationPlaceholderAttrTokenMap
149 {
150 	XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME,
151 	XML_TOK_PRESENTATIONPLACEHOLDER_X,
152 	XML_TOK_PRESENTATIONPLACEHOLDER_Y,
153 	XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH,
154 	XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT
155 };
156 
157 //////////////////////////////////////////////////////////////////////////////
158 
159 struct SdXMLltXDrawPageId
160 {
161   bool operator()(sal_Int32 nId1, sal_Int32 nId2 ) const
162   {
163     return nId1 < nId2;
164   }
165 };
166 
167 typedef std::map< sal_Int32, com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage >, SdXMLltXDrawPageId > DrawPageIdMap;
168 
169 //////////////////////////////////////////////////////////////////////////////
170 
171 class SvXMLUnitConverter;
172 class SvXMLTokenMap;
173 class XMLSdPropHdlFactory;
174 class XMLPropertySetMapper;
175 class XMLPropStyleContext;
176 class SdXMLStylesContext;
177 class SdXMLMasterStylesContext;
178 
179 //////////////////////////////////////////////////////////////////////////////
180 
181 struct DateTimeDeclContextImpl
182 {
183 	rtl::OUString maStrText;
184 	sal_Bool mbFixed;
185 	rtl::OUString maStrDateTimeFormat;
186 
187 	DateTimeDeclContextImpl() : mbFixed(sal_True) {}
188 };
189 
190 DECLARE_STL_USTRINGACCESS_MAP( ::rtl::OUString, HeaderFooterDeclMap );
191 DECLARE_STL_USTRINGACCESS_MAP( DateTimeDeclContextImpl, DateTimeDeclMap );
192 
193 //////////////////////////////////////////////////////////////////////////////
194 
195 class SdXMLImport: public SvXMLImport
196 {
197 	com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > mxDocStyleFamilies;
198 	com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess > mxDocMasterPages;
199 	com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess > mxDocDrawPages;
200 	com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > mxPageLayouts;
201 
202 	// contexts for Style and AutoStyle import
203 	SdXMLMasterStylesContext*	mpMasterStylesContext;
204 
205 	// token map lists
206 	SvXMLTokenMap*				mpDocElemTokenMap;
207 	SvXMLTokenMap*				mpBodyElemTokenMap;
208 	SvXMLTokenMap*				mpStylesElemTokenMap;
209 	SvXMLTokenMap*				mpAutoStylesElemTokenMap;
210 	SvXMLTokenMap*				mpMasterPageElemTokenMap;
211 	SvXMLTokenMap*				mpMasterPageAttrTokenMap;
212 	SvXMLTokenMap*				mpPageMasterAttrTokenMap;
213 	SvXMLTokenMap*				mpPageMasterStyleAttrTokenMap;
214 	SvXMLTokenMap*				mpDocStyleAttrTokenMap;
215 	SvXMLTokenMap*				mpDocStyleElemTokenMap;
216 	SvXMLTokenMap*				mpDrawPageAttrTokenMap;
217 	SvXMLTokenMap*				mpDrawPageElemTokenMap;
218 	SvXMLTokenMap*				mpPresentationPlaceholderAttrTokenMap;
219 
220 	sal_uInt16					mnStyleFamilyMask;
221 
222 	sal_Int32					mnNewPageCount;
223 	sal_Int32					mnNewMasterPageCount;
224 
225 	sal_Bool					mbIsDraw;
226 	sal_Bool					mbLoadDoc;
227 	sal_Bool					mbPreview;
228 
229 	DrawPageIdMap				maDrawPageIds;
230 
231 	::rtl::OUString				msPageLayouts;
232 	::rtl::OUString				msPreview;
233 
234 	HeaderFooterDeclMap			maHeaderDeclsMap;
235 	HeaderFooterDeclMap			maFooterDeclsMap;
236 	DateTimeDeclMap				maDateTimeDeclsMap;
237 
238 protected:
239 	// This method is called after the namespace map has been updated, but
240 	// before a context for the current element has been pushed.
241 	virtual SvXMLImportContext *CreateContext(sal_uInt16 nPrefix,
242 	  const rtl::OUString& rLocalName,
243 	  const com::sun::star::uno::Reference<
244 		com::sun::star::xml::sax::XAttributeList>& xAttrList);
245 
246 public:
247 	// #110680#
248 	SdXMLImport(
249 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
250 		sal_Bool bIsDraw, sal_uInt16 nImportFlags = IMPORT_ALL );
251 	~SdXMLImport() throw ();
252 
253 	// XImporter
254 	virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
255 
256 	// XInitialization
257     virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
258 
259 	void SetProgress(sal_Int32 nProg);
260 
261 	virtual void SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aViewProps);
262 	virtual void SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aConfigProps);
263 
264 	// namespace office
265     // NB: in contrast to other CreateFooContexts, this particular one handles
266     //     the root element (i.e. office:document-meta)
267 	SvXMLImportContext* CreateMetaContext(const rtl::OUString& rLocalName,
268 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
269 	SvXMLImportContext* CreateScriptContext( const ::rtl::OUString& rLocalName );
270 	SvXMLImportContext* CreateBodyContext(const rtl::OUString& rLocalName,
271 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
272 	SvXMLStylesContext* CreateStylesContext(const rtl::OUString& rLocalName,
273 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
274 	SvXMLStylesContext* CreateAutoStylesContext(const rtl::OUString& rLocalName,
275 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
276 	SvXMLImportContext* CreateMasterStylesContext(const rtl::OUString& rLocalName,
277 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
278 	SvXMLImportContext *CreateFontDeclsContext(const ::rtl::OUString& rLocalName,
279 		const ::com::sun::star::uno::Reference<	::com::sun::star::xml::sax::XAttributeList > & xAttrList );
280 
281 	// Styles and AutoStyles contexts
282 	const SdXMLMasterStylesContext* GetMasterStylesContext() const { return mpMasterStylesContext; }
283 
284 	sal_uInt16 GetStyleFamilyMask() const { return mnStyleFamilyMask; }
285 	sal_Bool IsStylesOnlyMode() const { return !mbLoadDoc; }
286 
287 	const SvXMLTokenMap& GetDocElemTokenMap();
288 	const SvXMLTokenMap& GetBodyElemTokenMap();
289 	const SvXMLTokenMap& GetStylesElemTokenMap();
290 	const SvXMLTokenMap& GetMasterPageElemTokenMap();
291 	const SvXMLTokenMap& GetMasterPageAttrTokenMap();
292 	const SvXMLTokenMap& GetPageMasterAttrTokenMap();
293 	const SvXMLTokenMap& GetPageMasterStyleAttrTokenMap();
294 	const SvXMLTokenMap& GetDrawPageAttrTokenMap();
295 	const SvXMLTokenMap& GetDrawPageElemTokenMap();
296 	const SvXMLTokenMap& GetPresentationPlaceholderAttrTokenMap();
297 
298 	// export local parameters concerning page access and similar
299 	const com::sun::star::uno::Reference<
300 		com::sun::star::container::XNameAccess >& GetLocalDocStyleFamilies() const { return mxDocStyleFamilies; }
301 	const com::sun::star::uno::Reference<
302 		com::sun::star::container::XIndexAccess >& GetLocalMasterPages() const { return mxDocMasterPages; }
303 	const com::sun::star::uno::Reference<
304 		com::sun::star::container::XIndexAccess >& GetLocalDrawPages() const { return mxDocDrawPages; }
305 
306 	sal_Int32 GetNewPageCount() const { return mnNewPageCount; }
307 	void IncrementNewPageCount() { mnNewPageCount++; }
308 	sal_Int32 GetNewMasterPageCount() const { return mnNewMasterPageCount; }
309 	void IncrementNewMasterPageCount() { mnNewMasterPageCount++; }
310 
311 	com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > getPageLayouts() const { return mxPageLayouts; }
312 
313 	sal_Bool IsDraw() const { return mbIsDraw; }
314 	sal_Bool IsImpress() const { return !mbIsDraw; }
315 
316 	// import pool defaults. Parameter contains pool defaults read
317 	// from input data. These data needs to be set at the model.
318 	void ImportPoolDefaults(const XMLPropStyleContext* pPool);
319 
320 	// #80365#
321     virtual void SetStatistics(
322         const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue> & i_rStats);
323 
324 	sal_Bool IsPreview() const { return mbPreview; }
325 
326     // XServiceInfo ( : SvXMLExport )
327     virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException );
328 
329 	void AddHeaderDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText );
330 	void AddFooterDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText );
331 	void AddDateTimeDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText, sal_Bool bFixed, const ::rtl::OUString& rDateTimeFormat );
332 
333 	::rtl::OUString GetHeaderDecl( const ::rtl::OUString& rName ) const;
334 	::rtl::OUString GetFooterDecl( const ::rtl::OUString& rName ) const;
335 	::rtl::OUString GetDateTimeDecl( const ::rtl::OUString& rName, sal_Bool& rbFixed, ::rtl::OUString& rDateTimeFormat );
336 
337 };
338 
339 #endif	//  _SDXMLIMP_HXX
340