SourceForge.net Logo
ContextHelpers.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2001, 2008,
3 * DecisionSoft Limited. All rights reserved.
4 * Copyright (c) 2004, 2015 Oracle and/or its affiliates. All rights reserved.
5 *
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20#ifndef CONTEXTHELPERS_HPP
21#define CONTEXTHELPERS_HPP
22
23#include <xqilla/framework/XQillaExport.hpp>
25
27{
28public:
30 {
31 context_ = context;
32 if(context_) {
33 ordering_ = context->getNodeSetOrdering();
34 context->setNodeSetOrdering(ordering);
35 }
36 }
37
39 {
40 if(context_) {
41 context_->setNodeSetOrdering(ordering_);
42 }
43 }
44
45protected:
48};
49
51{
52public:
54 {
55 context_ = context;
56 if(context_) {
57 sType_ = context->getContextItemType();
58 }
59 }
60
62 {
63 context_ = context;
64 if(context_) {
65 sType_ = context->getContextItemType();
66 context->setContextItemType(sType);
67 }
68 }
69
71 {
72 if(context_) {
73 context_->setContextItemType(sType_);
74 }
75 }
76
77protected:
80};
81
82class XQILLA_API AutoNsScopeReset
83{
84public:
85 AutoNsScopeReset(StaticContext* context, XERCES_CPP_NAMESPACE_QUALIFIER DOMXPathNSResolver* newResolver)
86 {
87 context_=context;
88 if(context_) {
89 _oldNSResolver=context_->getNSResolver();
90 _defaultElementAndTypeNS=context->getDefaultElementAndTypeNS();
91 context_->setNSResolver(newResolver);
92 }
93 }
94
96 {
97 if(context_) {
98 context_->setNSResolver(_oldNSResolver);
99 context_->setDefaultElementAndTypeNS(_defaultElementAndTypeNS);
100 }
101 }
102
103protected:
105 const XERCES_CPP_NAMESPACE_QUALIFIER DOMXPathNSResolver* _oldNSResolver;
107
108};
109
110class XQILLA_API AutoContextInfoReset
111{
112public:
114 : oldContextItem(context->getContextItem()),
115 oldContextPosition(context->getContextPosition()),
116 oldContextSize(context->getContextSize()),
117 context_(context)
118 {
119 }
120
121 AutoContextInfoReset(DynamicContext *context, const Item::Ptr &contextItem, size_t contextPosition = 0, size_t contextSize = 0)
122 : oldContextItem(context->getContextItem()),
123 oldContextPosition(context->getContextPosition()),
124 oldContextSize(context->getContextSize()),
125 context_(context)
126 {
127 context->setContextItem(contextItem);
128 context->setContextPosition(contextPosition);
129 context->setContextSize(contextSize);
130 }
131
133 {
134 resetContextInfo();
135 }
136
138 {
139 context_->setContextItem(oldContextItem);
140 context_->setContextPosition(oldContextPosition);
141 context_->setContextSize(oldContextSize);
142 }
143
147
148private:
149 DynamicContext* context_;
150};
151
153{
154public:
156 : oldDC(const_cast<DocumentCache*>(context->getDocumentCache())),
157 context_ (context)
158 {
159 }
160
162 {
163 context_->setDocumentCache(oldDC);
164 }
165
167
168protected:
170};
171
173{
174public:
176 {
177 context_ = context;
178 _oldVarStore = context_->getVariableStore();
179 if(store)
180 context_->setVariableStore(store);
181 }
182
184 {
185 context_->setVariableStore(_oldVarStore);
186 }
187
188 void reset()
189 {
190 context_->setVariableStore(_oldVarStore);
191 }
192
193protected:
196};
197
199{
200public:
202 {
203 context_ = context;
204 _oldRegexStore = context_->getRegexGroupStore();
205 if(store)
206 context_->setRegexGroupStore(store);
207 }
208
210 {
211 context_->setRegexGroupStore(_oldRegexStore);
212 }
213
214 void reset()
215 {
216 context_->setRegexGroupStore(_oldRegexStore);
217 }
218
219protected:
222};
223
225{
226public:
228 {
229 context_ = context;
230 if(context_) {
231 listener_ = context->getMessageListener();
232 context->setMessageListener(listener);
233 }
234 }
235
237 {
238 if(context_) {
239 context_->setMessageListener(listener_);
240 }
241 }
242
243protected:
246};
247
248class XQILLA_API AutoStackFrameReset
249{
250public:
252 {
253 context_ = context;
254 _oldFrame = context_->getStackFrame();
255 context_->setStackFrame(frame);
256 }
257
259 {
260 context_->setStackFrame(_oldFrame);
261 }
262
263 void reset()
264 {
265 context_->setStackFrame(_oldFrame);
266 }
267
268protected:
271};
272
273template<typename T> class XQILLA_API AutoReset
274{
275public:
276 AutoReset(T &orig)
277 : orig_(orig)
278 {
279 old_ = orig;
280 }
281
283 {
284 reset();
285 }
286
287 void reset()
288 {
289 orig_ = old_;
290 }
291
292protected:
295};
296
297#endif
Definition ContextHelpers.hpp:111
size_t oldContextPosition
Definition ContextHelpers.hpp:145
size_t oldContextSize
Definition ContextHelpers.hpp:146
AutoContextInfoReset(DynamicContext *context, const Item::Ptr &contextItem, size_t contextPosition=0, size_t contextSize=0)
Definition ContextHelpers.hpp:121
Item::Ptr oldContextItem
Definition ContextHelpers.hpp:144
void resetContextInfo()
Definition ContextHelpers.hpp:137
AutoContextInfoReset(DynamicContext *context)
Definition ContextHelpers.hpp:113
~AutoContextInfoReset()
Definition ContextHelpers.hpp:132
Definition ContextHelpers.hpp:51
AutoContextItemTypeReset(StaticContext *context, const StaticType &sType)
Definition ContextHelpers.hpp:61
StaticType sType_
Definition ContextHelpers.hpp:79
~AutoContextItemTypeReset()
Definition ContextHelpers.hpp:70
AutoContextItemTypeReset(StaticContext *context)
Definition ContextHelpers.hpp:53
StaticContext * context_
Definition ContextHelpers.hpp:78
Definition ContextHelpers.hpp:153
AutoDocumentCacheReset(DynamicContext *context)
Definition ContextHelpers.hpp:155
DocumentCache * oldDC
Definition ContextHelpers.hpp:166
~AutoDocumentCacheReset()
Definition ContextHelpers.hpp:161
DynamicContext * context_
Definition ContextHelpers.hpp:169
Definition ContextHelpers.hpp:225
~AutoMessageListenerReset()
Definition ContextHelpers.hpp:236
MessageListener * listener_
Definition ContextHelpers.hpp:245
AutoMessageListenerReset(StaticContext *context, MessageListener *listener=0)
Definition ContextHelpers.hpp:227
StaticContext * context_
Definition ContextHelpers.hpp:244
Definition ContextHelpers.hpp:27
~AutoNodeSetOrderingReset()
Definition ContextHelpers.hpp:38
StaticContext::NodeSetOrdering ordering_
Definition ContextHelpers.hpp:47
AutoNodeSetOrderingReset(StaticContext *context, StaticContext::NodeSetOrdering ordering=StaticContext::ORDERING_UNORDERED)
Definition ContextHelpers.hpp:29
StaticContext * context_
Definition ContextHelpers.hpp:46
Definition ContextHelpers.hpp:83
AutoNsScopeReset(StaticContext *context, xercesc::DOMXPathNSResolver *newResolver)
Definition ContextHelpers.hpp:85
~AutoNsScopeReset()
Definition ContextHelpers.hpp:95
const XMLCh * _defaultElementAndTypeNS
Definition ContextHelpers.hpp:106
const xercesc::DOMXPathNSResolver * _oldNSResolver
Definition ContextHelpers.hpp:105
StaticContext * context_
Definition ContextHelpers.hpp:104
Definition ContextHelpers.hpp:199
void reset()
Definition ContextHelpers.hpp:214
DynamicContext * context_
Definition ContextHelpers.hpp:220
~AutoRegexGroupStoreReset()
Definition ContextHelpers.hpp:209
const RegexGroupStore * _oldRegexStore
Definition ContextHelpers.hpp:221
AutoRegexGroupStoreReset(DynamicContext *context, const RegexGroupStore *store=0)
Definition ContextHelpers.hpp:201
Definition ContextHelpers.hpp:274
AutoReset(T &orig)
Definition ContextHelpers.hpp:276
void reset()
Definition ContextHelpers.hpp:287
T old_
Definition ContextHelpers.hpp:294
T & orig_
Definition ContextHelpers.hpp:293
~AutoReset()
Definition ContextHelpers.hpp:282
Definition ContextHelpers.hpp:249
AutoStackFrameReset(DynamicContext *context, const StackFrame *frame)
Definition ContextHelpers.hpp:251
const StackFrame * _oldFrame
Definition ContextHelpers.hpp:270
void reset()
Definition ContextHelpers.hpp:263
~AutoStackFrameReset()
Definition ContextHelpers.hpp:258
DynamicContext * context_
Definition ContextHelpers.hpp:269
Definition ContextHelpers.hpp:173
void reset()
Definition ContextHelpers.hpp:188
AutoVariableStoreReset(DynamicContext *context, const VariableStore *store=0)
Definition ContextHelpers.hpp:175
DynamicContext * context_
Definition ContextHelpers.hpp:194
const VariableStore * _oldVarStore
Definition ContextHelpers.hpp:195
~AutoVariableStoreReset()
Definition ContextHelpers.hpp:183
Expression Context is a storage for contexts.
Definition DocumentCache.hpp:53
The execution time dynamic context interface.
Definition DynamicContext.hpp:39
virtual void setContextPosition(size_t pos)=0
Set the context position.
virtual void setContextSize(size_t size)=0
Set the context size.
virtual const RegexGroupStore * getRegexGroupStore() const =0
get the regex group store
virtual void setContextItem(const Item::Ptr &item)=0
Set the context item to item.
virtual const StackFrame * getStackFrame() const =0
Gets the listener for debug messages.
virtual const VariableStore * getVariableStore() const =0
get the variable store
A class used to listen for warnings or trace information.
Definition MessageListener.hpp:33
The pure virtual base class for accessing regular expression group values at runtime.
Definition RegexGroupStore.hpp:31
A class that represents an item in a query call stack.
Definition StackFrame.hpp:46
The parse time static context interface.
Definition StaticContext.hpp:58
virtual void setMessageListener(MessageListener *listener)=0
Set the listener for warning and trace messages.
virtual const StaticType & getContextItemType() const =0
Get the static type of the context item.
virtual NodeSetOrdering getNodeSetOrdering() const =0
Return the ordering method for node sets.
virtual void setContextItemType(const StaticType &st)=0
Set the static type of the context item.
NodeSetOrdering
Definition StaticContext.hpp:60
@ ORDERING_UNORDERED
Definition StaticContext.hpp:62
virtual const XMLCh * getDefaultElementAndTypeNS() const =0
get the value of the default namespace for elements and types
virtual const xercesc::DOMXPathNSResolver * getNSResolver() const =0
Get the NS resolver.
virtual MessageListener * getMessageListener() const =0
Gets the listener for warning and trace messages.
virtual void setNodeSetOrdering(NodeSetOrdering newOrder)=0
Set the ordering method for node sets.
Class that represents the static type of an expression.
Definition StaticType.hpp:33
The pure virtual base class for accessing variables at runtime.
Definition VariableStore.hpp:32