| /************************************************************** | |
| * | |
| * Licensed to the Apache Software Foundation (ASF) under one | |
| * or more contributor license agreements. See the NOTICE file | |
| * distributed with this work for additional information | |
| * regarding copyright ownership. The ASF licenses this file | |
| * to you under the Apache License, Version 2.0 (the | |
| * "License"); you may not use this file except in compliance | |
| * with the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, | |
| * software distributed under the License is distributed on an | |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| * KIND, either express or implied. See the License for the | |
| * specific language governing permissions and limitations | |
| * under the License. | |
| * | |
| *************************************************************/ | |
| #ifndef _COMPUTEDEXPRESSION_HXX | |
| #define _COMPUTEDEXPRESSION_HXX | |
| // includes for member variables | |
| #include <rtl/ustring.hxx> | |
| #include <com/sun/star/uno/Reference.hxx> | |
| // forward declaractions | |
| namespace com { namespace sun { namespace star | |
| { | |
| namespace xml | |
| { | |
| namespace dom { class XNode; } | |
| namespace dom { class XNodeset; } | |
| namespace xpath { class XXPathAPI; } | |
| namespace xpath { class XXPathObject; } | |
| } | |
| namespace container { class XNameContainer; } | |
| } } } | |
| namespace xforms { class EvaluationContext; } | |
| namespace xforms | |
| { | |
| /** ComputedExpression represents an XPath Expression and caches results. | |
| * | |
| * As this class has no virtual methods, it should never be used | |
| * polymorphically. */ | |
| class ComputedExpression | |
| { | |
| /// the expression string | |
| rtl::OUString msExpression; | |
| /// is msExpression empty? | |
| bool mbIsEmpty; | |
| protected: | |
| /// is msExpression a simple expression? | |
| bool mbIsSimple; | |
| /// the result from the last bind | |
| com::sun::star::uno::Reference<com::sun::star::xml::xpath::XXPathObject> mxResult; | |
| /// implementation of isSimpleExpression | |
| bool _checkExpression( const sal_Char* pExpression ) const; | |
| /// allow manipulation of the expression before it is evaluated | |
| const rtl::OUString _getExpressionForEvaluation() const; | |
| /// obtain a (suitable) XPathAPI implementation | |
| com::sun::star::uno::Reference<com::sun::star::xml::xpath::XXPathAPI> _getXPathAPI(const xforms::EvaluationContext& aContext); | |
| /// evaluate the expression relative to the content node. | |
| bool _evaluate( const xforms::EvaluationContext& rContext, | |
| const rtl::OUString& sExpression ); | |
| public: | |
| ComputedExpression(); | |
| ~ComputedExpression(); | |
| /// get the expression string | |
| rtl::OUString getExpression() const; | |
| /// set a new expression string | |
| void setExpression( const rtl::OUString& rExpression ); | |
| /// get the namespaces that are used to interpret the expression string | |
| com::sun::star::uno::Reference<com::sun::star::container::XNameContainer> getNamespaces() const; | |
| /// set the namespaces that are used to interpret the expression string | |
| void setNamespaces( const com::sun::star::uno::Reference<com::sun::star::container::XNameContainer>& ); | |
| /// do we have an actual expression? | |
| bool isEmptyExpression() const; | |
| /// heuristically determine whether this expression is 'simple', | |
| /// i.e. whether its value will change depending on the values | |
| /// of other nodes | |
| bool isSimpleExpression() const; | |
| /// evaluate the expression relative to the content node. | |
| bool evaluate( const xforms::EvaluationContext& rContext ); | |
| /// does this expression have a value? | |
| bool hasValue() const; | |
| /// remove value/evaluate results | |
| void clear(); | |
| // get the result of this expression as string/bool/... | |
| // (Results will be based on the last call of evaluate(..). The caller | |
| // must call evaluate to ensure current results.) | |
| com::sun::star::uno::Reference<com::sun::star::xml::xpath::XXPathObject> getXPath(); | |
| bool getBool( bool bDefault = false ) const; | |
| rtl::OUString getString( const rtl::OUString& rDefault = rtl::OUString() ) const; | |
| }; | |
| } // namespace xforms | |
| #endif |