1*b1cdbd2cSJim Jagielski/**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_configuration_backend_XUpdateHandler_idl__
24*b1cdbd2cSJim Jagielski#define __com_sun_star_configuration_backend_XUpdateHandler_idl__
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_uno_XInterface_idl__
27*b1cdbd2cSJim Jagielski#include <com/sun/star/uno/XInterface.idl>
28*b1cdbd2cSJim Jagielski#endif
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_configuration_backend_TemplateIdentifier_idl__
31*b1cdbd2cSJim Jagielski#include <com/sun/star/configuration/backend/TemplateIdentifier.idl>
32*b1cdbd2cSJim Jagielski#endif
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_configuration_backend_MalformedDataException_idl__
35*b1cdbd2cSJim Jagielski#include <com/sun/star/configuration/backend/MalformedDataException.idl>
36*b1cdbd2cSJim Jagielski#endif
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_lang_WrappedTargetException_idl__
39*b1cdbd2cSJim Jagielski#include <com/sun/star/lang/WrappedTargetException.idl>
40*b1cdbd2cSJim Jagielski#endif
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_lang_IllegalAccessException_idl__
43*b1cdbd2cSJim Jagielski#include <com/sun/star/lang/IllegalAccessException.idl>
44*b1cdbd2cSJim Jagielski#endif
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski//=============================================================================
47*b1cdbd2cSJim Jagielski
48*b1cdbd2cSJim Jagielskimodule com { module sun { module star { module configuration { module backend {
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski//=============================================================================
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski/** receives a description of a configuration update or layer
53*b1cdbd2cSJim Jagielski	as a sequence of events.
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski    @since OpenOffice 1.1.2
56*b1cdbd2cSJim Jagielski */
57*b1cdbd2cSJim Jagielskipublished interface XUpdateHandler: ::com::sun::star::uno::XInterface
58*b1cdbd2cSJim Jagielski{
59*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski	/** receives notification that a update or description is started.
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
64*b1cdbd2cSJim Jagielski            if the update already was started
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::IllegalAccessException
67*b1cdbd2cSJim Jagielski            if the target layer is read-only
68*b1cdbd2cSJim Jagielski            <p><em>Some implementations can only detect this when executing
69*b1cdbd2cSJim Jagielski                <member>XUpdateHandler::endUpdate()</member></em>
70*b1cdbd2cSJim Jagielski            </p>
71*b1cdbd2cSJim Jagielski
72*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
73*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
74*b1cdbd2cSJim Jagielski	 */
75*b1cdbd2cSJim Jagielski	void startUpdate(  )
76*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
77*b1cdbd2cSJim Jagielski                    com::sun::star::lang::IllegalAccessException,
78*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
79*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski	/** receives notification that the current update description is complete.
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski		<p> Must match a previous call to <member>XUpdateHandler::startUpdate()</member>.
84*b1cdbd2cSJim Jagielski		</p>
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
87*b1cdbd2cSJim Jagielski            <ul>
88*b1cdbd2cSJim Jagielski			<li>if no update is started at all</li>
89*b1cdbd2cSJim Jagielski			<li>if invalid data is detected in the update</li>
90*b1cdbd2cSJim Jagielski			<li>if there is an unfinished subnode in progress</li>
91*b1cdbd2cSJim Jagielski			<li>if the update tries to change read-only data</li>
92*b1cdbd2cSJim Jagielski            </ul>
93*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::IllegalAccessException
96*b1cdbd2cSJim Jagielski            if the target layer is read-only
97*b1cdbd2cSJim Jagielski
98*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
99*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
100*b1cdbd2cSJim Jagielski	 */
101*b1cdbd2cSJim Jagielski	void endUpdate(  )
102*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
103*b1cdbd2cSJim Jagielski                    com::sun::star::lang::IllegalAccessException,
104*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
105*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
106*b1cdbd2cSJim Jagielski
107*b1cdbd2cSJim Jagielski	/** receives notification that a modification of a node is started.
108*b1cdbd2cSJim Jagielski
109*b1cdbd2cSJim Jagielski		<p> Subsequent calls describe changes to properties and items or
110*b1cdbd2cSJim Jagielski			members of the node until a matching call to
111*b1cdbd2cSJim Jagielski			<member>XUpdateHandler::endNode()</member> is encountered.
112*b1cdbd2cSJim Jagielski		</p>
113*b1cdbd2cSJim Jagielski
114*b1cdbd2cSJim Jagielski		@param aName
115*b1cdbd2cSJim Jagielski			specifies the name of the node.
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielski		@param aAttributes
118*b1cdbd2cSJim Jagielski			specifies attribute values to be applied to the node in the
119*b1cdbd2cSJim Jagielski            current layer.
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski			<p> The value is a combination of
122*b1cdbd2cSJim Jagielski				<type>NodeAttribute</type> flags.
123*b1cdbd2cSJim Jagielski			</p>
124*b1cdbd2cSJim Jagielski			<p>	Only attributes which are selected in aAttributeMask
125*b1cdbd2cSJim Jagielski                are changed.
126*b1cdbd2cSJim Jagielski			</p>
127*b1cdbd2cSJim Jagielski
128*b1cdbd2cSJim Jagielski		@param aAttributeMask
129*b1cdbd2cSJim Jagielski			specifies which attributes should be changed for the node.
130*b1cdbd2cSJim Jagielski
131*b1cdbd2cSJim Jagielski			<p> The value is a combination of
132*b1cdbd2cSJim Jagielski				<type>NodeAttribute</type> flags.
133*b1cdbd2cSJim Jagielski			</p>
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski		@param bReset
136*b1cdbd2cSJim Jagielski			if <TRUE/>, specifies that the node should be reset to its default
137*b1cdbd2cSJim Jagielski            state as given by lower layers and the schema or template prior
138*b1cdbd2cSJim Jagielski            to applying the changes.
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
141*b1cdbd2cSJim Jagielski            <ul>
142*b1cdbd2cSJim Jagielski			<li>if there isn't an update in progress at all</li>
143*b1cdbd2cSJim Jagielski            <li>if a node is not valid in this place</li>
144*b1cdbd2cSJim Jagielski			<li>if there already was a change to that node</li>
145*b1cdbd2cSJim Jagielski			<li>if there is no node with that name</li>
146*b1cdbd2cSJim Jagielski			<li>if the node is read-only</li>
147*b1cdbd2cSJim Jagielski			<li>if the name is not a valid node name</li>
148*b1cdbd2cSJim Jagielski			<li>if the attributes or mask are not valid for the node</li>
149*b1cdbd2cSJim Jagielski            </ul>
150*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
151*b1cdbd2cSJim Jagielski
152*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
153*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
154*b1cdbd2cSJim Jagielski
155*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
156*b1cdbd2cSJim Jagielski	 */
157*b1cdbd2cSJim Jagielski	void modifyNode ( [in] string aName,
158*b1cdbd2cSJim Jagielski					  [in] short  aAttributes,
159*b1cdbd2cSJim Jagielski					  [in] short  aAttributeMask,
160*b1cdbd2cSJim Jagielski                      [in] boolean bReset )
161*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
162*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
163*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
164*b1cdbd2cSJim Jagielski
165*b1cdbd2cSJim Jagielski	/** receives notification that a node is started as a new item.
166*b1cdbd2cSJim Jagielski
167*b1cdbd2cSJim Jagielski		<p> The current node must be a set and
168*b1cdbd2cSJim Jagielski			a preexisting item (if any) must be removeable.
169*b1cdbd2cSJim Jagielski		</p>
170*b1cdbd2cSJim Jagielski		<p> The new item will be created from the default template
171*b1cdbd2cSJim Jagielski			of the set.
172*b1cdbd2cSJim Jagielski		</p>
173*b1cdbd2cSJim Jagielski		<p> Subsequent calls describe the difference from the template
174*b1cdbd2cSJim Jagielski			of properties, items or members of the node until a matching call
175*b1cdbd2cSJim Jagielski			to <member>XUpdateHandler::endNode()</member> is encountered.
176*b1cdbd2cSJim Jagielski		</p>
177*b1cdbd2cSJim Jagielski
178*b1cdbd2cSJim Jagielski		@param aName
179*b1cdbd2cSJim Jagielski			specifies the name of the new item.
180*b1cdbd2cSJim Jagielski
181*b1cdbd2cSJim Jagielski		@param aAttributes
182*b1cdbd2cSJim Jagielski			specifies attribute values to be applied to the new node.
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski			<p> The value is a combination of
185*b1cdbd2cSJim Jagielski				<type>NodeAttribute</type> flags.  Note that
186*b1cdbd2cSJim Jagielski                <member>NodeAttribute::FUSE</member> has an impact on the
187*b1cdbd2cSJim Jagielski                semantics of this method.
188*b1cdbd2cSJim Jagielski			</p>
189*b1cdbd2cSJim Jagielski
190*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
191*b1cdbd2cSJim Jagielski            <ul>
192*b1cdbd2cSJim Jagielski			<li>if there isn't a set node in progress currently</li>
193*b1cdbd2cSJim Jagielski			<li>if there already was a change to an item of that name</li>
194*b1cdbd2cSJim Jagielski			<li>if the template for the new node is not found</li>
195*b1cdbd2cSJim Jagielski			<li>if an item of that name exists and is not removeable</li>
196*b1cdbd2cSJim Jagielski			<li>if the name is not a valid item name</li>
197*b1cdbd2cSJim Jagielski			<li>if the attributes are not valid for the node</li>
198*b1cdbd2cSJim Jagielski            </ul>
199*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
202*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
203*b1cdbd2cSJim Jagielski
204*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
205*b1cdbd2cSJim Jagielski	 */
206*b1cdbd2cSJim Jagielski	void addOrReplaceNode (	[in] string aName,
207*b1cdbd2cSJim Jagielski							[in] short  aAttributes )
208*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
209*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
210*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski	/** receives notification that a node is started as a new item
213*b1cdbd2cSJim Jagielski        based on a particular template.
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski		<p> The current node must be a set and
216*b1cdbd2cSJim Jagielski			a preexisting item (if any) must be removeable.
217*b1cdbd2cSJim Jagielski		</p>
218*b1cdbd2cSJim Jagielski		<p> Subsequent calls describe the difference from the template
219*b1cdbd2cSJim Jagielski			of properties or members of the node until a matching call
220*b1cdbd2cSJim Jagielski			to <member>XUpdateHandler::endNode()</member> is encountered.
221*b1cdbd2cSJim Jagielski		</p>
222*b1cdbd2cSJim Jagielski
223*b1cdbd2cSJim Jagielski		@param aName
224*b1cdbd2cSJim Jagielski			specifies the name of the item.
225*b1cdbd2cSJim Jagielski
226*b1cdbd2cSJim Jagielski		@param aTemplate
227*b1cdbd2cSJim Jagielski			specifies the template to use for the new node
228*b1cdbd2cSJim Jagielski
229*b1cdbd2cSJim Jagielski		@param aAttributes
230*b1cdbd2cSJim Jagielski			specifies attribute values to be applied to the new node.
231*b1cdbd2cSJim Jagielski
232*b1cdbd2cSJim Jagielski			<p> The value is a combination of
233*b1cdbd2cSJim Jagielski				<type>NodeAttribute</type> flags.  Note that
234*b1cdbd2cSJim Jagielski                <member>NodeAttribute::FUSE</member> has an impact on the
235*b1cdbd2cSJim Jagielski                semantics of this method.
236*b1cdbd2cSJim Jagielski			</p>
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
239*b1cdbd2cSJim Jagielski            <ul>
240*b1cdbd2cSJim Jagielski			<li>if there isn't a set node in progress currently</li>
241*b1cdbd2cSJim Jagielski			<li>if there already was a change to an item of that name</li>
242*b1cdbd2cSJim Jagielski			<li>if the template for the new node is not found</li>
243*b1cdbd2cSJim Jagielski			<li>if an item of that name exists and is not removeable</li>
244*b1cdbd2cSJim Jagielski			<li>if the name is not a valid item name</li>
245*b1cdbd2cSJim Jagielski			<li>if the template is not a valid item type for the containing set</li>
246*b1cdbd2cSJim Jagielski			<li>if the attributes are not valid for the node</li>
247*b1cdbd2cSJim Jagielski            </ul>
248*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
249*b1cdbd2cSJim Jagielski
250*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
251*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
252*b1cdbd2cSJim Jagielski
253*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
254*b1cdbd2cSJim Jagielski	 */
255*b1cdbd2cSJim Jagielski	void addOrReplaceNodeFromTemplate(	[in] string aName,
256*b1cdbd2cSJim Jagielski										[in] short  aAttributes,
257*b1cdbd2cSJim Jagielski										[in] TemplateIdentifier aTemplate )
258*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
259*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
260*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski	/** receives notification that a node modification is complete.
263*b1cdbd2cSJim Jagielski
264*b1cdbd2cSJim Jagielski		<p> Must match the last open call to
265*b1cdbd2cSJim Jagielski			<member>XUpdateHandler::modifyNode()</member>,
266*b1cdbd2cSJim Jagielski			<member>XUpdateHandler::addOrReplaceNode()</member> or
267*b1cdbd2cSJim Jagielski			<member>XUpdateHandler::addOrReplaceNodeFromTemplate()</member>.
268*b1cdbd2cSJim Jagielski		</p>
269*b1cdbd2cSJim Jagielski
270*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
271*b1cdbd2cSJim Jagielski            <ul>
272*b1cdbd2cSJim Jagielski			<li>if invalid data is detected in the node</li>
273*b1cdbd2cSJim Jagielski			<li>if no node is started at all</li>
274*b1cdbd2cSJim Jagielski            </ul>
275*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
278*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
279*b1cdbd2cSJim Jagielski	 */
280*b1cdbd2cSJim Jagielski	void endNode( )
281*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
282*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
283*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
284*b1cdbd2cSJim Jagielski
285*b1cdbd2cSJim Jagielski	/** receives notification that an item is to be dropped from a set.
286*b1cdbd2cSJim Jagielski
287*b1cdbd2cSJim Jagielski		<p> The current node must be a set and
288*b1cdbd2cSJim Jagielski			the item must be removeable.
289*b1cdbd2cSJim Jagielski		</p>
290*b1cdbd2cSJim Jagielski
291*b1cdbd2cSJim Jagielski		@param aName
292*b1cdbd2cSJim Jagielski			specifies the name of the node.
293*b1cdbd2cSJim Jagielski
294*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
295*b1cdbd2cSJim Jagielski            <ul>
296*b1cdbd2cSJim Jagielski			<li>if there isn't a set node in progress currently</li>
297*b1cdbd2cSJim Jagielski			<li>if there already was a change to a node of that name</li>
298*b1cdbd2cSJim Jagielski			<li>if there is no item with that name</li>
299*b1cdbd2cSJim Jagielski			<li>if the item is not removeable</li>
300*b1cdbd2cSJim Jagielski			<li>if the name is not a valid node name</li>
301*b1cdbd2cSJim Jagielski            </ul>
302*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
305*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
306*b1cdbd2cSJim Jagielski	 */
307*b1cdbd2cSJim Jagielski	void removeNode( [in] string aName )
308*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
309*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
310*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski	/** receives notification that modification of an existing property is started. .
313*b1cdbd2cSJim Jagielski
314*b1cdbd2cSJim Jagielski		<p> Subsequent calls describe changes to the value(s)
315*b1cdbd2cSJim Jagielski			of the property until a matching call to
316*b1cdbd2cSJim Jagielski			<member>XUpdateHandler::endProperty()</member> is encountered.
317*b1cdbd2cSJim Jagielski		</p>
318*b1cdbd2cSJim Jagielski
319*b1cdbd2cSJim Jagielski		@param aName
320*b1cdbd2cSJim Jagielski			specifies the name of the property.
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski		@param aAttributes
323*b1cdbd2cSJim Jagielski			specifies new attributes of the property.
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski			<p> The value is a combination of
326*b1cdbd2cSJim Jagielski				<type>NodeAttribute</type> flags.
327*b1cdbd2cSJim Jagielski			</p>
328*b1cdbd2cSJim Jagielski			<p> Only attributes which are selected in aAttributeMask are changed.
329*b1cdbd2cSJim Jagielski			</p>
330*b1cdbd2cSJim Jagielski			<p>	<const>NodeAttribute::MANDATORY</const> need not be set
331*b1cdbd2cSJim Jagielski                and can't be removed, as dynamic properties always are mandatory
332*b1cdbd2cSJim Jagielski				in subsequent layers.
333*b1cdbd2cSJim Jagielski			</p>
334*b1cdbd2cSJim Jagielski
335*b1cdbd2cSJim Jagielski		@param aAttributeMask
336*b1cdbd2cSJim Jagielski			specifies which attributes should be changed for the property.
337*b1cdbd2cSJim Jagielski
338*b1cdbd2cSJim Jagielski			<p> The value is a combination of
339*b1cdbd2cSJim Jagielski				<type>NodeAttribute</type> flags.
340*b1cdbd2cSJim Jagielski			</p>
341*b1cdbd2cSJim Jagielski
342*b1cdbd2cSJim Jagielski		@param aType
343*b1cdbd2cSJim Jagielski			specifies the type of the property.
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski			<p> A <void/> type can be used to signify that
346*b1cdbd2cSJim Jagielski				the type is unknown and should not be recorded.
347*b1cdbd2cSJim Jagielski			</p>
348*b1cdbd2cSJim Jagielski
349*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
350*b1cdbd2cSJim Jagielski            <ul>
351*b1cdbd2cSJim Jagielski			<li>if there isn't a group or extensible node in progress currently</li>
352*b1cdbd2cSJim Jagielski			<li>if there already was a change to a property of that name</li>
353*b1cdbd2cSJim Jagielski			<li>if there is no property with that name</li>
354*b1cdbd2cSJim Jagielski			<li>if the property is read-only</li>
355*b1cdbd2cSJim Jagielski			<li>if the name is not a valid property name</li>
356*b1cdbd2cSJim Jagielski			<li>if the attributes are not valid for the property</li>
357*b1cdbd2cSJim Jagielski            </ul>
358*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
359*b1cdbd2cSJim Jagielski
360*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
361*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
362*b1cdbd2cSJim Jagielski
363*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
364*b1cdbd2cSJim Jagielski	 */
365*b1cdbd2cSJim Jagielski	void modifyProperty( [in] string aName,
366*b1cdbd2cSJim Jagielski			 	         [in] short aAttributes,
367*b1cdbd2cSJim Jagielski			 			 [in] short aAttributeMask,
368*b1cdbd2cSJim Jagielski						 [in] type aType )
369*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
370*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
371*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
372*b1cdbd2cSJim Jagielski
373*b1cdbd2cSJim Jagielski	/** receives notification about a change to the value of
374*b1cdbd2cSJim Jagielski        the current property.
375*b1cdbd2cSJim Jagielski
376*b1cdbd2cSJim Jagielski		@param aValue
377*b1cdbd2cSJim Jagielski			specifies the new value of the property.
378*b1cdbd2cSJim Jagielski
379*b1cdbd2cSJim Jagielski			<p> The value must match the type of the existing property.
380*b1cdbd2cSJim Jagielski				If the property does not have the
381*b1cdbd2cSJim Jagielski				<const>SchemaAttribute::REQUIRED</const> flag set,
382*b1cdbd2cSJim Jagielski				the value can be <void/>.
383*b1cdbd2cSJim Jagielski			</p>
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
386*b1cdbd2cSJim Jagielski            <ul>
387*b1cdbd2cSJim Jagielski			<li>if there isn't a property modification in progress currently</li>
388*b1cdbd2cSJim Jagielski			<li>if there already was a change to this value</li>
389*b1cdbd2cSJim Jagielski			<li>if the type of the value is not an allowed type</li>
390*b1cdbd2cSJim Jagielski			<li>if the value is not valid for the property</li>
391*b1cdbd2cSJim Jagielski            </ul>
392*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
393*b1cdbd2cSJim Jagielski
394*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
395*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
396*b1cdbd2cSJim Jagielski
397*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
398*b1cdbd2cSJim Jagielski	 */
399*b1cdbd2cSJim Jagielski	void setPropertyValue( [in] any aValue )
400*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
401*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
402*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
403*b1cdbd2cSJim Jagielski
404*b1cdbd2cSJim Jagielski	/** receives notification about a change to the value of
405*b1cdbd2cSJim Jagielski        the current property for a specific locale.
406*b1cdbd2cSJim Jagielski
407*b1cdbd2cSJim Jagielski		@param aValue
408*b1cdbd2cSJim Jagielski			specifies the new value of the property for the given locale.
409*b1cdbd2cSJim Jagielski
410*b1cdbd2cSJim Jagielski			<p> The value must match the type of the existing property.
411*b1cdbd2cSJim Jagielski				If the property does not have the
412*b1cdbd2cSJim Jagielski				<const>SchemaAttribute::REQUIRED</const> flag set,
413*b1cdbd2cSJim Jagielski				the value can be <void/>.
414*b1cdbd2cSJim Jagielski			</p>
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski		@param aLocale
417*b1cdbd2cSJim Jagielski			specifies the locale that the new value applies to.
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
420*b1cdbd2cSJim Jagielski            <ul>
421*b1cdbd2cSJim Jagielski			<li>if there isn't a property modification in progress currently</li>
422*b1cdbd2cSJim Jagielski			<li>if the property is not localizable</li>
423*b1cdbd2cSJim Jagielski			<li>if there already was a change to this value</li>
424*b1cdbd2cSJim Jagielski			<li>if the type of the value is not an allowed type</li>
425*b1cdbd2cSJim Jagielski			<li>if the value is not valid for the property</li>
426*b1cdbd2cSJim Jagielski			<li>if the locale is not a valid locale name</li>
427*b1cdbd2cSJim Jagielski            </ul>
428*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
429*b1cdbd2cSJim Jagielski
430*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
431*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
434*b1cdbd2cSJim Jagielski	 */
435*b1cdbd2cSJim Jagielski	void setPropertyValueForLocale( [in] any aValue, [in] string aLocale )
436*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
437*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
438*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
439*b1cdbd2cSJim Jagielski
440*b1cdbd2cSJim Jagielski	/** receives notification that the value of the current property
441*b1cdbd2cSJim Jagielski        should be reset to its default.
442*b1cdbd2cSJim Jagielski
443*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
444*b1cdbd2cSJim Jagielski            <ul>
445*b1cdbd2cSJim Jagielski			<li>if there isn't a property modification in progress currently</li>
446*b1cdbd2cSJim Jagielski			<li>if there already was a change to this value</li>
447*b1cdbd2cSJim Jagielski            </ul>
448*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
449*b1cdbd2cSJim Jagielski
450*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
451*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
452*b1cdbd2cSJim Jagielski
453*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
454*b1cdbd2cSJim Jagielski	 */
455*b1cdbd2cSJim Jagielski	void resetPropertyValue( )
456*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
457*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
458*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
459*b1cdbd2cSJim Jagielski
460*b1cdbd2cSJim Jagielski	/** receives notification that the value of the current property
461*b1cdbd2cSJim Jagielski        for a specific locale should be reset to its default.
462*b1cdbd2cSJim Jagielski
463*b1cdbd2cSJim Jagielski		@param aLocale
464*b1cdbd2cSJim Jagielski			specifies the locale the change applies to.
465*b1cdbd2cSJim Jagielski
466*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
467*b1cdbd2cSJim Jagielski            <ul>
468*b1cdbd2cSJim Jagielski			<li>if there isn't a property modification in progress currently</li>
469*b1cdbd2cSJim Jagielski			<li>if the property is not localizable</li>
470*b1cdbd2cSJim Jagielski			<li>if there already was a change to this value</li>
471*b1cdbd2cSJim Jagielski			<li>if the locale is not a valid locale name</li>
472*b1cdbd2cSJim Jagielski            </ul>
473*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
474*b1cdbd2cSJim Jagielski
475*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
476*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
477*b1cdbd2cSJim Jagielski
478*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
479*b1cdbd2cSJim Jagielski	 */
480*b1cdbd2cSJim Jagielski	void resetPropertyValueForLocale( [in] string aLocale )
481*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
482*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
483*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
484*b1cdbd2cSJim Jagielski
485*b1cdbd2cSJim Jagielski	/** receives notification that a property modification is complete.
486*b1cdbd2cSJim Jagielski
487*b1cdbd2cSJim Jagielski		<p> Must match the last open call to
488*b1cdbd2cSJim Jagielski			<member>XUpdateHandler::modifyProperty()</member>.
489*b1cdbd2cSJim Jagielski		</p>
490*b1cdbd2cSJim Jagielski
491*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
492*b1cdbd2cSJim Jagielski            <ul>
493*b1cdbd2cSJim Jagielski			<li>if invalid data is detected in the property</li>
494*b1cdbd2cSJim Jagielski			<li>if no property is started at all</li>
495*b1cdbd2cSJim Jagielski            </ul>
496*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
497*b1cdbd2cSJim Jagielski
498*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
499*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
500*b1cdbd2cSJim Jagielski	 */
501*b1cdbd2cSJim Jagielski	void endProperty( )
502*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
503*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
504*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
505*b1cdbd2cSJim Jagielski
506*b1cdbd2cSJim Jagielski	/** receives notification that a property is reset to its default state.
507*b1cdbd2cSJim Jagielski
508*b1cdbd2cSJim Jagielski		@param aName
509*b1cdbd2cSJim Jagielski			specifies the name of the property.
510*b1cdbd2cSJim Jagielski
511*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
512*b1cdbd2cSJim Jagielski            <ul>
513*b1cdbd2cSJim Jagielski			<li>if there isn't a group or extensible node in progress currently</li>
514*b1cdbd2cSJim Jagielski			<li>if there already was a change to a property of that name</li>
515*b1cdbd2cSJim Jagielski			<li>if there is no property with that name, or if the property
516*b1cdbd2cSJim Jagielski			    has no default</li>
517*b1cdbd2cSJim Jagielski			<li>if the property is read-only</li>
518*b1cdbd2cSJim Jagielski			<li>if the name is not a valid property name</li>
519*b1cdbd2cSJim Jagielski            </ul>
520*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
521*b1cdbd2cSJim Jagielski
522*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
523*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
524*b1cdbd2cSJim Jagielski
525*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::NodeAttribute
526*b1cdbd2cSJim Jagielski	 */
527*b1cdbd2cSJim Jagielski	void resetProperty(	[in] string aName )
528*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
529*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
530*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
531*b1cdbd2cSJim Jagielski
532*b1cdbd2cSJim Jagielski	/** receives notification that a property having a value of <void/>
533*b1cdbd2cSJim Jagielski		is added to the current node.
534*b1cdbd2cSJim Jagielski
535*b1cdbd2cSJim Jagielski		<p> The current node must be extensible and
536*b1cdbd2cSJim Jagielski			a preexisting property (if any) must be
537*b1cdbd2cSJim Jagielski            removeable in this layer.
538*b1cdbd2cSJim Jagielski		</p>
539*b1cdbd2cSJim Jagielski
540*b1cdbd2cSJim Jagielski		@param aName
541*b1cdbd2cSJim Jagielski			specifies the name of the new property.
542*b1cdbd2cSJim Jagielski
543*b1cdbd2cSJim Jagielski		@param aAttributes
544*b1cdbd2cSJim Jagielski			specifies the attributes of the new property.
545*b1cdbd2cSJim Jagielski
546*b1cdbd2cSJim Jagielski			<p> The value is a combination of
547*b1cdbd2cSJim Jagielski				<type>NodeAttribute</type> flags and may also contain the
548*b1cdbd2cSJim Jagielski				<const>SchemaAttribute::REQUIRED</const> flag.
549*b1cdbd2cSJim Jagielski			</p>
550*b1cdbd2cSJim Jagielski			</p>
551*b1cdbd2cSJim Jagielski			<p>	<const>NodeAttribute::MANDATORY</const> need not be set,
552*b1cdbd2cSJim Jagielski				as dynamic properties always are mandatory
553*b1cdbd2cSJim Jagielski				in subsequent layers.
554*b1cdbd2cSJim Jagielski			</p>
555*b1cdbd2cSJim Jagielski
556*b1cdbd2cSJim Jagielski		@param aType
557*b1cdbd2cSJim Jagielski			specifies the type of the new property.
558*b1cdbd2cSJim Jagielski
559*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
560*b1cdbd2cSJim Jagielski            <ul>
561*b1cdbd2cSJim Jagielski			<li>if there isn't a group or extensible node in progress currently</li>
562*b1cdbd2cSJim Jagielski			<li>if there already was a change to a property of that name</li>
563*b1cdbd2cSJim Jagielski			<li>if a property of that name exists and is not removeable</li>
564*b1cdbd2cSJim Jagielski			<li>if the specified type is not allowed</li>
565*b1cdbd2cSJim Jagielski			<li>if the name is not a valid property name</li>
566*b1cdbd2cSJim Jagielski			<li>if the attributes are not valid for the property</li>
567*b1cdbd2cSJim Jagielski            </ul>
568*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
569*b1cdbd2cSJim Jagielski
570*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
571*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
572*b1cdbd2cSJim Jagielski
573*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::SchemaAttribute
574*b1cdbd2cSJim Jagielski	 */
575*b1cdbd2cSJim Jagielski	void addOrReplaceProperty( [in] string aName,
576*b1cdbd2cSJim Jagielski			 				   [in] short aAttributes,
577*b1cdbd2cSJim Jagielski							   [in] type aType )
578*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
579*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
580*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
581*b1cdbd2cSJim Jagielski
582*b1cdbd2cSJim Jagielski	/** receives notification that a property having a non-<NULL/> value
583*b1cdbd2cSJim Jagielski		is added to the current node.
584*b1cdbd2cSJim Jagielski
585*b1cdbd2cSJim Jagielski		<p> The current node must be extensible and
586*b1cdbd2cSJim Jagielski			a preexisting property (if any) must be
587*b1cdbd2cSJim Jagielski            removeable in this layer.
588*b1cdbd2cSJim Jagielski		</p>
589*b1cdbd2cSJim Jagielski
590*b1cdbd2cSJim Jagielski		@param aName
591*b1cdbd2cSJim Jagielski			specifies the name of the new property.
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski		@param aAttributes
594*b1cdbd2cSJim Jagielski			specifies the attributes of the new property.
595*b1cdbd2cSJim Jagielski
596*b1cdbd2cSJim Jagielski			<p> The value is a combination of
597*b1cdbd2cSJim Jagielski				<type>NodeAttribute</type> flags and may also contain the
598*b1cdbd2cSJim Jagielski				<const>SchemaAttribute::REQUIRED</const> flag.
599*b1cdbd2cSJim Jagielski			</p>
600*b1cdbd2cSJim Jagielski			</p>
601*b1cdbd2cSJim Jagielski			<p>	<const>NodeAttribute::MANDATORY</const> need not be set,
602*b1cdbd2cSJim Jagielski				as dynamic properties always are mandatory
603*b1cdbd2cSJim Jagielski				in subsequent layers.
604*b1cdbd2cSJim Jagielski			</p>
605*b1cdbd2cSJim Jagielski
606*b1cdbd2cSJim Jagielski		@param aValue
607*b1cdbd2cSJim Jagielski			specifies the value of the new property.
608*b1cdbd2cSJim Jagielski
609*b1cdbd2cSJim Jagielski			<p> The value also determines the type.
610*b1cdbd2cSJim Jagielski				Therefore the value must not be <void/>.
611*b1cdbd2cSJim Jagielski			</p>
612*b1cdbd2cSJim Jagielski
613*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
614*b1cdbd2cSJim Jagielski            <ul>
615*b1cdbd2cSJim Jagielski			<li>if there isn't a group or extensible node in progress currently</li>
616*b1cdbd2cSJim Jagielski			<li>if there already was a change to a property of that name</li>
617*b1cdbd2cSJim Jagielski			<li>if a property of that name exists and is not removeable</li>
618*b1cdbd2cSJim Jagielski			<li>if the type of the value is not an allowed type,
619*b1cdbd2cSJim Jagielski			    or if the value is <void/></li>
620*b1cdbd2cSJim Jagielski			<li>if the name is not a valid property name</li>
621*b1cdbd2cSJim Jagielski			<li>if the attributes are not valid for the property</li>
622*b1cdbd2cSJim Jagielski            </ul>
623*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
624*b1cdbd2cSJim Jagielski
625*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
626*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
627*b1cdbd2cSJim Jagielski
628*b1cdbd2cSJim Jagielski		@see com::sun::star::configuration::backend::SchemaAttribute
629*b1cdbd2cSJim Jagielski	 */
630*b1cdbd2cSJim Jagielski	void addOrReplacePropertyWithValue(	[in] string aName,
631*b1cdbd2cSJim Jagielski			 							[in] short aAttributes,
632*b1cdbd2cSJim Jagielski										[in] any aValue )
633*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
634*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
635*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski	/** receives notification that a property is dropped from the current node.
638*b1cdbd2cSJim Jagielski
639*b1cdbd2cSJim Jagielski		<p>The current node must be extensible and the property removeable.</p>
640*b1cdbd2cSJim Jagielski
641*b1cdbd2cSJim Jagielski		@param aName
642*b1cdbd2cSJim Jagielski			specifies the name of the property.
643*b1cdbd2cSJim Jagielski
644*b1cdbd2cSJim Jagielski		@throws com::sun::star::configuration::backend::MalformedDataException
645*b1cdbd2cSJim Jagielski            <ul>
646*b1cdbd2cSJim Jagielski			<li>if there isn't a group or extensible node in progress currently</li>
647*b1cdbd2cSJim Jagielski			<li>if there is no property with that name</li>
648*b1cdbd2cSJim Jagielski			<li>if the property is not removeable</li>
649*b1cdbd2cSJim Jagielski			<li>if the name is not a valid node name</li>
650*b1cdbd2cSJim Jagielski            </ul>
651*b1cdbd2cSJim Jagielski            <p><em>Not every implementation can detect each condition</em></p>
652*b1cdbd2cSJim Jagielski
653*b1cdbd2cSJim Jagielski		@throws com::sun::star::lang::WrappedTargetException
654*b1cdbd2cSJim Jagielski			if an error occurs processing the event.
655*b1cdbd2cSJim Jagielski	 */
656*b1cdbd2cSJim Jagielski	void removeProperty( [in] string aName )
657*b1cdbd2cSJim Jagielski			raises( MalformedDataException,
658*b1cdbd2cSJim Jagielski                    com::sun::star::lang::WrappedTargetException );
659*b1cdbd2cSJim Jagielski	//-------------------------------------------------------------------------
660*b1cdbd2cSJim Jagielski
661*b1cdbd2cSJim Jagielski};
662*b1cdbd2cSJim Jagielski
663*b1cdbd2cSJim Jagielski//=============================================================================
664*b1cdbd2cSJim Jagielski
665*b1cdbd2cSJim Jagielski}; }; }; }; };
666*b1cdbd2cSJim Jagielski
667*b1cdbd2cSJim Jagielski//=============================================================================
668*b1cdbd2cSJim Jagielski
669*b1cdbd2cSJim Jagielski#endif
670