1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_forms.hxx"
26 
27 #include "FormsCollection.hxx"
28 #include "services.hxx"
29 #include <comphelper/sequence.hxx>
30 #include <tools/debug.hxx>
31 #include <com/sun/star/form/XForm.hpp>
32 #include <rtl/logfile.hxx>
33 
34 //.........................................................................
35 namespace frm
36 {
37 //.........................................................................
38 using namespace ::com::sun::star::lang;
39 using namespace ::com::sun::star::uno;
40 using namespace ::com::sun::star::form;
41 using namespace ::com::sun::star::container;
42 using namespace ::com::sun::star::util;
43 
44 //------------------------------------------------------------------
DBG_NAME(OFormsCollection)45 DBG_NAME(OFormsCollection)
46 //------------------------------------------------------------------
47 InterfaceRef SAL_CALL OFormsCollection_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory)
48 {
49 	return *(new OFormsCollection(_rxFactory));
50 }
51 
52 //------------------------------------------------------------------------------
getServiceName()53 ::rtl::OUString SAL_CALL OFormsCollection::getServiceName() throw(RuntimeException)
54 {
55 	return FRM_SUN_FORMS_COLLECTION;
56 }
57 
58 //------------------------------------------------------------------------------
getImplementationId()59 Sequence< sal_Int8 > SAL_CALL OFormsCollection::getImplementationId(  ) throw(RuntimeException)
60 {
61 	return OImplementationIds::getImplementationId(getTypes());
62 }
63 
64 //------------------------------------------------------------------------------
getTypes()65 Sequence<Type> SAL_CALL OFormsCollection::getTypes() throw(RuntimeException)
66 {
67 	return concatSequences(OInterfaceContainer::getTypes(), FormsCollectionComponentBase::getTypes(), OFormsCollection_BASE::getTypes());
68 }
69 
70 //------------------------------------------------------------------
OFormsCollection(const Reference<XMultiServiceFactory> & _rxFactory)71 OFormsCollection::OFormsCollection(const Reference<XMultiServiceFactory>& _rxFactory)
72     :FormsCollectionComponentBase( m_aMutex )
73     ,OInterfaceContainer( _rxFactory, m_aMutex, XForm::static_type() )
74     ,OFormsCollection_BASE()
75 {
76 	DBG_CTOR(OFormsCollection, NULL);
77 }
78 
79 //------------------------------------------------------------------------------
OFormsCollection(const OFormsCollection & _cloneSource)80 OFormsCollection::OFormsCollection( const OFormsCollection& _cloneSource )
81     :FormsCollectionComponentBase( m_aMutex )
82     ,OInterfaceContainer( m_aMutex, _cloneSource )
83     ,OFormsCollection_BASE()
84 {
85 	DBG_CTOR( OFormsCollection, NULL );
86 }
87 
88 //------------------------------------------------------------------------------
~OFormsCollection()89 OFormsCollection::~OFormsCollection()
90 {
91 	DBG_DTOR(OFormsCollection, NULL);
92 	if (!FormsCollectionComponentBase::rBHelper.bDisposed)
93 	{
94 		acquire();
95 		dispose();
96 	}
97 }
98 
99 //------------------------------------------------------------------------------
queryAggregation(const Type & _rType)100 Any SAL_CALL OFormsCollection::queryAggregation(const Type& _rType) throw(RuntimeException)
101 {
102 	Any aReturn = OFormsCollection_BASE::queryInterface(_rType);
103 	if (!aReturn.hasValue())
104 	{
105 		aReturn = OInterfaceContainer::queryInterface(_rType);
106 
107 		if (!aReturn.hasValue())
108 			aReturn = FormsCollectionComponentBase::queryAggregation(_rType);
109 	}
110 
111 	return aReturn;
112 }
113 
114 //------------------------------------------------------------------------------
getImplementationName()115 ::rtl::OUString SAL_CALL OFormsCollection::getImplementationName() throw(RuntimeException)
116 {
117 	return ::rtl::OUString::createFromAscii("com.sun.star.comp.forms.OFormsCollection");
118 }
119 
120 //------------------------------------------------------------------------------
supportsService(const::rtl::OUString & _rServiceName)121 sal_Bool SAL_CALL OFormsCollection::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException)
122 {
123 	Sequence<rtl::OUString> aSupported = getSupportedServiceNames();
124 	const rtl::OUString* pSupported = aSupported.getConstArray();
125 	for (sal_Int32 i=0; i<aSupported.getLength(); ++i, ++pSupported)
126 		if (pSupported->equals(_rServiceName))
127 			return sal_True;
128 	return sal_False;
129 }
130 
131 //------------------------------------------------------------------------------
getSupportedServiceNames()132 StringSequence SAL_CALL OFormsCollection::getSupportedServiceNames() throw(RuntimeException)
133 {
134 	StringSequence aReturn(2);
135 
136 	aReturn.getArray()[0] = FRM_SUN_FORMS_COLLECTION;
137 	aReturn.getArray()[1] = ::rtl::OUString::createFromAscii("com.sun.star.form.FormComponents");
138 
139 	return aReturn;
140 }
141 
142 // XCloneable
143 //------------------------------------------------------------------------------
createClone()144 Reference< XCloneable > SAL_CALL OFormsCollection::createClone(  ) throw (RuntimeException)
145 {
146     OFormsCollection* pClone = new OFormsCollection( *this );
147     osl_incrementInterlockedCount( &pClone->m_refCount );
148     pClone->clonedFrom( *this );
149     osl_decrementInterlockedCount( &pClone->m_refCount );
150     return pClone;
151 }
152 
153 // OComponentHelper
154 //------------------------------------------------------------------------------
disposing()155 void OFormsCollection::disposing()
156 {
157 	{
158 		RTL_LOGFILE_CONTEXT( aLogger, "forms::OFormsCollection::disposing" );
159 		OInterfaceContainer::disposing();
160 	}
161 	FormsCollectionComponentBase::disposing();
162 	m_xParent = NULL;
163 }
164 
165 //XChild
166 //------------------------------------------------------------------------------
setParent(const InterfaceRef & Parent)167 void OFormsCollection::setParent(const InterfaceRef& Parent) throw( NoSupportException, RuntimeException )
168 {
169 	::osl::MutexGuard aGuard( m_aMutex );
170 	m_xParent = Parent;
171 }
172 
173 //------------------------------------------------------------------------------
getParent()174 InterfaceRef  OFormsCollection::getParent() throw( RuntimeException )
175 {
176 	return m_xParent;
177 }
178 
179 //.........................................................................
180 }	// namespace frm
181 //.........................................................................
182 
183