| /************************************************************** |
| * |
| * 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 _BUFFERNODE_HXX |
| #define _BUFFERNODE_HXX |
| |
| #include <com/sun/star/lang/XServiceInfo.hpp> |
| #include <com/sun/star/xml/wrapper/XXMLElementWrapper.hpp> |
| |
| #ifndef INCLUDED_VECTOR |
| #include <vector> |
| #define INCLUDED_VECTOR |
| #endif |
| |
| class ElementMark; |
| class ElementCollector; |
| |
| class BufferNode |
| /****** buffernode.hxx/CLASS BufferNode *************************************** |
| * |
| * NAME |
| * BufferNode -- Class to maintain the tree of bufferred elements |
| * |
| * FUNCTION |
| * One BufferNode object represents a bufferred element in the document |
| * wrapper component. |
| * All BufferNode objects construct a tree which has the same structure |
| * of all bufferred elements. That is to say, if one bufferred element is |
| * an ancestor of another bufferred element, then the corresponding |
| * BufferNode objects are also in ancestor/descendant relationship. |
| * This class is used to manipulate the tree of bufferred elements. |
| * |
| * HISTORY |
| * 05.01.2004 - implemented |
| * |
| * AUTHOR |
| * Michael Mi |
| * Email: michael.mi@sun.com |
| ******************************************************************************/ |
| { |
| private: |
| /* the parent BufferNode */ |
| BufferNode* m_pParent; |
| |
| /* all child BufferNodes */ |
| std::vector< const BufferNode* > m_vChildren; |
| |
| /* all ElementCollector holding this BufferNode */ |
| std::vector< const ElementCollector* > m_vElementCollectors; |
| |
| /* |
| * the blocker holding this BufferNode, one BufferNode can have one |
| * blocker at most |
| */ |
| ElementMark* m_pBlocker; |
| |
| /* |
| * whether the element has completely bufferred by the document wrapper |
| * component |
| */ |
| bool m_bAllReceived; |
| |
| /* the XMLElementWrapper of the bufferred element */ |
| com::sun::star::uno::Reference< |
| com::sun::star::xml::wrapper::XXMLElementWrapper > m_xXMLElement; |
| |
| private: |
| bool isECInSubTreeIncluded(sal_Int32 nIgnoredSecurityId) const; |
| bool isECOfBeforeModifyInAncestorIncluded(sal_Int32 nIgnoredSecurityId) const; |
| bool isBlockerInSubTreeIncluded(sal_Int32 nIgnoredSecurityId) const; |
| const BufferNode* getNextChild(const BufferNode* pChild) const; |
| |
| public: |
| explicit BufferNode( |
| const com::sun::star::uno::Reference< |
| com::sun::star::xml::wrapper::XXMLElementWrapper >& xXMLElement); |
| virtual ~BufferNode() {}; |
| |
| bool isECOfBeforeModifyIncluded(sal_Int32 nIgnoredSecurityId) const; |
| void setReceivedAll(); |
| bool isAllReceived() const; |
| void addElementCollector(const ElementCollector* pElementCollector); |
| void removeElementCollector(const ElementCollector* pElementCollector); |
| ElementMark* getBlocker() const; |
| void setBlocker(const ElementMark* pBlocker); |
| rtl::OUString printChildren() const; |
| bool hasAnything() const; |
| bool hasChildren() const; |
| std::vector< const BufferNode* >* getChildren() const; |
| const BufferNode* getFirstChild() const; |
| void addChild(const BufferNode* pChild, sal_Int32 nPosition); |
| void addChild(const BufferNode* pChild); |
| void removeChild(const BufferNode* pChild); |
| sal_Int32 indexOfChild(const BufferNode* pChild) const; |
| const BufferNode* childAt(sal_Int32 nIndex) const; |
| const BufferNode* getParent() const; |
| void setParent(const BufferNode* pParent); |
| const BufferNode* getNextSibling() const; |
| const BufferNode* isAncestor(const BufferNode* pDescendant) const; |
| bool isPrevious(const BufferNode* pFollowing) const; |
| const BufferNode* getNextNodeByTreeOrder() const; |
| com::sun::star::uno::Reference< |
| com::sun::star::xml::wrapper::XXMLElementWrapper > getXMLElement() const; |
| void setXMLElement(const com::sun::star::uno::Reference< |
| com::sun::star::xml::wrapper::XXMLElementWrapper >& xXMLElement); |
| void notifyBranch(); |
| void notifyAncestor(); |
| void elementCollectorNotify(); |
| void freeAllChildren(); |
| }; |
| |
| #endif |
| |