1*2d785d7eSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2d785d7eSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2d785d7eSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2d785d7eSAndrew Rist  * distributed with this work for additional information
6*2d785d7eSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2d785d7eSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2d785d7eSAndrew Rist  * "License"); you may not use this file except in compliance
9*2d785d7eSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*2d785d7eSAndrew Rist  *
11*2d785d7eSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*2d785d7eSAndrew Rist  *
13*2d785d7eSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2d785d7eSAndrew Rist  * software distributed under the License is distributed on an
15*2d785d7eSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2d785d7eSAndrew Rist  * KIND, either express or implied.  See the License for the
17*2d785d7eSAndrew Rist  * specific language governing permissions and limitations
18*2d785d7eSAndrew Rist  * under the License.
19*2d785d7eSAndrew Rist  *
20*2d785d7eSAndrew Rist  *************************************************************/
21*2d785d7eSAndrew Rist 
22*2d785d7eSAndrew Rist 
23cdf0e10cSrcweir #ifndef _MODEL_HELPER_HXX
24cdf0e10cSrcweir #define _MODEL_HELPER_HXX
25cdf0e10cSrcweir 
26cdf0e10cSrcweir //
27cdf0e10cSrcweir // some helper definitions that must be available for model.cxx and
28cdf0e10cSrcweir // model_ui.cxx
29cdf0e10cSrcweir //
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include "namedcollection.hxx"
32cdf0e10cSrcweir #include "binding.hxx"
33cdf0e10cSrcweir #include "submission.hxx"
34cdf0e10cSrcweir #include "unohelper.hxx"
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #include <com/sun/star/uno/Reference.hxx>
37cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx>
38cdf0e10cSrcweir #include <com/sun/star/lang/XUnoTunnel.hpp>
39cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
40cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
41cdf0e10cSrcweir 
42cdf0e10cSrcweir namespace xforms
43cdf0e10cSrcweir {
44cdf0e10cSrcweir     class Model;
45cdf0e10cSrcweir }
46cdf0e10cSrcweir 
47cdf0e10cSrcweir //
48cdf0e10cSrcweir // BindingCollection
49cdf0e10cSrcweir //
50cdf0e10cSrcweir 
51cdf0e10cSrcweir namespace xforms
52cdf0e10cSrcweir {
53cdf0e10cSrcweir 
54cdf0e10cSrcweir class BindingCollection : public NamedCollection<com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> >
55cdf0e10cSrcweir {
56cdf0e10cSrcweir     Model* mpModel;
57cdf0e10cSrcweir 
58cdf0e10cSrcweir public:
BindingCollection(Model * pModel)59cdf0e10cSrcweir     BindingCollection( Model* pModel ) : mpModel( pModel ) {}
~BindingCollection()60cdf0e10cSrcweir     virtual ~BindingCollection() {}
61cdf0e10cSrcweir 
isValid(const T & t) const62cdf0e10cSrcweir     virtual bool isValid( const T& t ) const
63cdf0e10cSrcweir     {
64cdf0e10cSrcweir         return Binding::getBinding( t ) != NULL;
65cdf0e10cSrcweir     }
66cdf0e10cSrcweir 
67cdf0e10cSrcweir protected:
_insert(const T & t)68cdf0e10cSrcweir     virtual void _insert( const T& t )
69cdf0e10cSrcweir     {
70cdf0e10cSrcweir         OSL_ENSURE( Binding::getBinding( t ) != NULL, "invalid item?" );
71cdf0e10cSrcweir         Binding::getBinding( t )->_setModel( Binding::Model_t( mpModel ) );
72cdf0e10cSrcweir     }
73cdf0e10cSrcweir 
_remove(const T & t)74cdf0e10cSrcweir     virtual void _remove( const T& t )
75cdf0e10cSrcweir     {
76cdf0e10cSrcweir         OSL_ENSURE( Binding::getBinding( t ) != NULL, "invalid item?" );
77cdf0e10cSrcweir         Binding::getBinding( t )->_setModel( Binding::Model_t() );
78cdf0e10cSrcweir     }
79cdf0e10cSrcweir };
80cdf0e10cSrcweir 
81cdf0e10cSrcweir 
82cdf0e10cSrcweir 
83cdf0e10cSrcweir //
84cdf0e10cSrcweir // SubmissionCollection
85cdf0e10cSrcweir //
86cdf0e10cSrcweir 
87cdf0e10cSrcweir class SubmissionCollection : public NamedCollection<com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> >
88cdf0e10cSrcweir {
89cdf0e10cSrcweir     Model* mpModel;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir public:
SubmissionCollection(Model * pModel)92cdf0e10cSrcweir     SubmissionCollection( Model* pModel ) : mpModel( pModel ) {}
~SubmissionCollection()93cdf0e10cSrcweir     virtual ~SubmissionCollection() {}
94cdf0e10cSrcweir 
95cdf0e10cSrcweir public:
isValid(const T & t) const96cdf0e10cSrcweir     virtual bool isValid( const T& t ) const
97cdf0e10cSrcweir     {
98cdf0e10cSrcweir         return Submission::getSubmission( t ) != NULL;
99cdf0e10cSrcweir     }
100cdf0e10cSrcweir 
101cdf0e10cSrcweir protected:
_insert(const T & t)102cdf0e10cSrcweir     virtual void _insert( const T& t )
103cdf0e10cSrcweir     {
104cdf0e10cSrcweir         OSL_ENSURE( Submission::getSubmission( t ) != NULL, "invalid item?" );
105cdf0e10cSrcweir         Submission::getSubmission( t )->setModel( com::sun::star::uno::Reference<com::sun::star::xforms::XModel>( mpModel ) );
106cdf0e10cSrcweir     }
107cdf0e10cSrcweir 
_remove(const T & t)108cdf0e10cSrcweir     virtual void _remove( const T& t )
109cdf0e10cSrcweir     {
110cdf0e10cSrcweir         OSL_ENSURE( Submission::getSubmission( t ) != NULL, "invalid item?" );
111cdf0e10cSrcweir         Submission::getSubmission( t )->setModel( com::sun::star::uno::Reference<com::sun::star::xforms::XModel>( ) );
112cdf0e10cSrcweir     }
113cdf0e10cSrcweir };
114cdf0e10cSrcweir 
115cdf0e10cSrcweir 
116cdf0e10cSrcweir //
117cdf0e10cSrcweir // InstanceCollection
118cdf0e10cSrcweir //
119cdf0e10cSrcweir 
120cdf0e10cSrcweir class InstanceCollection : public Collection<com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> >
121cdf0e10cSrcweir {
122cdf0e10cSrcweir public:
isValid(const T & t) const123cdf0e10cSrcweir     virtual bool isValid( const T& t ) const
124cdf0e10cSrcweir     {
125cdf0e10cSrcweir         const com::sun::star::beans::PropertyValue* pValues = t.getConstArray();
126cdf0e10cSrcweir         rtl::OUString sInstance( OUSTRING("Instance") );
127cdf0e10cSrcweir         sal_Bool bFound = sal_False;
128cdf0e10cSrcweir         for( sal_Int32 i = 0; ( ! bFound ) && ( i < t.getLength() ); i++ )
129cdf0e10cSrcweir         {
130cdf0e10cSrcweir             bFound |= ( pValues[i].Name == sInstance );
131cdf0e10cSrcweir         }
132cdf0e10cSrcweir         return bFound ? true : false;
133cdf0e10cSrcweir     }
134cdf0e10cSrcweir };
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 
137cdf0e10cSrcweir //
138cdf0e10cSrcweir // helper functions
139cdf0e10cSrcweir //
140cdf0e10cSrcweir 
141cdf0e10cSrcweir sal_Int32 lcl_findInstance( const InstanceCollection*,
142cdf0e10cSrcweir                             const rtl::OUString& );
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 
145cdf0e10cSrcweir // get values from Sequence<PropertyValue> describing an Instance
146cdf0e10cSrcweir void getInstanceData(
147cdf0e10cSrcweir     const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&,
148cdf0e10cSrcweir     rtl::OUString* pID,
149cdf0e10cSrcweir     com::sun::star::uno::Reference<com::sun::star::xml::dom::XDocument>*,
150cdf0e10cSrcweir     rtl::OUString* pURL,
151cdf0e10cSrcweir     bool* pURLOnce );
152cdf0e10cSrcweir 
153cdf0e10cSrcweir // set values on Sequence<PropertyValue> for an Instance
154cdf0e10cSrcweir void setInstanceData(
155cdf0e10cSrcweir     com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&,
156cdf0e10cSrcweir     const rtl::OUString* pID,
157cdf0e10cSrcweir     const com::sun::star::uno::Reference<com::sun::star::xml::dom::XDocument>*,
158cdf0e10cSrcweir     const rtl::OUString* pURL,
159cdf0e10cSrcweir     const bool* pURLOnce );
160cdf0e10cSrcweir 
161cdf0e10cSrcweir } // namespace xforms
162cdf0e10cSrcweir 
163cdf0e10cSrcweir #endif
164