1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_stoc.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include "base.hxx"
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski namespace stoc_corefl
30*b1cdbd2cSJim Jagielski {
31*b1cdbd2cSJim Jagielski
32*b1cdbd2cSJim Jagielski //==================================================================================================
33*b1cdbd2cSJim Jagielski class IdlEnumFieldImpl
34*b1cdbd2cSJim Jagielski : public IdlMemberImpl
35*b1cdbd2cSJim Jagielski , public XIdlField
36*b1cdbd2cSJim Jagielski , public XIdlField2
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski sal_Int32 _nValue;
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim Jagielski public:
IdlEnumFieldImpl(IdlReflectionServiceImpl * pReflection,const OUString & rName,typelib_TypeDescription * pTypeDescr,sal_Int32 nValue)41*b1cdbd2cSJim Jagielski IdlEnumFieldImpl( IdlReflectionServiceImpl * pReflection, const OUString & rName,
42*b1cdbd2cSJim Jagielski typelib_TypeDescription * pTypeDescr, sal_Int32 nValue )
43*b1cdbd2cSJim Jagielski : IdlMemberImpl( pReflection, rName, pTypeDescr, pTypeDescr )
44*b1cdbd2cSJim Jagielski , _nValue( nValue )
45*b1cdbd2cSJim Jagielski {}
46*b1cdbd2cSJim Jagielski virtual ~IdlEnumFieldImpl();
47*b1cdbd2cSJim Jagielski
48*b1cdbd2cSJim Jagielski // XInterface
49*b1cdbd2cSJim Jagielski virtual Any SAL_CALL queryInterface( const Type & rType ) throw(::com::sun::star::uno::RuntimeException);
50*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw();
51*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw();
52*b1cdbd2cSJim Jagielski
53*b1cdbd2cSJim Jagielski // XTypeProvider
54*b1cdbd2cSJim Jagielski virtual Sequence< Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException);
55*b1cdbd2cSJim Jagielski virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException);
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski // XIdlMember
58*b1cdbd2cSJim Jagielski virtual Reference< XIdlClass > SAL_CALL getDeclaringClass() throw(::com::sun::star::uno::RuntimeException);
59*b1cdbd2cSJim Jagielski virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
60*b1cdbd2cSJim Jagielski // XIdlField
61*b1cdbd2cSJim Jagielski virtual Reference< XIdlClass > SAL_CALL getType() throw(::com::sun::star::uno::RuntimeException);
62*b1cdbd2cSJim Jagielski virtual FieldAccessMode SAL_CALL getAccessMode() throw(::com::sun::star::uno::RuntimeException);
63*b1cdbd2cSJim Jagielski virtual Any SAL_CALL get( const Any & rObj ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
64*b1cdbd2cSJim Jagielski virtual void SAL_CALL set( const Any & rObj, const Any & rValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException);
65*b1cdbd2cSJim Jagielski // XIdlField2: getType, getAccessMode and get are equal to XIdlField
66*b1cdbd2cSJim Jagielski virtual void SAL_CALL set( Any & rObj, const Any & rValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException);
67*b1cdbd2cSJim Jagielski };
68*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
~IdlEnumFieldImpl()69*b1cdbd2cSJim Jagielski IdlEnumFieldImpl::~IdlEnumFieldImpl()
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski }
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski // XInterface
74*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
queryInterface(const Type & rType)75*b1cdbd2cSJim Jagielski Any IdlEnumFieldImpl::queryInterface( const Type & rType )
76*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
77*b1cdbd2cSJim Jagielski {
78*b1cdbd2cSJim Jagielski Any aRet( ::cppu::queryInterface( rType,
79*b1cdbd2cSJim Jagielski static_cast< XIdlField * >( this ),
80*b1cdbd2cSJim Jagielski static_cast< XIdlField2 * >( this ) ) );
81*b1cdbd2cSJim Jagielski return (aRet.hasValue() ? aRet : IdlMemberImpl::queryInterface( rType ));
82*b1cdbd2cSJim Jagielski }
83*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
acquire()84*b1cdbd2cSJim Jagielski void IdlEnumFieldImpl::acquire() throw()
85*b1cdbd2cSJim Jagielski {
86*b1cdbd2cSJim Jagielski IdlMemberImpl::acquire();
87*b1cdbd2cSJim Jagielski }
88*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
release()89*b1cdbd2cSJim Jagielski void IdlEnumFieldImpl::release() throw()
90*b1cdbd2cSJim Jagielski {
91*b1cdbd2cSJim Jagielski IdlMemberImpl::release();
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski
94*b1cdbd2cSJim Jagielski // XTypeProvider
95*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getTypes()96*b1cdbd2cSJim Jagielski Sequence< Type > IdlEnumFieldImpl::getTypes()
97*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski static OTypeCollection * s_pTypes = 0;
100*b1cdbd2cSJim Jagielski if (! s_pTypes)
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski MutexGuard aGuard( getMutexAccess() );
103*b1cdbd2cSJim Jagielski if (! s_pTypes)
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski static OTypeCollection s_aTypes(
106*b1cdbd2cSJim Jagielski ::getCppuType( (const Reference< XIdlField2 > *)0 ),
107*b1cdbd2cSJim Jagielski ::getCppuType( (const Reference< XIdlField > *)0 ),
108*b1cdbd2cSJim Jagielski IdlMemberImpl::getTypes() );
109*b1cdbd2cSJim Jagielski s_pTypes = &s_aTypes;
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski }
112*b1cdbd2cSJim Jagielski return s_pTypes->getTypes();
113*b1cdbd2cSJim Jagielski }
114*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getImplementationId()115*b1cdbd2cSJim Jagielski Sequence< sal_Int8 > IdlEnumFieldImpl::getImplementationId()
116*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
117*b1cdbd2cSJim Jagielski {
118*b1cdbd2cSJim Jagielski static OImplementationId * s_pId = 0;
119*b1cdbd2cSJim Jagielski if (! s_pId)
120*b1cdbd2cSJim Jagielski {
121*b1cdbd2cSJim Jagielski MutexGuard aGuard( getMutexAccess() );
122*b1cdbd2cSJim Jagielski if (! s_pId)
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski static OImplementationId s_aId;
125*b1cdbd2cSJim Jagielski s_pId = &s_aId;
126*b1cdbd2cSJim Jagielski }
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski return s_pId->getImplementationId();
129*b1cdbd2cSJim Jagielski }
130*b1cdbd2cSJim Jagielski
131*b1cdbd2cSJim Jagielski // XIdlMember
132*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getDeclaringClass()133*b1cdbd2cSJim Jagielski Reference< XIdlClass > IdlEnumFieldImpl::getDeclaringClass()
134*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski return IdlMemberImpl::getDeclaringClass();
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getName()139*b1cdbd2cSJim Jagielski OUString IdlEnumFieldImpl::getName()
140*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski return IdlMemberImpl::getName();
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski
145*b1cdbd2cSJim Jagielski // XIdlField
146*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getType()147*b1cdbd2cSJim Jagielski Reference< XIdlClass > IdlEnumFieldImpl::getType()
148*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
149*b1cdbd2cSJim Jagielski {
150*b1cdbd2cSJim Jagielski return getDeclaringClass();
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getAccessMode()153*b1cdbd2cSJim Jagielski FieldAccessMode IdlEnumFieldImpl::getAccessMode()
154*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
155*b1cdbd2cSJim Jagielski {
156*b1cdbd2cSJim Jagielski return FieldAccessMode_READONLY;
157*b1cdbd2cSJim Jagielski }
158*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
get(const Any &)159*b1cdbd2cSJim Jagielski Any IdlEnumFieldImpl::get( const Any & )
160*b1cdbd2cSJim Jagielski throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski return Any( &_nValue, getTypeDescr() );
163*b1cdbd2cSJim Jagielski }
164*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
set(const Any &,const Any &)165*b1cdbd2cSJim Jagielski void IdlEnumFieldImpl::set( const Any &, const Any & )
166*b1cdbd2cSJim Jagielski throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException)
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski throw IllegalAccessException(
169*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("enum field is constant!") ),
170*b1cdbd2cSJim Jagielski (XWeak *)(OWeakObject *)this );
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
set(Any &,const Any &)173*b1cdbd2cSJim Jagielski void IdlEnumFieldImpl::set( Any &, const Any & )
174*b1cdbd2cSJim Jagielski throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException)
175*b1cdbd2cSJim Jagielski {
176*b1cdbd2cSJim Jagielski throw IllegalAccessException(
177*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("enum field is constant!") ),
178*b1cdbd2cSJim Jagielski (XWeak *)(OWeakObject *)this );
179*b1cdbd2cSJim Jagielski }
180*b1cdbd2cSJim Jagielski
181*b1cdbd2cSJim Jagielski //##################################################################################################
182*b1cdbd2cSJim Jagielski //##################################################################################################
183*b1cdbd2cSJim Jagielski //##################################################################################################
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
~EnumIdlClassImpl()187*b1cdbd2cSJim Jagielski EnumIdlClassImpl::~EnumIdlClassImpl()
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski delete _pFields;
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski
192*b1cdbd2cSJim Jagielski // IdlClassImpl modifications
193*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getField(const OUString & rName)194*b1cdbd2cSJim Jagielski Reference< XIdlField > EnumIdlClassImpl::getField( const OUString & rName )
195*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski if (! _pFields)
198*b1cdbd2cSJim Jagielski getFields(); // init members
199*b1cdbd2cSJim Jagielski
200*b1cdbd2cSJim Jagielski const OUString2Field::const_iterator iFind( _aName2Field.find( rName ) );
201*b1cdbd2cSJim Jagielski if (iFind != _aName2Field.end())
202*b1cdbd2cSJim Jagielski return (*iFind).second;
203*b1cdbd2cSJim Jagielski else
204*b1cdbd2cSJim Jagielski return Reference< XIdlField >();
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getFields()207*b1cdbd2cSJim Jagielski Sequence< Reference< XIdlField > > EnumIdlClassImpl::getFields()
208*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
209*b1cdbd2cSJim Jagielski {
210*b1cdbd2cSJim Jagielski if (! _pFields)
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski MutexGuard aGuard( getMutexAccess() );
213*b1cdbd2cSJim Jagielski if (! _pFields)
214*b1cdbd2cSJim Jagielski {
215*b1cdbd2cSJim Jagielski sal_Int32 nFields = getTypeDescr()->nEnumValues;
216*b1cdbd2cSJim Jagielski Sequence< Reference< XIdlField > > * pFields =
217*b1cdbd2cSJim Jagielski new Sequence< Reference< XIdlField > >( nFields );
218*b1cdbd2cSJim Jagielski Reference< XIdlField > * pSeq = pFields->getArray();
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski while (nFields--)
221*b1cdbd2cSJim Jagielski {
222*b1cdbd2cSJim Jagielski OUString aName( getTypeDescr()->ppEnumNames[nFields] );
223*b1cdbd2cSJim Jagielski _aName2Field[aName] = pSeq[nFields] = new IdlEnumFieldImpl(
224*b1cdbd2cSJim Jagielski getReflection(), aName, IdlClassImpl::getTypeDescr(), getTypeDescr()->pEnumValues[nFields] );
225*b1cdbd2cSJim Jagielski }
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski _pFields = pFields;
228*b1cdbd2cSJim Jagielski }
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski return *_pFields;
231*b1cdbd2cSJim Jagielski }
232*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
createObject(Any & rObj)233*b1cdbd2cSJim Jagielski void EnumIdlClassImpl::createObject( Any & rObj )
234*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
235*b1cdbd2cSJim Jagielski {
236*b1cdbd2cSJim Jagielski sal_Int32 eVal =
237*b1cdbd2cSJim Jagielski ((typelib_EnumTypeDescription *)IdlClassImpl::getTypeDescr())->nDefaultEnumValue;
238*b1cdbd2cSJim Jagielski rObj.setValue( &eVal, IdlClassImpl::getTypeDescr() );
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski
241*b1cdbd2cSJim Jagielski }
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski
244