xref: /AOO41X/main/xmloff/source/text/txtfldi.cxx (revision 9030e3c10f1280060e8124e8a06b112b21016170)
163bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
363bba73cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
463bba73cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
563bba73cSAndrew Rist  * distributed with this work for additional information
663bba73cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
763bba73cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
863bba73cSAndrew Rist  * "License"); you may not use this file except in compliance
963bba73cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
1163bba73cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
1363bba73cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
1463bba73cSAndrew Rist  * software distributed under the License is distributed on an
1563bba73cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1663bba73cSAndrew Rist  * KIND, either express or implied.  See the License for the
1763bba73cSAndrew Rist  * specific language governing permissions and limitations
1863bba73cSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
2063bba73cSAndrew Rist  *************************************************************/
2163bba73cSAndrew Rist 
2263bba73cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir /** @#file
28cdf0e10cSrcweir  *
29cdf0e10cSrcweir  *  Import of all text fields except those from txtvfldi.cxx
30cdf0e10cSrcweir  *  (variable related text fields and database display fields)
31cdf0e10cSrcweir  */
32cdf0e10cSrcweir #include "txtfldi.hxx"
33cdf0e10cSrcweir #include "txtvfldi.hxx"
34cdf0e10cSrcweir #include <xmloff/xmlimp.hxx>
35cdf0e10cSrcweir #include <xmloff/xmlnumi.hxx>
36cdf0e10cSrcweir #include <xmloff/txtimp.hxx>
37cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx"
38cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
39cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
40cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
41cdf0e10cSrcweir #include <xmloff/xmlement.hxx>
42cdf0e10cSrcweir #include "XMLStringBufferImportContext.hxx"
43cdf0e10cSrcweir #include <xmloff/XMLEventsImportContext.hxx>
44cdf0e10cSrcweir #include <com/sun/star/xml/sax/XAttributeList.hpp>
45cdf0e10cSrcweir #include <com/sun/star/text/UserDataPart.hpp>
46cdf0e10cSrcweir #include <com/sun/star/style/NumberingType.hpp>
47cdf0e10cSrcweir #include <com/sun/star/text/PlaceholderType.hpp>
48cdf0e10cSrcweir #include <com/sun/star/text/ReferenceFieldPart.hpp>
49cdf0e10cSrcweir #include <com/sun/star/text/ReferenceFieldSource.hpp>
50cdf0e10cSrcweir #include <com/sun/star/text/XTextField.hpp>
51cdf0e10cSrcweir #include <com/sun/star/text/XTextContent.hpp>
52cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
53cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp>
54cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
55cdf0e10cSrcweir #include <com/sun/star/text/XTextFieldsSupplier.hpp>
56cdf0e10cSrcweir #include <com/sun/star/text/XDependentTextField.hpp>
57cdf0e10cSrcweir #include <com/sun/star/text/SetVariableType.hpp>
58cdf0e10cSrcweir #include <com/sun/star/text/FilenameDisplayFormat.hpp>
59cdf0e10cSrcweir #include <com/sun/star/text/ChapterFormat.hpp>
60cdf0e10cSrcweir #include <com/sun/star/text/TemplateDisplayFormat.hpp>
61cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
62cdf0e10cSrcweir #include <com/sun/star/text/BibliographyDataType.hpp>
63cdf0e10cSrcweir #include <com/sun/star/text/BibliographyDataField.hpp>
64cdf0e10cSrcweir #include <com/sun/star/util/XUpdatable.hpp>
65cdf0e10cSrcweir #include <com/sun/star/sdb/CommandType.hpp>
66cdf0e10cSrcweir 
67cdf0e10cSrcweir #include <rtl/ustring.hxx>
68cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
69cdf0e10cSrcweir #include <rtl/math.hxx>
70cdf0e10cSrcweir #include <tools/debug.hxx>
71cdf0e10cSrcweir 
72cdf0e10cSrcweir 
73cdf0e10cSrcweir using ::rtl::OUString;
74cdf0e10cSrcweir using ::rtl::OUStringBuffer;
75cdf0e10cSrcweir 
76cdf0e10cSrcweir using namespace ::com::sun::star;
77cdf0e10cSrcweir using namespace ::com::sun::star::uno;
78cdf0e10cSrcweir using namespace ::com::sun::star::text;
79cdf0e10cSrcweir using namespace ::com::sun::star::lang;
80cdf0e10cSrcweir using namespace ::com::sun::star::beans;
81cdf0e10cSrcweir using namespace ::com::sun::star::document;
82cdf0e10cSrcweir using namespace ::com::sun::star::util;
83cdf0e10cSrcweir using namespace ::com::sun::star::xml::sax;
84cdf0e10cSrcweir using namespace ::xmloff::token;
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 
87cdf0e10cSrcweir //
88cdf0e10cSrcweir // SO API string constants
89cdf0e10cSrcweir //
90cdf0e10cSrcweir 
91cdf0e10cSrcweir // service prefix and service anems
92cdf0e10cSrcweir const sal_Char sAPI_textfield_prefix[]	= "com.sun.star.text.TextField.";
93cdf0e10cSrcweir const sal_Char sAPI_fieldmaster_prefix[] = "com.sun.star.text.FieldMaster.";
94cdf0e10cSrcweir const sal_Char sAPI_presentation_prefix[] = "com.sun.star.presentation.TextField.";
95cdf0e10cSrcweir 
96cdf0e10cSrcweir const sal_Char sAPI_extended_user[]				= "ExtendedUser";
97cdf0e10cSrcweir const sal_Char sAPI_user_data_type[]			= "UserDataType";
98cdf0e10cSrcweir const sal_Char sAPI_jump_edit[]					= "JumpEdit";
99cdf0e10cSrcweir const sal_Char sAPI_get_expression[] 			= "GetExpression";
100cdf0e10cSrcweir const sal_Char sAPI_set_expression[] 			= "SetExpression";
101cdf0e10cSrcweir const sal_Char sAPI_user[]						= "User";
102cdf0e10cSrcweir const sal_Char sAPI_date_time[]					= "DateTime";
103cdf0e10cSrcweir const sal_Char sAPI_page_number[]				= "PageNumber";
104cdf0e10cSrcweir const sal_Char sAPI_database_next[]				= "DatabaseNextSet";
105cdf0e10cSrcweir const sal_Char sAPI_database_select[]			= "DatabaseNumberOfSet";
106cdf0e10cSrcweir const sal_Char sAPI_database_number[]			= "DatabaseSetNumber";
107cdf0e10cSrcweir const sal_Char sAPI_database[]					= "Database";
108cdf0e10cSrcweir const sal_Char sAPI_database_name[]				= "DatabaseName";
109cdf0e10cSrcweir const sal_Char sAPI_docinfo_change_author[]		= "DocInfo.ChangeAuthor";
110cdf0e10cSrcweir const sal_Char sAPI_docinfo_change_date_time[]	= "DocInfo.ChangeDateTime";
111cdf0e10cSrcweir const sal_Char sAPI_docinfo_edit_time[]			= "DocInfo.EditTime";
112cdf0e10cSrcweir const sal_Char sAPI_docinfo_description[]		= "DocInfo.Description";
113cdf0e10cSrcweir const sal_Char sAPI_docinfo_create_author[]		= "DocInfo.CreateAuthor";
114cdf0e10cSrcweir const sal_Char sAPI_docinfo_create_date_time[]	= "DocInfo.CreateDateTime";
115cdf0e10cSrcweir const sal_Char sAPI_docinfo_custom[]			= "DocInfo.Custom";
116cdf0e10cSrcweir const sal_Char sAPI_docinfo_print_author[]		= "DocInfo.PrintAuthor";
117cdf0e10cSrcweir const sal_Char sAPI_docinfo_print_date_time[]	= "DocInfo.PrintDateTime";
118cdf0e10cSrcweir const sal_Char sAPI_docinfo_keywords[]			= "DocInfo.KeyWords";
119cdf0e10cSrcweir const sal_Char sAPI_docinfo_subject[]			= "DocInfo.Subject";
120cdf0e10cSrcweir const sal_Char sAPI_docinfo_title[]				= "DocInfo.Title";
121cdf0e10cSrcweir const sal_Char sAPI_docinfo_revision[]			= "DocInfo.Revision";
122cdf0e10cSrcweir const sal_Char sAPI_hidden_paragraph[]			= "HiddenParagraph";
123cdf0e10cSrcweir const sal_Char sAPI_hidden_text[]				= "HiddenText";
124cdf0e10cSrcweir const sal_Char sAPI_conditional_text[]			= "ConditionalText";
125cdf0e10cSrcweir const sal_Char sAPI_file_name[]					= "FileName";
126cdf0e10cSrcweir const sal_Char sAPI_chapter[]					= "Chapter";
127cdf0e10cSrcweir const sal_Char sAPI_template_name[]				= "TemplateName";
128cdf0e10cSrcweir const sal_Char sAPI_page_count[]				= "PageCount";
129cdf0e10cSrcweir const sal_Char sAPI_paragraph_count[]			= "ParagraphCount";
130cdf0e10cSrcweir const sal_Char sAPI_word_count[]				= "WordCount";
131cdf0e10cSrcweir const sal_Char sAPI_character_count[]			= "CharacterCount";
132cdf0e10cSrcweir const sal_Char sAPI_table_count[]				= "TableCount";
133cdf0e10cSrcweir const sal_Char sAPI_graphic_object_count[]		= "GraphicObjectCount";
134cdf0e10cSrcweir const sal_Char sAPI_embedded_object_count[]		= "EmbeddedObjectCount";
135cdf0e10cSrcweir const sal_Char sAPI_reference_page_set[]		= "ReferencePageSet";
136cdf0e10cSrcweir const sal_Char sAPI_reference_page_get[]		= "ReferencePageGet";
137cdf0e10cSrcweir const sal_Char sAPI_macro[]						= "Macro";
138cdf0e10cSrcweir const sal_Char sAPI_dde[]						= "DDE";
139cdf0e10cSrcweir const sal_Char sAPI_get_reference[]				= "GetReference";
140cdf0e10cSrcweir const sal_Char sAPI_sheet_name[]				= "SheetName";
141cdf0e10cSrcweir const sal_Char sAPI_url[]						= "URL";
142cdf0e10cSrcweir const sal_Char sAPI_bibliography[]				= "Bibliography";
143cdf0e10cSrcweir const sal_Char sAPI_annotation[]				= "Annotation";
144cdf0e10cSrcweir const sal_Char sAPI_script[]					= "Script";
145cdf0e10cSrcweir const sal_Char sAPI_measure[]					= "Measure";
146cdf0e10cSrcweir const sal_Char sAPI_drop_down[]                 = "DropDown";
147cdf0e10cSrcweir const sal_Char sAPI_header[]					= "Header";
148cdf0e10cSrcweir const sal_Char sAPI_footer[]					= "Footer";
149cdf0e10cSrcweir const sal_Char sAPI_datetime[]					= "DateTime";
150cdf0e10cSrcweir 
151cdf0e10cSrcweir // property names
152cdf0e10cSrcweir const sal_Char sAPI_is_fixed[]			= "IsFixed";
153cdf0e10cSrcweir const sal_Char sAPI_content[]			= "Content";
154cdf0e10cSrcweir const sal_Char sAPI_value[]				= "Value";
155cdf0e10cSrcweir const sal_Char sAPI_author[]			= "Author";
1563b32dd21SOliver-Rainer Wittmann const sal_Char sAPI_initials[]          = "Initials";
157cdf0e10cSrcweir const sal_Char sAPI_full_name[]			= "FullName";
158cdf0e10cSrcweir const sal_Char sAPI_place_holder_type[] = "PlaceHolderType";
159cdf0e10cSrcweir const sal_Char sAPI_place_holder[]		= "PlaceHolder";
160cdf0e10cSrcweir const sal_Char sAPI_hint[]				= "Hint";
161cdf0e10cSrcweir const sal_Char sAPI_variable_name[]		= "VariableName";
162cdf0e10cSrcweir const sal_Char sAPI_name[]				= "Name";
163cdf0e10cSrcweir const sal_Char sAPI_sub_type[]			= "SubType";
164cdf0e10cSrcweir const sal_Char sAPI_numbering_separator[] = "NumberingSeparator";
165cdf0e10cSrcweir const sal_Char sAPI_chapter_numbering_level[] = "ChapterNumberingLevel";
166cdf0e10cSrcweir const sal_Char sAPI_variable_subtype[]	= "VariableSubtype";
167cdf0e10cSrcweir const sal_Char sAPI_formula[] 			= "Formula";
168cdf0e10cSrcweir const sal_Char sAPI_date_time_value[]	= "DateTimeValue";
169cdf0e10cSrcweir const sal_Char sAPI_number_format[]		= "NumberFormat";
170cdf0e10cSrcweir const sal_Char sAPI_user_text[]			= "UserText";
171cdf0e10cSrcweir const sal_Char sAPI_numbering_type[]	= "NumberingType";
172cdf0e10cSrcweir const sal_Char sAPI_offset[]			= "Offset";
173cdf0e10cSrcweir const sal_Char sAPI_data_base_name[]	= "DataBaseName";
174cdf0e10cSrcweir const sal_Char sAPI_data_base_u_r_l[]	= "DataBaseURL";
175cdf0e10cSrcweir const sal_Char sAPI_data_table_name[]	= "DataTableName";
176cdf0e10cSrcweir const sal_Char sAPI_condition[]			= "Condition";
177cdf0e10cSrcweir const sal_Char sAPI_set_number[]		= "SetNumber";
178cdf0e10cSrcweir const sal_Char sAPI_is_data_base_format[] = "DataBaseFormat";
179cdf0e10cSrcweir const sal_Char sAPI_true_content[]		= "TrueContent";
180cdf0e10cSrcweir const sal_Char sAPI_false_content[]		= "FalseContent";
181cdf0e10cSrcweir const sal_Char sAPI_revision[]			= "Revision";
182cdf0e10cSrcweir const sal_Char sAPI_file_format[]		= "FileFormat";
183cdf0e10cSrcweir const sal_Char sAPI_chapter_format[]	= "ChapterFormat";
184cdf0e10cSrcweir const sal_Char sAPI_level[]				= "Level";
185cdf0e10cSrcweir const sal_Char sAPI_is_date[]			= "IsDate";
186cdf0e10cSrcweir const sal_Char sAPI_adjust[]			= "Adjust";
187cdf0e10cSrcweir const sal_Char sAPI_on[]				= "On";
188cdf0e10cSrcweir const sal_Char sAPI_is_automatic_update[] = "IsAutomaticUpdate";
189cdf0e10cSrcweir const sal_Char sAPI_source_name[]		= "SourceName";
190cdf0e10cSrcweir const sal_Char sAPI_current_presentation[] = "CurrentPresentation";
191cdf0e10cSrcweir const sal_Char sAPI_reference_field_part[] = "ReferenceFieldPart";
192cdf0e10cSrcweir const sal_Char sAPI_reference_field_source[] = "ReferenceFieldSource";
193cdf0e10cSrcweir const sal_Char sAPI_dde_command_type[]	= "DDECommandType";
194cdf0e10cSrcweir const sal_Char sAPI_dde_command_file[]	= "DDECommandFile";
195cdf0e10cSrcweir const sal_Char sAPI_dde_command_element[] = "DDECommandElement";
196cdf0e10cSrcweir // sAPI_url: also used as service name
197cdf0e10cSrcweir const sal_Char sAPI_target_frame[]		= "TargetFrame";
198cdf0e10cSrcweir const sal_Char sAPI_representation[]	= "Representation";
199cdf0e10cSrcweir const sal_Char sAPI_date[]				= "Date";
200cdf0e10cSrcweir const sal_Char sAPI_url_content[]		= "URLContent";
201cdf0e10cSrcweir const sal_Char sAPI_script_type[]		= "ScriptType";
202cdf0e10cSrcweir const sal_Char sAPI_is_hidden[]			= "IsHidden";
203cdf0e10cSrcweir const sal_Char sAPI_is_condition_true[] = "IsConditionTrue";
204cdf0e10cSrcweir const sal_Char sAPI_data_command_type[] = "DataCommandType";
205cdf0e10cSrcweir const sal_Char sAPI_is_fixed_language[] = "IsFixedLanguage";
206cdf0e10cSrcweir const sal_Char sAPI_is_visible[]		= "IsVisible";
207cdf0e10cSrcweir const sal_Char sAPI_TextRange[]			= "TextRange";
208cdf0e10cSrcweir 
209cdf0e10cSrcweir const sal_Char sAPI_true[] = "sal_True";
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 
212cdf0e10cSrcweir TYPEINIT1( XMLTextFieldImportContext, SvXMLImportContext);
213cdf0e10cSrcweir 
XMLTextFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,const sal_Char * pService,sal_uInt16 nPrefix,const OUString & rElementName)214cdf0e10cSrcweir XMLTextFieldImportContext::XMLTextFieldImportContext(
215cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
216cdf0e10cSrcweir 	const sal_Char* pService,
217cdf0e10cSrcweir 	sal_uInt16 nPrefix,	const OUString& rElementName)
218cdf0e10cSrcweir :	SvXMLImportContext( rImport, nPrefix, rElementName )
219cdf0e10cSrcweir ,	sIsFixed(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed))
220cdf0e10cSrcweir ,	rTextImportHelper(rHlp)
221cdf0e10cSrcweir ,	sServicePrefix(RTL_CONSTASCII_USTRINGPARAM(sAPI_textfield_prefix))
222cdf0e10cSrcweir ,	bValid(sal_False)
223cdf0e10cSrcweir {
224cdf0e10cSrcweir 	DBG_ASSERT(NULL != pService, "Need service name!");
225cdf0e10cSrcweir 	sServiceName = OUString::createFromAscii(pService);
226cdf0e10cSrcweir }
227cdf0e10cSrcweir 
StartElement(const Reference<XAttributeList> & xAttrList)228cdf0e10cSrcweir void XMLTextFieldImportContext::StartElement(
229cdf0e10cSrcweir 	const Reference<XAttributeList> & xAttrList)
230cdf0e10cSrcweir {
231cdf0e10cSrcweir 	// process attributes
232cdf0e10cSrcweir 	sal_Int16 nLength = xAttrList->getLength();
233cdf0e10cSrcweir 	for(sal_Int16 i=0; i<nLength; i++) {
234cdf0e10cSrcweir 
235cdf0e10cSrcweir 		OUString sLocalName;
236cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
237cdf0e10cSrcweir 			GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName );
238cdf0e10cSrcweir 
239cdf0e10cSrcweir 		ProcessAttribute(rTextImportHelper.GetTextFieldAttrTokenMap().
240cdf0e10cSrcweir 						 	Get(nPrefix, sLocalName),
241cdf0e10cSrcweir 						 xAttrList->getValueByIndex(i) );
242cdf0e10cSrcweir 	}
243cdf0e10cSrcweir }
244cdf0e10cSrcweir 
~XMLTextFieldImportContext()245cdf0e10cSrcweir XMLTextFieldImportContext::~XMLTextFieldImportContext() {
246cdf0e10cSrcweir }
247cdf0e10cSrcweir 
GetContent()248cdf0e10cSrcweir OUString XMLTextFieldImportContext::GetContent()
249cdf0e10cSrcweir {
250cdf0e10cSrcweir 	if (sContent.getLength()==0)
251cdf0e10cSrcweir 	{
252cdf0e10cSrcweir 		sContent = sContentBuffer.makeStringAndClear();
253cdf0e10cSrcweir 	}
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 	return sContent;
256cdf0e10cSrcweir }
257cdf0e10cSrcweir 
EndElement()258cdf0e10cSrcweir void XMLTextFieldImportContext::EndElement()
259cdf0e10cSrcweir {
260cdf0e10cSrcweir 	DBG_ASSERT(GetServiceName().getLength()>0, "no service name for element!");
261cdf0e10cSrcweir 	if (bValid)
262cdf0e10cSrcweir 	{
263cdf0e10cSrcweir 
264cdf0e10cSrcweir 		// create field/Service
265cdf0e10cSrcweir 		Reference<XPropertySet> xPropSet;
266cdf0e10cSrcweir 		if (CreateField(xPropSet, sServicePrefix + GetServiceName()))
267cdf0e10cSrcweir 		{
268cdf0e10cSrcweir 			// set field properties
269cdf0e10cSrcweir 			PrepareField(xPropSet);
270cdf0e10cSrcweir 
271cdf0e10cSrcweir 			// attach field to document
272cdf0e10cSrcweir 			Reference<XTextContent> xTextContent(xPropSet, UNO_QUERY);
273cdf0e10cSrcweir 
274cdf0e10cSrcweir 			// workaround for #80606#
275cdf0e10cSrcweir 			try
276cdf0e10cSrcweir 			{
277cdf0e10cSrcweir 				rTextImportHelper.InsertTextContent(xTextContent);
278cdf0e10cSrcweir 			}
279cdf0e10cSrcweir 			catch (lang::IllegalArgumentException e)
280cdf0e10cSrcweir 			{
281cdf0e10cSrcweir 				// ignore
282cdf0e10cSrcweir 			}
283cdf0e10cSrcweir 			return;
284cdf0e10cSrcweir 		}
285cdf0e10cSrcweir 	}
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 	// in case of error: write element content
288cdf0e10cSrcweir 	rTextImportHelper.InsertString(GetContent());
289cdf0e10cSrcweir }
290cdf0e10cSrcweir 
Characters(const OUString & rContent)291cdf0e10cSrcweir void XMLTextFieldImportContext::Characters(const OUString& rContent)
292cdf0e10cSrcweir {
293cdf0e10cSrcweir 	sContentBuffer.append(rContent);
294cdf0e10cSrcweir }
295cdf0e10cSrcweir 
CreateField(Reference<XPropertySet> & xField,const OUString & rServiceName)296cdf0e10cSrcweir sal_Bool XMLTextFieldImportContext::CreateField(
297cdf0e10cSrcweir 	Reference<XPropertySet> & xField,
298cdf0e10cSrcweir 	const OUString& rServiceName)
299cdf0e10cSrcweir {
300cdf0e10cSrcweir 	// instantiate new XTextField:
301cdf0e10cSrcweir 	// ask import for model, model is factory, ask factory to create service
302cdf0e10cSrcweir 
303cdf0e10cSrcweir 	Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(),UNO_QUERY);
304cdf0e10cSrcweir 	if( xFactory.is() )
305cdf0e10cSrcweir 	{
306cdf0e10cSrcweir 		Reference<XInterface> xIfc = xFactory->createInstance(rServiceName);
307cdf0e10cSrcweir 		if( xIfc.is() )
308cdf0e10cSrcweir 		{
309cdf0e10cSrcweir 			Reference<XPropertySet> xTmp( xIfc, UNO_QUERY );
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 			xField = xTmp;
312cdf0e10cSrcweir 		} else {
313cdf0e10cSrcweir 			return sal_False;	// can't create instance
314cdf0e10cSrcweir 		}
315cdf0e10cSrcweir 	} else {
316cdf0e10cSrcweir 		return sal_False;	// can't get MultiServiceFactory
317cdf0e10cSrcweir 	}
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 	return sal_True;
320cdf0e10cSrcweir }
321cdf0e10cSrcweir 
322cdf0e10cSrcweir /// create the appropriate field context from
323cdf0e10cSrcweir XMLTextFieldImportContext*
CreateTextFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrefix,const OUString & rName,sal_uInt16 nToken)324cdf0e10cSrcweir XMLTextFieldImportContext::CreateTextFieldImportContext(
325cdf0e10cSrcweir 	SvXMLImport& rImport,
326cdf0e10cSrcweir 	XMLTextImportHelper& rHlp,
327cdf0e10cSrcweir 	sal_uInt16 nPrefix,
328cdf0e10cSrcweir 	const OUString& rName,
329cdf0e10cSrcweir 	sal_uInt16 nToken)
330cdf0e10cSrcweir {
331cdf0e10cSrcweir 	XMLTextFieldImportContext* pContext = NULL;
332cdf0e10cSrcweir 
333cdf0e10cSrcweir 	switch (nToken)
334cdf0e10cSrcweir 	{
335cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_FIRSTNAME:
336cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_LASTNAME:
337cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_INITIALS:
338cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_TITLE:
339cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_POSITION:
340cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_EMAIL:
341cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_PHONE_PRIVATE:
342cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_FAX:
343cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_COMPANY:
344cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_PHONE_WORK:
345cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_STREET:
346cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_CITY:
347cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_POSTAL_CODE:
348cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_COUNTRY:
349cdf0e10cSrcweir 		case XML_TOK_TEXT_SENDER_STATE_OR_PROVINCE:
350cdf0e10cSrcweir 			pContext =
351cdf0e10cSrcweir 				new XMLSenderFieldImportContext( rImport, rHlp,
352cdf0e10cSrcweir 												 nPrefix, rName, nToken );
353cdf0e10cSrcweir 			break;
354cdf0e10cSrcweir 
355cdf0e10cSrcweir 		case XML_TOK_TEXT_AUTHOR_NAME:
356cdf0e10cSrcweir 		case XML_TOK_TEXT_AUTHOR_INITIALS:
357cdf0e10cSrcweir 			pContext =
358cdf0e10cSrcweir 				new XMLAuthorFieldImportContext( rImport, rHlp,
359cdf0e10cSrcweir 												 nPrefix, rName, nToken );
360cdf0e10cSrcweir 			break;
361cdf0e10cSrcweir 
362cdf0e10cSrcweir 		case XML_TOK_TEXT_PLACEHOLDER:
363cdf0e10cSrcweir 			pContext =
364cdf0e10cSrcweir 				new XMLPlaceholderFieldImportContext( rImport, rHlp,
365cdf0e10cSrcweir 													  nPrefix, rName);
366cdf0e10cSrcweir 			break;
367cdf0e10cSrcweir 		case XML_TOK_TEXT_SEQUENCE:
368cdf0e10cSrcweir 			pContext =
369cdf0e10cSrcweir 				new XMLSequenceFieldImportContext( rImport, rHlp,
370cdf0e10cSrcweir 												   nPrefix, rName );
371cdf0e10cSrcweir 			break;
372cdf0e10cSrcweir 		case XML_TOK_TEXT_TEXT_INPUT:
373cdf0e10cSrcweir 			pContext =
374cdf0e10cSrcweir 				new XMLTextInputFieldImportContext( rImport, rHlp,
375cdf0e10cSrcweir 													nPrefix, rName );
376cdf0e10cSrcweir 			break;
377cdf0e10cSrcweir 		case XML_TOK_TEXT_EXPRESSION:
378cdf0e10cSrcweir 			pContext =
379cdf0e10cSrcweir 				new XMLExpressionFieldImportContext( rImport, rHlp,
380cdf0e10cSrcweir 													 nPrefix, rName );
381cdf0e10cSrcweir 			break;
382cdf0e10cSrcweir 		case XML_TOK_TEXT_VARIABLE_SET:
383cdf0e10cSrcweir 			pContext =
384cdf0e10cSrcweir 				new XMLVariableSetFieldImportContext( rImport, rHlp,
385cdf0e10cSrcweir 													  nPrefix, rName );
386cdf0e10cSrcweir 			break;
387cdf0e10cSrcweir 		case XML_TOK_TEXT_VARIABLE_INPUT:
388cdf0e10cSrcweir 			pContext =
389cdf0e10cSrcweir 				new XMLVariableInputFieldImportContext( rImport, rHlp,
390cdf0e10cSrcweir 														nPrefix, rName );
391cdf0e10cSrcweir 			break;
392cdf0e10cSrcweir 		case XML_TOK_TEXT_VARIABLE_GET:
393cdf0e10cSrcweir 			pContext =
394cdf0e10cSrcweir 				new XMLVariableGetFieldImportContext( rImport, rHlp,
395cdf0e10cSrcweir 													  nPrefix, rName );
396cdf0e10cSrcweir 			break;
397cdf0e10cSrcweir 		case XML_TOK_TEXT_USER_FIELD_GET:
398cdf0e10cSrcweir 			pContext = new XMLUserFieldImportContext( rImport, rHlp,
399cdf0e10cSrcweir 													  nPrefix, rName );
400cdf0e10cSrcweir 			break;
401cdf0e10cSrcweir 		case XML_TOK_TEXT_USER_FIELD_INPUT:
402cdf0e10cSrcweir 			pContext = new XMLUserFieldInputImportContext( rImport, rHlp,
403cdf0e10cSrcweir 														   nPrefix, rName );
404cdf0e10cSrcweir 			break;
405cdf0e10cSrcweir 		case XML_TOK_TEXT_TIME:
406cdf0e10cSrcweir 			pContext = new XMLTimeFieldImportContext( rImport, rHlp,
407cdf0e10cSrcweir 													  nPrefix, rName );
408cdf0e10cSrcweir 			break;
409cdf0e10cSrcweir 		case XML_TOK_TEXT_PAGE_CONTINUATION_STRING:
410cdf0e10cSrcweir 		case XML_TOK_TEXT_PAGE_CONTINUATION:
411cdf0e10cSrcweir 			pContext = new XMLPageContinuationImportContext( rImport, rHlp,
412cdf0e10cSrcweir 															 nPrefix, rName );
413cdf0e10cSrcweir 			break;
414cdf0e10cSrcweir 
415cdf0e10cSrcweir 		case XML_TOK_TEXT_PAGE_NUMBER:
416cdf0e10cSrcweir 			pContext = new XMLPageNumberImportContext( rImport, rHlp,
417cdf0e10cSrcweir 													   nPrefix, rName );
418cdf0e10cSrcweir 			break;
419cdf0e10cSrcweir 
420cdf0e10cSrcweir 		case XML_TOK_TEXT_DATE:
421cdf0e10cSrcweir 			pContext = new XMLDateFieldImportContext( rImport, rHlp,
422cdf0e10cSrcweir 													  nPrefix, rName );
423cdf0e10cSrcweir 			break;
424cdf0e10cSrcweir 
425cdf0e10cSrcweir 		case XML_TOK_TEXT_DATABASE_NAME:
426cdf0e10cSrcweir 			pContext = new XMLDatabaseNameImportContext( rImport, rHlp,
427cdf0e10cSrcweir 														 nPrefix, rName );
428cdf0e10cSrcweir 			break;
429cdf0e10cSrcweir 		case XML_TOK_TEXT_DATABASE_NEXT:
430cdf0e10cSrcweir 			pContext = new XMLDatabaseNextImportContext( rImport, rHlp,
431cdf0e10cSrcweir 														 nPrefix, rName );
432cdf0e10cSrcweir 			break;
433cdf0e10cSrcweir 		case XML_TOK_TEXT_DATABASE_SELECT:
434cdf0e10cSrcweir 			pContext = new XMLDatabaseSelectImportContext( rImport, rHlp,
435cdf0e10cSrcweir 														   nPrefix, rName );
436cdf0e10cSrcweir 			break;
437cdf0e10cSrcweir 		case XML_TOK_TEXT_DATABASE_ROW_NUMBER:
438cdf0e10cSrcweir 			pContext = new XMLDatabaseNumberImportContext( rImport, rHlp,
439cdf0e10cSrcweir 														   nPrefix, rName );
440cdf0e10cSrcweir 			break;
441cdf0e10cSrcweir 		case XML_TOK_TEXT_DATABASE_DISPLAY:
442cdf0e10cSrcweir 			pContext = new XMLDatabaseDisplayImportContext( rImport, rHlp,
443cdf0e10cSrcweir 															nPrefix, rName );
444cdf0e10cSrcweir 			break;
445cdf0e10cSrcweir 		case XML_TOK_TEXT_CONDITIONAL_TEXT:
446cdf0e10cSrcweir 			pContext = new XMLConditionalTextImportContext( rImport, rHlp,
447cdf0e10cSrcweir 															nPrefix, rName );
448cdf0e10cSrcweir 			break;
449cdf0e10cSrcweir 		case XML_TOK_TEXT_HIDDEN_TEXT:
450cdf0e10cSrcweir 			pContext = new XMLHiddenTextImportContext( rImport, rHlp,
451cdf0e10cSrcweir 													   nPrefix, rName );
452cdf0e10cSrcweir 			break;
453cdf0e10cSrcweir 		case XML_TOK_TEXT_HIDDEN_PARAGRAPH:
454cdf0e10cSrcweir 			pContext = new XMLHiddenParagraphImportContext( rImport, rHlp,
455cdf0e10cSrcweir 															nPrefix, rName );
456cdf0e10cSrcweir 			break;
457cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_DESCRIPTION:
458cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_TITLE:
459cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SUBJECT:
460cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_KEYWORDS:
461cdf0e10cSrcweir 			pContext = new XMLSimpleDocInfoImportContext( rImport, rHlp,
462cdf0e10cSrcweir 														  nPrefix, rName,
463cdf0e10cSrcweir 														  nToken, sal_True,
464cdf0e10cSrcweir 														  sal_False );
465cdf0e10cSrcweir 			break;
466cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_CREATION_AUTHOR:
467cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_PRINT_AUTHOR:
468cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SAVE_AUTHOR:
469cdf0e10cSrcweir 			pContext = new XMLSimpleDocInfoImportContext( rImport, rHlp,
470cdf0e10cSrcweir 														  nPrefix, rName,
471cdf0e10cSrcweir 														  nToken, sal_False,
472cdf0e10cSrcweir 														  sal_True );
473cdf0e10cSrcweir 			break;
474cdf0e10cSrcweir 
475cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_CREATION_DATE:
476cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_CREATION_TIME:
477cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_PRINT_DATE:
478cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_PRINT_TIME:
479cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SAVE_DATE:
480cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SAVE_TIME:
481cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_EDIT_DURATION:
482cdf0e10cSrcweir 			pContext = new XMLDateTimeDocInfoImportContext( rImport, rHlp,
483cdf0e10cSrcweir 															nPrefix, rName,
484cdf0e10cSrcweir 															nToken );
485cdf0e10cSrcweir 			break;
486cdf0e10cSrcweir 
487cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_REVISION:
488cdf0e10cSrcweir 			pContext = new XMLRevisionDocInfoImportContext( rImport, rHlp,
489cdf0e10cSrcweir 															nPrefix, rName,
490cdf0e10cSrcweir 															nToken );
491cdf0e10cSrcweir 			break;
492cdf0e10cSrcweir 
493cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_USER_DEFINED:
494cdf0e10cSrcweir 			pContext = new XMLUserDocInfoImportContext( rImport, rHlp,
495cdf0e10cSrcweir 														nPrefix, rName,
496cdf0e10cSrcweir 														nToken );
497cdf0e10cSrcweir 			break;
498cdf0e10cSrcweir 
499cdf0e10cSrcweir 		case XML_TOK_TEXT_FILENAME:
500cdf0e10cSrcweir 			pContext = new XMLFileNameImportContext( rImport, rHlp,
501cdf0e10cSrcweir 													 nPrefix, rName );
502cdf0e10cSrcweir 			break;
503cdf0e10cSrcweir 
504cdf0e10cSrcweir 		case XML_TOK_TEXT_CHAPTER:
505cdf0e10cSrcweir 			pContext = new XMLChapterImportContext( rImport, rHlp,
506cdf0e10cSrcweir 													nPrefix, rName );
507cdf0e10cSrcweir 			break;
508cdf0e10cSrcweir 
509cdf0e10cSrcweir 		case XML_TOK_TEXT_TEMPLATENAME:
510cdf0e10cSrcweir 			pContext = new XMLTemplateNameImportContext( rImport, rHlp,
511cdf0e10cSrcweir 														 nPrefix, rName );
512cdf0e10cSrcweir 			break;
513cdf0e10cSrcweir 
514cdf0e10cSrcweir 		case XML_TOK_TEXT_WORD_COUNT:
515cdf0e10cSrcweir 		case XML_TOK_TEXT_PARAGRAPH_COUNT:
516cdf0e10cSrcweir 		case XML_TOK_TEXT_TABLE_COUNT:
517cdf0e10cSrcweir 		case XML_TOK_TEXT_CHARACTER_COUNT:
518cdf0e10cSrcweir 		case XML_TOK_TEXT_IMAGE_COUNT:
519cdf0e10cSrcweir 		case XML_TOK_TEXT_OBJECT_COUNT:
520cdf0e10cSrcweir 		case XML_TOK_TEXT_PAGE_COUNT:
521cdf0e10cSrcweir 			pContext = new XMLCountFieldImportContext( rImport, rHlp,
522cdf0e10cSrcweir 													   nPrefix, rName, nToken);
523cdf0e10cSrcweir 			break;
524cdf0e10cSrcweir 
525cdf0e10cSrcweir 		case XML_TOK_TEXT_GET_PAGE_VAR:
526cdf0e10cSrcweir 			pContext = new XMLPageVarGetFieldImportContext( rImport, rHlp,
527cdf0e10cSrcweir 															nPrefix, rName );
528cdf0e10cSrcweir 			break;
529cdf0e10cSrcweir 
530cdf0e10cSrcweir 		case XML_TOK_TEXT_SET_PAGE_VAR:
531cdf0e10cSrcweir 			pContext = new XMLPageVarSetFieldImportContext( rImport, rHlp,
532cdf0e10cSrcweir 															nPrefix, rName );
533cdf0e10cSrcweir 			break;
534cdf0e10cSrcweir 
535cdf0e10cSrcweir 		case XML_TOK_TEXT_MACRO:
536cdf0e10cSrcweir 			pContext = new XMLMacroFieldImportContext( rImport, rHlp,
537cdf0e10cSrcweir 													   nPrefix, rName );
538cdf0e10cSrcweir 			break;
539cdf0e10cSrcweir 
540cdf0e10cSrcweir 		case XML_TOK_TEXT_DDE:
541cdf0e10cSrcweir 			pContext = new XMLDdeFieldImportContext( rImport, rHlp,
542cdf0e10cSrcweir 													 nPrefix, rName );
543cdf0e10cSrcweir 			break;
544cdf0e10cSrcweir 
545cdf0e10cSrcweir 		case XML_TOK_TEXT_REFERENCE_REF:
546cdf0e10cSrcweir 		case XML_TOK_TEXT_BOOKMARK_REF:
547cdf0e10cSrcweir 		case XML_TOK_TEXT_NOTE_REF:
548cdf0e10cSrcweir 		case XML_TOK_TEXT_SEQUENCE_REF:
549cdf0e10cSrcweir 			pContext = new XMLReferenceFieldImportContext( rImport, rHlp,
550cdf0e10cSrcweir 														   nToken,
551cdf0e10cSrcweir 														   nPrefix, rName );
552cdf0e10cSrcweir 			break;
553cdf0e10cSrcweir 
554cdf0e10cSrcweir 		case XML_TOK_TEXT_SHEET_NAME:
555cdf0e10cSrcweir 			pContext = new XMLSheetNameImportContext( rImport, rHlp,
556cdf0e10cSrcweir 													  nPrefix, rName );
557cdf0e10cSrcweir 			break;
558cdf0e10cSrcweir 
559cdf0e10cSrcweir 		case XML_TOK_TEXT_BIBLIOGRAPHY_MARK:
560cdf0e10cSrcweir 			pContext = new XMLBibliographyFieldImportContext( rImport, rHlp,
561cdf0e10cSrcweir 															  nPrefix, rName );
562cdf0e10cSrcweir 			break;
563cdf0e10cSrcweir 
564cdf0e10cSrcweir         case XML_TOK_TEXT_ANNOTATION:
5653b32dd21SOliver-Rainer Wittmann         case XML_TOK_TEXT_ANNOTATION_END:
5663b32dd21SOliver-Rainer Wittmann             pContext =
5673b32dd21SOliver-Rainer Wittmann                 new XMLAnnotationImportContext( rImport, rHlp, nToken, nPrefix, rName);
568cdf0e10cSrcweir             break;
569cdf0e10cSrcweir 
570cdf0e10cSrcweir 		case XML_TOK_TEXT_SCRIPT:
571cdf0e10cSrcweir 			pContext = new XMLScriptImportContext( rImport, rHlp,
572cdf0e10cSrcweir 												   nPrefix, rName);
573cdf0e10cSrcweir 			break;
574cdf0e10cSrcweir 
575cdf0e10cSrcweir 		case XML_TOK_TEXT_MEASURE:
576cdf0e10cSrcweir 			pContext = new XMLMeasureFieldImportContext( rImport, rHlp,
577cdf0e10cSrcweir 														 nPrefix, rName );
578cdf0e10cSrcweir 			break;
579cdf0e10cSrcweir 
580cdf0e10cSrcweir         case XML_TOK_TEXT_TABLE_FORMULA:
581cdf0e10cSrcweir             pContext = new XMLTableFormulaImportContext( rImport, rHlp,
582cdf0e10cSrcweir                                                          nPrefix, rName );
583cdf0e10cSrcweir             break;
584cdf0e10cSrcweir         case XML_TOK_TEXT_DROPDOWN:
585cdf0e10cSrcweir             pContext = new XMLDropDownFieldImportContext( rImport, rHlp,
586cdf0e10cSrcweir                                                           nPrefix, rName );
587cdf0e10cSrcweir             break;
588cdf0e10cSrcweir 		case XML_TOK_DRAW_HEADER:
589cdf0e10cSrcweir             pContext = new XMLHeaderFieldImportContext( rImport, rHlp,
590cdf0e10cSrcweir                                                           nPrefix, rName );
591cdf0e10cSrcweir 			break;
592cdf0e10cSrcweir 		case XML_TOK_DRAW_FOOTER:
593cdf0e10cSrcweir             pContext = new XMLFooterFieldImportContext( rImport, rHlp,
594cdf0e10cSrcweir                                                           nPrefix, rName );
595cdf0e10cSrcweir 			break;
596cdf0e10cSrcweir 		case XML_TOK_DRAW_DATE_TIME:
597cdf0e10cSrcweir             pContext = new XMLDateTimeFieldImportContext( rImport, rHlp,
598cdf0e10cSrcweir                                                           nPrefix, rName );
599cdf0e10cSrcweir 			break;
600cdf0e10cSrcweir 
601cdf0e10cSrcweir 		default:
602cdf0e10cSrcweir 			// ignore! May not even be a textfield.
603cdf0e10cSrcweir 			// (Reminder: This method is called inside default:-branch)
604cdf0e10cSrcweir 			pContext = NULL;
605cdf0e10cSrcweir 			break;
606cdf0e10cSrcweir 	}
607cdf0e10cSrcweir 
608cdf0e10cSrcweir 	return pContext;
609cdf0e10cSrcweir }
610cdf0e10cSrcweir 
611cdf0e10cSrcweir 
ForceUpdate(const Reference<XPropertySet> & rPropertySet)612cdf0e10cSrcweir void XMLTextFieldImportContext::ForceUpdate(
613cdf0e10cSrcweir 	const Reference<XPropertySet> & rPropertySet)
614cdf0e10cSrcweir {
615cdf0e10cSrcweir 	// force update
616cdf0e10cSrcweir 	Reference<XUpdatable> xUpdate(rPropertySet, UNO_QUERY);
617cdf0e10cSrcweir 	if (xUpdate.is())
618cdf0e10cSrcweir 	{
619cdf0e10cSrcweir 		xUpdate->update();
620cdf0e10cSrcweir 	}
621cdf0e10cSrcweir 	else
622cdf0e10cSrcweir 	{
623cdf0e10cSrcweir 		DBG_ERROR("Expected XUpdatable support!");
624cdf0e10cSrcweir 	}
625cdf0e10cSrcweir }
626cdf0e10cSrcweir 
627cdf0e10cSrcweir 
628cdf0e10cSrcweir 
629cdf0e10cSrcweir //
630cdf0e10cSrcweir // XMLSenderFieldImportContext
631cdf0e10cSrcweir //
632cdf0e10cSrcweir 
633cdf0e10cSrcweir TYPEINIT1( XMLSenderFieldImportContext, XMLTextFieldImportContext);
634cdf0e10cSrcweir 
XMLSenderFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName,sal_uInt16 nToken)635cdf0e10cSrcweir XMLSenderFieldImportContext::XMLSenderFieldImportContext(
636cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
637cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName,
638cdf0e10cSrcweir 	sal_uInt16 nToken)
639cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, sAPI_extended_user,nPrfx, sLocalName)
640cdf0e10cSrcweir ,	sPropertyFixed(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed))
641cdf0e10cSrcweir ,	sPropertyFieldSubType(RTL_CONSTASCII_USTRINGPARAM(sAPI_user_data_type))
642cdf0e10cSrcweir ,	sPropertyContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_content))
643cdf0e10cSrcweir ,	bFixed(sal_True)
644cdf0e10cSrcweir ,	nElementToken(nToken)
645cdf0e10cSrcweir {
646cdf0e10cSrcweir }
647cdf0e10cSrcweir 
StartElement(const Reference<XAttributeList> & xAttrList)648cdf0e10cSrcweir void XMLSenderFieldImportContext::StartElement(
649cdf0e10cSrcweir 	const Reference<XAttributeList> & xAttrList)
650cdf0e10cSrcweir {
651cdf0e10cSrcweir 	bValid = sal_True;
652cdf0e10cSrcweir 	switch (nElementToken) {
653cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_FIRSTNAME:
654cdf0e10cSrcweir 		nSubType = UserDataPart::FIRSTNAME;
655cdf0e10cSrcweir 		break;
656cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_LASTNAME:
657cdf0e10cSrcweir 		nSubType = UserDataPart::NAME;
658cdf0e10cSrcweir 		break;
659cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_INITIALS:
660cdf0e10cSrcweir 		nSubType = UserDataPart::SHORTCUT;
661cdf0e10cSrcweir 		break;
662cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_TITLE:
663cdf0e10cSrcweir 		nSubType = UserDataPart::TITLE;
664cdf0e10cSrcweir 		break;
665cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_POSITION:
666cdf0e10cSrcweir 		nSubType = UserDataPart::POSITION;
667cdf0e10cSrcweir 		break;
668cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_EMAIL:
669cdf0e10cSrcweir 		nSubType = UserDataPart::EMAIL;
670cdf0e10cSrcweir 		break;
671cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_PHONE_PRIVATE:
672cdf0e10cSrcweir 		nSubType = UserDataPart::PHONE_PRIVATE;
673cdf0e10cSrcweir 		break;
674cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_FAX:
675cdf0e10cSrcweir 		nSubType = UserDataPart::FAX;
676cdf0e10cSrcweir 		break;
677cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_COMPANY:
678cdf0e10cSrcweir 		nSubType = UserDataPart::COMPANY;
679cdf0e10cSrcweir 		break;
680cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_PHONE_WORK:
681cdf0e10cSrcweir 		nSubType = UserDataPart::PHONE_COMPANY;
682cdf0e10cSrcweir 		break;
683cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_STREET:
684cdf0e10cSrcweir 		nSubType = UserDataPart::STREET;
685cdf0e10cSrcweir 		break;
686cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_CITY:
687cdf0e10cSrcweir 		nSubType = UserDataPart::CITY;
688cdf0e10cSrcweir 		break;
689cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_POSTAL_CODE:
690cdf0e10cSrcweir 		nSubType = UserDataPart::ZIP;
691cdf0e10cSrcweir 		break;
692cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_COUNTRY:
693cdf0e10cSrcweir 		nSubType = UserDataPart::COUNTRY;
694cdf0e10cSrcweir 		break;
695cdf0e10cSrcweir 	case XML_TOK_TEXT_SENDER_STATE_OR_PROVINCE:
696cdf0e10cSrcweir 		nSubType = UserDataPart::STATE;
697cdf0e10cSrcweir 		break;
698cdf0e10cSrcweir 	default:
699cdf0e10cSrcweir 		bValid = sal_False;
700cdf0e10cSrcweir 		break;
701cdf0e10cSrcweir 	}
702cdf0e10cSrcweir 
703cdf0e10cSrcweir 	// process Attributes
704cdf0e10cSrcweir 	XMLTextFieldImportContext::StartElement(xAttrList);
705cdf0e10cSrcweir }
706cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)707cdf0e10cSrcweir void XMLSenderFieldImportContext::ProcessAttribute(
708cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
709cdf0e10cSrcweir 	const OUString& sAttrValue)
710cdf0e10cSrcweir {
711cdf0e10cSrcweir 	if (XML_TOK_TEXTFIELD_FIXED == nAttrToken) {
712cdf0e10cSrcweir 
713cdf0e10cSrcweir 		// set bVal
714cdf0e10cSrcweir 		sal_Bool bVal;
715cdf0e10cSrcweir 		sal_Bool bRet = GetImport().GetMM100UnitConverter().
716cdf0e10cSrcweir 			convertBool(bVal, sAttrValue);
717cdf0e10cSrcweir 
718cdf0e10cSrcweir 		// set bFixed if successfull
719cdf0e10cSrcweir 		if (bRet) {
720cdf0e10cSrcweir 			bFixed = bVal;
721cdf0e10cSrcweir 		}
722cdf0e10cSrcweir 	}
723cdf0e10cSrcweir }
724cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & rPropSet)725cdf0e10cSrcweir void XMLSenderFieldImportContext::PrepareField(
726cdf0e10cSrcweir 	const Reference<XPropertySet> & rPropSet)
727cdf0e10cSrcweir {
728cdf0e10cSrcweir 	// set members
729cdf0e10cSrcweir 	Any aAny;
730cdf0e10cSrcweir 	aAny <<= nSubType;
731cdf0e10cSrcweir 	rPropSet->setPropertyValue(sPropertyFieldSubType, aAny);
732cdf0e10cSrcweir 
733cdf0e10cSrcweir 	// set fixed
734cdf0e10cSrcweir 	aAny.setValue( &bFixed, ::getBooleanCppuType() );
735cdf0e10cSrcweir 	rPropSet->setPropertyValue(sPropertyFixed, aAny);
736cdf0e10cSrcweir 
737cdf0e10cSrcweir 	// set content if fixed
738cdf0e10cSrcweir 	if (bFixed)
739cdf0e10cSrcweir 	{
740cdf0e10cSrcweir 		// in organizer or styles-only mode: force update
741cdf0e10cSrcweir 		if (GetImport().GetTextImport()->IsOrganizerMode() ||
742cdf0e10cSrcweir 			GetImport().GetTextImport()->IsStylesOnlyMode()   )
743cdf0e10cSrcweir 		{
744cdf0e10cSrcweir 			ForceUpdate(rPropSet);
745cdf0e10cSrcweir 		}
746cdf0e10cSrcweir 		else
747cdf0e10cSrcweir 		{
748cdf0e10cSrcweir 			aAny <<= GetContent();
749cdf0e10cSrcweir 			rPropSet->setPropertyValue(sPropertyContent, aAny);
750cdf0e10cSrcweir 		}
751cdf0e10cSrcweir 	}
752cdf0e10cSrcweir }
753cdf0e10cSrcweir 
754cdf0e10cSrcweir 
755cdf0e10cSrcweir 
756cdf0e10cSrcweir //
757cdf0e10cSrcweir // XMLAuthorFieldImportContext
758cdf0e10cSrcweir //
759cdf0e10cSrcweir 
760cdf0e10cSrcweir TYPEINIT1( XMLAuthorFieldImportContext, XMLSenderFieldImportContext);
761cdf0e10cSrcweir 
XMLAuthorFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName,sal_uInt16 nToken)762cdf0e10cSrcweir XMLAuthorFieldImportContext::XMLAuthorFieldImportContext(
763cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
764cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName,
765cdf0e10cSrcweir 	sal_uInt16 nToken)
766cdf0e10cSrcweir :	XMLSenderFieldImportContext(rImport, rHlp, nPrfx, sLocalName, nToken)
767cdf0e10cSrcweir ,	bAuthorFullName(sal_True)
768cdf0e10cSrcweir ,	sServiceAuthor(RTL_CONSTASCII_USTRINGPARAM(sAPI_author))
769cdf0e10cSrcweir ,	sPropertyAuthorFullName(RTL_CONSTASCII_USTRINGPARAM(sAPI_full_name))
770cdf0e10cSrcweir ,	sPropertyFixed(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed))
771cdf0e10cSrcweir ,	sPropertyContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_content))
772cdf0e10cSrcweir {
773cdf0e10cSrcweir 	// overwrite service name from XMLSenderFieldImportContext
774cdf0e10cSrcweir 	SetServiceName(sServiceAuthor);
775cdf0e10cSrcweir }
776cdf0e10cSrcweir 
StartElement(const Reference<XAttributeList> & xAttrList)777cdf0e10cSrcweir void XMLAuthorFieldImportContext::StartElement(
778cdf0e10cSrcweir 	const Reference<XAttributeList> & xAttrList) {
779cdf0e10cSrcweir 
780cdf0e10cSrcweir 	bAuthorFullName = (XML_TOK_TEXT_AUTHOR_INITIALS != nElementToken);
781cdf0e10cSrcweir 	bValid = sal_True;
782cdf0e10cSrcweir 
783cdf0e10cSrcweir 	// process Attributes
784cdf0e10cSrcweir 	XMLTextFieldImportContext::StartElement(xAttrList);
785cdf0e10cSrcweir }
786cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & rPropSet)787cdf0e10cSrcweir void XMLAuthorFieldImportContext::PrepareField(
788cdf0e10cSrcweir 	const Reference<XPropertySet> & rPropSet)
789cdf0e10cSrcweir {
790cdf0e10cSrcweir 	// set members
791cdf0e10cSrcweir 	Any aAny;
792cdf0e10cSrcweir 	aAny.setValue( &bAuthorFullName, ::getBooleanCppuType() );
793cdf0e10cSrcweir 	rPropSet->setPropertyValue(sPropertyAuthorFullName, aAny);
794cdf0e10cSrcweir 
795cdf0e10cSrcweir 	aAny.setValue( &bFixed, ::getBooleanCppuType() );
796cdf0e10cSrcweir 	rPropSet->setPropertyValue(sPropertyFixed, aAny);
797cdf0e10cSrcweir 
798cdf0e10cSrcweir 	// set content if fixed
799cdf0e10cSrcweir 	if (bFixed)
800cdf0e10cSrcweir 	{
801cdf0e10cSrcweir 		// organizer or styles-only mode: force update
802cdf0e10cSrcweir 		if (GetImport().GetTextImport()->IsOrganizerMode() ||
803cdf0e10cSrcweir 			GetImport().GetTextImport()->IsStylesOnlyMode()   )
804cdf0e10cSrcweir 		{
805cdf0e10cSrcweir 			ForceUpdate(rPropSet);
806cdf0e10cSrcweir 		}
807cdf0e10cSrcweir 		else
808cdf0e10cSrcweir 		{
809cdf0e10cSrcweir 			aAny <<= GetContent();
810cdf0e10cSrcweir 			rPropSet->setPropertyValue(sPropertyContent, aAny);
811cdf0e10cSrcweir 		}
812cdf0e10cSrcweir 	}
813cdf0e10cSrcweir }
814cdf0e10cSrcweir 
815cdf0e10cSrcweir 
816cdf0e10cSrcweir //
817cdf0e10cSrcweir // page continuation string
818cdf0e10cSrcweir //
819cdf0e10cSrcweir 
820cdf0e10cSrcweir TYPEINIT1( XMLPageContinuationImportContext, XMLTextFieldImportContext );
821cdf0e10cSrcweir 
822cdf0e10cSrcweir static SvXMLEnumMapEntry __READONLY_DATA lcl_aSelectPageAttrMap[] =
823cdf0e10cSrcweir {
824cdf0e10cSrcweir 	{ XML_PREVIOUS, 	PageNumberType_PREV },
825cdf0e10cSrcweir 	{ XML_CURRENT, 	    PageNumberType_CURRENT },
826cdf0e10cSrcweir 	{ XML_NEXT, 		PageNumberType_NEXT },
827cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 },
828cdf0e10cSrcweir };
829cdf0e10cSrcweir 
XMLPageContinuationImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)830cdf0e10cSrcweir XMLPageContinuationImportContext::XMLPageContinuationImportContext(
831cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
832cdf0e10cSrcweir 	const OUString& sLocalName)
833cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, sAPI_page_number, nPrfx, sLocalName)
834cdf0e10cSrcweir ,	sPropertySubType(RTL_CONSTASCII_USTRINGPARAM(sAPI_sub_type))
835cdf0e10cSrcweir ,	sPropertyUserText(RTL_CONSTASCII_USTRINGPARAM(sAPI_user_text))
836cdf0e10cSrcweir ,	sPropertyNumberingType(RTL_CONSTASCII_USTRINGPARAM(sAPI_numbering_type))
837cdf0e10cSrcweir ,	eSelectPage(PageNumberType_CURRENT)
838cdf0e10cSrcweir ,	sStringOK(sal_False)
839cdf0e10cSrcweir {
840cdf0e10cSrcweir 	bValid = sal_True;
841cdf0e10cSrcweir }
842cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)843cdf0e10cSrcweir void XMLPageContinuationImportContext::ProcessAttribute(
844cdf0e10cSrcweir 	sal_uInt16 nAttrToken, const OUString& sAttrValue )
845cdf0e10cSrcweir {
846cdf0e10cSrcweir 	switch(nAttrToken)
847cdf0e10cSrcweir 	{
848cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_SELECT_PAGE:
849cdf0e10cSrcweir 		{
850cdf0e10cSrcweir 			sal_uInt16 nTmp;
851cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
852cdf0e10cSrcweir 												lcl_aSelectPageAttrMap)
853cdf0e10cSrcweir 				&& (PageNumberType_CURRENT != nTmp) )
854cdf0e10cSrcweir 			{
855cdf0e10cSrcweir 				eSelectPage = (PageNumberType)nTmp;
856cdf0e10cSrcweir 			}
857cdf0e10cSrcweir 			break;
858cdf0e10cSrcweir 		}
859cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_STRING_VALUE:
860cdf0e10cSrcweir 			sString = sAttrValue;
861cdf0e10cSrcweir 			sStringOK = sal_True;
862cdf0e10cSrcweir 			break;
863cdf0e10cSrcweir 	}
864cdf0e10cSrcweir }
865cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)866cdf0e10cSrcweir void XMLPageContinuationImportContext::PrepareField(
867cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
868cdf0e10cSrcweir {
869cdf0e10cSrcweir 	Any aAny;
870cdf0e10cSrcweir 
871cdf0e10cSrcweir 	aAny <<= eSelectPage;
872cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertySubType, aAny);
873cdf0e10cSrcweir 
874cdf0e10cSrcweir 	aAny <<= (sStringOK ? sString : GetContent());
875cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyUserText, aAny);
876cdf0e10cSrcweir 
877cdf0e10cSrcweir 	aAny <<= style::NumberingType::CHAR_SPECIAL;
878cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
879cdf0e10cSrcweir }
880cdf0e10cSrcweir 
881cdf0e10cSrcweir 
882cdf0e10cSrcweir 
883cdf0e10cSrcweir //
884cdf0e10cSrcweir // page number field
885cdf0e10cSrcweir //
886cdf0e10cSrcweir 
887cdf0e10cSrcweir TYPEINIT1( XMLPageNumberImportContext, XMLTextFieldImportContext );
888cdf0e10cSrcweir 
XMLPageNumberImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)889cdf0e10cSrcweir XMLPageNumberImportContext::XMLPageNumberImportContext(
890cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
891cdf0e10cSrcweir 	const OUString& sLocalName)
892cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, sAPI_page_number, nPrfx, sLocalName)
893cdf0e10cSrcweir ,	sPropertySubType(RTL_CONSTASCII_USTRINGPARAM(sAPI_sub_type))
894cdf0e10cSrcweir ,	sPropertyNumberingType(RTL_CONSTASCII_USTRINGPARAM(sAPI_numbering_type))
895cdf0e10cSrcweir ,	sPropertyOffset(RTL_CONSTASCII_USTRINGPARAM(sAPI_offset))
896cdf0e10cSrcweir ,	sNumberSync(GetXMLToken(XML_FALSE))
897cdf0e10cSrcweir ,	nPageAdjust(0)
898cdf0e10cSrcweir ,	eSelectPage(PageNumberType_CURRENT)
899cdf0e10cSrcweir ,	sNumberFormatOK(sal_False)
900cdf0e10cSrcweir {
901cdf0e10cSrcweir 	bValid = sal_True;
902cdf0e10cSrcweir }
903cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)904cdf0e10cSrcweir void XMLPageNumberImportContext::ProcessAttribute(
905cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
906cdf0e10cSrcweir 	const OUString& sAttrValue )
907cdf0e10cSrcweir {
908cdf0e10cSrcweir 	switch (nAttrToken)
909cdf0e10cSrcweir 	{
910cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NUM_FORMAT:
911cdf0e10cSrcweir 			sNumberFormat = sAttrValue;
912cdf0e10cSrcweir 			sNumberFormatOK = sal_True;
913cdf0e10cSrcweir 			break;
914cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NUM_LETTER_SYNC:
915cdf0e10cSrcweir 			sNumberSync = sAttrValue;
916cdf0e10cSrcweir 			break;
917cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_SELECT_PAGE:
918cdf0e10cSrcweir 		{
919cdf0e10cSrcweir 			sal_uInt16 nTmp;
920cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
921cdf0e10cSrcweir 												lcl_aSelectPageAttrMap))
922cdf0e10cSrcweir 			{
923cdf0e10cSrcweir 				eSelectPage = (PageNumberType)nTmp;
924cdf0e10cSrcweir 			}
925cdf0e10cSrcweir 			break;
926cdf0e10cSrcweir 		}
927cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_PAGE_ADJUST:
928cdf0e10cSrcweir 		{
929cdf0e10cSrcweir 			sal_Int32 nTmp;
930cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertNumber(nTmp, sAttrValue))
931cdf0e10cSrcweir 			{
932cdf0e10cSrcweir 				nPageAdjust = (sal_Int16)nTmp;
933cdf0e10cSrcweir 			}
934cdf0e10cSrcweir 			break;
935cdf0e10cSrcweir 		}
936cdf0e10cSrcweir 	}
937cdf0e10cSrcweir }
938cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)939cdf0e10cSrcweir void XMLPageNumberImportContext::PrepareField(
940cdf0e10cSrcweir 		const Reference<XPropertySet> & xPropertySet)
941cdf0e10cSrcweir {
942cdf0e10cSrcweir 	Any aAny;
943cdf0e10cSrcweir 
944cdf0e10cSrcweir 	// all properties are optional
945cdf0e10cSrcweir 	Reference<XPropertySetInfo> xPropertySetInfo(
946cdf0e10cSrcweir 		xPropertySet->getPropertySetInfo());
947cdf0e10cSrcweir 
948cdf0e10cSrcweir 	if (xPropertySetInfo->hasPropertyByName(sPropertyNumberingType))
949cdf0e10cSrcweir 	{
950cdf0e10cSrcweir 		sal_Int16 nNumType;
951cdf0e10cSrcweir 		if( sNumberFormatOK )
952cdf0e10cSrcweir 		{
953cdf0e10cSrcweir 			nNumType= style::NumberingType::ARABIC;
954cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertNumFormat( nNumType,
955cdf0e10cSrcweir 													sNumberFormat,
956cdf0e10cSrcweir 													sNumberSync );
957cdf0e10cSrcweir 		}
958cdf0e10cSrcweir 		else
959cdf0e10cSrcweir 			nNumType = style::NumberingType::PAGE_DESCRIPTOR;
960cdf0e10cSrcweir 
961cdf0e10cSrcweir 		aAny <<= nNumType;
962cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
963cdf0e10cSrcweir 	}
964cdf0e10cSrcweir 
965cdf0e10cSrcweir 	if (xPropertySetInfo->hasPropertyByName(sPropertyOffset))
966cdf0e10cSrcweir 	{
967cdf0e10cSrcweir 		// adjust offset
968cdf0e10cSrcweir 		switch (eSelectPage)
969cdf0e10cSrcweir 		{
970cdf0e10cSrcweir 			case PageNumberType_PREV:
971cdf0e10cSrcweir 				nPageAdjust--;
972cdf0e10cSrcweir 				break;
973cdf0e10cSrcweir 			case PageNumberType_CURRENT:
974cdf0e10cSrcweir 				break;
975cdf0e10cSrcweir 			case PageNumberType_NEXT:
976cdf0e10cSrcweir 				nPageAdjust++;
977cdf0e10cSrcweir 				break;
978cdf0e10cSrcweir 			default:
979cdf0e10cSrcweir 				DBG_WARNING("unknown page number type");
980cdf0e10cSrcweir 		}
981cdf0e10cSrcweir 		aAny <<= nPageAdjust;
982cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyOffset, aAny);
983cdf0e10cSrcweir 	}
984cdf0e10cSrcweir 
985cdf0e10cSrcweir 	if (xPropertySetInfo->hasPropertyByName(sPropertySubType))
986cdf0e10cSrcweir 	{
987cdf0e10cSrcweir 		aAny <<= eSelectPage;
988cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertySubType, aAny);
989cdf0e10cSrcweir 	}
990cdf0e10cSrcweir }
991cdf0e10cSrcweir 
992cdf0e10cSrcweir 
993cdf0e10cSrcweir 
994cdf0e10cSrcweir //
995cdf0e10cSrcweir // Placeholder
996cdf0e10cSrcweir //
997cdf0e10cSrcweir 
998cdf0e10cSrcweir TYPEINIT1( XMLPlaceholderFieldImportContext, XMLTextFieldImportContext);
999cdf0e10cSrcweir 
XMLPlaceholderFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)1000cdf0e10cSrcweir XMLPlaceholderFieldImportContext::XMLPlaceholderFieldImportContext(
1001cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1002cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName)
1003cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, sAPI_jump_edit,nPrfx, sLocalName)
1004cdf0e10cSrcweir ,	sPropertyPlaceholderType(RTL_CONSTASCII_USTRINGPARAM(sAPI_place_holder_type))
1005cdf0e10cSrcweir ,	sPropertyPlaceholder(RTL_CONSTASCII_USTRINGPARAM(sAPI_place_holder))
1006cdf0e10cSrcweir ,	sPropertyHint(RTL_CONSTASCII_USTRINGPARAM(sAPI_hint))
1007cdf0e10cSrcweir {
1008cdf0e10cSrcweir }
1009cdf0e10cSrcweir 
1010cdf0e10cSrcweir /// process attribute values
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1011cdf0e10cSrcweir void XMLPlaceholderFieldImportContext::ProcessAttribute(
1012cdf0e10cSrcweir 	sal_uInt16 nAttrToken, const OUString& sAttrValue )
1013cdf0e10cSrcweir {
1014cdf0e10cSrcweir 	switch (nAttrToken) {
1015cdf0e10cSrcweir 	case XML_TOK_TEXTFIELD_DESCRIPTION:
1016cdf0e10cSrcweir 		sDescription = sAttrValue;
1017cdf0e10cSrcweir 		break;
1018cdf0e10cSrcweir 
1019cdf0e10cSrcweir 	case XML_TOK_TEXTFIELD_PLACEHOLDER_TYPE:
1020cdf0e10cSrcweir 		bValid = sal_True;
1021cdf0e10cSrcweir 		if (IsXMLToken(sAttrValue, XML_TABLE))
1022cdf0e10cSrcweir         {
1023cdf0e10cSrcweir 			nPlaceholderType = PlaceholderType::TABLE;
1024cdf0e10cSrcweir 		}
1025cdf0e10cSrcweir         else if (IsXMLToken(sAttrValue, XML_TEXT))
1026cdf0e10cSrcweir         {
1027cdf0e10cSrcweir 			nPlaceholderType = PlaceholderType::TEXT;
1028cdf0e10cSrcweir 		}
1029cdf0e10cSrcweir         else if (IsXMLToken(sAttrValue, XML_TEXT_BOX))
1030cdf0e10cSrcweir         {
1031cdf0e10cSrcweir 			nPlaceholderType = PlaceholderType::TEXTFRAME;
1032cdf0e10cSrcweir 		}
1033cdf0e10cSrcweir         else if (IsXMLToken(sAttrValue, XML_IMAGE))
1034cdf0e10cSrcweir         {
1035cdf0e10cSrcweir 			nPlaceholderType = PlaceholderType::GRAPHIC;
1036cdf0e10cSrcweir 		}
1037cdf0e10cSrcweir         else if (IsXMLToken(sAttrValue, XML_OBJECT))
1038cdf0e10cSrcweir         {
1039cdf0e10cSrcweir 			nPlaceholderType = PlaceholderType::OBJECT;
1040cdf0e10cSrcweir 		}
1041cdf0e10cSrcweir         else
1042cdf0e10cSrcweir         {
1043cdf0e10cSrcweir 			bValid = sal_False;
1044cdf0e10cSrcweir 		}
1045cdf0e10cSrcweir 		break;
1046cdf0e10cSrcweir 
1047cdf0e10cSrcweir 	default:
1048cdf0e10cSrcweir 		; // ignore
1049cdf0e10cSrcweir 	}
1050cdf0e10cSrcweir }
1051cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)1052cdf0e10cSrcweir void XMLPlaceholderFieldImportContext::PrepareField(
1053cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet) {
1054cdf0e10cSrcweir 
1055cdf0e10cSrcweir 	Any aAny;
1056cdf0e10cSrcweir 	aAny <<= sDescription;
1057cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyHint, aAny);
1058cdf0e10cSrcweir 
1059cdf0e10cSrcweir 	// remove <...> around content (if present)
1060cdf0e10cSrcweir 	OUString aContent = GetContent();
1061cdf0e10cSrcweir 	sal_Int32 nStart = 0;
1062cdf0e10cSrcweir 	sal_Int32 nLength = aContent.getLength();
1063cdf0e10cSrcweir 	if ((nLength > 0) && (aContent.getStr()[0] == '<'))
1064cdf0e10cSrcweir 	{
1065cdf0e10cSrcweir 		--nLength;
1066cdf0e10cSrcweir 		++nStart;
1067cdf0e10cSrcweir 	}
1068cdf0e10cSrcweir 	if ((nLength > 0) && (aContent.getStr()[aContent.getLength()-1] == '>'))
1069cdf0e10cSrcweir 	{
1070cdf0e10cSrcweir 		--nLength;
1071cdf0e10cSrcweir 	}
1072cdf0e10cSrcweir 	aAny <<= aContent.copy(nStart, nLength);
1073cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyPlaceholder, aAny);
1074cdf0e10cSrcweir 
1075cdf0e10cSrcweir 	aAny <<= nPlaceholderType;
1076cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyPlaceholderType, aAny);
1077cdf0e10cSrcweir }
1078cdf0e10cSrcweir 
1079cdf0e10cSrcweir 
1080cdf0e10cSrcweir //
1081cdf0e10cSrcweir // time field
1082cdf0e10cSrcweir //
1083cdf0e10cSrcweir 
1084cdf0e10cSrcweir TYPEINIT1( XMLTimeFieldImportContext, XMLTextFieldImportContext);
1085cdf0e10cSrcweir 
XMLTimeFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)1086cdf0e10cSrcweir XMLTimeFieldImportContext::XMLTimeFieldImportContext(
1087cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1088cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName)
1089cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, sAPI_date_time, nPrfx, sLocalName)
1090cdf0e10cSrcweir ,	sPropertyNumberFormat(RTL_CONSTASCII_USTRINGPARAM(sAPI_number_format))
1091cdf0e10cSrcweir ,	sPropertyFixed(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed))
1092cdf0e10cSrcweir ,	sPropertyDateTimeValue(RTL_CONSTASCII_USTRINGPARAM(sAPI_date_time_value))
1093cdf0e10cSrcweir ,	sPropertyDateTime(RTL_CONSTASCII_USTRINGPARAM(sAPI_date_time))
1094cdf0e10cSrcweir ,	sPropertyAdjust(RTL_CONSTASCII_USTRINGPARAM(sAPI_adjust))
1095cdf0e10cSrcweir ,	sPropertyIsDate(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_date))
1096cdf0e10cSrcweir ,	sPropertyIsFixedLanguage(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed_language))
1097cdf0e10cSrcweir ,	fTimeValue(0.0)
1098cdf0e10cSrcweir ,	nAdjust(0)
1099cdf0e10cSrcweir ,	nFormatKey(0)
1100cdf0e10cSrcweir ,	bTimeOK(sal_False)
1101cdf0e10cSrcweir ,	bFormatOK(sal_False)
1102cdf0e10cSrcweir ,	bFixed(sal_False)
1103cdf0e10cSrcweir ,	bIsDate(sal_False)
1104cdf0e10cSrcweir ,	bIsDefaultLanguage( sal_True )
1105cdf0e10cSrcweir {
1106cdf0e10cSrcweir 	bValid = sal_True;	// always valid!
1107cdf0e10cSrcweir }
1108cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1109cdf0e10cSrcweir void XMLTimeFieldImportContext::ProcessAttribute(
1110cdf0e10cSrcweir 	sal_uInt16 nAttrToken, const OUString& sAttrValue )
1111cdf0e10cSrcweir {
1112cdf0e10cSrcweir 	switch (nAttrToken)
1113cdf0e10cSrcweir 	{
1114cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_TIME_VALUE:
1115cdf0e10cSrcweir 		{
1116cdf0e10cSrcweir 			double fTmp;
1117cdf0e10cSrcweir 			if (GetImport().GetMM100UnitConverter().
1118cdf0e10cSrcweir 				convertDateTime(fTmp, sAttrValue))
1119cdf0e10cSrcweir 			{
1120cdf0e10cSrcweir 				fTimeValue = fTmp;
1121cdf0e10cSrcweir 				bTimeOK = sal_True;
1122cdf0e10cSrcweir 			}
1123cdf0e10cSrcweir 
1124cdf0e10cSrcweir 			if (GetImport().GetMM100UnitConverter().
1125cdf0e10cSrcweir 				convertDateTime(aDateTimeValue, sAttrValue ))
1126cdf0e10cSrcweir 			{
1127cdf0e10cSrcweir 				bTimeOK = sal_True;
1128cdf0e10cSrcweir 			}
1129cdf0e10cSrcweir 			break;
1130cdf0e10cSrcweir 		}
1131cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_FIXED:
1132cdf0e10cSrcweir 		{
1133cdf0e10cSrcweir 			sal_Bool bTmp;
1134cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertBool(bTmp, sAttrValue))
1135cdf0e10cSrcweir 			{
1136cdf0e10cSrcweir 				bFixed = bTmp;
1137cdf0e10cSrcweir 			}
1138cdf0e10cSrcweir 			break;
1139cdf0e10cSrcweir 		}
1140cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DATA_STYLE_NAME:
1141cdf0e10cSrcweir 		{
1142cdf0e10cSrcweir 			sal_Int32 nKey = GetImportHelper().GetDataStyleKey(
1143cdf0e10cSrcweir 											   sAttrValue, &bIsDefaultLanguage);
1144cdf0e10cSrcweir 			if (-1 != nKey)
1145cdf0e10cSrcweir 			{
1146cdf0e10cSrcweir 				nFormatKey = nKey;
1147cdf0e10cSrcweir 				bFormatOK = sal_True;
1148cdf0e10cSrcweir 			}
1149cdf0e10cSrcweir 			break;
1150cdf0e10cSrcweir 		}
1151cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_TIME_ADJUST:
1152cdf0e10cSrcweir 		{
1153cdf0e10cSrcweir 			double fTmp;
1154cdf0e10cSrcweir 
1155cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertTime(fTmp, sAttrValue))
1156cdf0e10cSrcweir 			{
1157cdf0e10cSrcweir 				// convert to minutes
1158cdf0e10cSrcweir 				nAdjust = (sal_Int32)::rtl::math::approxFloor(fTmp * 60 * 24);
1159cdf0e10cSrcweir 			}
1160cdf0e10cSrcweir 			break;
1161cdf0e10cSrcweir 		}
1162cdf0e10cSrcweir 	}
1163cdf0e10cSrcweir }
1164cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & rPropertySet)1165cdf0e10cSrcweir void XMLTimeFieldImportContext::PrepareField(
1166cdf0e10cSrcweir 	const Reference<XPropertySet> & rPropertySet)
1167cdf0e10cSrcweir {
1168cdf0e10cSrcweir 	Any aAny;
1169cdf0e10cSrcweir 
1170cdf0e10cSrcweir 	// all properties are optional (except IsDate)
1171cdf0e10cSrcweir 	Reference<XPropertySetInfo> xPropertySetInfo(
1172cdf0e10cSrcweir 		rPropertySet->getPropertySetInfo());
1173cdf0e10cSrcweir 
1174cdf0e10cSrcweir 	if (xPropertySetInfo->hasPropertyByName(sPropertyFixed))
1175cdf0e10cSrcweir 	{
1176cdf0e10cSrcweir 		aAny.setValue( &bFixed, ::getBooleanCppuType() );
1177cdf0e10cSrcweir 		rPropertySet->setPropertyValue(sPropertyFixed, aAny);
1178cdf0e10cSrcweir 	}
1179cdf0e10cSrcweir 
1180cdf0e10cSrcweir 	aAny.setValue( &bIsDate, ::getBooleanCppuType() );
1181cdf0e10cSrcweir 	rPropertySet->setPropertyValue(sPropertyIsDate, aAny);
1182cdf0e10cSrcweir 
1183cdf0e10cSrcweir 	if (xPropertySetInfo->hasPropertyByName(sPropertyAdjust))
1184cdf0e10cSrcweir 	{
1185cdf0e10cSrcweir 		aAny <<= nAdjust;
1186cdf0e10cSrcweir 		rPropertySet->setPropertyValue(sPropertyAdjust, aAny);
1187cdf0e10cSrcweir 	}
1188cdf0e10cSrcweir 
1189cdf0e10cSrcweir 	// set value
1190cdf0e10cSrcweir 	if (bFixed)
1191cdf0e10cSrcweir 	{
1192cdf0e10cSrcweir 		// organizer or styles-only mode: force update
1193cdf0e10cSrcweir 		if (GetImport().GetTextImport()->IsOrganizerMode() ||
1194cdf0e10cSrcweir 			GetImport().GetTextImport()->IsStylesOnlyMode()   )
1195cdf0e10cSrcweir 		{
1196cdf0e10cSrcweir 			ForceUpdate(rPropertySet);
1197cdf0e10cSrcweir 		}
1198cdf0e10cSrcweir 		else
1199cdf0e10cSrcweir 		{
1200cdf0e10cSrcweir 			// normal mode: set value (if present)
1201cdf0e10cSrcweir 			if (bTimeOK)
1202cdf0e10cSrcweir 			{
1203cdf0e10cSrcweir 			   if (xPropertySetInfo->hasPropertyByName(sPropertyDateTimeValue))
1204cdf0e10cSrcweir 			   {
1205cdf0e10cSrcweir 				   aAny <<= aDateTimeValue;
1206cdf0e10cSrcweir 				   rPropertySet->setPropertyValue(sPropertyDateTimeValue,aAny);
1207cdf0e10cSrcweir 			   }
1208cdf0e10cSrcweir 			   else if (xPropertySetInfo->hasPropertyByName(sPropertyDateTime))
1209cdf0e10cSrcweir 			   {
1210cdf0e10cSrcweir 				   aAny <<= aDateTimeValue;
1211cdf0e10cSrcweir 				   rPropertySet->setPropertyValue(sPropertyDateTime, aAny);
1212cdf0e10cSrcweir 			   }
1213cdf0e10cSrcweir 			}
1214cdf0e10cSrcweir 		}
1215cdf0e10cSrcweir 	}
1216cdf0e10cSrcweir 
1217cdf0e10cSrcweir 	if (bFormatOK &&
1218cdf0e10cSrcweir 		xPropertySetInfo->hasPropertyByName(sPropertyNumberFormat))
1219cdf0e10cSrcweir 	{
1220cdf0e10cSrcweir 		aAny <<= nFormatKey;
1221cdf0e10cSrcweir 		rPropertySet->setPropertyValue(sPropertyNumberFormat, aAny);
1222cdf0e10cSrcweir 
1223cdf0e10cSrcweir         if( xPropertySetInfo->hasPropertyByName( sPropertyIsFixedLanguage ) )
1224cdf0e10cSrcweir         {
1225cdf0e10cSrcweir             sal_Bool bIsFixedLanguage = ! bIsDefaultLanguage;
1226cdf0e10cSrcweir             aAny.setValue( &bIsFixedLanguage, ::getBooleanCppuType() );
1227cdf0e10cSrcweir             rPropertySet->setPropertyValue( sPropertyIsFixedLanguage, aAny );
1228cdf0e10cSrcweir         }
1229cdf0e10cSrcweir     }
1230cdf0e10cSrcweir }
1231cdf0e10cSrcweir 
1232cdf0e10cSrcweir 
1233cdf0e10cSrcweir 
1234cdf0e10cSrcweir //
1235cdf0e10cSrcweir // date field
1236cdf0e10cSrcweir //
1237cdf0e10cSrcweir 
1238cdf0e10cSrcweir TYPEINIT1( XMLDateFieldImportContext, XMLTimeFieldImportContext );
1239cdf0e10cSrcweir 
XMLDateFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)1240cdf0e10cSrcweir XMLDateFieldImportContext::XMLDateFieldImportContext(
1241cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1242cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
1243cdf0e10cSrcweir 		XMLTimeFieldImportContext(rImport, rHlp, nPrfx, sLocalName)
1244cdf0e10cSrcweir {
1245cdf0e10cSrcweir 	bIsDate = sal_True;	// always a date!
1246cdf0e10cSrcweir }
1247cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const::rtl::OUString & sAttrValue)1248cdf0e10cSrcweir void XMLDateFieldImportContext::ProcessAttribute(
1249cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
1250cdf0e10cSrcweir 	const ::rtl::OUString& sAttrValue )
1251cdf0e10cSrcweir {
1252cdf0e10cSrcweir 	switch (nAttrToken)
1253cdf0e10cSrcweir 	{
1254cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DATE_VALUE:
1255cdf0e10cSrcweir 		{
1256cdf0e10cSrcweir 			double fTmp;
1257cdf0e10cSrcweir 
1258cdf0e10cSrcweir 			if (GetImport().GetMM100UnitConverter().
1259cdf0e10cSrcweir 				convertDateTime(fTmp, sAttrValue))
1260cdf0e10cSrcweir 			{
1261cdf0e10cSrcweir 				// #96457#: don't truncate in order to read date+time
1262cdf0e10cSrcweir 				fTimeValue = fTmp;
1263cdf0e10cSrcweir 				bTimeOK = sal_True;
1264cdf0e10cSrcweir 			}
1265cdf0e10cSrcweir 
1266cdf0e10cSrcweir 			if (GetImport().GetMM100UnitConverter().
1267cdf0e10cSrcweir 				convertDateTime(aDateTimeValue, sAttrValue ))
1268cdf0e10cSrcweir 			{
1269cdf0e10cSrcweir 				bTimeOK = sal_True;
1270cdf0e10cSrcweir 			}
1271cdf0e10cSrcweir 			break;
1272cdf0e10cSrcweir 		}
1273cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DATE_ADJUST:
1274cdf0e10cSrcweir 			// delegate to superclass, pretending it was a time-adjust attr.
1275cdf0e10cSrcweir 			XMLTimeFieldImportContext::ProcessAttribute(
1276cdf0e10cSrcweir 				XML_TOK_TEXTFIELD_TIME_ADJUST,
1277cdf0e10cSrcweir 				sAttrValue);
1278cdf0e10cSrcweir 			break;
1279cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_TIME_VALUE:
1280cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_TIME_ADJUST:
1281cdf0e10cSrcweir 			; // ignore time-adjust and time-value attributes
1282cdf0e10cSrcweir 			break;
1283cdf0e10cSrcweir 		default:
1284cdf0e10cSrcweir 			// all others: delegate to super-class
1285cdf0e10cSrcweir 			XMLTimeFieldImportContext::ProcessAttribute(nAttrToken,
1286cdf0e10cSrcweir 														sAttrValue);
1287cdf0e10cSrcweir 			break;
1288cdf0e10cSrcweir 	}
1289cdf0e10cSrcweir }
1290cdf0e10cSrcweir 
1291cdf0e10cSrcweir 
1292cdf0e10cSrcweir 
1293cdf0e10cSrcweir 
1294cdf0e10cSrcweir //
1295cdf0e10cSrcweir // database field superclass
1296cdf0e10cSrcweir //
1297cdf0e10cSrcweir 
1298cdf0e10cSrcweir TYPEINIT1( XMLDatabaseFieldImportContext, XMLTextFieldImportContext );
1299cdf0e10cSrcweir 
XMLDatabaseFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,const sal_Char * pServiceName,sal_uInt16 nPrfx,const OUString & sLocalName,bool bUseDisply)1300cdf0e10cSrcweir XMLDatabaseFieldImportContext::XMLDatabaseFieldImportContext(
1301cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1302cdf0e10cSrcweir 	const sal_Char* pServiceName, sal_uInt16 nPrfx,
1303cdf0e10cSrcweir 	const OUString& sLocalName, bool bUseDisply)
1304cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, pServiceName, nPrfx, sLocalName)
1305cdf0e10cSrcweir ,	sPropertyDataBaseName(RTL_CONSTASCII_USTRINGPARAM(sAPI_data_base_name))
1306cdf0e10cSrcweir ,	sPropertyDataBaseURL(RTL_CONSTASCII_USTRINGPARAM(sAPI_data_base_u_r_l))
1307cdf0e10cSrcweir ,	sPropertyTableName(RTL_CONSTASCII_USTRINGPARAM(sAPI_data_table_name))
1308cdf0e10cSrcweir ,	sPropertyDataCommandType(RTL_CONSTASCII_USTRINGPARAM(sAPI_data_command_type))
1309cdf0e10cSrcweir ,	sPropertyIsVisible(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_visible))
1310cdf0e10cSrcweir ,	nCommandType( sdb::CommandType::TABLE )
1311cdf0e10cSrcweir ,	bCommandTypeOK(sal_False)
1312cdf0e10cSrcweir ,	bDisplay( sal_True )
1313cdf0e10cSrcweir ,	bDisplayOK( false )
1314cdf0e10cSrcweir ,	bUseDisplay( bUseDisply )
1315cdf0e10cSrcweir ,	bDatabaseOK(sal_False)
1316cdf0e10cSrcweir ,	bDatabaseNameOK(sal_False)
1317cdf0e10cSrcweir ,	bDatabaseURLOK(sal_False)
1318cdf0e10cSrcweir ,	bTableOK(sal_False)
1319cdf0e10cSrcweir {
1320cdf0e10cSrcweir }
1321cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1322cdf0e10cSrcweir void XMLDatabaseFieldImportContext::ProcessAttribute(
1323cdf0e10cSrcweir 	sal_uInt16 nAttrToken, const OUString& sAttrValue )
1324cdf0e10cSrcweir {
1325cdf0e10cSrcweir 	switch (nAttrToken)
1326cdf0e10cSrcweir 	{
1327cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DATABASE_NAME:
1328cdf0e10cSrcweir 			sDatabaseName = sAttrValue;
1329cdf0e10cSrcweir             bDatabaseOK = sal_True;
1330cdf0e10cSrcweir 			bDatabaseNameOK = sal_True;
1331cdf0e10cSrcweir 			break;
1332cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_TABLE_NAME:
1333cdf0e10cSrcweir 			sTableName = sAttrValue;
1334cdf0e10cSrcweir 			bTableOK = sal_True;
1335cdf0e10cSrcweir 			break;
1336cdf0e10cSrcweir         case XML_TOK_TEXTFIELD_TABLE_TYPE:
1337cdf0e10cSrcweir             if( IsXMLToken( sAttrValue, XML_TABLE ) )
1338cdf0e10cSrcweir             {
1339cdf0e10cSrcweir                 nCommandType = sdb::CommandType::TABLE;
1340cdf0e10cSrcweir                 bCommandTypeOK = sal_True;
1341cdf0e10cSrcweir             }
1342cdf0e10cSrcweir             else if( IsXMLToken( sAttrValue, XML_QUERY ) )
1343cdf0e10cSrcweir             {
1344cdf0e10cSrcweir                 nCommandType = sdb::CommandType::QUERY;
1345cdf0e10cSrcweir                 bCommandTypeOK = sal_True;
1346cdf0e10cSrcweir             }
1347cdf0e10cSrcweir             else if( IsXMLToken( sAttrValue, XML_COMMAND ) )
1348cdf0e10cSrcweir             {
1349cdf0e10cSrcweir                 nCommandType = sdb::CommandType::COMMAND;
1350cdf0e10cSrcweir                 bCommandTypeOK = sal_True;
1351cdf0e10cSrcweir             }
1352cdf0e10cSrcweir             break;
1353cdf0e10cSrcweir         case XML_TOK_TEXTFIELD_DISPLAY:
1354cdf0e10cSrcweir             if( IsXMLToken( sAttrValue, XML_NONE ) )
1355cdf0e10cSrcweir             {
1356cdf0e10cSrcweir                 bDisplay = sal_False;
1357cdf0e10cSrcweir                 bDisplayOK = true;
1358cdf0e10cSrcweir             }
1359cdf0e10cSrcweir             else if( IsXMLToken( sAttrValue, XML_VALUE ) )
1360cdf0e10cSrcweir             {
1361cdf0e10cSrcweir                 bDisplay = sal_True;
1362cdf0e10cSrcweir                 bDisplayOK = true;
1363cdf0e10cSrcweir             }
1364cdf0e10cSrcweir             break;
1365cdf0e10cSrcweir 	}
1366cdf0e10cSrcweir }
1367cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 p_nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)1368cdf0e10cSrcweir SvXMLImportContext* XMLDatabaseFieldImportContext::CreateChildContext(
1369cdf0e10cSrcweir     sal_uInt16 p_nPrefix,
1370cdf0e10cSrcweir     const OUString& rLocalName,
1371cdf0e10cSrcweir     const Reference<XAttributeList>& xAttrList )
1372cdf0e10cSrcweir {
1373cdf0e10cSrcweir     if( ( p_nPrefix == XML_NAMESPACE_FORM ) &&
1374cdf0e10cSrcweir         IsXMLToken( rLocalName, XML_CONNECTION_RESOURCE ) )
1375cdf0e10cSrcweir     {
1376cdf0e10cSrcweir         // process attribute list directly
1377cdf0e10cSrcweir         sal_Int16 nLength = xAttrList->getLength();
1378cdf0e10cSrcweir         for( sal_Int16 n = 0; n < nLength; n++ )
1379cdf0e10cSrcweir         {
1380cdf0e10cSrcweir             OUString sLocalName;
1381cdf0e10cSrcweir             sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
1382cdf0e10cSrcweir                 GetKeyByAttrName( xAttrList->getNameByIndex(n), &sLocalName );
1383cdf0e10cSrcweir 
1384cdf0e10cSrcweir             if( ( nPrefix == XML_NAMESPACE_XLINK ) &&
1385cdf0e10cSrcweir                 IsXMLToken( sLocalName, XML_HREF ) )
1386cdf0e10cSrcweir             {
1387cdf0e10cSrcweir                 sDatabaseURL = xAttrList->getValueByIndex(n);
1388cdf0e10cSrcweir                 bDatabaseOK = sal_True;
1389cdf0e10cSrcweir                 bDatabaseURLOK = sal_True;
1390cdf0e10cSrcweir             }
1391cdf0e10cSrcweir         }
1392cdf0e10cSrcweir 
1393cdf0e10cSrcweir         // we call ProcessAttribute in order to set bValid appropriatly
1394cdf0e10cSrcweir         ProcessAttribute( XML_TOKEN_INVALID, OUString() );
1395cdf0e10cSrcweir     }
1396cdf0e10cSrcweir 
1397cdf0e10cSrcweir     return SvXMLImportContext::CreateChildContext(p_nPrefix, rLocalName,
1398cdf0e10cSrcweir                                                   xAttrList);
1399cdf0e10cSrcweir }
1400cdf0e10cSrcweir 
1401cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)1402cdf0e10cSrcweir void XMLDatabaseFieldImportContext::PrepareField(
1403cdf0e10cSrcweir 		const Reference<XPropertySet> & xPropertySet)
1404cdf0e10cSrcweir {
1405cdf0e10cSrcweir 	Any aAny;
1406cdf0e10cSrcweir 
1407cdf0e10cSrcweir 	aAny <<= sTableName;
1408cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyTableName, aAny);
1409cdf0e10cSrcweir 
1410cdf0e10cSrcweir     if( bDatabaseNameOK )
1411cdf0e10cSrcweir     {
1412cdf0e10cSrcweir         aAny <<= sDatabaseName;
1413cdf0e10cSrcweir         xPropertySet->setPropertyValue(sPropertyDataBaseName, aAny);
1414cdf0e10cSrcweir     }
1415cdf0e10cSrcweir     else if( bDatabaseURLOK )
1416cdf0e10cSrcweir     {
1417cdf0e10cSrcweir         aAny <<= sDatabaseURL;
1418cdf0e10cSrcweir         xPropertySet->setPropertyValue(sPropertyDataBaseURL, aAny);
1419cdf0e10cSrcweir     }
1420cdf0e10cSrcweir 
1421cdf0e10cSrcweir     // #99980# load/save command type for all fields; also load
1422cdf0e10cSrcweir     //         old documents without command type
1423cdf0e10cSrcweir     if( bCommandTypeOK )
1424cdf0e10cSrcweir     {
1425cdf0e10cSrcweir         aAny <<= nCommandType;
1426cdf0e10cSrcweir         xPropertySet->setPropertyValue( sPropertyDataCommandType, aAny );
1427cdf0e10cSrcweir     }
1428cdf0e10cSrcweir 
1429cdf0e10cSrcweir     if( bUseDisplay && bDisplayOK )
1430cdf0e10cSrcweir     {
1431cdf0e10cSrcweir         aAny.setValue( &bDisplay, ::getBooleanCppuType() );
1432cdf0e10cSrcweir         xPropertySet->setPropertyValue( sPropertyIsVisible, aAny );
1433cdf0e10cSrcweir     }
1434cdf0e10cSrcweir }
1435cdf0e10cSrcweir 
1436cdf0e10cSrcweir 
1437cdf0e10cSrcweir 
1438cdf0e10cSrcweir //
1439cdf0e10cSrcweir // database name field
1440cdf0e10cSrcweir //
1441cdf0e10cSrcweir 
1442cdf0e10cSrcweir TYPEINIT1( XMLDatabaseNameImportContext, XMLDatabaseFieldImportContext );
1443cdf0e10cSrcweir 
XMLDatabaseNameImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)1444cdf0e10cSrcweir XMLDatabaseNameImportContext::XMLDatabaseNameImportContext(
1445cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1446cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
1447cdf0e10cSrcweir 		XMLDatabaseFieldImportContext(rImport, rHlp, sAPI_database_name,
1448cdf0e10cSrcweir 									  nPrfx, sLocalName, true)
1449cdf0e10cSrcweir {
1450cdf0e10cSrcweir }
1451cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1452cdf0e10cSrcweir void XMLDatabaseNameImportContext::ProcessAttribute(
1453cdf0e10cSrcweir 	sal_uInt16 nAttrToken, const OUString& sAttrValue )
1454cdf0e10cSrcweir {
1455cdf0e10cSrcweir 	// delegate to superclass and check for success
1456cdf0e10cSrcweir 	XMLDatabaseFieldImportContext::ProcessAttribute(nAttrToken, sAttrValue);
1457cdf0e10cSrcweir 	bValid = bDatabaseOK && bTableOK;
1458cdf0e10cSrcweir }
1459cdf0e10cSrcweir 
1460cdf0e10cSrcweir 
1461cdf0e10cSrcweir 
1462cdf0e10cSrcweir //
1463cdf0e10cSrcweir // database next field
1464cdf0e10cSrcweir //
1465cdf0e10cSrcweir 
1466cdf0e10cSrcweir TYPEINIT1( XMLDatabaseNextImportContext, XMLDatabaseFieldImportContext );
1467cdf0e10cSrcweir 
XMLDatabaseNextImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,const sal_Char * pServiceName,sal_uInt16 nPrfx,const OUString & sLocalName)1468cdf0e10cSrcweir XMLDatabaseNextImportContext::XMLDatabaseNextImportContext(
1469cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1470cdf0e10cSrcweir 	const sal_Char* pServiceName, sal_uInt16 nPrfx,
1471cdf0e10cSrcweir 	const OUString& sLocalName) :
1472cdf0e10cSrcweir 		XMLDatabaseFieldImportContext(rImport, rHlp, pServiceName,
1473cdf0e10cSrcweir 									  nPrfx, sLocalName, false),
1474cdf0e10cSrcweir 		sPropertyCondition(RTL_CONSTASCII_USTRINGPARAM(sAPI_condition)),
1475cdf0e10cSrcweir 		sTrue(RTL_CONSTASCII_USTRINGPARAM(sAPI_true)),
1476cdf0e10cSrcweir 		sCondition(),
1477cdf0e10cSrcweir 		bConditionOK(sal_False)
1478cdf0e10cSrcweir {
1479cdf0e10cSrcweir }
1480cdf0e10cSrcweir 
XMLDatabaseNextImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)1481cdf0e10cSrcweir XMLDatabaseNextImportContext::XMLDatabaseNextImportContext(
1482cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1483cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName)
1484cdf0e10cSrcweir : XMLDatabaseFieldImportContext(rImport, rHlp, sAPI_database_next, nPrfx, sLocalName, false)
1485cdf0e10cSrcweir ,	sPropertyCondition(RTL_CONSTASCII_USTRINGPARAM(sAPI_condition))
1486cdf0e10cSrcweir ,	sTrue(RTL_CONSTASCII_USTRINGPARAM(sAPI_true))
1487cdf0e10cSrcweir ,	bConditionOK(sal_False)
1488cdf0e10cSrcweir {
1489cdf0e10cSrcweir }
1490cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1491cdf0e10cSrcweir void XMLDatabaseNextImportContext::ProcessAttribute(
1492cdf0e10cSrcweir 	sal_uInt16 nAttrToken, const OUString& sAttrValue )
1493cdf0e10cSrcweir {
1494cdf0e10cSrcweir 	if (XML_TOK_TEXTFIELD_CONDITION == nAttrToken)
1495cdf0e10cSrcweir 	{
1496cdf0e10cSrcweir 		OUString sTmp;
1497cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap()._GetKeyByAttrName(
1498cdf0e10cSrcweir 									sAttrValue, &sTmp, sal_False );
1499cdf0e10cSrcweir 		if( XML_NAMESPACE_OOOW == nPrefix )
1500cdf0e10cSrcweir 		{
1501cdf0e10cSrcweir 			sCondition = sTmp;
1502cdf0e10cSrcweir 			bConditionOK = sal_True;
1503cdf0e10cSrcweir 		}
1504cdf0e10cSrcweir 		else
1505cdf0e10cSrcweir 			sCondition = sAttrValue;
1506cdf0e10cSrcweir 	}
1507cdf0e10cSrcweir 	else
1508cdf0e10cSrcweir 	{
1509cdf0e10cSrcweir 		XMLDatabaseFieldImportContext::ProcessAttribute(nAttrToken,
1510cdf0e10cSrcweir 														sAttrValue);
1511cdf0e10cSrcweir 	}
1512cdf0e10cSrcweir 
1513cdf0e10cSrcweir 	bValid = bDatabaseOK && bTableOK;
1514cdf0e10cSrcweir }
1515cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)1516cdf0e10cSrcweir void XMLDatabaseNextImportContext::PrepareField(
1517cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
1518cdf0e10cSrcweir {
1519cdf0e10cSrcweir 	Any aAny;
1520cdf0e10cSrcweir 
1521cdf0e10cSrcweir 	aAny <<= bConditionOK ? sCondition : sTrue;
1522cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyCondition, aAny);
1523cdf0e10cSrcweir 
1524cdf0e10cSrcweir 	XMLDatabaseFieldImportContext::PrepareField(xPropertySet);
1525cdf0e10cSrcweir }
1526cdf0e10cSrcweir 
1527cdf0e10cSrcweir 
1528cdf0e10cSrcweir 
1529cdf0e10cSrcweir //
1530cdf0e10cSrcweir // database select field
1531cdf0e10cSrcweir //
1532cdf0e10cSrcweir 
1533cdf0e10cSrcweir TYPEINIT1( XMLDatabaseSelectImportContext, XMLDatabaseNextImportContext );
1534cdf0e10cSrcweir 
XMLDatabaseSelectImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const::rtl::OUString & sLocalName)1535cdf0e10cSrcweir XMLDatabaseSelectImportContext::XMLDatabaseSelectImportContext(
1536cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1537cdf0e10cSrcweir 	sal_uInt16 nPrfx, const ::rtl::OUString& sLocalName) :
1538cdf0e10cSrcweir 		XMLDatabaseNextImportContext(rImport, rHlp, sAPI_database_select,
1539cdf0e10cSrcweir 									 nPrfx, sLocalName),
1540cdf0e10cSrcweir 		sPropertySetNumber(RTL_CONSTASCII_USTRINGPARAM(sAPI_set_number)),
1541cdf0e10cSrcweir 		nNumber(0),
1542cdf0e10cSrcweir 		bNumberOK(sal_False)
1543cdf0e10cSrcweir {
1544cdf0e10cSrcweir }
1545cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const::rtl::OUString & sAttrValue)1546cdf0e10cSrcweir void XMLDatabaseSelectImportContext::ProcessAttribute(
1547cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
1548cdf0e10cSrcweir 	const ::rtl::OUString& sAttrValue )
1549cdf0e10cSrcweir {
1550cdf0e10cSrcweir 	if (XML_TOK_TEXTFIELD_ROW_NUMBER == nAttrToken)
1551cdf0e10cSrcweir 	{
1552cdf0e10cSrcweir 		sal_Int32 nTmp;
1553cdf0e10cSrcweir 		if (SvXMLUnitConverter::convertNumber( nTmp, sAttrValue
1554cdf0e10cSrcweir 											   /* , nMin, nMax ??? */ ))
1555cdf0e10cSrcweir 		{
1556cdf0e10cSrcweir 			nNumber = nTmp;
1557cdf0e10cSrcweir 			bNumberOK = sal_True;
1558cdf0e10cSrcweir 		}
1559cdf0e10cSrcweir 	}
1560cdf0e10cSrcweir 	else
1561cdf0e10cSrcweir 	{
1562cdf0e10cSrcweir 		XMLDatabaseNextImportContext::ProcessAttribute(nAttrToken, sAttrValue);
1563cdf0e10cSrcweir 	}
1564cdf0e10cSrcweir 
1565cdf0e10cSrcweir 	bValid = bTableOK && bDatabaseOK && bNumberOK;
1566cdf0e10cSrcweir }
1567cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)1568cdf0e10cSrcweir void XMLDatabaseSelectImportContext::PrepareField(
1569cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
1570cdf0e10cSrcweir {
1571cdf0e10cSrcweir 	Any aAny;
1572cdf0e10cSrcweir 
1573cdf0e10cSrcweir 	aAny <<= nNumber;
1574cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertySetNumber, aAny);
1575cdf0e10cSrcweir 
1576cdf0e10cSrcweir 	XMLDatabaseNextImportContext::PrepareField(xPropertySet);
1577cdf0e10cSrcweir }
1578cdf0e10cSrcweir 
1579cdf0e10cSrcweir 
1580cdf0e10cSrcweir 
1581cdf0e10cSrcweir //
1582cdf0e10cSrcweir // database display row number field
1583cdf0e10cSrcweir //
1584cdf0e10cSrcweir 
1585cdf0e10cSrcweir TYPEINIT1( XMLDatabaseNumberImportContext, XMLDatabaseFieldImportContext );
1586cdf0e10cSrcweir 
XMLDatabaseNumberImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)1587cdf0e10cSrcweir XMLDatabaseNumberImportContext::XMLDatabaseNumberImportContext(
1588cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1589cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
1590cdf0e10cSrcweir 		XMLDatabaseFieldImportContext(rImport, rHlp, sAPI_database_number,
1591cdf0e10cSrcweir 									  nPrfx, sLocalName, true),
1592cdf0e10cSrcweir 		sPropertyNumberingType(
1593cdf0e10cSrcweir 			RTL_CONSTASCII_USTRINGPARAM(sAPI_numbering_type)),
1594cdf0e10cSrcweir 		sPropertySetNumber(RTL_CONSTASCII_USTRINGPARAM(sAPI_set_number)),
1595cdf0e10cSrcweir 		sNumberFormat(RTL_CONSTASCII_USTRINGPARAM("1")),
1596cdf0e10cSrcweir 		sNumberSync(GetXMLToken(XML_FALSE)),
1597cdf0e10cSrcweir 		nValue(0),
1598cdf0e10cSrcweir 		bValueOK(sal_False)
1599cdf0e10cSrcweir {
1600cdf0e10cSrcweir }
1601cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1602cdf0e10cSrcweir void XMLDatabaseNumberImportContext::ProcessAttribute(
1603cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
1604cdf0e10cSrcweir 	const OUString& sAttrValue )
1605cdf0e10cSrcweir {
1606cdf0e10cSrcweir 	switch (nAttrToken)
1607cdf0e10cSrcweir 	{
1608cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NUM_FORMAT:
1609cdf0e10cSrcweir 			sNumberFormat = sAttrValue;
1610cdf0e10cSrcweir 			break;
1611cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NUM_LETTER_SYNC:
1612cdf0e10cSrcweir 			sNumberSync = sAttrValue;
1613cdf0e10cSrcweir 			break;
1614cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_VALUE:
1615cdf0e10cSrcweir 		{
1616cdf0e10cSrcweir 			sal_Int32 nTmp;
1617cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertNumber( nTmp, sAttrValue ))
1618cdf0e10cSrcweir 			{
1619cdf0e10cSrcweir 				nValue = nTmp;
1620cdf0e10cSrcweir 				bValueOK = sal_True;
1621cdf0e10cSrcweir 			}
1622cdf0e10cSrcweir 			break;
1623cdf0e10cSrcweir 		}
1624cdf0e10cSrcweir 		default:
1625cdf0e10cSrcweir 			XMLDatabaseFieldImportContext::ProcessAttribute(nAttrToken,
1626cdf0e10cSrcweir 															sAttrValue);
1627cdf0e10cSrcweir 			break;
1628cdf0e10cSrcweir 	}
1629cdf0e10cSrcweir 
1630cdf0e10cSrcweir 	bValid = bTableOK && bDatabaseOK;
1631cdf0e10cSrcweir }
1632cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)1633cdf0e10cSrcweir void XMLDatabaseNumberImportContext::PrepareField(
1634cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
1635cdf0e10cSrcweir {
1636cdf0e10cSrcweir 	Any aAny;
1637cdf0e10cSrcweir 
1638cdf0e10cSrcweir 	sal_Int16 nNumType = style::NumberingType::ARABIC;
1639cdf0e10cSrcweir 	GetImport().GetMM100UnitConverter().convertNumFormat( nNumType,
1640cdf0e10cSrcweir 													sNumberFormat,
1641cdf0e10cSrcweir 													sNumberSync );
1642cdf0e10cSrcweir 	aAny <<= nNumType;
1643cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
1644cdf0e10cSrcweir 
1645cdf0e10cSrcweir 	if (bValueOK)
1646cdf0e10cSrcweir 	{
1647cdf0e10cSrcweir 		aAny <<= nValue;
1648cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertySetNumber, aAny);
1649cdf0e10cSrcweir 	}
1650cdf0e10cSrcweir 
1651cdf0e10cSrcweir 	XMLDatabaseFieldImportContext::PrepareField(xPropertySet);
1652cdf0e10cSrcweir }
1653cdf0e10cSrcweir 
1654cdf0e10cSrcweir 
1655cdf0e10cSrcweir 
1656cdf0e10cSrcweir //
1657cdf0e10cSrcweir // Simple doc info fields
1658cdf0e10cSrcweir //
1659cdf0e10cSrcweir 
1660cdf0e10cSrcweir TYPEINIT1( XMLSimpleDocInfoImportContext, XMLTextFieldImportContext );
1661cdf0e10cSrcweir 
XMLSimpleDocInfoImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName,sal_uInt16 nToken,sal_Bool bContent,sal_Bool bAuthor)1662cdf0e10cSrcweir XMLSimpleDocInfoImportContext::XMLSimpleDocInfoImportContext(
1663cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1664cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName, sal_uInt16 nToken,
1665cdf0e10cSrcweir 	sal_Bool bContent, sal_Bool bAuthor)
1666cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, MapTokenToServiceName(nToken),nPrfx, sLocalName)
1667cdf0e10cSrcweir ,	sPropertyFixed(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed))
1668cdf0e10cSrcweir ,	sPropertyContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_content))
1669cdf0e10cSrcweir ,	sPropertyAuthor(RTL_CONSTASCII_USTRINGPARAM(sAPI_author))
1670cdf0e10cSrcweir ,	sPropertyCurrentPresentation(RTL_CONSTASCII_USTRINGPARAM(sAPI_current_presentation))
1671cdf0e10cSrcweir ,	bFixed(sal_False)
1672cdf0e10cSrcweir ,	bHasAuthor(bAuthor)
1673cdf0e10cSrcweir ,	bHasContent(bContent)
1674cdf0e10cSrcweir {
1675cdf0e10cSrcweir 	bValid = sal_True;
1676cdf0e10cSrcweir }
1677cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1678cdf0e10cSrcweir void XMLSimpleDocInfoImportContext::ProcessAttribute(
1679cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
1680cdf0e10cSrcweir 	const OUString& sAttrValue )
1681cdf0e10cSrcweir {
1682cdf0e10cSrcweir 	if (XML_TOK_TEXTFIELD_FIXED == nAttrToken)
1683cdf0e10cSrcweir 	{
1684cdf0e10cSrcweir 		sal_Bool bTmp;
1685cdf0e10cSrcweir 		if (SvXMLUnitConverter::convertBool(bTmp, sAttrValue))
1686cdf0e10cSrcweir 		{
1687cdf0e10cSrcweir 			bFixed = bTmp;
1688cdf0e10cSrcweir 		}
1689cdf0e10cSrcweir 	}
1690cdf0e10cSrcweir }
1691cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & rPropertySet)1692cdf0e10cSrcweir void XMLSimpleDocInfoImportContext::PrepareField(
1693cdf0e10cSrcweir 	const Reference<XPropertySet> & rPropertySet)
1694cdf0e10cSrcweir {
1695cdf0e10cSrcweir 	//	title field in Calc has no Fixed property
1696cdf0e10cSrcweir 	Reference<XPropertySetInfo> xPropertySetInfo(rPropertySet->getPropertySetInfo());
1697cdf0e10cSrcweir 	if (xPropertySetInfo->hasPropertyByName(sPropertyFixed))
1698cdf0e10cSrcweir 	{
1699cdf0e10cSrcweir 		Any aAny;
1700cdf0e10cSrcweir 		aAny.setValue(&bFixed, ::getBooleanCppuType() );
1701cdf0e10cSrcweir 		rPropertySet->setPropertyValue(sPropertyFixed, aAny);
1702cdf0e10cSrcweir 
1703cdf0e10cSrcweir 		// set Content and CurrentPresentation (if fixed)
1704cdf0e10cSrcweir 		if (bFixed)
1705cdf0e10cSrcweir 		{
1706cdf0e10cSrcweir 			// in organizer-mode or styles-only-mode, only force update
1707cdf0e10cSrcweir 			if (GetImport().GetTextImport()->IsOrganizerMode() ||
1708cdf0e10cSrcweir 				GetImport().GetTextImport()->IsStylesOnlyMode()   )
1709cdf0e10cSrcweir 			{
1710cdf0e10cSrcweir 				ForceUpdate(rPropertySet);
1711cdf0e10cSrcweir 			}
1712cdf0e10cSrcweir 			else
1713cdf0e10cSrcweir 			{
1714cdf0e10cSrcweir 				// set content (author, if that's the name) and current
1715cdf0e10cSrcweir 				// presentation
1716cdf0e10cSrcweir 				aAny <<= GetContent();
1717cdf0e10cSrcweir 
1718cdf0e10cSrcweir 				if (bFixed && bHasAuthor)
1719cdf0e10cSrcweir 				{
1720cdf0e10cSrcweir 					rPropertySet->setPropertyValue(sPropertyAuthor, aAny);
1721cdf0e10cSrcweir 				}
1722cdf0e10cSrcweir 
1723cdf0e10cSrcweir 				if (bFixed && bHasContent)
1724cdf0e10cSrcweir 				{
1725cdf0e10cSrcweir 					rPropertySet->setPropertyValue(sPropertyContent, aAny);
1726cdf0e10cSrcweir 				}
1727cdf0e10cSrcweir 
1728cdf0e10cSrcweir 				rPropertySet->setPropertyValue(sPropertyCurrentPresentation, aAny);
1729cdf0e10cSrcweir 			}
1730cdf0e10cSrcweir 		}
1731cdf0e10cSrcweir 	}
1732cdf0e10cSrcweir }
1733cdf0e10cSrcweir 
MapTokenToServiceName(sal_uInt16 nToken)1734cdf0e10cSrcweir const sal_Char* XMLSimpleDocInfoImportContext::MapTokenToServiceName(
1735cdf0e10cSrcweir 	sal_uInt16 nToken)
1736cdf0e10cSrcweir {
1737cdf0e10cSrcweir 	const sal_Char* pServiceName = NULL;
1738cdf0e10cSrcweir 
1739cdf0e10cSrcweir 	switch(nToken)
1740cdf0e10cSrcweir 	{
1741cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_CREATION_AUTHOR:
1742cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_create_author;
1743cdf0e10cSrcweir 			break;
1744cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_CREATION_DATE:
1745cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_create_date_time;
1746cdf0e10cSrcweir 			break;
1747cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_CREATION_TIME:
1748cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_create_date_time;
1749cdf0e10cSrcweir 			break;
1750cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_DESCRIPTION:
1751cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_description;
1752cdf0e10cSrcweir 			break;
1753cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_EDIT_DURATION:
1754cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_edit_time;
1755cdf0e10cSrcweir 			break;
1756cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_USER_DEFINED:
1757cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_custom;
1758cdf0e10cSrcweir 			break;
1759cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_PRINT_AUTHOR:
1760cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_print_author;
1761cdf0e10cSrcweir 			break;
1762cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_PRINT_DATE:
1763cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_print_date_time;
1764cdf0e10cSrcweir 			break;
1765cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_PRINT_TIME:
1766cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_print_date_time;
1767cdf0e10cSrcweir 			break;
1768cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_KEYWORDS:
1769cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_keywords;
1770cdf0e10cSrcweir 			break;
1771cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SUBJECT:
1772cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_subject;
1773cdf0e10cSrcweir 			break;
1774cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_REVISION:
1775cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_revision;
1776cdf0e10cSrcweir 			break;
1777cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SAVE_AUTHOR:
1778cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_change_author;
1779cdf0e10cSrcweir 			break;
1780cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SAVE_DATE:
1781cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_change_date_time;
1782cdf0e10cSrcweir 			break;
1783cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SAVE_TIME:
1784cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_change_date_time;
1785cdf0e10cSrcweir 			break;
1786cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_TITLE:
1787cdf0e10cSrcweir 			pServiceName = sAPI_docinfo_title;
1788cdf0e10cSrcweir 			break;
1789cdf0e10cSrcweir 
1790cdf0e10cSrcweir 		default:
1791cdf0e10cSrcweir 			DBG_ERROR("no docinfo field token");
1792cdf0e10cSrcweir 			pServiceName = NULL;
1793cdf0e10cSrcweir 			break;
1794cdf0e10cSrcweir 	}
1795cdf0e10cSrcweir 
1796cdf0e10cSrcweir 	return pServiceName;
1797cdf0e10cSrcweir }
1798cdf0e10cSrcweir 
1799cdf0e10cSrcweir 
1800cdf0e10cSrcweir //
1801cdf0e10cSrcweir // revision field
1802cdf0e10cSrcweir //
1803cdf0e10cSrcweir 
1804cdf0e10cSrcweir TYPEINIT1( XMLRevisionDocInfoImportContext, XMLSimpleDocInfoImportContext );
1805cdf0e10cSrcweir 
XMLRevisionDocInfoImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName,sal_uInt16 nToken)1806cdf0e10cSrcweir XMLRevisionDocInfoImportContext::XMLRevisionDocInfoImportContext(
1807cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
1808cdf0e10cSrcweir 	const OUString& sLocalName, sal_uInt16 nToken) :
1809cdf0e10cSrcweir 		XMLSimpleDocInfoImportContext(rImport, rHlp, nPrfx, sLocalName,
1810cdf0e10cSrcweir 									  nToken, sal_False, sal_False),
1811cdf0e10cSrcweir 		sPropertyRevision(RTL_CONSTASCII_USTRINGPARAM(sAPI_revision))
1812cdf0e10cSrcweir {
1813cdf0e10cSrcweir 	bValid = sal_True;
1814cdf0e10cSrcweir }
1815cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & rPropertySet)1816cdf0e10cSrcweir void XMLRevisionDocInfoImportContext::PrepareField(
1817cdf0e10cSrcweir 	const Reference<XPropertySet> & rPropertySet)
1818cdf0e10cSrcweir {
1819cdf0e10cSrcweir 	XMLSimpleDocInfoImportContext::PrepareField(rPropertySet);
1820cdf0e10cSrcweir 
1821cdf0e10cSrcweir 	// set revision number
1822cdf0e10cSrcweir 	// if fixed, if not in organizer-mode, if not in styles-only-mode
1823cdf0e10cSrcweir 	if (bFixed)
1824cdf0e10cSrcweir 	{
1825cdf0e10cSrcweir 		if ( GetImport().GetTextImport()->IsOrganizerMode() ||
1826cdf0e10cSrcweir 			 GetImport().GetTextImport()->IsStylesOnlyMode()   )
1827cdf0e10cSrcweir 		{
1828cdf0e10cSrcweir 			ForceUpdate(rPropertySet);
1829cdf0e10cSrcweir 		}
1830cdf0e10cSrcweir 		else
1831cdf0e10cSrcweir 		{
1832cdf0e10cSrcweir 			sal_Int32 nTmp;
1833cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertNumber(nTmp, GetContent()))
1834cdf0e10cSrcweir 			{
1835cdf0e10cSrcweir 				Any aAny;
1836cdf0e10cSrcweir 				aAny <<= nTmp;
1837cdf0e10cSrcweir 				rPropertySet->setPropertyValue(sPropertyRevision, aAny);
1838cdf0e10cSrcweir 			}
1839cdf0e10cSrcweir 		}
1840cdf0e10cSrcweir 	}
1841cdf0e10cSrcweir }
1842cdf0e10cSrcweir 
1843cdf0e10cSrcweir 
1844cdf0e10cSrcweir 
1845cdf0e10cSrcweir //
1846cdf0e10cSrcweir // DocInfo fields with date/time attributes
1847cdf0e10cSrcweir //
1848cdf0e10cSrcweir 
1849cdf0e10cSrcweir TYPEINIT1( XMLDateTimeDocInfoImportContext, XMLSimpleDocInfoImportContext );
1850cdf0e10cSrcweir 
XMLDateTimeDocInfoImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName,sal_uInt16 nToken)1851cdf0e10cSrcweir XMLDateTimeDocInfoImportContext::XMLDateTimeDocInfoImportContext(
1852cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
1853cdf0e10cSrcweir 	const OUString& sLocalName, sal_uInt16 nToken)
1854cdf0e10cSrcweir :	XMLSimpleDocInfoImportContext(rImport, rHlp, nPrfx, sLocalName,nToken, sal_False, sal_False)
1855cdf0e10cSrcweir ,	sPropertyNumberFormat(RTL_CONSTASCII_USTRINGPARAM(sAPI_number_format))
1856cdf0e10cSrcweir ,	sPropertyIsDate(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_date))
1857cdf0e10cSrcweir ,	sPropertyIsFixedLanguage(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed_language))
1858cdf0e10cSrcweir ,	nFormat(0)
1859cdf0e10cSrcweir ,	bFormatOK(sal_False)
1860cdf0e10cSrcweir ,	bIsDefaultLanguage(sal_True)
1861cdf0e10cSrcweir {
1862cdf0e10cSrcweir 	// we allow processing of EDIT_DURATION here, because import of actual
1863cdf0e10cSrcweir 	// is not supported anyway. If it was, we'd need an extra import class
1864cdf0e10cSrcweir 	// because times and time durations are presented differently!
1865cdf0e10cSrcweir 
1866cdf0e10cSrcweir 	bValid = sal_True;
1867cdf0e10cSrcweir 	switch (nToken)
1868cdf0e10cSrcweir 	{
1869cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_CREATION_DATE:
1870cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_PRINT_DATE:
1871cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SAVE_DATE:
1872cdf0e10cSrcweir 			bIsDate = sal_True;
1873cdf0e10cSrcweir 			bHasDateTime = sal_True;
1874cdf0e10cSrcweir 			break;
1875cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_CREATION_TIME:
1876cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_PRINT_TIME:
1877cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_SAVE_TIME:
1878cdf0e10cSrcweir 			bIsDate = sal_False;
1879cdf0e10cSrcweir 			bHasDateTime = sal_True;
1880cdf0e10cSrcweir 			break;
1881cdf0e10cSrcweir 		case XML_TOK_TEXT_DOCUMENT_EDIT_DURATION:
1882cdf0e10cSrcweir 			bIsDate = sal_False;
1883cdf0e10cSrcweir 			bHasDateTime = sal_False;
1884cdf0e10cSrcweir 			break;
1885cdf0e10cSrcweir 		default:
1886cdf0e10cSrcweir 			DBG_ERROR(
1887cdf0e10cSrcweir 				"XMLDateTimeDocInfoImportContext needs date/time doc. fields");
1888cdf0e10cSrcweir 			bValid = sal_False;
1889cdf0e10cSrcweir 			break;
1890cdf0e10cSrcweir 	}
1891cdf0e10cSrcweir }
1892cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1893cdf0e10cSrcweir void XMLDateTimeDocInfoImportContext::ProcessAttribute(
1894cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
1895cdf0e10cSrcweir 	const OUString& sAttrValue )
1896cdf0e10cSrcweir {
1897cdf0e10cSrcweir 	switch (nAttrToken)
1898cdf0e10cSrcweir 	{
1899cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DATA_STYLE_NAME:
1900cdf0e10cSrcweir 		{
1901cdf0e10cSrcweir 			sal_Int32 nKey = GetImportHelper().GetDataStyleKey(
1902cdf0e10cSrcweir 											   sAttrValue, &bIsDefaultLanguage);
1903cdf0e10cSrcweir 			if (-1 != nKey)
1904cdf0e10cSrcweir 			{
1905cdf0e10cSrcweir 				nFormat = nKey;
1906cdf0e10cSrcweir 				bFormatOK = sal_True;
1907cdf0e10cSrcweir 			}
1908cdf0e10cSrcweir 			break;
1909cdf0e10cSrcweir 		}
1910cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_FIXED:
1911cdf0e10cSrcweir 			XMLSimpleDocInfoImportContext::ProcessAttribute(nAttrToken,
1912cdf0e10cSrcweir 															sAttrValue);
1913cdf0e10cSrcweir 			break;
1914cdf0e10cSrcweir 		default:
1915cdf0e10cSrcweir 			// ignore -> we can't set date/time value anyway!
1916cdf0e10cSrcweir 			break;
1917cdf0e10cSrcweir 	}
1918cdf0e10cSrcweir }
1919cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)1920cdf0e10cSrcweir void XMLDateTimeDocInfoImportContext::PrepareField(
1921cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
1922cdf0e10cSrcweir {
1923cdf0e10cSrcweir 	// process fixed and presentation
1924cdf0e10cSrcweir 	XMLSimpleDocInfoImportContext::PrepareField(xPropertySet);
1925cdf0e10cSrcweir 
1926cdf0e10cSrcweir 	Any aAny;
1927cdf0e10cSrcweir 
1928cdf0e10cSrcweir 	if (bHasDateTime)
1929cdf0e10cSrcweir 	{
1930cdf0e10cSrcweir 		aAny.setValue( &bIsDate, ::getBooleanCppuType());
1931cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyIsDate, aAny);
1932cdf0e10cSrcweir 	}
1933cdf0e10cSrcweir 
1934cdf0e10cSrcweir 	if (bFormatOK)
1935cdf0e10cSrcweir 	{
1936cdf0e10cSrcweir 		aAny <<= nFormat;
1937cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyNumberFormat, aAny);
1938cdf0e10cSrcweir 
1939cdf0e10cSrcweir         if( xPropertySet->getPropertySetInfo()->
1940cdf0e10cSrcweir                 hasPropertyByName( sPropertyIsFixedLanguage ) )
1941cdf0e10cSrcweir         {
1942cdf0e10cSrcweir             sal_Bool bIsFixedLanguage = ! bIsDefaultLanguage;
1943cdf0e10cSrcweir             aAny.setValue( &bIsFixedLanguage, ::getBooleanCppuType() );
1944cdf0e10cSrcweir             xPropertySet->setPropertyValue( sPropertyIsFixedLanguage, aAny );
1945cdf0e10cSrcweir         }
1946cdf0e10cSrcweir 	}
1947cdf0e10cSrcweir 
1948cdf0e10cSrcweir 	// can't set date/time/duration value! Sorry.
1949cdf0e10cSrcweir }
1950cdf0e10cSrcweir 
1951cdf0e10cSrcweir 
1952cdf0e10cSrcweir //
1953cdf0e10cSrcweir // user defined docinfo fields
1954cdf0e10cSrcweir //
1955cdf0e10cSrcweir 
1956cdf0e10cSrcweir TYPEINIT1( XMLUserDocInfoImportContext, XMLSimpleDocInfoImportContext );
1957cdf0e10cSrcweir 
XMLUserDocInfoImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName,sal_uInt16 nToken)1958cdf0e10cSrcweir XMLUserDocInfoImportContext::XMLUserDocInfoImportContext(
1959cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
1960cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName, sal_uInt16 nToken) :
1961cdf0e10cSrcweir 		XMLSimpleDocInfoImportContext(rImport, rHlp, nPrfx,
1962cdf0e10cSrcweir 									  sLocalName, nToken,
1963cdf0e10cSrcweir 									  sal_False, sal_False)
1964cdf0e10cSrcweir 	, sPropertyName(RTL_CONSTASCII_USTRINGPARAM(sAPI_name))
1965cdf0e10cSrcweir     , sPropertyNumberFormat(RTL_CONSTASCII_USTRINGPARAM(sAPI_number_format))
1966cdf0e10cSrcweir     , sPropertyIsFixedLanguage(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed_language))
1967cdf0e10cSrcweir     , nFormat(0)
1968cdf0e10cSrcweir     , bFormatOK(sal_False)
1969cdf0e10cSrcweir     , bIsDefaultLanguage( sal_True )
1970cdf0e10cSrcweir {
1971cdf0e10cSrcweir 	bValid = sal_False;
1972cdf0e10cSrcweir }
1973cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)1974cdf0e10cSrcweir void XMLUserDocInfoImportContext::ProcessAttribute(
1975cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
1976cdf0e10cSrcweir 	const OUString& sAttrValue )
1977cdf0e10cSrcweir {
1978cdf0e10cSrcweir 	switch (nAttrToken)
1979cdf0e10cSrcweir 	{
1980cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DATA_STYLE_NAME:
1981cdf0e10cSrcweir 		{
1982cdf0e10cSrcweir 			sal_Int32 nKey = GetImportHelper().GetDataStyleKey(
1983cdf0e10cSrcweir 											   sAttrValue, &bIsDefaultLanguage);
1984cdf0e10cSrcweir 			if (-1 != nKey)
1985cdf0e10cSrcweir 			{
1986cdf0e10cSrcweir 				nFormat = nKey;
1987cdf0e10cSrcweir 				bFormatOK = sal_True;
1988cdf0e10cSrcweir 			}
1989cdf0e10cSrcweir 			break;
1990cdf0e10cSrcweir 		}
1991cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NAME:
1992cdf0e10cSrcweir 		{
1993cdf0e10cSrcweir 			if (!bValid)
1994cdf0e10cSrcweir 			{
1995cdf0e10cSrcweir 				SetServiceName(OUString::createFromAscii( sAPI_docinfo_custom ) );
1996cdf0e10cSrcweir 				aName = sAttrValue;
1997cdf0e10cSrcweir 				bValid = sal_True;
1998cdf0e10cSrcweir 			}
1999cdf0e10cSrcweir 			break;
2000cdf0e10cSrcweir 		}
2001cdf0e10cSrcweir 
2002cdf0e10cSrcweir 		default:
2003cdf0e10cSrcweir 			XMLSimpleDocInfoImportContext::ProcessAttribute(nAttrToken,
2004cdf0e10cSrcweir 															sAttrValue);
2005cdf0e10cSrcweir 			break;
2006cdf0e10cSrcweir 	}
2007cdf0e10cSrcweir }
2008cdf0e10cSrcweir 
PrepareField(const::com::sun::star::uno::Reference<::com::sun::star::beans::XPropertySet> & xPropertySet)2009cdf0e10cSrcweir void XMLUserDocInfoImportContext::PrepareField(
2010cdf0e10cSrcweir 		const ::com::sun::star::uno::Reference<
2011cdf0e10cSrcweir 		::com::sun::star::beans::XPropertySet> & xPropertySet)
2012cdf0e10cSrcweir {
2013cdf0e10cSrcweir     uno::Any aAny;
2014cdf0e10cSrcweir 	if ( aName.getLength() )
2015cdf0e10cSrcweir 	{
2016cdf0e10cSrcweir 		aAny <<= aName;
2017cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyName, aAny);
2018cdf0e10cSrcweir 	}
2019cdf0e10cSrcweir 	Reference<XPropertySetInfo> xPropertySetInfo(
2020cdf0e10cSrcweir 		xPropertySet->getPropertySetInfo());
2021cdf0e10cSrcweir 	if (bFormatOK &&
2022cdf0e10cSrcweir 		xPropertySetInfo->hasPropertyByName(sPropertyNumberFormat))
2023cdf0e10cSrcweir 	{
2024cdf0e10cSrcweir 		aAny <<= nFormat;
2025cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyNumberFormat, aAny);
2026cdf0e10cSrcweir 
2027cdf0e10cSrcweir         if( xPropertySetInfo->hasPropertyByName( sPropertyIsFixedLanguage ) )
2028cdf0e10cSrcweir         {
2029cdf0e10cSrcweir             sal_Bool bIsFixedLanguage = ! bIsDefaultLanguage;
2030cdf0e10cSrcweir             aAny.setValue( &bIsFixedLanguage, ::getBooleanCppuType() );
2031cdf0e10cSrcweir             xPropertySet->setPropertyValue( sPropertyIsFixedLanguage, aAny );
2032cdf0e10cSrcweir         }
2033cdf0e10cSrcweir     }
2034cdf0e10cSrcweir 
2035cdf0e10cSrcweir     // call superclass to handle "fixed"
2036cdf0e10cSrcweir     XMLSimpleDocInfoImportContext::PrepareField(xPropertySet);
2037cdf0e10cSrcweir }
2038cdf0e10cSrcweir 
2039cdf0e10cSrcweir 
2040cdf0e10cSrcweir //
2041cdf0e10cSrcweir // import hidden paragraph fields
2042cdf0e10cSrcweir //
2043cdf0e10cSrcweir 
2044cdf0e10cSrcweir TYPEINIT1( XMLHiddenParagraphImportContext, XMLTextFieldImportContext );
2045cdf0e10cSrcweir 
XMLHiddenParagraphImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2046cdf0e10cSrcweir XMLHiddenParagraphImportContext::XMLHiddenParagraphImportContext(
2047cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
2048cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
2049cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_hidden_paragraph,
2050cdf0e10cSrcweir 								  nPrfx, sLocalName),
2051cdf0e10cSrcweir 		sPropertyCondition(RTL_CONSTASCII_USTRINGPARAM(sAPI_condition)),
2052cdf0e10cSrcweir 		sPropertyIsHidden(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_hidden)),
2053cdf0e10cSrcweir 		sCondition(),
2054cdf0e10cSrcweir 		bIsHidden(sal_False)
2055cdf0e10cSrcweir {
2056cdf0e10cSrcweir }
2057cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2058cdf0e10cSrcweir void XMLHiddenParagraphImportContext::ProcessAttribute(
2059cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2060cdf0e10cSrcweir 	const OUString& sAttrValue )
2061cdf0e10cSrcweir {
2062cdf0e10cSrcweir 	if (XML_TOK_TEXTFIELD_CONDITION == nAttrToken)
2063cdf0e10cSrcweir 	{
2064cdf0e10cSrcweir 		OUString sTmp;
2065cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap()._GetKeyByAttrName(
2066cdf0e10cSrcweir 									sAttrValue, &sTmp, sal_False );
2067cdf0e10cSrcweir 		if( XML_NAMESPACE_OOOW == nPrefix )
2068cdf0e10cSrcweir 		{
2069cdf0e10cSrcweir 			sCondition = sTmp;
2070cdf0e10cSrcweir 			bValid = sal_True;
2071cdf0e10cSrcweir 		}
2072cdf0e10cSrcweir 		else
2073cdf0e10cSrcweir 			sCondition = sAttrValue;
2074cdf0e10cSrcweir 	}
2075cdf0e10cSrcweir 	else if (XML_TOK_TEXTFIELD_IS_HIDDEN == nAttrToken)
2076cdf0e10cSrcweir 	{
2077cdf0e10cSrcweir 		sal_Bool bTmp;
2078cdf0e10cSrcweir 		if (SvXMLUnitConverter::convertBool(bTmp, sAttrValue))
2079cdf0e10cSrcweir 		{
2080cdf0e10cSrcweir 			bIsHidden = bTmp;
2081cdf0e10cSrcweir 		}
2082cdf0e10cSrcweir 	}
2083cdf0e10cSrcweir }
2084cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2085cdf0e10cSrcweir void XMLHiddenParagraphImportContext::PrepareField(
2086cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2087cdf0e10cSrcweir {
2088cdf0e10cSrcweir 	Any aAny;
2089cdf0e10cSrcweir 	aAny <<= sCondition;
2090cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyCondition, aAny);
2091cdf0e10cSrcweir 
2092cdf0e10cSrcweir 	aAny.setValue( &bIsHidden, ::getBooleanCppuType() );
2093cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyIsHidden, aAny);
2094cdf0e10cSrcweir }
2095cdf0e10cSrcweir 
2096cdf0e10cSrcweir 
2097cdf0e10cSrcweir 
2098cdf0e10cSrcweir //
2099cdf0e10cSrcweir // import conditional text (<text:conditional-text>)
2100cdf0e10cSrcweir //
2101cdf0e10cSrcweir 
2102cdf0e10cSrcweir TYPEINIT1( XMLConditionalTextImportContext, XMLTextFieldImportContext );
2103cdf0e10cSrcweir 
XMLConditionalTextImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2104cdf0e10cSrcweir XMLConditionalTextImportContext::XMLConditionalTextImportContext(
2105cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
2106cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
2107cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_conditional_text,
2108cdf0e10cSrcweir 								  nPrfx, sLocalName),
2109cdf0e10cSrcweir 		sPropertyCondition(RTL_CONSTASCII_USTRINGPARAM(sAPI_condition)),
2110cdf0e10cSrcweir 		sPropertyTrueContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_true_content)),
2111cdf0e10cSrcweir 		sPropertyFalseContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_false_content)),
2112cdf0e10cSrcweir 		sPropertyIsConditionTrue(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_condition_true)),
2113cdf0e10cSrcweir         sPropertyCurrentPresentation(RTL_CONSTASCII_USTRINGPARAM(sAPI_current_presentation)),
2114cdf0e10cSrcweir 		bConditionOK(sal_False),
2115cdf0e10cSrcweir 		bTrueOK(sal_False),
2116cdf0e10cSrcweir 		bFalseOK(sal_False),
2117cdf0e10cSrcweir 		bCurrentValue(sal_False)
2118cdf0e10cSrcweir {
2119cdf0e10cSrcweir }
2120cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2121cdf0e10cSrcweir void XMLConditionalTextImportContext::ProcessAttribute(
2122cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2123cdf0e10cSrcweir 	const OUString& sAttrValue )
2124cdf0e10cSrcweir {
2125cdf0e10cSrcweir 	switch (nAttrToken)
2126cdf0e10cSrcweir 	{
2127cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_CONDITION:
2128cdf0e10cSrcweir 			{
2129cdf0e10cSrcweir 				OUString sTmp;
2130cdf0e10cSrcweir 				sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
2131cdf0e10cSrcweir 						_GetKeyByAttrName( sAttrValue, &sTmp, sal_False );
2132cdf0e10cSrcweir 				if( XML_NAMESPACE_OOOW == nPrefix )
2133cdf0e10cSrcweir 				{
2134cdf0e10cSrcweir 					sCondition = sTmp;
2135cdf0e10cSrcweir 					bConditionOK = sal_True;
2136cdf0e10cSrcweir 				}
2137cdf0e10cSrcweir 				else
2138cdf0e10cSrcweir 					sCondition = sAttrValue;
2139cdf0e10cSrcweir 			}
2140cdf0e10cSrcweir 			break;
2141cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_STRING_VALUE_IF_FALSE:
2142cdf0e10cSrcweir 			sFalseContent = sAttrValue;
2143cdf0e10cSrcweir 			bFalseOK = sal_True;
2144cdf0e10cSrcweir 			break;
2145cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_STRING_VALUE_IF_TRUE:
2146cdf0e10cSrcweir 			sTrueContent = sAttrValue;
2147cdf0e10cSrcweir 			bTrueOK = sal_True;
2148cdf0e10cSrcweir 			break;
2149cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_CURRENT_VALUE:
2150cdf0e10cSrcweir 		{
2151cdf0e10cSrcweir 			sal_Bool bTmp;
2152cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertBool(bTmp, sAttrValue))
2153cdf0e10cSrcweir 			{
2154cdf0e10cSrcweir 				bCurrentValue = bTmp;
2155cdf0e10cSrcweir 			}
2156cdf0e10cSrcweir 			break;
2157cdf0e10cSrcweir 		}
2158cdf0e10cSrcweir 	}
2159cdf0e10cSrcweir 
2160cdf0e10cSrcweir 	bValid = bConditionOK && bFalseOK && bTrueOK;
2161cdf0e10cSrcweir }
2162cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2163cdf0e10cSrcweir void XMLConditionalTextImportContext::PrepareField(
2164cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2165cdf0e10cSrcweir {
2166cdf0e10cSrcweir 	Any aAny;
2167cdf0e10cSrcweir 
2168cdf0e10cSrcweir 	aAny <<= sCondition;
2169cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyCondition, aAny);
2170cdf0e10cSrcweir 
2171cdf0e10cSrcweir 	aAny <<= sFalseContent;
2172cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyFalseContent, aAny);
2173cdf0e10cSrcweir 
2174cdf0e10cSrcweir 	aAny <<= sTrueContent;
2175cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyTrueContent, aAny);
2176cdf0e10cSrcweir 
2177cdf0e10cSrcweir     aAny.setValue( &bCurrentValue, ::getBooleanCppuType() );
2178cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyIsConditionTrue, aAny);
2179cdf0e10cSrcweir 
2180cdf0e10cSrcweir 	aAny <<= GetContent();
2181cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyCurrentPresentation, aAny);
2182cdf0e10cSrcweir }
2183cdf0e10cSrcweir 
2184cdf0e10cSrcweir 
2185cdf0e10cSrcweir 
2186cdf0e10cSrcweir //
2187cdf0e10cSrcweir // hidden text
2188cdf0e10cSrcweir //
2189cdf0e10cSrcweir 
2190cdf0e10cSrcweir TYPEINIT1( XMLHiddenTextImportContext, XMLTextFieldImportContext);
2191cdf0e10cSrcweir 
XMLHiddenTextImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2192cdf0e10cSrcweir XMLHiddenTextImportContext::XMLHiddenTextImportContext(
2193cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
2194cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
2195cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_hidden_text,
2196cdf0e10cSrcweir 								  nPrfx, sLocalName),
2197cdf0e10cSrcweir 		sPropertyCondition(RTL_CONSTASCII_USTRINGPARAM(sAPI_condition)),
2198cdf0e10cSrcweir 		sPropertyContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_content)),
2199cdf0e10cSrcweir 		sPropertyIsHidden(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_hidden)),
2200cdf0e10cSrcweir 		bConditionOK(sal_False),
2201cdf0e10cSrcweir 		bStringOK(sal_False),
2202cdf0e10cSrcweir 		bIsHidden(sal_False)
2203cdf0e10cSrcweir {
2204cdf0e10cSrcweir }
2205cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2206cdf0e10cSrcweir void XMLHiddenTextImportContext::ProcessAttribute(
2207cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2208cdf0e10cSrcweir 	const OUString& sAttrValue )
2209cdf0e10cSrcweir {
2210cdf0e10cSrcweir 	switch (nAttrToken)
2211cdf0e10cSrcweir 	{
2212cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_CONDITION:
2213cdf0e10cSrcweir 			{
2214cdf0e10cSrcweir 				OUString sTmp;
2215cdf0e10cSrcweir 				sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
2216cdf0e10cSrcweir 										_GetKeyByAttrName( sAttrValue, &sTmp, sal_False );
2217cdf0e10cSrcweir 				if( XML_NAMESPACE_OOOW == nPrefix )
2218cdf0e10cSrcweir 				{
2219cdf0e10cSrcweir 					sCondition = sTmp;
2220cdf0e10cSrcweir 					bConditionOK = sal_True;
2221cdf0e10cSrcweir 				}
2222cdf0e10cSrcweir 				else
2223cdf0e10cSrcweir 					sCondition = sAttrValue;
2224cdf0e10cSrcweir 			}
2225cdf0e10cSrcweir 			break;
2226cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_STRING_VALUE:
2227cdf0e10cSrcweir 			sString = sAttrValue;
2228cdf0e10cSrcweir 			bStringOK = sal_True;
2229cdf0e10cSrcweir 			break;
2230cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_IS_HIDDEN:
2231cdf0e10cSrcweir 		{
2232cdf0e10cSrcweir 			sal_Bool bTmp;
2233cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertBool(bTmp, sAttrValue))
2234cdf0e10cSrcweir 			{
2235cdf0e10cSrcweir 				bIsHidden = bTmp;
2236cdf0e10cSrcweir 			}
2237cdf0e10cSrcweir 			break;
2238cdf0e10cSrcweir 		}
2239cdf0e10cSrcweir 	}
2240cdf0e10cSrcweir 
2241cdf0e10cSrcweir 	bValid = bConditionOK && bStringOK;
2242cdf0e10cSrcweir }
2243cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2244cdf0e10cSrcweir void XMLHiddenTextImportContext::PrepareField(
2245cdf0e10cSrcweir 		const Reference<XPropertySet> & xPropertySet)
2246cdf0e10cSrcweir {
2247cdf0e10cSrcweir 	Any aAny;
2248cdf0e10cSrcweir 
2249cdf0e10cSrcweir 	aAny <<= sCondition;
2250cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyCondition, aAny);
2251cdf0e10cSrcweir 
2252cdf0e10cSrcweir 	aAny <<= sString;
2253cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyContent, aAny);
2254cdf0e10cSrcweir 
2255cdf0e10cSrcweir 	aAny.setValue( &bIsHidden, ::getBooleanCppuType() );
2256cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyIsHidden, aAny);
2257cdf0e10cSrcweir }
2258cdf0e10cSrcweir 
2259cdf0e10cSrcweir 
2260cdf0e10cSrcweir 
2261cdf0e10cSrcweir //
2262cdf0e10cSrcweir // file name fields
2263cdf0e10cSrcweir //
2264cdf0e10cSrcweir 
2265cdf0e10cSrcweir TYPEINIT1( XMLFileNameImportContext, XMLTextFieldImportContext );
2266cdf0e10cSrcweir 
2267cdf0e10cSrcweir static const SvXMLEnumMapEntry aFilenameDisplayMap[] =
2268cdf0e10cSrcweir {
2269cdf0e10cSrcweir 	{ XML_PATH,				    FilenameDisplayFormat::PATH },
2270cdf0e10cSrcweir 	{ XML_NAME, 				FilenameDisplayFormat::NAME },
2271cdf0e10cSrcweir 	{ XML_NAME_AND_EXTENSION,	FilenameDisplayFormat::NAME_AND_EXT },
2272cdf0e10cSrcweir 	{ XML_FULL, 				FilenameDisplayFormat::FULL },
2273cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
2274cdf0e10cSrcweir };
2275cdf0e10cSrcweir 
XMLFileNameImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2276cdf0e10cSrcweir XMLFileNameImportContext::XMLFileNameImportContext(
2277cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
2278cdf0e10cSrcweir 	const OUString& sLocalName) :
2279cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_file_name,
2280cdf0e10cSrcweir 								  nPrfx, sLocalName),
2281cdf0e10cSrcweir 		sPropertyFixed(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_fixed)),
2282cdf0e10cSrcweir 		sPropertyFileFormat(RTL_CONSTASCII_USTRINGPARAM(sAPI_file_format)),
2283cdf0e10cSrcweir 		sPropertyCurrentPresentation(
2284cdf0e10cSrcweir 			RTL_CONSTASCII_USTRINGPARAM(sAPI_current_presentation)),
2285cdf0e10cSrcweir 		nFormat(FilenameDisplayFormat::FULL),
2286cdf0e10cSrcweir 		bFixed(sal_False)
2287cdf0e10cSrcweir {
2288cdf0e10cSrcweir 	bValid = sal_True;
2289cdf0e10cSrcweir }
2290cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const::rtl::OUString & sAttrValue)2291cdf0e10cSrcweir void XMLFileNameImportContext::ProcessAttribute(
2292cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2293cdf0e10cSrcweir 	const ::rtl::OUString& sAttrValue )
2294cdf0e10cSrcweir {
2295cdf0e10cSrcweir 	switch (nAttrToken)
2296cdf0e10cSrcweir 	{
2297cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_FIXED:
2298cdf0e10cSrcweir 		{
2299cdf0e10cSrcweir 			sal_Bool bTmp;
2300cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertBool(bTmp, sAttrValue))
2301cdf0e10cSrcweir 			{
2302cdf0e10cSrcweir 				bFixed = bTmp;
2303cdf0e10cSrcweir 			}
2304cdf0e10cSrcweir 			break;
2305cdf0e10cSrcweir 		}
2306cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DISPLAY:
2307cdf0e10cSrcweir 		{
2308cdf0e10cSrcweir 			sal_uInt16 nTmp;
2309cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
2310cdf0e10cSrcweir 												aFilenameDisplayMap))
2311cdf0e10cSrcweir 			{
2312cdf0e10cSrcweir 				nFormat = (sal_uInt16)nTmp;
2313cdf0e10cSrcweir 			}
2314cdf0e10cSrcweir 			break;
2315cdf0e10cSrcweir 		}
2316cdf0e10cSrcweir 		default:
2317cdf0e10cSrcweir 			; // unkown attribute: ignore
2318cdf0e10cSrcweir 			break;
2319cdf0e10cSrcweir 	}
2320cdf0e10cSrcweir }
2321cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2322cdf0e10cSrcweir void XMLFileNameImportContext::PrepareField(
2323cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2324cdf0e10cSrcweir {
2325cdf0e10cSrcweir 	Any aAny;
2326cdf0e10cSrcweir 
2327cdf0e10cSrcweir 	// properties are optional
2328cdf0e10cSrcweir 	Reference<XPropertySetInfo> xPropertySetInfo(
2329cdf0e10cSrcweir 		xPropertySet->getPropertySetInfo());
2330cdf0e10cSrcweir 
2331cdf0e10cSrcweir  	if (xPropertySetInfo->hasPropertyByName(sPropertyFixed))
2332cdf0e10cSrcweir  	{
2333cdf0e10cSrcweir  		aAny <<= bFixed;
2334cdf0e10cSrcweir  		xPropertySet->setPropertyValue(sPropertyFixed, aAny);
2335cdf0e10cSrcweir  	}
2336cdf0e10cSrcweir 
2337cdf0e10cSrcweir 	if (xPropertySetInfo->hasPropertyByName(sPropertyFileFormat))
2338cdf0e10cSrcweir 	{
2339cdf0e10cSrcweir 		aAny <<= nFormat;
2340cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyFileFormat, aAny);
2341cdf0e10cSrcweir 	}
2342cdf0e10cSrcweir 
2343cdf0e10cSrcweir 	if (xPropertySetInfo->hasPropertyByName(sPropertyCurrentPresentation))
2344cdf0e10cSrcweir 	{
2345cdf0e10cSrcweir 		aAny <<= GetContent();
2346cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyCurrentPresentation, aAny);
2347cdf0e10cSrcweir 	}
2348cdf0e10cSrcweir }
2349cdf0e10cSrcweir 
2350cdf0e10cSrcweir 
2351cdf0e10cSrcweir //
2352cdf0e10cSrcweir // template name field
2353cdf0e10cSrcweir //
2354cdf0e10cSrcweir 
2355cdf0e10cSrcweir static const SvXMLEnumMapEntry aTemplateDisplayMap[] =
2356cdf0e10cSrcweir {
2357cdf0e10cSrcweir 	{ XML_FULL, 				TemplateDisplayFormat::FULL },
2358cdf0e10cSrcweir 	{ XML_PATH,				    TemplateDisplayFormat::PATH },
2359cdf0e10cSrcweir 	{ XML_NAME,				    TemplateDisplayFormat::NAME },
2360cdf0e10cSrcweir 	{ XML_NAME_AND_EXTENSION,	TemplateDisplayFormat::NAME_AND_EXT },
2361cdf0e10cSrcweir 	{ XML_AREA, 				TemplateDisplayFormat::AREA },
2362cdf0e10cSrcweir 	{ XML_TITLE,				TemplateDisplayFormat::TITLE },
2363cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
2364cdf0e10cSrcweir };
2365cdf0e10cSrcweir 
2366cdf0e10cSrcweir TYPEINIT1( XMLTemplateNameImportContext, XMLTextFieldImportContext );
2367cdf0e10cSrcweir 
XMLTemplateNameImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2368cdf0e10cSrcweir XMLTemplateNameImportContext::XMLTemplateNameImportContext(
2369cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
2370cdf0e10cSrcweir 	const OUString& sLocalName) :
2371cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_template_name,
2372cdf0e10cSrcweir 								  nPrfx, sLocalName),
2373cdf0e10cSrcweir 		sPropertyFileFormat(RTL_CONSTASCII_USTRINGPARAM(sAPI_file_format)),
2374cdf0e10cSrcweir 		nFormat(TemplateDisplayFormat::FULL)
2375cdf0e10cSrcweir {
2376cdf0e10cSrcweir 	bValid = sal_True;
2377cdf0e10cSrcweir }
2378cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2379cdf0e10cSrcweir void XMLTemplateNameImportContext::ProcessAttribute(
2380cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2381cdf0e10cSrcweir 	const OUString& sAttrValue )
2382cdf0e10cSrcweir {
2383cdf0e10cSrcweir 	switch (nAttrToken)
2384cdf0e10cSrcweir 	{
2385cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DISPLAY:
2386cdf0e10cSrcweir 		{
2387cdf0e10cSrcweir 			sal_uInt16 nTmp;
2388cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
2389cdf0e10cSrcweir 												aTemplateDisplayMap))
2390cdf0e10cSrcweir 			{
2391cdf0e10cSrcweir 				nFormat = (sal_uInt16)nTmp;
2392cdf0e10cSrcweir 			}
2393cdf0e10cSrcweir 			break;
2394cdf0e10cSrcweir 		}
2395cdf0e10cSrcweir 		default:
2396cdf0e10cSrcweir 			; // unknown attribute: ignore
2397cdf0e10cSrcweir 			break;
2398cdf0e10cSrcweir 	}
2399cdf0e10cSrcweir }
2400cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2401cdf0e10cSrcweir void XMLTemplateNameImportContext::PrepareField(
2402cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2403cdf0e10cSrcweir {
2404cdf0e10cSrcweir 	Any aAny;
2405cdf0e10cSrcweir 
2406cdf0e10cSrcweir 	aAny <<= nFormat;
2407cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyFileFormat, aAny);
2408cdf0e10cSrcweir }
2409cdf0e10cSrcweir 
2410cdf0e10cSrcweir 
2411cdf0e10cSrcweir //
2412cdf0e10cSrcweir // import chapter fields
2413cdf0e10cSrcweir //
2414cdf0e10cSrcweir 
2415cdf0e10cSrcweir TYPEINIT1( XMLChapterImportContext, XMLTextFieldImportContext );
2416cdf0e10cSrcweir 
2417cdf0e10cSrcweir static const SvXMLEnumMapEntry aChapterDisplayMap[] =
2418cdf0e10cSrcweir {
2419cdf0e10cSrcweir 	{ XML_NAME,					    ChapterFormat::NAME },
2420cdf0e10cSrcweir 	{ XML_NUMBER,					ChapterFormat::NUMBER },
2421cdf0e10cSrcweir 	{ XML_NUMBER_AND_NAME,			ChapterFormat::NAME_NUMBER },
2422cdf0e10cSrcweir 	{ XML_PLAIN_NUMBER_AND_NAME,	ChapterFormat::NO_PREFIX_SUFFIX },
2423cdf0e10cSrcweir 	{ XML_PLAIN_NUMBER,			    ChapterFormat::DIGIT },
2424cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
2425cdf0e10cSrcweir };
2426cdf0e10cSrcweir 
XMLChapterImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2427cdf0e10cSrcweir XMLChapterImportContext::XMLChapterImportContext(
2428cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
2429cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
2430cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_chapter,
2431cdf0e10cSrcweir 								  nPrfx, sLocalName),
2432cdf0e10cSrcweir 		sPropertyChapterFormat(
2433cdf0e10cSrcweir 			RTL_CONSTASCII_USTRINGPARAM(sAPI_chapter_format)),
2434cdf0e10cSrcweir 		sPropertyLevel(RTL_CONSTASCII_USTRINGPARAM(sAPI_level)),
2435cdf0e10cSrcweir 		nFormat(ChapterFormat::NAME_NUMBER),
2436cdf0e10cSrcweir 		nLevel(0)
2437cdf0e10cSrcweir {
2438cdf0e10cSrcweir 	bValid = sal_True;
2439cdf0e10cSrcweir }
2440cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2441cdf0e10cSrcweir void XMLChapterImportContext::ProcessAttribute(
2442cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2443cdf0e10cSrcweir 	const OUString& sAttrValue )
2444cdf0e10cSrcweir {
2445cdf0e10cSrcweir 	switch (nAttrToken)
2446cdf0e10cSrcweir 	{
2447cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DISPLAY:
2448cdf0e10cSrcweir 		{
2449cdf0e10cSrcweir 			sal_uInt16 nTmp;
2450cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
2451cdf0e10cSrcweir 												aChapterDisplayMap))
2452cdf0e10cSrcweir 			{
2453cdf0e10cSrcweir 				nFormat = (sal_Int16)nTmp;
2454cdf0e10cSrcweir 			}
2455cdf0e10cSrcweir 			break;
2456cdf0e10cSrcweir 		}
2457cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_OUTLINE_LEVEL:
2458cdf0e10cSrcweir 		{
2459cdf0e10cSrcweir 			sal_Int32 nTmp;
2460cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertNumber(
2461cdf0e10cSrcweir 				nTmp, sAttrValue, 1,
2462cdf0e10cSrcweir 				GetImport().GetTextImport()->GetChapterNumbering()->getCount()
2463cdf0e10cSrcweir 				))
2464cdf0e10cSrcweir 			{
2465cdf0e10cSrcweir 				// API numbers 0..9, we number 1..10
2466cdf0e10cSrcweir 				nLevel = (sal_Int8)nTmp;
2467cdf0e10cSrcweir 				nLevel--;
2468cdf0e10cSrcweir 			}
2469cdf0e10cSrcweir 			break;
2470cdf0e10cSrcweir 		}
2471cdf0e10cSrcweir 		default:
2472cdf0e10cSrcweir 			; // unknown attribute: ignore
2473cdf0e10cSrcweir 			break;
2474cdf0e10cSrcweir 	}
2475cdf0e10cSrcweir }
2476cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2477cdf0e10cSrcweir void XMLChapterImportContext::PrepareField(
2478cdf0e10cSrcweir 		const Reference<XPropertySet> & xPropertySet)
2479cdf0e10cSrcweir {
2480cdf0e10cSrcweir 	Any aAny;
2481cdf0e10cSrcweir 
2482cdf0e10cSrcweir 	aAny <<= nFormat;
2483cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyChapterFormat, aAny);
2484cdf0e10cSrcweir 
2485cdf0e10cSrcweir 	aAny <<= nLevel;
2486cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyLevel, aAny);
2487cdf0e10cSrcweir }
2488cdf0e10cSrcweir 
2489cdf0e10cSrcweir 
2490cdf0e10cSrcweir //
2491cdf0e10cSrcweir // counting fields
2492cdf0e10cSrcweir //
2493cdf0e10cSrcweir 
2494cdf0e10cSrcweir TYPEINIT1( XMLCountFieldImportContext, XMLTextFieldImportContext );
2495cdf0e10cSrcweir 
XMLCountFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName,sal_uInt16 nToken)2496cdf0e10cSrcweir XMLCountFieldImportContext::XMLCountFieldImportContext(
2497cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
2498cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName, sal_uInt16 nToken) :
2499cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, MapTokenToServiceName(nToken),
2500cdf0e10cSrcweir 								  nPrfx, sLocalName),
2501cdf0e10cSrcweir 		sPropertyNumberingType(
2502cdf0e10cSrcweir 			RTL_CONSTASCII_USTRINGPARAM(sAPI_numbering_type)),
2503cdf0e10cSrcweir 		sNumberFormat(),
2504cdf0e10cSrcweir 		sLetterSync(),
2505cdf0e10cSrcweir 		bNumberFormatOK(sal_False)
2506cdf0e10cSrcweir {
2507cdf0e10cSrcweir 	bValid = sal_True;
2508cdf0e10cSrcweir }
2509cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2510cdf0e10cSrcweir void XMLCountFieldImportContext::ProcessAttribute(
2511cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2512cdf0e10cSrcweir 	const OUString& sAttrValue )
2513cdf0e10cSrcweir {
2514cdf0e10cSrcweir 	switch (nAttrToken)
2515cdf0e10cSrcweir 	{
2516cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NUM_FORMAT:
2517cdf0e10cSrcweir 			sNumberFormat = sAttrValue;
2518cdf0e10cSrcweir 			bNumberFormatOK = sal_True;
2519cdf0e10cSrcweir 			break;
2520cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NUM_LETTER_SYNC:
2521cdf0e10cSrcweir 			sLetterSync = sAttrValue;
2522cdf0e10cSrcweir 			break;
2523cdf0e10cSrcweir 	}
2524cdf0e10cSrcweir }
2525cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2526cdf0e10cSrcweir void XMLCountFieldImportContext::PrepareField(
2527cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2528cdf0e10cSrcweir {
2529cdf0e10cSrcweir 	Any aAny;
2530cdf0e10cSrcweir 
2531cdf0e10cSrcweir 	// properties optional
2532cdf0e10cSrcweir 	// (only page count, but do for all to save common implementation)
2533cdf0e10cSrcweir 
2534cdf0e10cSrcweir 	if (xPropertySet->getPropertySetInfo()->
2535cdf0e10cSrcweir 		hasPropertyByName(sPropertyNumberingType))
2536cdf0e10cSrcweir 	{
2537cdf0e10cSrcweir 		sal_Int16 nNumType;
2538cdf0e10cSrcweir 		if( bNumberFormatOK )
2539cdf0e10cSrcweir 		{
2540cdf0e10cSrcweir 			nNumType= style::NumberingType::ARABIC;
2541cdf0e10cSrcweir 			GetImport().GetMM100UnitConverter().convertNumFormat( nNumType,
2542cdf0e10cSrcweir 													sNumberFormat,
2543cdf0e10cSrcweir 													sLetterSync );
2544cdf0e10cSrcweir 		}
2545cdf0e10cSrcweir 		else
2546cdf0e10cSrcweir 			nNumType = style::NumberingType::PAGE_DESCRIPTOR;
2547cdf0e10cSrcweir 		aAny <<= nNumType;
2548cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
2549cdf0e10cSrcweir 	}
2550cdf0e10cSrcweir }
2551cdf0e10cSrcweir 
MapTokenToServiceName(sal_uInt16 nToken)2552cdf0e10cSrcweir const sal_Char* XMLCountFieldImportContext::MapTokenToServiceName(
2553cdf0e10cSrcweir 	sal_uInt16 nToken)
2554cdf0e10cSrcweir {
2555cdf0e10cSrcweir 	const sal_Char* pServiceName = NULL;
2556cdf0e10cSrcweir 
2557cdf0e10cSrcweir 	switch (nToken)
2558cdf0e10cSrcweir 	{
2559cdf0e10cSrcweir 		case XML_TOK_TEXT_WORD_COUNT:
2560cdf0e10cSrcweir 			pServiceName = sAPI_word_count;
2561cdf0e10cSrcweir 			break;
2562cdf0e10cSrcweir 		case XML_TOK_TEXT_PARAGRAPH_COUNT:
2563cdf0e10cSrcweir 			pServiceName = sAPI_paragraph_count;
2564cdf0e10cSrcweir 			break;
2565cdf0e10cSrcweir 		case XML_TOK_TEXT_TABLE_COUNT:
2566cdf0e10cSrcweir 			pServiceName = sAPI_table_count;
2567cdf0e10cSrcweir 			break;
2568cdf0e10cSrcweir 		case XML_TOK_TEXT_CHARACTER_COUNT:
2569cdf0e10cSrcweir 			pServiceName = sAPI_character_count;
2570cdf0e10cSrcweir 			break;
2571cdf0e10cSrcweir 		case XML_TOK_TEXT_IMAGE_COUNT:
2572cdf0e10cSrcweir 			pServiceName = sAPI_graphic_object_count;
2573cdf0e10cSrcweir 			break;
2574cdf0e10cSrcweir 		case XML_TOK_TEXT_OBJECT_COUNT:
2575cdf0e10cSrcweir 			pServiceName = sAPI_embedded_object_count;
2576cdf0e10cSrcweir 			break;
2577cdf0e10cSrcweir 		case XML_TOK_TEXT_PAGE_COUNT:
2578cdf0e10cSrcweir 			pServiceName = sAPI_page_count;
2579cdf0e10cSrcweir 			break;
2580cdf0e10cSrcweir 		default:
2581cdf0e10cSrcweir 			pServiceName = NULL;
2582cdf0e10cSrcweir 			DBG_ERROR("unknown count field!");
2583cdf0e10cSrcweir 			break;
2584cdf0e10cSrcweir 	}
2585cdf0e10cSrcweir 
2586cdf0e10cSrcweir 	return pServiceName;
2587cdf0e10cSrcweir }
2588cdf0e10cSrcweir 
2589cdf0e10cSrcweir 
2590cdf0e10cSrcweir 
2591cdf0e10cSrcweir //
2592cdf0e10cSrcweir // page variable import
2593cdf0e10cSrcweir //
2594cdf0e10cSrcweir 
2595cdf0e10cSrcweir TYPEINIT1( XMLPageVarGetFieldImportContext, XMLTextFieldImportContext );
2596cdf0e10cSrcweir 
XMLPageVarGetFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2597cdf0e10cSrcweir XMLPageVarGetFieldImportContext::XMLPageVarGetFieldImportContext(
2598cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
2599cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
2600cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_reference_page_get,
2601cdf0e10cSrcweir 								  nPrfx, sLocalName),
2602cdf0e10cSrcweir 		sPropertyNumberingType(
2603cdf0e10cSrcweir 			RTL_CONSTASCII_USTRINGPARAM(sAPI_numbering_type)),
2604cdf0e10cSrcweir 		sNumberFormat(),
2605cdf0e10cSrcweir 		sLetterSync(),
2606cdf0e10cSrcweir 		bNumberFormatOK(sal_False)
2607cdf0e10cSrcweir {
2608cdf0e10cSrcweir 	bValid = sal_True;
2609cdf0e10cSrcweir }
2610cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2611cdf0e10cSrcweir void XMLPageVarGetFieldImportContext::ProcessAttribute(
2612cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2613cdf0e10cSrcweir 	const OUString& sAttrValue )
2614cdf0e10cSrcweir {
2615cdf0e10cSrcweir 	switch (nAttrToken)
2616cdf0e10cSrcweir 	{
2617cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NUM_FORMAT:
2618cdf0e10cSrcweir 			sNumberFormat = sAttrValue;
2619cdf0e10cSrcweir 			bNumberFormatOK = sal_True;
2620cdf0e10cSrcweir 			break;
2621cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NUM_LETTER_SYNC:
2622cdf0e10cSrcweir 			sLetterSync = sAttrValue;
2623cdf0e10cSrcweir 			break;
2624cdf0e10cSrcweir 	}
2625cdf0e10cSrcweir }
2626cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2627cdf0e10cSrcweir void XMLPageVarGetFieldImportContext::PrepareField(
2628cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2629cdf0e10cSrcweir {
2630cdf0e10cSrcweir 	Any aAny;
2631cdf0e10cSrcweir 
2632cdf0e10cSrcweir 	sal_Int16 nNumType;
2633cdf0e10cSrcweir 	if( bNumberFormatOK )
2634cdf0e10cSrcweir 	{
2635cdf0e10cSrcweir 		nNumType= style::NumberingType::ARABIC;
2636cdf0e10cSrcweir 		GetImport().GetMM100UnitConverter().convertNumFormat( nNumType,
2637cdf0e10cSrcweir 													sNumberFormat,
2638cdf0e10cSrcweir 													sLetterSync );
2639cdf0e10cSrcweir 	}
2640cdf0e10cSrcweir 	else
2641cdf0e10cSrcweir 		nNumType = style::NumberingType::PAGE_DESCRIPTOR;
2642cdf0e10cSrcweir 	aAny <<= nNumType;
2643cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
2644cdf0e10cSrcweir 
2645cdf0e10cSrcweir     // display old content (#96657#)
2646cdf0e10cSrcweir     aAny <<= GetContent();
2647cdf0e10cSrcweir     xPropertySet->setPropertyValue(
2648cdf0e10cSrcweir         OUString(RTL_CONSTASCII_USTRINGPARAM(sAPI_current_presentation)),
2649cdf0e10cSrcweir         aAny );
2650cdf0e10cSrcweir }
2651cdf0e10cSrcweir 
2652cdf0e10cSrcweir 
2653cdf0e10cSrcweir 
2654cdf0e10cSrcweir //
2655cdf0e10cSrcweir // page variable set fields
2656cdf0e10cSrcweir //
2657cdf0e10cSrcweir 
2658cdf0e10cSrcweir TYPEINIT1(XMLPageVarSetFieldImportContext, XMLTextFieldImportContext);
2659cdf0e10cSrcweir 
XMLPageVarSetFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2660cdf0e10cSrcweir XMLPageVarSetFieldImportContext::XMLPageVarSetFieldImportContext(
2661cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
2662cdf0e10cSrcweir 	const OUString& sLocalName) :
2663cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_reference_page_set,
2664cdf0e10cSrcweir 								  nPrfx, sLocalName),
2665cdf0e10cSrcweir 		sPropertyOn(RTL_CONSTASCII_USTRINGPARAM(sAPI_on)),
2666cdf0e10cSrcweir 		sPropertyOffset(RTL_CONSTASCII_USTRINGPARAM(sAPI_offset)),
2667cdf0e10cSrcweir 		nAdjust(0),
2668cdf0e10cSrcweir 		bActive(sal_True)
2669cdf0e10cSrcweir {
2670cdf0e10cSrcweir 	bValid = sal_True;
2671cdf0e10cSrcweir }
2672cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const::rtl::OUString & sAttrValue)2673cdf0e10cSrcweir void XMLPageVarSetFieldImportContext::ProcessAttribute(
2674cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2675cdf0e10cSrcweir 	const ::rtl::OUString& sAttrValue )
2676cdf0e10cSrcweir {
2677cdf0e10cSrcweir 	switch (nAttrToken)
2678cdf0e10cSrcweir 	{
2679cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_ACTIVE:
2680cdf0e10cSrcweir 		{
2681cdf0e10cSrcweir 			sal_Bool bTmp;
2682cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertBool(bTmp, sAttrValue))
2683cdf0e10cSrcweir 			{
2684cdf0e10cSrcweir 				bActive = bTmp;
2685cdf0e10cSrcweir 			}
2686cdf0e10cSrcweir 		}
2687cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_PAGE_ADJUST:
2688cdf0e10cSrcweir 		{
2689cdf0e10cSrcweir 			sal_Int32 nTmp;
2690cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertNumber(nTmp, sAttrValue))
2691cdf0e10cSrcweir 			{
2692cdf0e10cSrcweir 				nAdjust = (sal_Int16)nTmp;
2693cdf0e10cSrcweir 			}
2694cdf0e10cSrcweir 		}
2695cdf0e10cSrcweir 	}
2696cdf0e10cSrcweir }
2697cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2698cdf0e10cSrcweir void XMLPageVarSetFieldImportContext::PrepareField(
2699cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2700cdf0e10cSrcweir {
2701cdf0e10cSrcweir 	Any aAny;
2702cdf0e10cSrcweir 
2703cdf0e10cSrcweir 	aAny.setValue(&bActive, ::getBooleanCppuType());
2704cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyOn, aAny);
2705cdf0e10cSrcweir 
2706cdf0e10cSrcweir 	aAny <<= nAdjust;
2707cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyOffset, aAny);
2708cdf0e10cSrcweir }
2709cdf0e10cSrcweir 
2710cdf0e10cSrcweir 
2711cdf0e10cSrcweir 
2712cdf0e10cSrcweir //
2713cdf0e10cSrcweir // macro fields
2714cdf0e10cSrcweir //
2715cdf0e10cSrcweir 
2716cdf0e10cSrcweir TYPEINIT1( XMLMacroFieldImportContext, XMLTextFieldImportContext );
2717cdf0e10cSrcweir 
XMLMacroFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)2718cdf0e10cSrcweir XMLMacroFieldImportContext::XMLMacroFieldImportContext(
2719cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
2720cdf0e10cSrcweir 	const OUString& sLocalName) :
2721cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_macro,
2722cdf0e10cSrcweir 								  nPrfx, sLocalName),
2723cdf0e10cSrcweir 		sPropertyHint(RTL_CONSTASCII_USTRINGPARAM(sAPI_hint)),
2724cdf0e10cSrcweir 		sPropertyMacroName(RTL_CONSTASCII_USTRINGPARAM("MacroName")),
2725cdf0e10cSrcweir 		sPropertyScriptURL(RTL_CONSTASCII_USTRINGPARAM("ScriptURL")),
2726cdf0e10cSrcweir 		bDescriptionOK(sal_False)
2727cdf0e10cSrcweir {
2728cdf0e10cSrcweir }
2729cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)2730cdf0e10cSrcweir SvXMLImportContext* XMLMacroFieldImportContext::CreateChildContext(
2731cdf0e10cSrcweir     sal_uInt16 nPrefix,
2732cdf0e10cSrcweir     const OUString& rLocalName,
2733cdf0e10cSrcweir     const Reference<XAttributeList> & xAttrList )
2734cdf0e10cSrcweir {
2735cdf0e10cSrcweir     SvXMLImportContext* pContext = NULL;
2736cdf0e10cSrcweir 
2737cdf0e10cSrcweir     if ( (nPrefix == XML_NAMESPACE_OFFICE) &&
2738cdf0e10cSrcweir          IsXMLToken( rLocalName, XML_EVENT_LISTENERS ) )
2739cdf0e10cSrcweir     {
2740cdf0e10cSrcweir         // create events context and remember it!
2741cdf0e10cSrcweir         pContext = new XMLEventsImportContext(
2742cdf0e10cSrcweir             GetImport(), nPrefix, rLocalName );
2743cdf0e10cSrcweir         xEventContext = pContext;
2744cdf0e10cSrcweir         bValid = sal_True;
2745cdf0e10cSrcweir     }
2746cdf0e10cSrcweir     else
2747cdf0e10cSrcweir         pContext = SvXMLImportContext::CreateChildContext(
2748cdf0e10cSrcweir             nPrefix, rLocalName, xAttrList);
2749cdf0e10cSrcweir 
2750cdf0e10cSrcweir     return pContext;
2751cdf0e10cSrcweir }
2752cdf0e10cSrcweir 
2753cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2754cdf0e10cSrcweir void XMLMacroFieldImportContext::ProcessAttribute(
2755cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2756cdf0e10cSrcweir 	const OUString& sAttrValue )
2757cdf0e10cSrcweir {
2758cdf0e10cSrcweir 	switch (nAttrToken)
2759cdf0e10cSrcweir 	{
2760cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_DESCRIPTION:
2761cdf0e10cSrcweir 			sDescription = sAttrValue;
2762cdf0e10cSrcweir 			bDescriptionOK = sal_True;
2763cdf0e10cSrcweir 			break;
2764cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NAME:
2765cdf0e10cSrcweir 			sMacro = sAttrValue;
2766cdf0e10cSrcweir 			bValid = sal_True;
2767cdf0e10cSrcweir 			break;
2768cdf0e10cSrcweir 	}
2769cdf0e10cSrcweir }
2770cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2771cdf0e10cSrcweir void XMLMacroFieldImportContext::PrepareField(
2772cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2773cdf0e10cSrcweir {
2774cdf0e10cSrcweir     Any aAny;
2775cdf0e10cSrcweir 
2776cdf0e10cSrcweir     OUString sOnClick(RTL_CONSTASCII_USTRINGPARAM("OnClick"));
2777cdf0e10cSrcweir     OUString sPropertyMacroLibrary(RTL_CONSTASCII_USTRINGPARAM("MacroLibrary"));
2778cdf0e10cSrcweir 
2779cdf0e10cSrcweir 	aAny <<= (bDescriptionOK ? sDescription : GetContent());
2780cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyHint, aAny);
2781cdf0e10cSrcweir 
2782cdf0e10cSrcweir     // if we have an events child element, we'll look for the OnClick
2783cdf0e10cSrcweir     // event if not, it may be an old (pre-638i) document. Then, we'll
2784cdf0e10cSrcweir     // have to look at the name attribute.
2785cdf0e10cSrcweir     OUString sMacroName;
2786cdf0e10cSrcweir     OUString sLibraryName;
2787cdf0e10cSrcweir     OUString sScriptURL;
2788cdf0e10cSrcweir 
2789cdf0e10cSrcweir     if ( xEventContext.Is() )
2790cdf0e10cSrcweir     {
2791cdf0e10cSrcweir         // get event sequence
2792cdf0e10cSrcweir         XMLEventsImportContext* pEvents =
2793cdf0e10cSrcweir             (XMLEventsImportContext*)&xEventContext;
2794cdf0e10cSrcweir         Sequence<PropertyValue> aValues;
2795cdf0e10cSrcweir         pEvents->GetEventSequence( sOnClick, aValues );
2796cdf0e10cSrcweir 
2797cdf0e10cSrcweir         sal_Int32 nLength = aValues.getLength();
2798cdf0e10cSrcweir         for( sal_Int32 i = 0; i < nLength; i++ )
2799cdf0e10cSrcweir         {
2800cdf0e10cSrcweir             if ( aValues[i].Name.equalsAsciiL( "ScriptType",
2801cdf0e10cSrcweir                                                sizeof("ScriptType")-1 ) )
2802cdf0e10cSrcweir             {
2803cdf0e10cSrcweir                 // ignore ScriptType
2804cdf0e10cSrcweir             }
2805cdf0e10cSrcweir             else if ( aValues[i].Name.equalsAsciiL( "Library",
2806cdf0e10cSrcweir                                                     sizeof("Library")-1 ) )
2807cdf0e10cSrcweir             {
2808cdf0e10cSrcweir                 aValues[i].Value >>= sLibraryName;
2809cdf0e10cSrcweir             }
2810cdf0e10cSrcweir             else if ( aValues[i].Name.equalsAsciiL( "MacroName",
2811cdf0e10cSrcweir                                                     sizeof("MacroName")-1 ) )
2812cdf0e10cSrcweir             {
2813cdf0e10cSrcweir                 aValues[i].Value >>= sMacroName;
2814cdf0e10cSrcweir             }
2815cdf0e10cSrcweir             if ( aValues[i].Name.equalsAsciiL( "Script",
2816cdf0e10cSrcweir                                                sizeof("Script")-1 ) )
2817cdf0e10cSrcweir             {
2818cdf0e10cSrcweir                 aValues[i].Value >>= sScriptURL;
2819cdf0e10cSrcweir             }
2820cdf0e10cSrcweir         }
2821cdf0e10cSrcweir     }
2822cdf0e10cSrcweir     else
2823cdf0e10cSrcweir     {
2824cdf0e10cSrcweir         // disassemble old-style macro-name: Everything before the
2825cdf0e10cSrcweir         // third-last dot is the library
2826cdf0e10cSrcweir         sal_Int32 nPos = sMacro.getLength() + 1;	// the loop starts with nPos--
2827cdf0e10cSrcweir         const sal_Unicode* pBuf = sMacro.getStr();
2828cdf0e10cSrcweir         for( sal_Int32 i = 0; (i < 3) && (nPos > 0); i++ )
2829cdf0e10cSrcweir 		{
2830cdf0e10cSrcweir 			nPos--;
2831cdf0e10cSrcweir 		    while ( (pBuf[nPos] != '.') && (nPos > 0) )
2832cdf0e10cSrcweir                 nPos--;
2833cdf0e10cSrcweir 		}
2834cdf0e10cSrcweir 
2835cdf0e10cSrcweir         if (nPos > 0)
2836cdf0e10cSrcweir         {
2837cdf0e10cSrcweir             sLibraryName = sMacro.copy(0, nPos);
2838cdf0e10cSrcweir             sMacroName = sMacro.copy(nPos+1);
2839cdf0e10cSrcweir         }
2840cdf0e10cSrcweir         else
2841cdf0e10cSrcweir             sMacroName = sMacro;
2842cdf0e10cSrcweir     }
2843cdf0e10cSrcweir 
2844cdf0e10cSrcweir     aAny <<= sScriptURL;
2845cdf0e10cSrcweir     xPropertySet->setPropertyValue(sPropertyScriptURL, aAny);
2846cdf0e10cSrcweir 
2847cdf0e10cSrcweir     aAny <<= sMacroName;
2848cdf0e10cSrcweir     xPropertySet->setPropertyValue(sPropertyMacroName, aAny);
2849cdf0e10cSrcweir 
2850cdf0e10cSrcweir     aAny <<= sLibraryName;
2851cdf0e10cSrcweir     xPropertySet->setPropertyValue(sPropertyMacroLibrary, aAny);
2852cdf0e10cSrcweir }
2853cdf0e10cSrcweir 
2854cdf0e10cSrcweir 
2855cdf0e10cSrcweir 
2856cdf0e10cSrcweir //
2857cdf0e10cSrcweir // reference field import
2858cdf0e10cSrcweir //
2859cdf0e10cSrcweir 
2860cdf0e10cSrcweir TYPEINIT1( XMLReferenceFieldImportContext, XMLTextFieldImportContext );
2861cdf0e10cSrcweir 
XMLReferenceFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nToken,sal_uInt16 nPrfx,const OUString & sLocalName)2862cdf0e10cSrcweir XMLReferenceFieldImportContext::XMLReferenceFieldImportContext(
2863cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
2864cdf0e10cSrcweir 	sal_uInt16 nToken, sal_uInt16 nPrfx, const OUString& sLocalName)
2865cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, sAPI_get_reference, nPrfx, sLocalName)
2866cdf0e10cSrcweir ,	sPropertyReferenceFieldPart(RTL_CONSTASCII_USTRINGPARAM(sAPI_reference_field_part))
2867cdf0e10cSrcweir ,	sPropertyReferenceFieldSource(RTL_CONSTASCII_USTRINGPARAM(sAPI_reference_field_source))
2868cdf0e10cSrcweir ,	sPropertySourceName(RTL_CONSTASCII_USTRINGPARAM(sAPI_source_name))
2869cdf0e10cSrcweir ,	sPropertyCurrentPresentation(RTL_CONSTASCII_USTRINGPARAM(sAPI_current_presentation))
2870cdf0e10cSrcweir ,	nElementToken(nToken)
2871cdf0e10cSrcweir ,	nType(ReferenceFieldPart::PAGE_DESC)
2872cdf0e10cSrcweir ,	bNameOK(sal_False)
2873cdf0e10cSrcweir ,	bTypeOK(sal_False)
2874cdf0e10cSrcweir ,	bSeqNumberOK(sal_False)
2875cdf0e10cSrcweir {
2876cdf0e10cSrcweir }
2877cdf0e10cSrcweir 
2878cdf0e10cSrcweir static SvXMLEnumMapEntry __READONLY_DATA lcl_aReferenceTypeTokenMap[] =
2879cdf0e10cSrcweir {
2880cdf0e10cSrcweir 	{ XML_PAGE, 		ReferenceFieldPart::PAGE},
2881cdf0e10cSrcweir 	{ XML_CHAPTER, 	    ReferenceFieldPart::CHAPTER },
2882cdf0e10cSrcweir 	{ XML_TEXT,		    ReferenceFieldPart::TEXT },
2883cdf0e10cSrcweir 	{ XML_DIRECTION, 	ReferenceFieldPart::UP_DOWN },
2884cdf0e10cSrcweir 	{ XML_CATEGORY_AND_VALUE, ReferenceFieldPart::CATEGORY_AND_NUMBER },
2885cdf0e10cSrcweir 	{ XML_CAPTION, 	    ReferenceFieldPart::ONLY_CAPTION },
2886cdf0e10cSrcweir 	{ XML_VALUE,		ReferenceFieldPart::ONLY_SEQUENCE_NUMBER },
2887cdf0e10cSrcweir     // --> OD 2007-09-14 #i81002#
2888cdf0e10cSrcweir     { XML_NUMBER,               ReferenceFieldPart::NUMBER },
2889cdf0e10cSrcweir     { XML_NUMBER_NO_SUPERIOR,   ReferenceFieldPart::NUMBER_NO_CONTEXT },
2890cdf0e10cSrcweir     { XML_NUMBER_ALL_SUPERIOR,  ReferenceFieldPart::NUMBER_FULL_CONTEXT },
2891cdf0e10cSrcweir     // <--
2892cdf0e10cSrcweir     { XML_TOKEN_INVALID, 0 }
2893cdf0e10cSrcweir };
2894cdf0e10cSrcweir 
StartElement(const Reference<XAttributeList> & xAttrList)2895cdf0e10cSrcweir void XMLReferenceFieldImportContext::StartElement(
2896cdf0e10cSrcweir 	const Reference<XAttributeList> & xAttrList)
2897cdf0e10cSrcweir {
2898cdf0e10cSrcweir 	bTypeOK = sal_True;
2899cdf0e10cSrcweir 	switch (nElementToken)
2900cdf0e10cSrcweir 	{
2901cdf0e10cSrcweir 		case XML_TOK_TEXT_REFERENCE_REF:
2902cdf0e10cSrcweir 			nSource = ReferenceFieldSource::REFERENCE_MARK;
2903cdf0e10cSrcweir 			break;
2904cdf0e10cSrcweir 		case XML_TOK_TEXT_BOOKMARK_REF:
2905cdf0e10cSrcweir 			nSource = ReferenceFieldSource::BOOKMARK;
2906cdf0e10cSrcweir 			break;
2907cdf0e10cSrcweir 		case XML_TOK_TEXT_NOTE_REF:
2908cdf0e10cSrcweir 			nSource = ReferenceFieldSource::FOOTNOTE;
2909cdf0e10cSrcweir 			break;
2910cdf0e10cSrcweir 		case XML_TOK_TEXT_SEQUENCE_REF:
2911cdf0e10cSrcweir 			nSource = ReferenceFieldSource::SEQUENCE_FIELD;
2912cdf0e10cSrcweir 			break;
2913cdf0e10cSrcweir 		default:
2914cdf0e10cSrcweir 			bTypeOK = sal_False;
2915cdf0e10cSrcweir 			DBG_ERROR("unknown reference field");
2916cdf0e10cSrcweir 			break;
2917cdf0e10cSrcweir 	}
2918cdf0e10cSrcweir 
2919cdf0e10cSrcweir 	XMLTextFieldImportContext::StartElement(xAttrList);
2920cdf0e10cSrcweir }
2921cdf0e10cSrcweir 
2922cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)2923cdf0e10cSrcweir void XMLReferenceFieldImportContext::ProcessAttribute(
2924cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
2925cdf0e10cSrcweir 	const OUString& sAttrValue )
2926cdf0e10cSrcweir {
2927cdf0e10cSrcweir 	switch (nAttrToken)
2928cdf0e10cSrcweir 	{
2929cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_NOTE_CLASS:
2930cdf0e10cSrcweir 			if( IsXMLToken( sAttrValue, XML_ENDNOTE ) )
2931cdf0e10cSrcweir 				nSource = ReferenceFieldSource::ENDNOTE;
2932cdf0e10cSrcweir 			break;
2933cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_REF_NAME:
2934cdf0e10cSrcweir 			sName = sAttrValue;
2935cdf0e10cSrcweir 			bNameOK = sal_True;
2936cdf0e10cSrcweir 			break;
2937cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_REFERENCE_FORMAT:
2938cdf0e10cSrcweir 		{
2939cdf0e10cSrcweir 			sal_uInt16 nToken;
2940cdf0e10cSrcweir 			if (SvXMLUnitConverter::convertEnum(nToken, sAttrValue,
2941cdf0e10cSrcweir 												lcl_aReferenceTypeTokenMap))
2942cdf0e10cSrcweir 			{
2943cdf0e10cSrcweir 				nType = nToken;
2944cdf0e10cSrcweir 			}
2945cdf0e10cSrcweir 
2946cdf0e10cSrcweir 			// check for sequence-only-attributes
2947cdf0e10cSrcweir 			if ( (XML_TOK_TEXT_SEQUENCE_REF != nElementToken) &&
2948cdf0e10cSrcweir 				 ( (nType == ReferenceFieldPart::CATEGORY_AND_NUMBER) ||
2949cdf0e10cSrcweir 				   (nType == ReferenceFieldPart::ONLY_CAPTION) ||
2950cdf0e10cSrcweir 				   (nType == ReferenceFieldPart::ONLY_SEQUENCE_NUMBER) ) )
2951cdf0e10cSrcweir 			{
2952cdf0e10cSrcweir 				nType = ReferenceFieldPart::PAGE_DESC;
2953cdf0e10cSrcweir 			}
2954cdf0e10cSrcweir 
2955cdf0e10cSrcweir 			break;
2956cdf0e10cSrcweir 		}
2957cdf0e10cSrcweir 	}
2958cdf0e10cSrcweir 
2959cdf0e10cSrcweir 	// bValid: we need proper element type and name
2960cdf0e10cSrcweir 	bValid = bTypeOK && bNameOK;
2961cdf0e10cSrcweir }
2962cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)2963cdf0e10cSrcweir void XMLReferenceFieldImportContext::PrepareField(
2964cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
2965cdf0e10cSrcweir {
2966cdf0e10cSrcweir 	Any aAny;
2967cdf0e10cSrcweir 
2968cdf0e10cSrcweir 	aAny <<= nType;
2969cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyReferenceFieldPart, aAny);
2970cdf0e10cSrcweir 
2971cdf0e10cSrcweir 	aAny <<= nSource;
2972cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyReferenceFieldSource, aAny);
2973cdf0e10cSrcweir 
2974cdf0e10cSrcweir 	switch (nElementToken)
2975cdf0e10cSrcweir 	{
2976cdf0e10cSrcweir 		case XML_TOK_TEXT_REFERENCE_REF:
2977cdf0e10cSrcweir 		case XML_TOK_TEXT_BOOKMARK_REF:
2978cdf0e10cSrcweir 			aAny <<= sName;
2979cdf0e10cSrcweir 			xPropertySet->setPropertyValue(sPropertySourceName, aAny);
2980cdf0e10cSrcweir 			break;
2981cdf0e10cSrcweir 
2982cdf0e10cSrcweir 		case XML_TOK_TEXT_NOTE_REF:
2983cdf0e10cSrcweir 			GetImportHelper().ProcessFootnoteReference(sName, xPropertySet);
2984cdf0e10cSrcweir 			break;
2985cdf0e10cSrcweir 
2986cdf0e10cSrcweir 		case XML_TOK_TEXT_SEQUENCE_REF:
2987cdf0e10cSrcweir 			GetImportHelper().ProcessSequenceReference(sName, xPropertySet);
2988cdf0e10cSrcweir 			break;
2989cdf0e10cSrcweir 	}
2990cdf0e10cSrcweir 
2991cdf0e10cSrcweir 	aAny <<= GetContent();
2992cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyCurrentPresentation, aAny);
2993cdf0e10cSrcweir }
2994cdf0e10cSrcweir 
2995cdf0e10cSrcweir 
2996cdf0e10cSrcweir 
2997cdf0e10cSrcweir //
2998cdf0e10cSrcweir // field declarations container
2999cdf0e10cSrcweir //
3000cdf0e10cSrcweir 
3001cdf0e10cSrcweir enum DdeFieldDeclAttrs
3002cdf0e10cSrcweir {
3003cdf0e10cSrcweir 	XML_TOK_DDEFIELD_NAME,
3004cdf0e10cSrcweir 	XML_TOK_DDEFIELD_APPLICATION,
3005cdf0e10cSrcweir 	XML_TOK_DDEFIELD_TOPIC,
3006cdf0e10cSrcweir 	XML_TOK_DDEFIELD_ITEM,
3007cdf0e10cSrcweir 	XML_TOK_DDEFIELD_UPDATE
3008cdf0e10cSrcweir };
3009cdf0e10cSrcweir 
3010cdf0e10cSrcweir static __FAR_DATA SvXMLTokenMapEntry aDdeDeclAttrTokenMap[] =
3011cdf0e10cSrcweir {
3012cdf0e10cSrcweir 	{ XML_NAMESPACE_OFFICE, XML_NAME, XML_TOK_DDEFIELD_NAME },
3013cdf0e10cSrcweir 	{ XML_NAMESPACE_OFFICE, XML_DDE_APPLICATION, XML_TOK_DDEFIELD_APPLICATION },
3014cdf0e10cSrcweir 	{ XML_NAMESPACE_OFFICE, XML_DDE_TOPIC, XML_TOK_DDEFIELD_TOPIC },
3015cdf0e10cSrcweir 	{ XML_NAMESPACE_OFFICE, XML_DDE_ITEM, XML_TOK_DDEFIELD_ITEM },
3016cdf0e10cSrcweir 	{ XML_NAMESPACE_OFFICE, XML_AUTOMATIC_UPDATE, XML_TOK_DDEFIELD_UPDATE },
3017cdf0e10cSrcweir 	XML_TOKEN_MAP_END
3018cdf0e10cSrcweir };
3019cdf0e10cSrcweir 
3020cdf0e10cSrcweir TYPEINIT1( XMLDdeFieldDeclsImportContext, SvXMLImportContext );
3021cdf0e10cSrcweir 
XMLDdeFieldDeclsImportContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & sLocalName)3022cdf0e10cSrcweir XMLDdeFieldDeclsImportContext::XMLDdeFieldDeclsImportContext(
3023cdf0e10cSrcweir 	SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& sLocalName) :
3024cdf0e10cSrcweir 		SvXMLImportContext(rImport, nPrfx, sLocalName),
3025cdf0e10cSrcweir 		aTokenMap(aDdeDeclAttrTokenMap)
3026cdf0e10cSrcweir {
3027cdf0e10cSrcweir }
3028cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)3029cdf0e10cSrcweir SvXMLImportContext * XMLDdeFieldDeclsImportContext::CreateChildContext(
3030cdf0e10cSrcweir 	sal_uInt16 nPrefix,
3031cdf0e10cSrcweir 	const OUString& rLocalName,
3032cdf0e10cSrcweir 	const Reference<XAttributeList> & xAttrList )
3033cdf0e10cSrcweir {
3034cdf0e10cSrcweir 	if ( (XML_NAMESPACE_TEXT == nPrefix) &&
3035cdf0e10cSrcweir 		 (IsXMLToken(rLocalName, XML_DDE_CONNECTION_DECL)) )
3036cdf0e10cSrcweir 	{
3037cdf0e10cSrcweir 		return new XMLDdeFieldDeclImportContext(GetImport(), nPrefix,
3038cdf0e10cSrcweir 												rLocalName, aTokenMap);
3039cdf0e10cSrcweir 	}
3040cdf0e10cSrcweir 	else
3041cdf0e10cSrcweir 	{
3042cdf0e10cSrcweir 		return SvXMLImportContext::CreateChildContext(nPrefix,
3043cdf0e10cSrcweir 													  rLocalName,
3044cdf0e10cSrcweir 													  xAttrList);
3045cdf0e10cSrcweir 	}
3046cdf0e10cSrcweir }
3047cdf0e10cSrcweir 
3048cdf0e10cSrcweir 
3049cdf0e10cSrcweir 
3050cdf0e10cSrcweir //
3051cdf0e10cSrcweir // import dde field declaration
3052cdf0e10cSrcweir //
3053cdf0e10cSrcweir 
3054cdf0e10cSrcweir TYPEINIT1( XMLDdeFieldDeclImportContext, SvXMLImportContext );
3055cdf0e10cSrcweir 
XMLDdeFieldDeclImportContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & sLocalName,const SvXMLTokenMap & rMap)3056cdf0e10cSrcweir XMLDdeFieldDeclImportContext::XMLDdeFieldDeclImportContext(
3057cdf0e10cSrcweir 	SvXMLImport& rImport, sal_uInt16 nPrfx,
3058cdf0e10cSrcweir 	const OUString& sLocalName, const SvXMLTokenMap& rMap)
3059cdf0e10cSrcweir :	SvXMLImportContext(rImport, nPrfx, sLocalName)
3060cdf0e10cSrcweir ,	sPropertyIsAutomaticUpdate(RTL_CONSTASCII_USTRINGPARAM(sAPI_is_automatic_update))
3061cdf0e10cSrcweir ,	sPropertyName(RTL_CONSTASCII_USTRINGPARAM(sAPI_name))
3062cdf0e10cSrcweir ,	sPropertyDDECommandType(RTL_CONSTASCII_USTRINGPARAM(sAPI_dde_command_type))
3063cdf0e10cSrcweir ,	sPropertyDDECommandFile(RTL_CONSTASCII_USTRINGPARAM(sAPI_dde_command_file))
3064cdf0e10cSrcweir ,	sPropertyDDECommandElement(RTL_CONSTASCII_USTRINGPARAM(sAPI_dde_command_element))
3065cdf0e10cSrcweir ,	rTokenMap(rMap)
3066cdf0e10cSrcweir {
3067cdf0e10cSrcweir 	DBG_ASSERT(XML_NAMESPACE_TEXT == nPrfx, "wrong prefix");
3068cdf0e10cSrcweir 	DBG_ASSERT(IsXMLToken(sLocalName, XML_DDE_CONNECTION_DECL), "wrong name");
3069cdf0e10cSrcweir }
3070cdf0e10cSrcweir 
StartElement(const Reference<XAttributeList> & xAttrList)3071cdf0e10cSrcweir void XMLDdeFieldDeclImportContext::StartElement(
3072cdf0e10cSrcweir 	const Reference<XAttributeList> & xAttrList)
3073cdf0e10cSrcweir {
3074cdf0e10cSrcweir 	OUString sName;
3075cdf0e10cSrcweir 	OUString sCommandApplication;
3076cdf0e10cSrcweir 	OUString sCommandTopic;
3077cdf0e10cSrcweir 	OUString sCommandItem;
3078cdf0e10cSrcweir 
3079cdf0e10cSrcweir 	sal_Bool bUpdate = sal_False;
3080cdf0e10cSrcweir 	sal_Bool bNameOK = sal_False;
3081cdf0e10cSrcweir 	sal_Bool bCommandApplicationOK = sal_False;
3082cdf0e10cSrcweir 	sal_Bool bCommandTopicOK = sal_False;
3083cdf0e10cSrcweir 	sal_Bool bCommandItemOK = sal_False;
3084cdf0e10cSrcweir 
3085cdf0e10cSrcweir 	// process attributes
3086cdf0e10cSrcweir 	sal_Int16 nLength = xAttrList->getLength();
3087cdf0e10cSrcweir 	for(sal_Int16 i=0; i<nLength; i++)
3088cdf0e10cSrcweir 	{
3089cdf0e10cSrcweir 
3090cdf0e10cSrcweir 		OUString sLocalName;
3091cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
3092cdf0e10cSrcweir 			GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName );
3093cdf0e10cSrcweir 
3094cdf0e10cSrcweir 		switch (rTokenMap.Get(nPrefix, sLocalName))
3095cdf0e10cSrcweir 		{
3096cdf0e10cSrcweir 			case XML_TOK_DDEFIELD_NAME:
3097cdf0e10cSrcweir 				sName = xAttrList->getValueByIndex(i);
3098cdf0e10cSrcweir 				bNameOK = sal_True;
3099cdf0e10cSrcweir 				break;
3100cdf0e10cSrcweir 			case XML_TOK_DDEFIELD_APPLICATION:
3101cdf0e10cSrcweir 				sCommandApplication = xAttrList->getValueByIndex(i);
3102cdf0e10cSrcweir 				bCommandApplicationOK = sal_True;
3103cdf0e10cSrcweir 				break;
3104cdf0e10cSrcweir 			case XML_TOK_DDEFIELD_TOPIC:
3105cdf0e10cSrcweir 				sCommandTopic = xAttrList->getValueByIndex(i);
3106cdf0e10cSrcweir 				bCommandTopicOK = sal_True;
3107cdf0e10cSrcweir 				break;
3108cdf0e10cSrcweir 			case XML_TOK_DDEFIELD_ITEM:
3109cdf0e10cSrcweir 				sCommandItem = xAttrList->getValueByIndex(i);
3110cdf0e10cSrcweir 				bCommandItemOK = sal_True;
3111cdf0e10cSrcweir 				break;
3112cdf0e10cSrcweir 			case XML_TOK_DDEFIELD_UPDATE:
3113cdf0e10cSrcweir 			{
3114cdf0e10cSrcweir 				sal_Bool bTmp;
3115cdf0e10cSrcweir 				if ( SvXMLUnitConverter::convertBool(
3116cdf0e10cSrcweir 					bTmp, xAttrList->getValueByIndex(i)) )
3117cdf0e10cSrcweir 				{
3118cdf0e10cSrcweir 					bUpdate = bTmp;
3119cdf0e10cSrcweir 				}
3120cdf0e10cSrcweir 				break;
3121cdf0e10cSrcweir 			}
3122cdf0e10cSrcweir 		}
3123cdf0e10cSrcweir 	}
3124cdf0e10cSrcweir 
3125cdf0e10cSrcweir 	// valid data?
3126cdf0e10cSrcweir 	if (bNameOK && bCommandApplicationOK && bCommandTopicOK && bCommandItemOK)
3127cdf0e10cSrcweir 	{
3128cdf0e10cSrcweir 		// make service name
3129cdf0e10cSrcweir 		OUStringBuffer sBuf;
3130cdf0e10cSrcweir 		sBuf.appendAscii(sAPI_fieldmaster_prefix);
3131cdf0e10cSrcweir 		sBuf.appendAscii(sAPI_dde);
3132cdf0e10cSrcweir 
3133cdf0e10cSrcweir 		// create DDE TextFieldMaster
3134cdf0e10cSrcweir 		Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(),
3135cdf0e10cSrcweir 												 UNO_QUERY);
3136cdf0e10cSrcweir 		if( xFactory.is() )
3137cdf0e10cSrcweir 		{
3138cdf0e10cSrcweir             /* #i6432# There might be multiple occurances of one DDE
3139cdf0e10cSrcweir                declaration if it is used in more than one of
3140cdf0e10cSrcweir                header/footer/body. createInstance will throw an exception if we
3141cdf0e10cSrcweir                try to create the second, third, etc. instance of such a
3142cdf0e10cSrcweir                declaration. Thus we ignore the exception. Otherwise this will
3143cdf0e10cSrcweir                lead to an unloadable document. */
3144cdf0e10cSrcweir             try
3145cdf0e10cSrcweir             {
3146cdf0e10cSrcweir                 Reference<XInterface> xIfc =
3147cdf0e10cSrcweir                     xFactory->createInstance(sBuf.makeStringAndClear());
3148cdf0e10cSrcweir                 if( xIfc.is() )
3149cdf0e10cSrcweir                 {
3150cdf0e10cSrcweir                     Reference<XPropertySet> xPropSet( xIfc, UNO_QUERY );
3151cdf0e10cSrcweir                     if (xPropSet.is() &&
3152cdf0e10cSrcweir                         xPropSet->getPropertySetInfo()->hasPropertyByName(
3153cdf0e10cSrcweir                                                                           sPropertyDDECommandType))
3154cdf0e10cSrcweir                     {
3155cdf0e10cSrcweir                         Any aAny;
3156cdf0e10cSrcweir 
3157cdf0e10cSrcweir                         aAny <<= sName;
3158cdf0e10cSrcweir                         xPropSet->setPropertyValue(sPropertyName, aAny);
3159cdf0e10cSrcweir 
3160cdf0e10cSrcweir                         aAny <<= sCommandApplication;
3161cdf0e10cSrcweir                         xPropSet->setPropertyValue(sPropertyDDECommandType, aAny);
3162cdf0e10cSrcweir 
3163cdf0e10cSrcweir                         aAny <<= sCommandTopic;
3164cdf0e10cSrcweir                         xPropSet->setPropertyValue(sPropertyDDECommandFile, aAny);
3165cdf0e10cSrcweir 
3166cdf0e10cSrcweir                         aAny <<= sCommandItem;
3167cdf0e10cSrcweir                         xPropSet->setPropertyValue(sPropertyDDECommandElement,
3168cdf0e10cSrcweir                                                    aAny);
3169cdf0e10cSrcweir 
3170cdf0e10cSrcweir                         aAny.setValue(&bUpdate, ::getBooleanCppuType());
3171cdf0e10cSrcweir                         xPropSet->setPropertyValue(sPropertyIsAutomaticUpdate,
3172cdf0e10cSrcweir                                                    aAny);
3173cdf0e10cSrcweir                     }
3174cdf0e10cSrcweir                     // else: ignore (can't get XPropertySet, or DDE
3175cdf0e10cSrcweir                     //               properties are not supported)
3176cdf0e10cSrcweir                 }
3177cdf0e10cSrcweir                 // else: ignore
3178cdf0e10cSrcweir             }
3179cdf0e10cSrcweir             catch ( const Exception& )
3180cdf0e10cSrcweir             {
3181cdf0e10cSrcweir                 //ignore
3182cdf0e10cSrcweir             }
3183cdf0e10cSrcweir 		}
3184cdf0e10cSrcweir 		// else: ignore
3185cdf0e10cSrcweir 	}
3186cdf0e10cSrcweir 	// else: ignore
3187cdf0e10cSrcweir }
3188cdf0e10cSrcweir 
3189cdf0e10cSrcweir 
3190cdf0e10cSrcweir 
3191cdf0e10cSrcweir //
3192cdf0e10cSrcweir // DDE field import
3193cdf0e10cSrcweir //
3194cdf0e10cSrcweir 
3195cdf0e10cSrcweir TYPEINIT1( XMLDdeFieldImportContext, XMLTextFieldImportContext );
3196cdf0e10cSrcweir 
XMLDdeFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)3197cdf0e10cSrcweir XMLDdeFieldImportContext::XMLDdeFieldImportContext(
3198cdf0e10cSrcweir 	SvXMLImport& rImport, XMLTextImportHelper& rHlp,
3199cdf0e10cSrcweir 	sal_uInt16 nPrfx, const OUString& sLocalName) :
3200cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_dde,
3201cdf0e10cSrcweir 								  nPrfx, sLocalName),
3202cdf0e10cSrcweir 		sName()
3203cdf0e10cSrcweir         ,sPropertyContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_content))
3204cdf0e10cSrcweir {
3205cdf0e10cSrcweir }
3206cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const::rtl::OUString & sAttrValue)3207cdf0e10cSrcweir void XMLDdeFieldImportContext::ProcessAttribute(
3208cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
3209cdf0e10cSrcweir 	const ::rtl::OUString& sAttrValue )
3210cdf0e10cSrcweir {
3211cdf0e10cSrcweir 	if (XML_TOK_TEXTFIELD_CONNECTION_NAME == nAttrToken)
3212cdf0e10cSrcweir 	{
3213cdf0e10cSrcweir 		sName = sAttrValue;
3214cdf0e10cSrcweir 		bValid = sal_True;
3215cdf0e10cSrcweir 	}
3216cdf0e10cSrcweir }
3217cdf0e10cSrcweir 
EndElement()3218cdf0e10cSrcweir void XMLDdeFieldImportContext::EndElement()
3219cdf0e10cSrcweir {
3220cdf0e10cSrcweir 	if (bValid)
3221cdf0e10cSrcweir 	{
3222cdf0e10cSrcweir 		// find master
3223cdf0e10cSrcweir 		OUStringBuffer sBuf;
3224cdf0e10cSrcweir 		sBuf.appendAscii(sAPI_fieldmaster_prefix);
3225cdf0e10cSrcweir 		sBuf.appendAscii(sAPI_dde);
3226cdf0e10cSrcweir 		sBuf.append(sal_Unicode('.'));
3227cdf0e10cSrcweir 		sBuf.append(sName);
3228cdf0e10cSrcweir 		OUString sMasterName = sBuf.makeStringAndClear();
3229cdf0e10cSrcweir 
3230cdf0e10cSrcweir 		Reference<XTextFieldsSupplier> xTextFieldsSupp(GetImport().GetModel(),
3231cdf0e10cSrcweir 													   UNO_QUERY);
3232cdf0e10cSrcweir 		Reference<container::XNameAccess> xFieldMasterNameAccess(
3233cdf0e10cSrcweir 			xTextFieldsSupp->getTextFieldMasters(), UNO_QUERY);
3234cdf0e10cSrcweir 
3235cdf0e10cSrcweir 		if (xFieldMasterNameAccess->hasByName(sMasterName))
3236cdf0e10cSrcweir 		{
3237cdf0e10cSrcweir 			Reference<XPropertySet> xMaster;
3238cdf0e10cSrcweir 			Any aAny = xFieldMasterNameAccess->getByName(sMasterName);
3239cdf0e10cSrcweir 			aAny >>= xMaster;
3240cdf0e10cSrcweir             //apply the content to the master
3241cdf0e10cSrcweir             xMaster->setPropertyValue( sPropertyContent, uno::makeAny( GetContent()));
3242cdf0e10cSrcweir 			// master exists: create text field and attach
3243cdf0e10cSrcweir 			Reference<XPropertySet> xField;
3244cdf0e10cSrcweir 			sBuf.appendAscii(sAPI_textfield_prefix);
3245cdf0e10cSrcweir 			sBuf.appendAscii(sAPI_dde);
3246cdf0e10cSrcweir 			if (CreateField(xField, sBuf.makeStringAndClear()))
3247cdf0e10cSrcweir 			{
3248cdf0e10cSrcweir 				Reference<XDependentTextField> xDepTextField(xField,UNO_QUERY);
3249cdf0e10cSrcweir 				xDepTextField->attachTextFieldMaster(xMaster);
3250cdf0e10cSrcweir 
3251cdf0e10cSrcweir 				// attach field to document
3252cdf0e10cSrcweir 				Reference<XTextContent> xTextContent(xField, UNO_QUERY);
3253cdf0e10cSrcweir 				if (xTextContent.is())
3254cdf0e10cSrcweir 				{
3255cdf0e10cSrcweir 					GetImportHelper().InsertTextContent(xTextContent);
3256cdf0e10cSrcweir 
3257cdf0e10cSrcweir 					// we're lucky. nothing else to prepare.
3258cdf0e10cSrcweir 				}
3259cdf0e10cSrcweir 				// else: fail, because text content could not be created
3260cdf0e10cSrcweir 			}
3261cdf0e10cSrcweir 			// else: fail, because field could not be created
3262cdf0e10cSrcweir 		}
3263cdf0e10cSrcweir 		// else: fail, because no master was found (faulty document?!)
3264cdf0e10cSrcweir 	}
3265cdf0e10cSrcweir 	// not valid: ignore
3266cdf0e10cSrcweir }
3267cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> &)3268cdf0e10cSrcweir void XMLDdeFieldImportContext::PrepareField(
3269cdf0e10cSrcweir 	const Reference<XPropertySet> &)
3270cdf0e10cSrcweir {
3271cdf0e10cSrcweir 	// empty, since not needed.
3272cdf0e10cSrcweir }
3273cdf0e10cSrcweir 
3274cdf0e10cSrcweir 
3275cdf0e10cSrcweir //
3276cdf0e10cSrcweir // sheet name fields
3277cdf0e10cSrcweir //
3278cdf0e10cSrcweir 
3279cdf0e10cSrcweir TYPEINIT1(XMLSheetNameImportContext, XMLTextFieldImportContext);
3280cdf0e10cSrcweir 
XMLSheetNameImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)3281cdf0e10cSrcweir XMLSheetNameImportContext::XMLSheetNameImportContext(
3282cdf0e10cSrcweir 	SvXMLImport& rImport,
3283cdf0e10cSrcweir 	XMLTextImportHelper& rHlp,
3284cdf0e10cSrcweir 	sal_uInt16 nPrfx,
3285cdf0e10cSrcweir 	const OUString& sLocalName) :
3286cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_sheet_name,
3287cdf0e10cSrcweir 								  nPrfx, sLocalName)
3288cdf0e10cSrcweir {
3289cdf0e10cSrcweir 	bValid = sal_True; 	// always valid!
3290cdf0e10cSrcweir }
3291cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16,const::rtl::OUString &)3292cdf0e10cSrcweir void XMLSheetNameImportContext::ProcessAttribute(
3293cdf0e10cSrcweir 	sal_uInt16,
3294cdf0e10cSrcweir 	const ::rtl::OUString& )
3295cdf0e10cSrcweir {
3296cdf0e10cSrcweir 	// no attributes -> nothing to be done
3297cdf0e10cSrcweir }
3298cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> &)3299cdf0e10cSrcweir void XMLSheetNameImportContext::PrepareField(
3300cdf0e10cSrcweir 	const Reference<XPropertySet> &)
3301cdf0e10cSrcweir {
3302cdf0e10cSrcweir 	// no attributes -> nothing to be done
3303cdf0e10cSrcweir }
3304cdf0e10cSrcweir 
3305cdf0e10cSrcweir 
3306cdf0e10cSrcweir //
3307cdf0e10cSrcweir // URL fields (Calc, Impress, Draw)
3308cdf0e10cSrcweir //
3309cdf0e10cSrcweir 
3310cdf0e10cSrcweir TYPEINIT1(XMLUrlFieldImportContext, XMLTextFieldImportContext);
3311cdf0e10cSrcweir 
XMLUrlFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)3312cdf0e10cSrcweir XMLUrlFieldImportContext::XMLUrlFieldImportContext(
3313cdf0e10cSrcweir 	SvXMLImport& rImport,
3314cdf0e10cSrcweir 	XMLTextImportHelper& rHlp,
3315cdf0e10cSrcweir 	sal_uInt16 nPrfx,
3316cdf0e10cSrcweir 	const OUString& sLocalName) :
3317cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_url,
3318cdf0e10cSrcweir 								  nPrfx, sLocalName),
3319cdf0e10cSrcweir 		sPropertyURL(RTL_CONSTASCII_USTRINGPARAM(sAPI_url)),
3320cdf0e10cSrcweir 		sPropertyTargetFrame(RTL_CONSTASCII_USTRINGPARAM(sAPI_target_frame)),
3321cdf0e10cSrcweir 		sPropertyRepresentation(RTL_CONSTASCII_USTRINGPARAM(
3322cdf0e10cSrcweir 			sAPI_representation)),
3323cdf0e10cSrcweir 		bFrameOK(sal_False)
3324cdf0e10cSrcweir {
3325cdf0e10cSrcweir }
3326cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)3327cdf0e10cSrcweir void XMLUrlFieldImportContext::ProcessAttribute(
3328cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
3329cdf0e10cSrcweir 	const OUString& sAttrValue )
3330cdf0e10cSrcweir {
3331cdf0e10cSrcweir 	switch (nAttrToken)
3332cdf0e10cSrcweir 	{
3333cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_HREF:
3334cdf0e10cSrcweir 			sURL = GetImport().GetAbsoluteReference( sAttrValue );
3335cdf0e10cSrcweir 			bValid = sal_True;
3336cdf0e10cSrcweir 			break;
3337cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_TARGET_FRAME:
3338cdf0e10cSrcweir 			sFrame = sAttrValue;
3339cdf0e10cSrcweir 			bFrameOK = sal_True;
3340cdf0e10cSrcweir 			break;
3341cdf0e10cSrcweir 		default:
3342cdf0e10cSrcweir 			// ignore
3343cdf0e10cSrcweir 			break;
3344cdf0e10cSrcweir 	}
3345cdf0e10cSrcweir }
3346cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)3347cdf0e10cSrcweir void XMLUrlFieldImportContext::PrepareField(
3348cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
3349cdf0e10cSrcweir {
3350cdf0e10cSrcweir 	Any aAny;
3351cdf0e10cSrcweir 
3352cdf0e10cSrcweir 	aAny <<= sURL;
3353cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyURL, aAny);
3354cdf0e10cSrcweir 
3355cdf0e10cSrcweir 	if (bFrameOK)
3356cdf0e10cSrcweir 	{
3357cdf0e10cSrcweir 		aAny <<= sFrame;
3358cdf0e10cSrcweir 		xPropertySet->setPropertyValue(sPropertyTargetFrame, aAny);
3359cdf0e10cSrcweir 	}
3360cdf0e10cSrcweir 
3361cdf0e10cSrcweir 	aAny <<= GetContent();
3362cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyRepresentation, aAny);
3363cdf0e10cSrcweir }
3364cdf0e10cSrcweir 
3365cdf0e10cSrcweir 
3366cdf0e10cSrcweir TYPEINIT1(XMLBibliographyFieldImportContext, XMLTextFieldImportContext);
3367cdf0e10cSrcweir 
3368cdf0e10cSrcweir 
XMLBibliographyFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)3369cdf0e10cSrcweir XMLBibliographyFieldImportContext::XMLBibliographyFieldImportContext(
3370cdf0e10cSrcweir 	SvXMLImport& rImport,
3371cdf0e10cSrcweir 	XMLTextImportHelper& rHlp,
3372cdf0e10cSrcweir 	sal_uInt16 nPrfx,
3373cdf0e10cSrcweir 	const OUString& sLocalName) :
3374cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_bibliography,
3375cdf0e10cSrcweir 								  nPrfx, sLocalName),
3376cdf0e10cSrcweir 		sPropertyFields(RTL_CONSTASCII_USTRINGPARAM("Fields")),
3377cdf0e10cSrcweir 		aValues()
3378cdf0e10cSrcweir {
3379cdf0e10cSrcweir 	bValid = sal_True;
3380cdf0e10cSrcweir }
3381cdf0e10cSrcweir 
3382cdf0e10cSrcweir // TODO: this is the same map as is used in the text field export
3383cdf0e10cSrcweir SvXMLEnumMapEntry __READONLY_DATA aBibliographyDataTypeMap[] =
3384cdf0e10cSrcweir {
3385cdf0e10cSrcweir 	{ XML_ARTICLE,			BibliographyDataType::ARTICLE },
3386cdf0e10cSrcweir 	{ XML_BOOK,			    BibliographyDataType::BOOK },
3387cdf0e10cSrcweir 	{ XML_BOOKLET,			BibliographyDataType::BOOKLET },
3388cdf0e10cSrcweir 	{ XML_CONFERENCE,		BibliographyDataType::CONFERENCE },
3389cdf0e10cSrcweir 	{ XML_CUSTOM1,			BibliographyDataType::CUSTOM1 },
3390cdf0e10cSrcweir 	{ XML_CUSTOM2,			BibliographyDataType::CUSTOM2 },
3391cdf0e10cSrcweir 	{ XML_CUSTOM3,			BibliographyDataType::CUSTOM3 },
3392cdf0e10cSrcweir 	{ XML_CUSTOM4,			BibliographyDataType::CUSTOM4 },
3393cdf0e10cSrcweir 	{ XML_CUSTOM5,			BibliographyDataType::CUSTOM5 },
3394cdf0e10cSrcweir 	{ XML_EMAIL,			BibliographyDataType::EMAIL },
3395cdf0e10cSrcweir 	{ XML_INBOOK,			BibliographyDataType::INBOOK },
3396cdf0e10cSrcweir 	{ XML_INCOLLECTION,	    BibliographyDataType::INCOLLECTION },
3397cdf0e10cSrcweir 	{ XML_INPROCEEDINGS,	BibliographyDataType::INPROCEEDINGS },
3398cdf0e10cSrcweir 	{ XML_JOURNAL,			BibliographyDataType::JOURNAL },
3399cdf0e10cSrcweir 	{ XML_MANUAL,			BibliographyDataType::MANUAL },
3400cdf0e10cSrcweir 	{ XML_MASTERSTHESIS,	BibliographyDataType::MASTERSTHESIS },
3401cdf0e10cSrcweir 	{ XML_MISC,			    BibliographyDataType::MISC },
3402cdf0e10cSrcweir 	{ XML_PHDTHESIS,		BibliographyDataType::PHDTHESIS },
3403cdf0e10cSrcweir 	{ XML_PROCEEDINGS,		BibliographyDataType::PROCEEDINGS },
3404cdf0e10cSrcweir 	{ XML_TECHREPORT,		BibliographyDataType::TECHREPORT },
3405cdf0e10cSrcweir 	{ XML_UNPUBLISHED,		BibliographyDataType::UNPUBLISHED },
3406cdf0e10cSrcweir 	{ XML_WWW,				BibliographyDataType::WWW },
3407cdf0e10cSrcweir 	{ XML_TOKEN_INVALID, 0 }
3408cdf0e10cSrcweir };
3409cdf0e10cSrcweir 
3410cdf0e10cSrcweir 
3411cdf0e10cSrcweir // we'll process attributes on our own and forfit the standard
3412cdf0e10cSrcweir // tecfield mechanism, because our attributes have zero overlp with
3413cdf0e10cSrcweir // all the oher textfields.
StartElement(const Reference<XAttributeList> & xAttrList)3414cdf0e10cSrcweir void XMLBibliographyFieldImportContext::StartElement(
3415cdf0e10cSrcweir 		const Reference<XAttributeList> & xAttrList)
3416cdf0e10cSrcweir {
3417cdf0e10cSrcweir 	// iterate over attributes
3418cdf0e10cSrcweir 	sal_Int16 nLength = xAttrList->getLength();
3419cdf0e10cSrcweir 	for(sal_Int16 i=0; i<nLength; i++) {
3420cdf0e10cSrcweir 
3421cdf0e10cSrcweir 		OUString sLocalName;
3422cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
3423cdf0e10cSrcweir 			GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName );
3424cdf0e10cSrcweir 
3425cdf0e10cSrcweir 		if (nPrefix == XML_NAMESPACE_TEXT)
3426cdf0e10cSrcweir 		{
3427cdf0e10cSrcweir 			PropertyValue aValue;
3428cdf0e10cSrcweir 			aValue.Name = OUString::createFromAscii(
3429cdf0e10cSrcweir 				MapBibliographyFieldName(sLocalName));
3430cdf0e10cSrcweir 			Any aAny;
3431cdf0e10cSrcweir 
3432cdf0e10cSrcweir 			// special treatment for bibliography type
3433cdf0e10cSrcweir             // biblio vs bibilio: #96658#; also read old documents
3434cdf0e10cSrcweir 			if (IsXMLToken(sLocalName, XML_BIBILIOGRAPHIC_TYPE) ||
3435cdf0e10cSrcweir                 IsXMLToken(sLocalName, XML_BIBLIOGRAPHY_TYPE)    )
3436cdf0e10cSrcweir 			{
3437cdf0e10cSrcweir 				sal_uInt16 nTmp;
3438cdf0e10cSrcweir 				if (SvXMLUnitConverter::convertEnum(
3439cdf0e10cSrcweir                     nTmp, xAttrList->getValueByIndex(i),
3440cdf0e10cSrcweir                     aBibliographyDataTypeMap))
3441cdf0e10cSrcweir 				{
3442cdf0e10cSrcweir 					aAny <<= (sal_Int16)nTmp;
3443cdf0e10cSrcweir 					aValue.Value = aAny;
3444cdf0e10cSrcweir 
3445cdf0e10cSrcweir 					aValues.push_back(aValue);
3446cdf0e10cSrcweir 				}
3447cdf0e10cSrcweir 			}
3448cdf0e10cSrcweir 			else
3449cdf0e10cSrcweir 			{
3450cdf0e10cSrcweir 				aAny <<= xAttrList->getValueByIndex(i);
3451cdf0e10cSrcweir 				aValue.Value = aAny;
3452cdf0e10cSrcweir 
3453cdf0e10cSrcweir 				aValues.push_back(aValue);
3454cdf0e10cSrcweir 			}
3455cdf0e10cSrcweir 		}
3456cdf0e10cSrcweir 		// else: unknown namespace -> ignore
3457cdf0e10cSrcweir 	}
3458cdf0e10cSrcweir }
3459cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16,const OUString &)3460cdf0e10cSrcweir void XMLBibliographyFieldImportContext::ProcessAttribute(
3461cdf0e10cSrcweir 	sal_uInt16,
3462cdf0e10cSrcweir 	const OUString& )
3463cdf0e10cSrcweir {
3464cdf0e10cSrcweir 	// attributes are handled in StartElement
3465cdf0e10cSrcweir 	DBG_ERROR("This should not have happened.");
3466cdf0e10cSrcweir }
3467cdf0e10cSrcweir 
3468cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)3469cdf0e10cSrcweir void XMLBibliographyFieldImportContext::PrepareField(
3470cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
3471cdf0e10cSrcweir {
3472cdf0e10cSrcweir 	// convert vector into sequence
3473cdf0e10cSrcweir 	sal_Int32 nCount = aValues.size();
3474cdf0e10cSrcweir 	Sequence<PropertyValue> aValueSequence(nCount);
3475cdf0e10cSrcweir 	for(sal_Int32 i = 0; i < nCount; i++)
3476cdf0e10cSrcweir 	{
3477cdf0e10cSrcweir 		aValueSequence[i] = aValues[i];
3478cdf0e10cSrcweir 	}
3479cdf0e10cSrcweir 
3480cdf0e10cSrcweir 	// set sequence
3481cdf0e10cSrcweir 	Any aAny;
3482cdf0e10cSrcweir 	aAny <<= aValueSequence;
3483cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyFields, aAny);
3484cdf0e10cSrcweir }
3485cdf0e10cSrcweir 
MapBibliographyFieldName(OUString sName)3486cdf0e10cSrcweir const sal_Char* XMLBibliographyFieldImportContext::MapBibliographyFieldName(
3487cdf0e10cSrcweir 	OUString sName)
3488cdf0e10cSrcweir {
3489cdf0e10cSrcweir 	const sal_Char* pName = NULL;
3490cdf0e10cSrcweir 
3491cdf0e10cSrcweir 	if (IsXMLToken(sName, XML_IDENTIFIER))
3492cdf0e10cSrcweir 	{
3493cdf0e10cSrcweir 		pName = "Identifier";
3494cdf0e10cSrcweir 	}
3495cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_BIBILIOGRAPHIC_TYPE) ||
3496cdf0e10cSrcweir              IsXMLToken(sName, XML_BIBLIOGRAPHY_TYPE)     )
3497cdf0e10cSrcweir 	{
3498cdf0e10cSrcweir         // biblio... vs bibilio...: #96658#: also read old documents
3499cdf0e10cSrcweir 		pName = "BibiliographicType";
3500cdf0e10cSrcweir 	}
3501cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_ADDRESS))
3502cdf0e10cSrcweir 	{
3503cdf0e10cSrcweir 		pName = "Address";
3504cdf0e10cSrcweir 	}
3505cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_ANNOTE))
3506cdf0e10cSrcweir 	{
3507cdf0e10cSrcweir 		pName = "Annote";
3508cdf0e10cSrcweir 	}
3509cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_AUTHOR))
3510cdf0e10cSrcweir 	{
3511cdf0e10cSrcweir 		pName = "Author";
3512cdf0e10cSrcweir 	}
3513cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_BOOKTITLE))
3514cdf0e10cSrcweir 	{
3515cdf0e10cSrcweir 		pName = "Booktitle";
3516cdf0e10cSrcweir 	}
3517cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_CHAPTER))
3518cdf0e10cSrcweir 	{
3519cdf0e10cSrcweir 		pName = "Chapter";
3520cdf0e10cSrcweir 	}
3521cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_EDITION))
3522cdf0e10cSrcweir 	{
3523cdf0e10cSrcweir 		pName = "Edition";
3524cdf0e10cSrcweir 	}
3525cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_EDITOR))
3526cdf0e10cSrcweir 	{
3527cdf0e10cSrcweir 		pName = "Editor";
3528cdf0e10cSrcweir 	}
3529cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_HOWPUBLISHED))
3530cdf0e10cSrcweir 	{
3531cdf0e10cSrcweir 		pName = "Howpublished";
3532cdf0e10cSrcweir 	}
3533cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_INSTITUTION))
3534cdf0e10cSrcweir 	{
3535cdf0e10cSrcweir 		pName = "Institution";
3536cdf0e10cSrcweir 	}
3537cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_JOURNAL))
3538cdf0e10cSrcweir 	{
3539cdf0e10cSrcweir 		pName = "Journal";
3540cdf0e10cSrcweir 	}
3541cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_MONTH))
3542cdf0e10cSrcweir 	{
3543cdf0e10cSrcweir 		pName = "Month";
3544cdf0e10cSrcweir 	}
3545cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_NOTE))
3546cdf0e10cSrcweir 	{
3547cdf0e10cSrcweir 		pName = "Note";
3548cdf0e10cSrcweir 	}
3549cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_NUMBER))
3550cdf0e10cSrcweir 	{
3551cdf0e10cSrcweir 		pName = "Number";
3552cdf0e10cSrcweir 	}
3553cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_ORGANIZATIONS))
3554cdf0e10cSrcweir 	{
3555cdf0e10cSrcweir 		pName = "Organizations";
3556cdf0e10cSrcweir 	}
3557cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_PAGES))
3558cdf0e10cSrcweir 	{
3559cdf0e10cSrcweir 		pName = "Pages";
3560cdf0e10cSrcweir 	}
3561cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_PUBLISHER))
3562cdf0e10cSrcweir 	{
3563cdf0e10cSrcweir 		pName = "Publisher";
3564cdf0e10cSrcweir 	}
3565cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_SCHOOL))
3566cdf0e10cSrcweir 	{
3567cdf0e10cSrcweir 		pName = "School";
3568cdf0e10cSrcweir 	}
3569cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_SERIES))
3570cdf0e10cSrcweir 	{
3571cdf0e10cSrcweir 		pName = "Series";
3572cdf0e10cSrcweir 	}
3573cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_TITLE))
3574cdf0e10cSrcweir 	{
3575cdf0e10cSrcweir 		pName = "Title";
3576cdf0e10cSrcweir 	}
3577cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_REPORT_TYPE))
3578cdf0e10cSrcweir 	{
3579cdf0e10cSrcweir 		pName = "Report_Type";
3580cdf0e10cSrcweir 	}
3581cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_VOLUME))
3582cdf0e10cSrcweir 	{
3583cdf0e10cSrcweir 		pName = "Volume";
3584cdf0e10cSrcweir 	}
3585cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_YEAR))
3586cdf0e10cSrcweir 	{
3587cdf0e10cSrcweir 		pName = "Year";
3588cdf0e10cSrcweir 	}
3589cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_URL))
3590cdf0e10cSrcweir 	{
3591cdf0e10cSrcweir 		pName = "URL";
3592cdf0e10cSrcweir 	}
3593cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_CUSTOM1))
3594cdf0e10cSrcweir 	{
3595cdf0e10cSrcweir 		pName = "Custom1";
3596cdf0e10cSrcweir 	}
3597cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_CUSTOM2))
3598cdf0e10cSrcweir 	{
3599cdf0e10cSrcweir 		pName = "Custom2";
3600cdf0e10cSrcweir 	}
3601cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_CUSTOM3))
3602cdf0e10cSrcweir 	{
3603cdf0e10cSrcweir 		pName = "Custom3";
3604cdf0e10cSrcweir 	}
3605cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_CUSTOM4))
3606cdf0e10cSrcweir 	{
3607cdf0e10cSrcweir 		pName = "Custom4";
3608cdf0e10cSrcweir 	}
3609cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_CUSTOM5))
3610cdf0e10cSrcweir 	{
3611cdf0e10cSrcweir 		pName = "Custom5";
3612cdf0e10cSrcweir 	}
3613cdf0e10cSrcweir 	else if (IsXMLToken(sName, XML_ISBN))
3614cdf0e10cSrcweir 	{
3615cdf0e10cSrcweir 		pName = "ISBN";
3616cdf0e10cSrcweir 	}
3617cdf0e10cSrcweir 	else
3618cdf0e10cSrcweir 	{
3619cdf0e10cSrcweir 		DBG_ERROR("Unknown bibliography info data");
3620cdf0e10cSrcweir 		pName = NULL;
3621cdf0e10cSrcweir 	}
3622cdf0e10cSrcweir 
3623cdf0e10cSrcweir 	return pName;
3624cdf0e10cSrcweir }
3625cdf0e10cSrcweir 
3626cdf0e10cSrcweir 
3627cdf0e10cSrcweir //
3628cdf0e10cSrcweir // Annotation Field
3629cdf0e10cSrcweir //
3630cdf0e10cSrcweir 
3631cdf0e10cSrcweir TYPEINIT1(XMLAnnotationImportContext, XMLTextFieldImportContext);
3632cdf0e10cSrcweir 
XMLAnnotationImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nToken,sal_uInt16 nPrfx,const OUString & sLocalName)3633cdf0e10cSrcweir XMLAnnotationImportContext::XMLAnnotationImportContext(
3634cdf0e10cSrcweir     SvXMLImport& rImport,
3635cdf0e10cSrcweir     XMLTextImportHelper& rHlp,
36363b32dd21SOliver-Rainer Wittmann     sal_uInt16 nToken,
3637cdf0e10cSrcweir     sal_uInt16 nPrfx,
36383b32dd21SOliver-Rainer Wittmann     const OUString& sLocalName)
36393b32dd21SOliver-Rainer Wittmann     : XMLTextFieldImportContext(rImport, rHlp, sAPI_annotation, nPrfx, sLocalName)
36403b32dd21SOliver-Rainer Wittmann     , sPropertyName(RTL_CONSTASCII_USTRINGPARAM(sAPI_name))
36413b32dd21SOliver-Rainer Wittmann     , sPropertyAuthor(RTL_CONSTASCII_USTRINGPARAM(sAPI_author))
36423b32dd21SOliver-Rainer Wittmann     , sPropertyInitials(RTL_CONSTASCII_USTRINGPARAM(sAPI_initials))
36433b32dd21SOliver-Rainer Wittmann     , sPropertyContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_content))
36443b32dd21SOliver-Rainer Wittmann     , sPropertyDate(RTL_CONSTASCII_USTRINGPARAM(sAPI_date_time_value))
36453b32dd21SOliver-Rainer Wittmann     , sPropertyTextRange(RTL_CONSTASCII_USTRINGPARAM(sAPI_TextRange))
36463b32dd21SOliver-Rainer Wittmann     , m_nToken( nToken )
3647cdf0e10cSrcweir {
3648cdf0e10cSrcweir     bValid = sal_True;
3649cdf0e10cSrcweir 
3650cdf0e10cSrcweir     // remember old list item and block (#91964#) and reset them
3651cdf0e10cSrcweir     // for the text frame
3652cdf0e10cSrcweir     // do this in the constructor, not in CreateChildContext (#i93392#)
3653cdf0e10cSrcweir     GetImport().GetTextImport()->PushListContext();
3654cdf0e10cSrcweir }
3655cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nToken,const OUString & rValue)3656cdf0e10cSrcweir void XMLAnnotationImportContext::ProcessAttribute(
36573b32dd21SOliver-Rainer Wittmann     sal_uInt16 nToken,
36583b32dd21SOliver-Rainer Wittmann     const OUString& rValue )
3659cdf0e10cSrcweir  {
36603b32dd21SOliver-Rainer Wittmann     if ( nToken == XML_TOK_TEXT_NAME )
36613b32dd21SOliver-Rainer Wittmann     {
36623b32dd21SOliver-Rainer Wittmann         aName = rValue;
36633b32dd21SOliver-Rainer Wittmann     }
3664cdf0e10cSrcweir }
3665cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)3666cdf0e10cSrcweir SvXMLImportContext* XMLAnnotationImportContext::CreateChildContext(
3667cdf0e10cSrcweir     sal_uInt16 nPrefix,
3668cdf0e10cSrcweir     const OUString& rLocalName,
3669cdf0e10cSrcweir     const Reference<XAttributeList >& xAttrList )
3670cdf0e10cSrcweir {
3671cdf0e10cSrcweir     SvXMLImportContext *pContext = 0;
3672cdf0e10cSrcweir     if( XML_NAMESPACE_DC == nPrefix )
3673cdf0e10cSrcweir     {
3674cdf0e10cSrcweir         if( IsXMLToken( rLocalName, XML_CREATOR ) )
36753b32dd21SOliver-Rainer Wittmann         {
36763b32dd21SOliver-Rainer Wittmann             pContext =
36773b32dd21SOliver-Rainer Wittmann                 new XMLStringBufferImportContext( GetImport(), nPrefix, rLocalName, aAuthorBuffer);
36783b32dd21SOliver-Rainer Wittmann         }
3679cdf0e10cSrcweir         else if( IsXMLToken( rLocalName, XML_DATE ) )
36803b32dd21SOliver-Rainer Wittmann         {
36813b32dd21SOliver-Rainer Wittmann             pContext =
36823b32dd21SOliver-Rainer Wittmann                 new XMLStringBufferImportContext( GetImport(), nPrefix, rLocalName, aDateBuffer);
36833b32dd21SOliver-Rainer Wittmann         }
36843b32dd21SOliver-Rainer Wittmann     }
36857cba280fSOliver-Rainer Wittmann     else if ( XML_NAMESPACE_TEXT == nPrefix
36867cba280fSOliver-Rainer Wittmann               || XML_NAMESPACE_TEXT_EXT == nPrefix )
36873b32dd21SOliver-Rainer Wittmann     {
36883b32dd21SOliver-Rainer Wittmann         if( IsXMLToken( rLocalName, XML_SENDER_INITIALS ) )
36893b32dd21SOliver-Rainer Wittmann         {
36903b32dd21SOliver-Rainer Wittmann             pContext =
36913b32dd21SOliver-Rainer Wittmann                 new XMLStringBufferImportContext( GetImport(), nPrefix, rLocalName, aInitialsBuffer);
36923b32dd21SOliver-Rainer Wittmann         }
3693cdf0e10cSrcweir     }
3694cdf0e10cSrcweir 
3695cdf0e10cSrcweir     if( !pContext )
3696cdf0e10cSrcweir     {
3697cdf0e10cSrcweir         try
3698cdf0e10cSrcweir         {
3699cdf0e10cSrcweir             if ( !mxField.is() )
3700cdf0e10cSrcweir                 CreateField( mxField, sServicePrefix + GetServiceName() );
3701cdf0e10cSrcweir             Any aAny = mxField->getPropertyValue( sPropertyTextRange );
3702cdf0e10cSrcweir             Reference< XText > xText;
3703cdf0e10cSrcweir             aAny >>= xText;
3704cdf0e10cSrcweir             if( xText.is() )
3705cdf0e10cSrcweir             {
3706cdf0e10cSrcweir                 UniReference < XMLTextImportHelper > xTxtImport = GetImport().GetTextImport();
3707cdf0e10cSrcweir                 if( !mxCursor.is() )
3708cdf0e10cSrcweir                 {
3709cdf0e10cSrcweir                     mxOldCursor = xTxtImport->GetCursor();
3710cdf0e10cSrcweir                     mxCursor = xText->createTextCursor();
3711cdf0e10cSrcweir                 }
3712cdf0e10cSrcweir 
3713cdf0e10cSrcweir                 if( mxCursor.is() )
3714cdf0e10cSrcweir                 {
3715cdf0e10cSrcweir                     xTxtImport->SetCursor( mxCursor );
3716cdf0e10cSrcweir                     pContext = xTxtImport->CreateTextChildContext( GetImport(), nPrefix, rLocalName, xAttrList );
3717cdf0e10cSrcweir                 }
3718cdf0e10cSrcweir             }
3719cdf0e10cSrcweir         }
3720cdf0e10cSrcweir         catch ( Exception& )
3721cdf0e10cSrcweir         {}
3722cdf0e10cSrcweir 
3723cdf0e10cSrcweir         if( !pContext )
3724cdf0e10cSrcweir             pContext = new XMLStringBufferImportContext(GetImport(), nPrefix,  rLocalName, aTextBuffer);
3725cdf0e10cSrcweir     }
3726cdf0e10cSrcweir 
3727cdf0e10cSrcweir     return pContext;
3728cdf0e10cSrcweir }
3729cdf0e10cSrcweir 
EndElement()3730cdf0e10cSrcweir void XMLAnnotationImportContext::EndElement()
3731cdf0e10cSrcweir {
3732cdf0e10cSrcweir     DBG_ASSERT(GetServiceName().getLength()>0, "no service name for element!");
3733cdf0e10cSrcweir     if( mxCursor.is() )
3734cdf0e10cSrcweir     {
3735cdf0e10cSrcweir         // delete addition newline
3736cdf0e10cSrcweir         const OUString aEmpty;
3737cdf0e10cSrcweir         mxCursor->gotoEnd( sal_False );
3738cdf0e10cSrcweir         mxCursor->goLeft( 1, sal_True );
3739cdf0e10cSrcweir         mxCursor->setString( aEmpty );
3740cdf0e10cSrcweir 
3741cdf0e10cSrcweir         // reset cursor
3742cdf0e10cSrcweir         GetImport().GetTextImport()->ResetCursor();
3743cdf0e10cSrcweir     }
3744cdf0e10cSrcweir 
3745cdf0e10cSrcweir     if( mxOldCursor.is() )
3746cdf0e10cSrcweir         GetImport().GetTextImport()->SetCursor( mxOldCursor );
3747cdf0e10cSrcweir 
3748cdf0e10cSrcweir     // reinstall old list item #91964#
3749cdf0e10cSrcweir     GetImport().GetTextImport()->PopListContext();
3750cdf0e10cSrcweir 
3751cdf0e10cSrcweir     if ( bValid )
3752cdf0e10cSrcweir     {
3753dec99bbdSOliver-Rainer Wittmann         if ( m_nToken == XML_TOK_TEXT_ANNOTATION_END )
3754dec99bbdSOliver-Rainer Wittmann         {
3755dec99bbdSOliver-Rainer Wittmann             // Search for a previous annotation with the same name.
3756dec99bbdSOliver-Rainer Wittmann             uno::Reference< text::XTextContent > xPrevField;
3757dec99bbdSOliver-Rainer Wittmann             {
3758dec99bbdSOliver-Rainer Wittmann                 Reference<XTextFieldsSupplier> xTextFieldsSupplier(GetImport().GetModel(), UNO_QUERY);
3759dec99bbdSOliver-Rainer Wittmann                 uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
3760dec99bbdSOliver-Rainer Wittmann                 uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
3761dec99bbdSOliver-Rainer Wittmann                 while (xFields->hasMoreElements())
3762dec99bbdSOliver-Rainer Wittmann                 {
3763dec99bbdSOliver-Rainer Wittmann                     uno::Reference< beans::XPropertySet > xCurrField(xFields->nextElement(), uno::UNO_QUERY);
3764*9030e3c1SOliver-Rainer Wittmann                     uno::Reference< beans::XPropertySetInfo > xCurrFieldPropInfo = xCurrField->getPropertySetInfo();
3765*9030e3c1SOliver-Rainer Wittmann                     if ( xCurrFieldPropInfo->hasPropertyByName( sPropertyName ) )
3766*9030e3c1SOliver-Rainer Wittmann                     {
3767dec99bbdSOliver-Rainer Wittmann                         OUString aFieldName;
3768dec99bbdSOliver-Rainer Wittmann                         xCurrField->getPropertyValue( sPropertyName ) >>= aFieldName;
3769dec99bbdSOliver-Rainer Wittmann                         if ( aFieldName == aName )
3770dec99bbdSOliver-Rainer Wittmann                         {
3771dec99bbdSOliver-Rainer Wittmann                             xPrevField.set( xCurrField, uno::UNO_QUERY );
3772dec99bbdSOliver-Rainer Wittmann                             break;
3773dec99bbdSOliver-Rainer Wittmann                         }
3774dec99bbdSOliver-Rainer Wittmann                     }
3775dec99bbdSOliver-Rainer Wittmann                 }
3776*9030e3c1SOliver-Rainer Wittmann             }
3777dec99bbdSOliver-Rainer Wittmann             if ( xPrevField.is() )
3778dec99bbdSOliver-Rainer Wittmann             {
3779dec99bbdSOliver-Rainer Wittmann                 // So we are ending a previous annotation,
3780dec99bbdSOliver-Rainer Wittmann                 // let's create a text range covering the start and the current position.
3781dec99bbdSOliver-Rainer Wittmann                 uno::Reference< text::XText > xText = GetImportHelper().GetText();
3782dec99bbdSOliver-Rainer Wittmann                 uno::Reference< text::XTextCursor > xCursor =
3783332f371aSOliver-Rainer Wittmann                     xText->createTextCursorByRange( GetImportHelper().GetCursorAsRange() );
3784332f371aSOliver-Rainer Wittmann                 xCursor->gotoRange( xPrevField->getAnchor(), true );
3785dec99bbdSOliver-Rainer Wittmann                 uno::Reference< text::XTextRange > xTextRange( xCursor, uno::UNO_QUERY );
3786dec99bbdSOliver-Rainer Wittmann 
3787dec99bbdSOliver-Rainer Wittmann                 xText->insertTextContent( xTextRange, xPrevField, !xCursor->isCollapsed() );
3788dec99bbdSOliver-Rainer Wittmann             }
3789dec99bbdSOliver-Rainer Wittmann         }
3790dec99bbdSOliver-Rainer Wittmann         else
3791dec99bbdSOliver-Rainer Wittmann         {
3792cdf0e10cSrcweir             if ( mxField.is() || CreateField( mxField, sServicePrefix + GetServiceName() ) )
3793cdf0e10cSrcweir             {
3794cdf0e10cSrcweir                 // set field properties
3795cdf0e10cSrcweir                 PrepareField( mxField );
3796cdf0e10cSrcweir 
3797cdf0e10cSrcweir                 // attach field to document
3798cdf0e10cSrcweir                 Reference < XTextContent > xTextContent( mxField, UNO_QUERY );
3799cdf0e10cSrcweir 
3800cdf0e10cSrcweir                 // workaround for #80606#
3801cdf0e10cSrcweir                 try
3802cdf0e10cSrcweir                 {
3803cdf0e10cSrcweir                     GetImportHelper().InsertTextContent( xTextContent );
3804cdf0e10cSrcweir                 }
3805cdf0e10cSrcweir                 catch (lang::IllegalArgumentException)
3806cdf0e10cSrcweir                 {
3807cdf0e10cSrcweir                     // ignore
3808cdf0e10cSrcweir                 }
3809cdf0e10cSrcweir             }
3810cdf0e10cSrcweir         }
3811dec99bbdSOliver-Rainer Wittmann     }
3812cdf0e10cSrcweir     else
3813cdf0e10cSrcweir         GetImportHelper().InsertString(GetContent());
3814cdf0e10cSrcweir }
3815cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)3816cdf0e10cSrcweir void XMLAnnotationImportContext::PrepareField(
3817cdf0e10cSrcweir     const Reference<XPropertySet> & xPropertySet )
3818cdf0e10cSrcweir {
3819cdf0e10cSrcweir     // import (possibly empty) author
3820cdf0e10cSrcweir     OUString sAuthor( aAuthorBuffer.makeStringAndClear() );
3821cdf0e10cSrcweir     xPropertySet->setPropertyValue(sPropertyAuthor, makeAny(sAuthor));
3822cdf0e10cSrcweir 
38233b32dd21SOliver-Rainer Wittmann     // import (possibly empty) initials
38243b32dd21SOliver-Rainer Wittmann     OUString sInitials( aInitialsBuffer.makeStringAndClear() );
38253b32dd21SOliver-Rainer Wittmann     xPropertySet->setPropertyValue(sPropertyInitials, makeAny(sInitials));
38263b32dd21SOliver-Rainer Wittmann 
3827cdf0e10cSrcweir     DateTime aDateTime;
3828cdf0e10cSrcweir     if (SvXMLUnitConverter::convertDateTime(aDateTime,
3829cdf0e10cSrcweir         aDateBuffer.makeStringAndClear()))
3830cdf0e10cSrcweir     {
3831cdf0e10cSrcweir         /*
3832cdf0e10cSrcweir         Date aDate;
3833cdf0e10cSrcweir         aDate.Year = aDateTime.Year;
3834cdf0e10cSrcweir         aDate.Month = aDateTime.Month;
3835cdf0e10cSrcweir         aDate.Day = aDateTime.Day;
3836cdf0e10cSrcweir         xPropertySet->setPropertyValue(sPropertyDate, makeAny(aDate));
3837cdf0e10cSrcweir         */
3838cdf0e10cSrcweir         xPropertySet->setPropertyValue(sPropertyDate, makeAny(aDateTime));
3839cdf0e10cSrcweir     }
3840cdf0e10cSrcweir 
3841cdf0e10cSrcweir     OUString sBuffer = aTextBuffer.makeStringAndClear();
38423b32dd21SOliver-Rainer Wittmann     if ( sBuffer.getLength() > 0 )
3843cdf0e10cSrcweir     {
3844cdf0e10cSrcweir         // delete last paragraph mark (if necessary)
3845cdf0e10cSrcweir         if (sal_Char(0x0a) == sBuffer.getStr()[sBuffer.getLength()-1])
3846cdf0e10cSrcweir             sBuffer = sBuffer.copy(0, sBuffer.getLength()-1);
3847cdf0e10cSrcweir         xPropertySet->setPropertyValue(sPropertyContent, makeAny(sBuffer));
3848cdf0e10cSrcweir     }
38493b32dd21SOliver-Rainer Wittmann 
38503b32dd21SOliver-Rainer Wittmann     if ( aName.getLength() > 0 )
38513b32dd21SOliver-Rainer Wittmann     {
38523b32dd21SOliver-Rainer Wittmann         xPropertySet->setPropertyValue(sPropertyName, makeAny(aName));
38533b32dd21SOliver-Rainer Wittmann     }
3854cdf0e10cSrcweir }
3855cdf0e10cSrcweir 
3856cdf0e10cSrcweir 
3857cdf0e10cSrcweir 
3858cdf0e10cSrcweir //
3859cdf0e10cSrcweir // script field
3860cdf0e10cSrcweir //
3861cdf0e10cSrcweir 
3862cdf0e10cSrcweir TYPEINIT1(XMLScriptImportContext, XMLTextFieldImportContext);
3863cdf0e10cSrcweir 
XMLScriptImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)3864cdf0e10cSrcweir XMLScriptImportContext::XMLScriptImportContext(
3865cdf0e10cSrcweir 	SvXMLImport& rImport,
3866cdf0e10cSrcweir 	XMLTextImportHelper& rHlp,
3867cdf0e10cSrcweir 	sal_uInt16 nPrfx,
3868cdf0e10cSrcweir 	const OUString& sLocalName)
3869cdf0e10cSrcweir :	XMLTextFieldImportContext(rImport, rHlp, sAPI_script, nPrfx, sLocalName)
3870cdf0e10cSrcweir ,	sPropertyScriptType(RTL_CONSTASCII_USTRINGPARAM(sAPI_script_type))
3871cdf0e10cSrcweir ,	sPropertyURLContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_url_content))
3872cdf0e10cSrcweir ,	sPropertyContent(RTL_CONSTASCII_USTRINGPARAM(sAPI_content))
3873cdf0e10cSrcweir ,	bContentOK(sal_False)
3874cdf0e10cSrcweir ,	bScriptTypeOK(sal_False)
3875cdf0e10cSrcweir ,	bUrlContent(sal_False)
3876cdf0e10cSrcweir {
3877cdf0e10cSrcweir }
3878cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)3879cdf0e10cSrcweir void XMLScriptImportContext::ProcessAttribute(
3880cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
3881cdf0e10cSrcweir 	const OUString& sAttrValue )
3882cdf0e10cSrcweir {
3883cdf0e10cSrcweir 	switch (nAttrToken)
3884cdf0e10cSrcweir 	{
3885cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_HREF:
3886cdf0e10cSrcweir 			sContent = GetImport().GetAbsoluteReference( sAttrValue );
3887cdf0e10cSrcweir 			bContentOK = sal_True;
3888cdf0e10cSrcweir 			break;
3889cdf0e10cSrcweir 
3890cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_LANGUAGE:
3891cdf0e10cSrcweir 			sScriptType = sAttrValue;
3892cdf0e10cSrcweir 			bScriptTypeOK = sal_True;
3893cdf0e10cSrcweir 			break;
3894cdf0e10cSrcweir 
3895cdf0e10cSrcweir 		default:
3896cdf0e10cSrcweir 			// ignore
3897cdf0e10cSrcweir 			break;
3898cdf0e10cSrcweir 	}
3899cdf0e10cSrcweir 
3900cdf0e10cSrcweir 	// always valid (even without ScriptType; cf- #96531#)
3901cdf0e10cSrcweir 	bValid = sal_True;
3902cdf0e10cSrcweir }
3903cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)3904cdf0e10cSrcweir void XMLScriptImportContext::PrepareField(
3905cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
3906cdf0e10cSrcweir {
3907cdf0e10cSrcweir 	Any aAny;
3908cdf0e10cSrcweir 
3909cdf0e10cSrcweir 	// if href attribute was present, we use it. Else we use element content
3910cdf0e10cSrcweir 	if (! bContentOK)
3911cdf0e10cSrcweir 	{
3912cdf0e10cSrcweir 		sContent = GetContent();
3913cdf0e10cSrcweir 	}
3914cdf0e10cSrcweir 	aAny <<= sContent;
3915cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyContent, aAny);
3916cdf0e10cSrcweir 
3917cdf0e10cSrcweir 	// URL or script text? We use URL if we have an href-attribute
3918cdf0e10cSrcweir 	aAny.setValue(&bContentOK, ::getBooleanCppuType());
3919cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyURLContent, aAny);
3920cdf0e10cSrcweir 
3921cdf0e10cSrcweir 	aAny <<= sScriptType;
3922cdf0e10cSrcweir 	xPropertySet->setPropertyValue(sPropertyScriptType, aAny);
3923cdf0e10cSrcweir }
3924cdf0e10cSrcweir 
3925cdf0e10cSrcweir //
3926cdf0e10cSrcweir // measure field
3927cdf0e10cSrcweir //
3928cdf0e10cSrcweir 
3929cdf0e10cSrcweir TYPEINIT1(XMLMeasureFieldImportContext, XMLTextFieldImportContext);
3930cdf0e10cSrcweir 
XMLMeasureFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const OUString & sLocalName)3931cdf0e10cSrcweir XMLMeasureFieldImportContext::XMLMeasureFieldImportContext(
3932cdf0e10cSrcweir 	SvXMLImport& rImport,
3933cdf0e10cSrcweir 	XMLTextImportHelper& rHlp,
3934cdf0e10cSrcweir 	sal_uInt16 nPrfx,
3935cdf0e10cSrcweir 	const OUString& sLocalName) :
3936cdf0e10cSrcweir 		XMLTextFieldImportContext(rImport, rHlp, sAPI_measure,
3937cdf0e10cSrcweir 								  nPrfx, sLocalName),
3938cdf0e10cSrcweir 		mnKind( 0 )
3939cdf0e10cSrcweir {
3940cdf0e10cSrcweir }
3941cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const OUString & sAttrValue)3942cdf0e10cSrcweir void XMLMeasureFieldImportContext::ProcessAttribute(
3943cdf0e10cSrcweir 	sal_uInt16 nAttrToken,
3944cdf0e10cSrcweir 	const OUString& sAttrValue )
3945cdf0e10cSrcweir {
3946cdf0e10cSrcweir 	switch (nAttrToken)
3947cdf0e10cSrcweir 	{
3948cdf0e10cSrcweir 		case XML_TOK_TEXTFIELD_MEASURE_KIND:
3949cdf0e10cSrcweir 			if( IsXMLToken( sAttrValue, XML_VALUE ) )
3950cdf0e10cSrcweir 			{
3951cdf0e10cSrcweir 				mnKind = 0; bValid = sal_True;
3952cdf0e10cSrcweir 			}
3953cdf0e10cSrcweir 			else if( IsXMLToken( sAttrValue, XML_UNIT ) )
3954cdf0e10cSrcweir 			{
3955cdf0e10cSrcweir 				mnKind = 1; bValid = sal_True;
3956cdf0e10cSrcweir 			}
3957cdf0e10cSrcweir 			else if( IsXMLToken( sAttrValue, XML_GAP ) )
3958cdf0e10cSrcweir 			{
3959cdf0e10cSrcweir 				mnKind = 2; bValid = sal_True;
3960cdf0e10cSrcweir 			}
3961cdf0e10cSrcweir 			break;
3962cdf0e10cSrcweir 	}
3963cdf0e10cSrcweir }
3964cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)3965cdf0e10cSrcweir void XMLMeasureFieldImportContext::PrepareField(
3966cdf0e10cSrcweir 	const Reference<XPropertySet> & xPropertySet)
3967cdf0e10cSrcweir {
3968cdf0e10cSrcweir 	Any aAny;
3969cdf0e10cSrcweir 	aAny <<= mnKind;
3970cdf0e10cSrcweir 	xPropertySet->setPropertyValue(OUString::createFromAscii("Kind"), aAny);
3971cdf0e10cSrcweir }
3972cdf0e10cSrcweir 
3973cdf0e10cSrcweir 
3974cdf0e10cSrcweir 
3975cdf0e10cSrcweir //
3976cdf0e10cSrcweir // dropdown field
3977cdf0e10cSrcweir //
3978cdf0e10cSrcweir 
3979cdf0e10cSrcweir 
3980cdf0e10cSrcweir TYPEINIT1( XMLDropDownFieldImportContext, XMLTextFieldImportContext );
3981cdf0e10cSrcweir 
XMLDropDownFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const::rtl::OUString & sLocalName)3982cdf0e10cSrcweir XMLDropDownFieldImportContext::XMLDropDownFieldImportContext(
3983cdf0e10cSrcweir         SvXMLImport& rImport,
3984cdf0e10cSrcweir         XMLTextImportHelper& rHlp,
3985cdf0e10cSrcweir         sal_uInt16 nPrfx,
3986cdf0e10cSrcweir         const ::rtl::OUString& sLocalName) :
3987cdf0e10cSrcweir     XMLTextFieldImportContext( rImport, rHlp, sAPI_drop_down,
3988cdf0e10cSrcweir                                nPrfx, sLocalName ),
3989cdf0e10cSrcweir     aLabels(),
3990cdf0e10cSrcweir     sName(),
3991cdf0e10cSrcweir     nSelected( -1 ),
3992cdf0e10cSrcweir     bNameOK( false ),
3993cdf0e10cSrcweir     bHelpOK(false),
3994cdf0e10cSrcweir     bHintOK(false),
3995cdf0e10cSrcweir     sPropertyItems( RTL_CONSTASCII_USTRINGPARAM( "Items" ) ),
3996cdf0e10cSrcweir     sPropertySelectedItem( RTL_CONSTASCII_USTRINGPARAM( "SelectedItem" ) ),
3997cdf0e10cSrcweir     sPropertyName( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ),
3998cdf0e10cSrcweir     sPropertyHelp( RTL_CONSTASCII_USTRINGPARAM( "Help" ) ),
3999cdf0e10cSrcweir     sPropertyToolTip( RTL_CONSTASCII_USTRINGPARAM( "Tooltip" ) )
4000cdf0e10cSrcweir {
4001cdf0e10cSrcweir     bValid = sal_True;
4002cdf0e10cSrcweir }
4003cdf0e10cSrcweir 
lcl_ProcessLabel(const SvXMLImport & rImport,const Reference<XAttributeList> & xAttrList,OUString & rLabel,bool & rIsSelected)4004cdf0e10cSrcweir bool lcl_ProcessLabel( const SvXMLImport& rImport,
4005cdf0e10cSrcweir                        const Reference<XAttributeList>& xAttrList,
4006cdf0e10cSrcweir                        OUString& rLabel,
4007cdf0e10cSrcweir                        bool& rIsSelected )
4008cdf0e10cSrcweir {
4009cdf0e10cSrcweir     bool bValid = false;
4010cdf0e10cSrcweir     sal_Int16 nLength = xAttrList->getLength();
4011cdf0e10cSrcweir     for( sal_Int16 n = 0; n < nLength; n++ )
4012cdf0e10cSrcweir     {
4013cdf0e10cSrcweir 		OUString sLocalName;
4014cdf0e10cSrcweir 		sal_uInt16 nPrefix = rImport.GetNamespaceMap().
4015cdf0e10cSrcweir 			GetKeyByAttrName( xAttrList->getNameByIndex(n), &sLocalName );
4016cdf0e10cSrcweir         OUString sValue = xAttrList->getValueByIndex(n);
4017cdf0e10cSrcweir 
4018cdf0e10cSrcweir         if( nPrefix == XML_NAMESPACE_TEXT )
4019cdf0e10cSrcweir         {
4020cdf0e10cSrcweir             if( IsXMLToken( sLocalName, XML_VALUE ) )
4021cdf0e10cSrcweir             {
4022cdf0e10cSrcweir                 rLabel = sValue;
4023cdf0e10cSrcweir                 bValid = true;
4024cdf0e10cSrcweir             }
4025cdf0e10cSrcweir             else if( IsXMLToken( sLocalName, XML_CURRENT_SELECTED ) )
4026cdf0e10cSrcweir             {
4027cdf0e10cSrcweir                 sal_Bool bTmp;
4028cdf0e10cSrcweir                 if( SvXMLUnitConverter::convertBool( bTmp, sValue ) )
4029cdf0e10cSrcweir                     rIsSelected = bTmp;
4030cdf0e10cSrcweir             }
4031cdf0e10cSrcweir         }
4032cdf0e10cSrcweir     }
4033cdf0e10cSrcweir     return bValid;
4034cdf0e10cSrcweir }
4035cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)4036cdf0e10cSrcweir SvXMLImportContext* XMLDropDownFieldImportContext::CreateChildContext(
4037cdf0e10cSrcweir     sal_uInt16 nPrefix,
4038cdf0e10cSrcweir     const OUString& rLocalName,
4039cdf0e10cSrcweir     const Reference<XAttributeList>& xAttrList )
4040cdf0e10cSrcweir {
4041cdf0e10cSrcweir     if( nPrefix == XML_NAMESPACE_TEXT  &&
4042cdf0e10cSrcweir         IsXMLToken( rLocalName, XML_LABEL ) )
4043cdf0e10cSrcweir     {
4044cdf0e10cSrcweir         OUString sLabel;
4045cdf0e10cSrcweir         bool bIsSelected = sal_False;
4046cdf0e10cSrcweir         if( lcl_ProcessLabel( GetImport(), xAttrList, sLabel, bIsSelected ) )
4047cdf0e10cSrcweir         {
4048cdf0e10cSrcweir             if( bIsSelected )
4049cdf0e10cSrcweir                 nSelected = static_cast<sal_Int32>( aLabels.size() );
4050cdf0e10cSrcweir             aLabels.push_back( sLabel );
4051cdf0e10cSrcweir         }
4052cdf0e10cSrcweir     }
4053cdf0e10cSrcweir     return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
4054cdf0e10cSrcweir }
4055cdf0e10cSrcweir 
ProcessAttribute(sal_uInt16 nAttrToken,const::rtl::OUString & sAttrValue)4056cdf0e10cSrcweir void XMLDropDownFieldImportContext::ProcessAttribute(
4057cdf0e10cSrcweir     sal_uInt16 nAttrToken,
4058cdf0e10cSrcweir     const ::rtl::OUString& sAttrValue )
4059cdf0e10cSrcweir {
4060cdf0e10cSrcweir     if( nAttrToken == XML_TOK_TEXTFIELD_NAME )
4061cdf0e10cSrcweir     {
4062cdf0e10cSrcweir         sName = sAttrValue;
4063cdf0e10cSrcweir         bNameOK = true;
4064cdf0e10cSrcweir     }
4065cdf0e10cSrcweir     else if (nAttrToken == XML_TOK_TEXTFIELD_HELP)
4066cdf0e10cSrcweir     {
4067cdf0e10cSrcweir         sHelp = sAttrValue;
4068cdf0e10cSrcweir         bHelpOK = true;
4069cdf0e10cSrcweir     }
4070cdf0e10cSrcweir     else if (nAttrToken == XML_TOK_TEXTFIELD_HINT)
4071cdf0e10cSrcweir     {
4072cdf0e10cSrcweir         sHint = sAttrValue;
4073cdf0e10cSrcweir         bHintOK = true;
4074cdf0e10cSrcweir     }
4075cdf0e10cSrcweir }
4076cdf0e10cSrcweir 
PrepareField(const Reference<XPropertySet> & xPropertySet)4077cdf0e10cSrcweir void XMLDropDownFieldImportContext::PrepareField(
4078cdf0e10cSrcweir     const Reference<XPropertySet>& xPropertySet)
4079cdf0e10cSrcweir {
4080cdf0e10cSrcweir     // create sequence
4081cdf0e10cSrcweir     sal_Int32 nLength = static_cast<sal_Int32>( aLabels.size() );
4082cdf0e10cSrcweir     Sequence<OUString> aSequence( nLength );
4083cdf0e10cSrcweir     OUString* pSequence = aSequence.getArray();
4084cdf0e10cSrcweir     for( sal_Int32 n = 0; n < nLength; n++ )
4085cdf0e10cSrcweir         pSequence[n] = aLabels[n];
4086cdf0e10cSrcweir 
4087cdf0e10cSrcweir     // now set values:
4088cdf0e10cSrcweir     Any aAny;
4089cdf0e10cSrcweir 
4090cdf0e10cSrcweir     aAny <<= aSequence;
4091cdf0e10cSrcweir     xPropertySet->setPropertyValue( sPropertyItems, aAny );
4092cdf0e10cSrcweir 
4093cdf0e10cSrcweir     if( nSelected >= 0  &&  nSelected < nLength )
4094cdf0e10cSrcweir     {
4095cdf0e10cSrcweir         aAny <<= pSequence[nSelected];
4096cdf0e10cSrcweir         xPropertySet->setPropertyValue( sPropertySelectedItem, aAny );
4097cdf0e10cSrcweir     }
4098cdf0e10cSrcweir 
4099cdf0e10cSrcweir     // set name
4100cdf0e10cSrcweir     if( bNameOK )
4101cdf0e10cSrcweir     {
4102cdf0e10cSrcweir         aAny <<= sName;
4103cdf0e10cSrcweir         xPropertySet->setPropertyValue( sPropertyName, aAny );
4104cdf0e10cSrcweir     }
4105cdf0e10cSrcweir     // set help
4106cdf0e10cSrcweir     if( bHelpOK )
4107cdf0e10cSrcweir     {
4108cdf0e10cSrcweir         aAny <<= sHelp;
4109cdf0e10cSrcweir         xPropertySet->setPropertyValue( sPropertyHelp, aAny );
4110cdf0e10cSrcweir     }
4111cdf0e10cSrcweir     // set hint
4112cdf0e10cSrcweir     if( bHintOK )
4113cdf0e10cSrcweir     {
4114cdf0e10cSrcweir         aAny <<= sHint;
4115cdf0e10cSrcweir         xPropertySet->setPropertyValue( sPropertyToolTip, aAny );
4116cdf0e10cSrcweir     }
4117cdf0e10cSrcweir 
4118cdf0e10cSrcweir }
4119cdf0e10cSrcweir 
4120cdf0e10cSrcweir /** import header fields (<draw:header>) */
4121cdf0e10cSrcweir TYPEINIT1( XMLHeaderFieldImportContext, XMLTextFieldImportContext );
4122cdf0e10cSrcweir 
XMLHeaderFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const::rtl::OUString & sLocalName)4123cdf0e10cSrcweir XMLHeaderFieldImportContext::XMLHeaderFieldImportContext(
4124cdf0e10cSrcweir 		SvXMLImport& rImport,					/// XML Import
4125cdf0e10cSrcweir 		XMLTextImportHelper& rHlp,				/// Text import helper
4126cdf0e10cSrcweir 		sal_uInt16 nPrfx,						/// namespace prefix
4127cdf0e10cSrcweir 		const ::rtl::OUString& sLocalName)		/// element name w/o prefix
4128cdf0e10cSrcweir : XMLTextFieldImportContext(rImport, rHlp, sAPI_header, nPrfx, sLocalName )
4129cdf0e10cSrcweir {
4130cdf0e10cSrcweir 	sServicePrefix = OUString::createFromAscii( sAPI_presentation_prefix );
4131cdf0e10cSrcweir 	bValid = sal_True;
4132cdf0e10cSrcweir }
4133cdf0e10cSrcweir 
4134cdf0e10cSrcweir /// process attribute values
ProcessAttribute(sal_uInt16,const::rtl::OUString &)4135cdf0e10cSrcweir void XMLHeaderFieldImportContext::ProcessAttribute( sal_uInt16, const ::rtl::OUString& )
4136cdf0e10cSrcweir {
4137cdf0e10cSrcweir }
4138cdf0e10cSrcweir 
4139cdf0e10cSrcweir /// prepare XTextField for insertion into document
PrepareField(const Reference<XPropertySet> &)4140cdf0e10cSrcweir void XMLHeaderFieldImportContext::PrepareField(const Reference<XPropertySet> &)
4141cdf0e10cSrcweir {
4142cdf0e10cSrcweir }
4143cdf0e10cSrcweir 
4144cdf0e10cSrcweir /** import footer fields (<draw:footer>) */
4145cdf0e10cSrcweir TYPEINIT1( XMLFooterFieldImportContext, XMLTextFieldImportContext );
4146cdf0e10cSrcweir 
XMLFooterFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const::rtl::OUString & sLocalName)4147cdf0e10cSrcweir XMLFooterFieldImportContext::XMLFooterFieldImportContext(
4148cdf0e10cSrcweir 		SvXMLImport& rImport,					/// XML Import
4149cdf0e10cSrcweir 		XMLTextImportHelper& rHlp,				/// Text import helper
4150cdf0e10cSrcweir 		sal_uInt16 nPrfx,						/// namespace prefix
4151cdf0e10cSrcweir 		const ::rtl::OUString& sLocalName)		/// element name w/o prefix
4152cdf0e10cSrcweir : XMLTextFieldImportContext(rImport, rHlp, sAPI_footer, nPrfx, sLocalName )
4153cdf0e10cSrcweir {
4154cdf0e10cSrcweir 	sServicePrefix = OUString::createFromAscii( sAPI_presentation_prefix );
4155cdf0e10cSrcweir 	bValid = sal_True;
4156cdf0e10cSrcweir }
4157cdf0e10cSrcweir 
4158cdf0e10cSrcweir /// process attribute values
ProcessAttribute(sal_uInt16,const::rtl::OUString &)4159cdf0e10cSrcweir void XMLFooterFieldImportContext::ProcessAttribute( sal_uInt16, const ::rtl::OUString& )
4160cdf0e10cSrcweir {
4161cdf0e10cSrcweir }
4162cdf0e10cSrcweir 
4163cdf0e10cSrcweir /// prepare XTextField for insertion into document
PrepareField(const Reference<XPropertySet> &)4164cdf0e10cSrcweir void XMLFooterFieldImportContext::PrepareField(const Reference<XPropertySet> &)
4165cdf0e10cSrcweir {
4166cdf0e10cSrcweir }
4167cdf0e10cSrcweir 
4168cdf0e10cSrcweir 
4169cdf0e10cSrcweir /** import footer fields (<draw:date-and-time>) */
4170cdf0e10cSrcweir TYPEINIT1( XMLDateTimeFieldImportContext, XMLTextFieldImportContext );
4171cdf0e10cSrcweir 
XMLDateTimeFieldImportContext(SvXMLImport & rImport,XMLTextImportHelper & rHlp,sal_uInt16 nPrfx,const::rtl::OUString & sLocalName)4172cdf0e10cSrcweir XMLDateTimeFieldImportContext::XMLDateTimeFieldImportContext(
4173cdf0e10cSrcweir 		SvXMLImport& rImport,					/// XML Import
4174cdf0e10cSrcweir 		XMLTextImportHelper& rHlp,				/// Text import helper
4175cdf0e10cSrcweir 		sal_uInt16 nPrfx,						/// namespace prefix
4176cdf0e10cSrcweir 		const ::rtl::OUString& sLocalName)		/// element name w/o prefix
4177cdf0e10cSrcweir : XMLTextFieldImportContext(rImport, rHlp, sAPI_datetime, nPrfx, sLocalName )
4178cdf0e10cSrcweir {
4179cdf0e10cSrcweir 	sServicePrefix = OUString::createFromAscii( sAPI_presentation_prefix );
4180cdf0e10cSrcweir 	bValid = sal_True;
4181cdf0e10cSrcweir }
4182cdf0e10cSrcweir 
4183cdf0e10cSrcweir /// process attribute values
ProcessAttribute(sal_uInt16,const::rtl::OUString &)4184cdf0e10cSrcweir void XMLDateTimeFieldImportContext::ProcessAttribute( sal_uInt16,
4185cdf0e10cSrcweir 								   const ::rtl::OUString& )
4186cdf0e10cSrcweir {
4187cdf0e10cSrcweir }
4188cdf0e10cSrcweir 
4189cdf0e10cSrcweir /// prepare XTextField for insertion into document
PrepareField(const::com::sun::star::uno::Reference<::com::sun::star::beans::XPropertySet> &)4190cdf0e10cSrcweir void XMLDateTimeFieldImportContext::PrepareField(
4191cdf0e10cSrcweir 		const ::com::sun::star::uno::Reference<
4192cdf0e10cSrcweir 		::com::sun::star::beans::XPropertySet> &)
4193cdf0e10cSrcweir {
4194cdf0e10cSrcweir }
4195