xref: /trunk/main/configmgr/source/childaccess.hxx (revision cdf0e10c)
1  /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27  
28  #ifndef INCLUDED_CONFIGMGR_SOURCE_CHILDACCESS_HXX
29  #define INCLUDED_CONFIGMGR_SOURCE_CHILDACCESS_HXX
30  
31  #include "sal/config.h"
32  
33  #include <memory>
34  #include <vector>
35  
36  #include "com/sun/star/container/XChild.hpp"
37  #include "com/sun/star/lang/NoSupportException.hpp"
38  #include "com/sun/star/lang/XUnoTunnel.hpp"
39  #include "com/sun/star/uno/Reference.hxx"
40  #include "com/sun/star/uno/RuntimeException.hpp"
41  #include "com/sun/star/uno/Sequence.hxx"
42  #include "rtl/ref.hxx"
43  #include "sal/types.h"
44  
45  #include "access.hxx"
46  #include "path.hxx"
47  
48  namespace com { namespace sun { namespace star { namespace uno {
49      class Any;
50      class Type;
51      class XInterface;
52  } } } }
53  
54  namespace configmgr {
55  
56  class Components;
57  class Modifications;
58  class Node;
59  class RootAccess;
60  
61  class ChildAccess:
62      public Access, public com::sun::star::container::XChild,
63      public com::sun::star::lang::XUnoTunnel
64  {
65  public:
66      static com::sun::star::uno::Sequence< sal_Int8 > getTunnelId();
67  
68      ChildAccess(
69          Components & components, rtl::Reference< RootAccess > const & root,
70          rtl::Reference< Access > const & parent, rtl::OUString const & name,
71          rtl::Reference< Node > const & node);
72  
73      ChildAccess(
74          Components & components, rtl::Reference< RootAccess > const & root,
75          rtl::Reference< Node > const & node);
76  
77      virtual Path getAbsolutePath();
78  
79      virtual Path getRelativePath();
80  
81      virtual rtl::OUString getRelativePathRepresentation();
82  
83      virtual rtl::Reference< Node > getNode();
84  
85      virtual bool isFinalized();
86  
87      virtual rtl::OUString getNameInternal();
88  
89      virtual rtl::Reference< RootAccess > getRootAccess();
90  
91      virtual rtl::Reference< Access > getParentAccess();
92  
93      virtual void SAL_CALL acquire() throw ();
94  
95      virtual void SAL_CALL release() throw ();
96  
97      virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
98      SAL_CALL getParent()
99          throw (com::sun::star::uno::RuntimeException);
100  
101      virtual void SAL_CALL setParent(
102          com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
103              const &)
104          throw (
105              com::sun::star::lang::NoSupportException,
106              com::sun::star::uno::RuntimeException);
107  
108      virtual sal_Int64 SAL_CALL getSomething(
109          com::sun::star::uno::Sequence< sal_Int8 > const & aIdentifier)
110          throw (com::sun::star::uno::RuntimeException);
111  
112      void bind(
113          rtl::Reference< RootAccess > const & root,
114          rtl::Reference< Access > const & parent, rtl::OUString const & name)
115          throw ();
116  
117      void unbind() throw ();
118  
119      bool isInTransaction() const { return inTransaction_; }
120  
121      void committed();
122  
123      void setNode(rtl::Reference< Node > const & node);
124  
125      void setProperty(
126          com::sun::star::uno::Any const & value,
127          Modifications * localModifications);
128  
129      com::sun::star::uno::Any asValue();
130  
131      void commitChanges(bool valid, Modifications * globalModifications);
132  
133  private:
134      virtual ~ChildAccess();
135  
136      virtual void addTypes(
137          std::vector< com::sun::star::uno::Type > * types) const;
138  
139      virtual void addSupportedServiceNames(
140          std::vector< rtl::OUString > * services);
141  
142      virtual com::sun::star::uno::Any SAL_CALL queryInterface(
143          com::sun::star::uno::Type const & aType)
144          throw (com::sun::star::uno::RuntimeException);
145  
146      rtl::Reference< RootAccess > root_;
147      rtl::Reference< Access > parent_; // null iff free node
148      rtl::OUString name_;
149      rtl::Reference< Node > node_;
150      std::auto_ptr< com::sun::star::uno::Any > changedValue_;
151      bool inTransaction_;
152          // to determine if a free node can be inserted underneath some root
153  };
154  
155  }
156  
157  #endif
158