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_extensions.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
29*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
30*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
31*b1cdbd2cSJim Jagielski #include <cppuhelper/weak.hxx>
32*b1cdbd2cSJim Jagielski #include <svl/itemprop.hxx>
33*b1cdbd2cSJim Jagielski #include <uno/environment.h>
34*b1cdbd2cSJim Jagielski #include <svl/urihelper.hxx>
35*b1cdbd2cSJim Jagielski #ifndef _TOOLKIT_UNOHLP_HXX
36*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
39*b1cdbd2cSJim Jagielski #include <cppuhelper/factory.hxx>	// helper for factories
40*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/ResultSetType.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XColumn.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XURLTransformer.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XRowSet.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/CommandType.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrameLoader.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XSingleServiceFactory.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/text/BibliographyDataField.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/form/XLoadListener.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XLayoutManager.hpp>
56*b1cdbd2cSJim Jagielski #include <toolkit/awt/vclxwindow.hxx>
57*b1cdbd2cSJim Jagielski #include <vcl/window.hxx>
58*b1cdbd2cSJim Jagielski #include <vcl/edit.hxx>
59*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
60*b1cdbd2cSJim Jagielski #include <vcl/group.hxx>
61*b1cdbd2cSJim Jagielski #include <svtools/svmedit.hxx>
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski #include "bibresid.hxx"
64*b1cdbd2cSJim Jagielski #ifndef BIB_HRC
65*b1cdbd2cSJim Jagielski #include "bib.hrc"
66*b1cdbd2cSJim Jagielski #endif
67*b1cdbd2cSJim Jagielski #include "bibcont.hxx"
68*b1cdbd2cSJim Jagielski #include "bibbeam.hxx"
69*b1cdbd2cSJim Jagielski #include "bibmod.hxx"
70*b1cdbd2cSJim Jagielski #include "bibview.hxx"
71*b1cdbd2cSJim Jagielski #include "framectr.hxx"
72*b1cdbd2cSJim Jagielski #include "datman.hxx"
73*b1cdbd2cSJim Jagielski #include <bibconfig.hxx>
74*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase4.hxx> // helper for implementations
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski using namespace ::rtl;
77*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
78*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
79*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
80*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
81*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdb;
82*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbc;
83*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::form;
84*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
85*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski #define C2U(cChar) OUString::createFromAscii(cChar)
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski #define PROPERTY_FRAME						1
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski class BibliographyLoader : public cppu::WeakImplHelper4
95*b1cdbd2cSJim Jagielski 							< XServiceInfo, XNameAccess, XPropertySet, XFrameLoader >
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski 	HdlBibModul 									m_pBibMod;
98*b1cdbd2cSJim Jagielski 	Reference< XLoadable >							m_xDatMan;
99*b1cdbd2cSJim Jagielski 	BibDataManager* 								m_pDatMan;
100*b1cdbd2cSJim Jagielski 	Reference< XNameAccess > 						m_xColumns;
101*b1cdbd2cSJim Jagielski 	Reference< XResultSet > 						m_xCursor;
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski private:
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 	void					loadView(const Reference< XFrame > & aFrame, const rtl::OUString& aURL,
106*b1cdbd2cSJim Jagielski 								const Sequence< PropertyValue >& aArgs,
107*b1cdbd2cSJim Jagielski 								const Reference< XLoadEventListener > & aListener);
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 	BibDataManager* 		GetDataManager()const;
110*b1cdbd2cSJim Jagielski 	Reference< XNameAccess > 			GetDataColumns() const;
111*b1cdbd2cSJim Jagielski 	Reference< XResultSet > 			GetDataCursor() const;
112*b1cdbd2cSJim Jagielski 	Reference< sdb::XColumn >				GetIdentifierColumn() const;
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski public:
115*b1cdbd2cSJim Jagielski 							BibliographyLoader();
116*b1cdbd2cSJim Jagielski 							~BibliographyLoader();
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski 	// XServiceInfo
119*b1cdbd2cSJim Jagielski 	rtl::OUString				SAL_CALL getImplementationName() throw(  );
120*b1cdbd2cSJim Jagielski 	sal_Bool					SAL_CALL supportsService(const rtl::OUString& ServiceName) throw(  );
121*b1cdbd2cSJim Jagielski 	Sequence< rtl::OUString >	SAL_CALL getSupportedServiceNames(void) throw(	);
getImplementationName_Static()122*b1cdbd2cSJim Jagielski 	static rtl::OUString				getImplementationName_Static() throw(  )
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 							{
125*b1cdbd2cSJim Jagielski 								//!
126*b1cdbd2cSJim Jagielski 								return C2U("com.sun.star.extensions.Bibliography");
127*b1cdbd2cSJim Jagielski 								//!
128*b1cdbd2cSJim Jagielski 							}
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski 	//XNameAccess
131*b1cdbd2cSJim Jagielski 	virtual Any SAL_CALL getByName(const rtl::OUString& aName) throw ( NoSuchElementException, WrappedTargetException, RuntimeException );
132*b1cdbd2cSJim Jagielski 	virtual Sequence< rtl::OUString > SAL_CALL getElementNames(void) throw ( RuntimeException );
133*b1cdbd2cSJim Jagielski 	virtual sal_Bool SAL_CALL hasByName(const rtl::OUString& aName) throw ( RuntimeException );
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 	//XElementAccess
136*b1cdbd2cSJim Jagielski 	virtual Type  SAL_CALL getElementType(void) throw ( RuntimeException );
137*b1cdbd2cSJim Jagielski 	virtual sal_Bool SAL_CALL hasElements(void) throw ( RuntimeException );
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 	//XPropertySet
140*b1cdbd2cSJim Jagielski 	virtual Reference< XPropertySetInfo >  SAL_CALL getPropertySetInfo(void) throw ( RuntimeException );
141*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL setPropertyValue(const rtl::OUString& PropertyName, const Any& aValue) throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException );
142*b1cdbd2cSJim Jagielski 	virtual Any SAL_CALL getPropertyValue(const rtl::OUString& PropertyName) throw ( UnknownPropertyException, WrappedTargetException, RuntimeException );
143*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL addPropertyChangeListener(const rtl::OUString& PropertyName, const Reference< XPropertyChangeListener > & aListener) throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
144*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL removePropertyChangeListener(const rtl::OUString& PropertyName, const Reference< XPropertyChangeListener > & aListener) throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
145*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL addVetoableChangeListener(const rtl::OUString& PropertyName, const Reference< XVetoableChangeListener > & aListener) throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
146*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL removeVetoableChangeListener(const rtl::OUString& PropertyName, const Reference< XVetoableChangeListener > & aListener) throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 	static Sequence<rtl::OUString>	SAL_CALL getSupportedServiceNames_Static(void) throw(  );
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 	friend	Reference< XInterface > 	SAL_CALL BibliographyLoader_CreateInstance( const Reference< XMultiServiceFactory > & rSMgr ) throw( Exception );
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski 	// XLoader
153*b1cdbd2cSJim Jagielski 	virtual void			SAL_CALL load(const Reference< XFrame > & aFrame, const rtl::OUString& aURL,
154*b1cdbd2cSJim Jagielski 								const Sequence< PropertyValue >& aArgs,
155*b1cdbd2cSJim Jagielski 								const Reference< XLoadEventListener > & aListener) throw (::com::sun::star::uno::RuntimeException);
156*b1cdbd2cSJim Jagielski 	virtual void			SAL_CALL cancel(void) throw (::com::sun::star::uno::RuntimeException);
157*b1cdbd2cSJim Jagielski };
158*b1cdbd2cSJim Jagielski 
BibliographyLoader()159*b1cdbd2cSJim Jagielski BibliographyLoader::BibliographyLoader() :
160*b1cdbd2cSJim Jagielski 	m_pBibMod(0),
161*b1cdbd2cSJim Jagielski 	m_pDatMan(0)
162*b1cdbd2cSJim Jagielski {
163*b1cdbd2cSJim Jagielski }
164*b1cdbd2cSJim Jagielski 
~BibliographyLoader()165*b1cdbd2cSJim Jagielski BibliographyLoader::~BibliographyLoader()
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski 	Reference< lang::XComponent >  xComp(m_xCursor, UNO_QUERY);
168*b1cdbd2cSJim Jagielski 	if (xComp.is())
169*b1cdbd2cSJim Jagielski 		xComp->dispose();
170*b1cdbd2cSJim Jagielski 	if(m_pBibMod)
171*b1cdbd2cSJim Jagielski 		CloseBibModul(m_pBibMod);
172*b1cdbd2cSJim Jagielski }
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 
BibliographyLoader_CreateInstance(const Reference<XMultiServiceFactory> &)175*b1cdbd2cSJim Jagielski Reference< XInterface >  SAL_CALL BibliographyLoader_CreateInstance( const Reference< XMultiServiceFactory >  & /*rSMgr*/ ) throw( Exception )
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski 	return *(new BibliographyLoader);
178*b1cdbd2cSJim Jagielski }
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski // XServiceInfo
getImplementationName()182*b1cdbd2cSJim Jagielski rtl::OUString BibliographyLoader::getImplementationName() throw(  )
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski 	return getImplementationName_Static();
186*b1cdbd2cSJim Jagielski }
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski // XServiceInfo
supportsService(const rtl::OUString & ServiceName)189*b1cdbd2cSJim Jagielski sal_Bool BibliographyLoader::supportsService(const rtl::OUString& ServiceName) throw(  )
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski 	Sequence< rtl::OUString > aSNL = getSupportedServiceNames();
192*b1cdbd2cSJim Jagielski 	const rtl::OUString * pArray = aSNL.getConstArray();
193*b1cdbd2cSJim Jagielski 	for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
194*b1cdbd2cSJim Jagielski 		if( pArray[i] == ServiceName )
195*b1cdbd2cSJim Jagielski 			return sal_True;
196*b1cdbd2cSJim Jagielski 	return sal_False;
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski // XServiceInfo
getSupportedServiceNames(void)200*b1cdbd2cSJim Jagielski Sequence< rtl::OUString > BibliographyLoader::getSupportedServiceNames(void) throw(  )
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski 	return getSupportedServiceNames_Static();
203*b1cdbd2cSJim Jagielski }
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski // ORegistryServiceManager_Static
getSupportedServiceNames_Static(void)206*b1cdbd2cSJim Jagielski Sequence< rtl::OUString > BibliographyLoader::getSupportedServiceNames_Static(void) throw(	)
207*b1cdbd2cSJim Jagielski {
208*b1cdbd2cSJim Jagielski 	Sequence< rtl::OUString > aSNS( 2 );
209*b1cdbd2cSJim Jagielski 	aSNS.getArray()[0] = C2U("com.sun.star.frame.FrameLoader");
210*b1cdbd2cSJim Jagielski 	//!
211*b1cdbd2cSJim Jagielski 	aSNS.getArray()[1] = C2U("com.sun.star.frame.Bibliography");
212*b1cdbd2cSJim Jagielski 	//!
213*b1cdbd2cSJim Jagielski 	return aSNS;
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski extern "C"
217*b1cdbd2cSJim Jagielski {
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment **)218*b1cdbd2cSJim Jagielski 	void SAL_CALL component_getImplementationEnvironment(
219*b1cdbd2cSJim Jagielski 		const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ )
220*b1cdbd2cSJim Jagielski 	{
221*b1cdbd2cSJim Jagielski 		*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
222*b1cdbd2cSJim Jagielski 	}
223*b1cdbd2cSJim Jagielski 
component_getFactory(const sal_Char * pImplName,XMultiServiceFactory * pServiceManager,void *)224*b1cdbd2cSJim Jagielski 	void * SAL_CALL component_getFactory(
225*b1cdbd2cSJim Jagielski 		const sal_Char * pImplName, XMultiServiceFactory * pServiceManager, void * /*pRegistryKey*/ )
226*b1cdbd2cSJim Jagielski 	{
227*b1cdbd2cSJim Jagielski 		void * pRet = 0;
228*b1cdbd2cSJim Jagielski 		if (!BibliographyLoader::getImplementationName_Static().compareToAscii( pImplName ) )
229*b1cdbd2cSJim Jagielski 		{
230*b1cdbd2cSJim Jagielski 			// create the factory
231*b1cdbd2cSJim Jagielski 			Reference< XSingleServiceFactory > xFactory =
232*b1cdbd2cSJim Jagielski 				cppu::createSingleFactory(
233*b1cdbd2cSJim Jagielski 					pServiceManager,
234*b1cdbd2cSJim Jagielski 					BibliographyLoader::getImplementationName_Static(),
235*b1cdbd2cSJim Jagielski 					BibliographyLoader_CreateInstance,
236*b1cdbd2cSJim Jagielski 					BibliographyLoader::getSupportedServiceNames_Static() );
237*b1cdbd2cSJim Jagielski 			// acquire, because we return an interface pointer instead of a reference
238*b1cdbd2cSJim Jagielski 			xFactory->acquire();
239*b1cdbd2cSJim Jagielski 			pRet = xFactory.get();
240*b1cdbd2cSJim Jagielski 		}
241*b1cdbd2cSJim Jagielski 		return pRet;
242*b1cdbd2cSJim Jagielski 	}
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski }
245*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
cancel(void)246*b1cdbd2cSJim Jagielski void BibliographyLoader::cancel(void) throw (::com::sun::star::uno::RuntimeException)
247*b1cdbd2cSJim Jagielski {
248*b1cdbd2cSJim Jagielski 	//!
249*b1cdbd2cSJim Jagielski 	//!
250*b1cdbd2cSJim Jagielski }
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
load(const Reference<XFrame> & rFrame,const rtl::OUString & rURL,const Sequence<PropertyValue> & rArgs,const Reference<XLoadEventListener> & rListener)253*b1cdbd2cSJim Jagielski void BibliographyLoader::load(const Reference< XFrame > & rFrame, const rtl::OUString& rURL,
254*b1cdbd2cSJim Jagielski 		const Sequence< PropertyValue >& rArgs,
255*b1cdbd2cSJim Jagielski 		const Reference< XLoadEventListener > & rListener) throw (::com::sun::star::uno::RuntimeException)
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski 	//!
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski     vos::OGuard aGuard(Application::GetSolarMutex());
260*b1cdbd2cSJim Jagielski     m_pBibMod = OpenBibModul();
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski 	String aURLStr( rURL );
263*b1cdbd2cSJim Jagielski 	String aPartName = aURLStr.GetToken( 1, '/' );
264*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> xPrSet(rFrame, UNO_QUERY);
265*b1cdbd2cSJim Jagielski 	if(xPrSet.is())
266*b1cdbd2cSJim Jagielski 	{
267*b1cdbd2cSJim Jagielski 		Any aTitle;
268*b1cdbd2cSJim Jagielski 		aTitle <<= OUString(String(BibResId(RID_BIB_STR_FRAME_TITLE)));
269*b1cdbd2cSJim Jagielski 		xPrSet->setPropertyValue(C2U("Title"), aTitle);
270*b1cdbd2cSJim Jagielski 	}
271*b1cdbd2cSJim Jagielski 	if(aPartName.EqualsAscii("View") || aPartName.EqualsAscii("View1"))
272*b1cdbd2cSJim Jagielski 	{
273*b1cdbd2cSJim Jagielski 		loadView(rFrame, rURL, rArgs, rListener);
274*b1cdbd2cSJim Jagielski 	}
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
loadView(const Reference<XFrame> & rFrame,const rtl::OUString &,const Sequence<PropertyValue> &,const Reference<XLoadEventListener> & rListener)278*b1cdbd2cSJim Jagielski void BibliographyLoader::loadView(const Reference< XFrame > & rFrame, const rtl::OUString& /*rURL*/,
279*b1cdbd2cSJim Jagielski 		const Sequence< PropertyValue >& /*rArgs*/,
280*b1cdbd2cSJim Jagielski 		const Reference< XLoadEventListener > & rListener)
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski     vos::OGuard aGuard(Application::GetSolarMutex());
283*b1cdbd2cSJim Jagielski     //!
284*b1cdbd2cSJim Jagielski 	if(!m_pBibMod)
285*b1cdbd2cSJim Jagielski 		m_pBibMod = OpenBibModul();
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski /*
288*b1cdbd2cSJim Jagielski 	//create the menu
289*b1cdbd2cSJim Jagielski 	ResMgr* pResMgr = (*m_pBibMod)->GetResMgr();
290*b1cdbd2cSJim Jagielski 	INetURLObject aEntry( URIHelper::SmartRelToAbs(pResMgr->GetFileName()) );
291*b1cdbd2cSJim Jagielski 	String aMenuRes( RTL_CONSTASCII_USTRINGPARAM( "private:resource/" ));
292*b1cdbd2cSJim Jagielski 	aMenuRes += ( aEntry.GetName() += '/' );
293*b1cdbd2cSJim Jagielski 	aMenuRes+=String::CreateFromInt32(RID_MAIN_MENU);
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 	util::URL aURL;
296*b1cdbd2cSJim Jagielski 	aURL.Complete = aMenuRes;
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 	Reference< XMultiServiceFactory >  xMgr = comphelper::getProcessServiceFactory();
299*b1cdbd2cSJim Jagielski 	Reference< util::XURLTransformer >	xTrans ( xMgr->createInstance( C2U("com.sun.star.util.URLTransformer") ), UNO_QUERY );
300*b1cdbd2cSJim Jagielski 	if( xTrans.is() )
301*b1cdbd2cSJim Jagielski 	{
302*b1cdbd2cSJim Jagielski 		// Datei laden
303*b1cdbd2cSJim Jagielski 		xTrans->parseStrict( aURL );
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski 		Reference< XDispatchProvider >	xProv( rFrame, UNO_QUERY );
306*b1cdbd2cSJim Jagielski 		if ( xProv.is() )
307*b1cdbd2cSJim Jagielski 		{
308*b1cdbd2cSJim Jagielski 			Reference< XDispatch >	aDisp = xProv->queryDispatch( aURL, C2U("_menubar"), 12 );
309*b1cdbd2cSJim Jagielski 			if ( aDisp.is() )
310*b1cdbd2cSJim Jagielski 				aDisp->dispatch( aURL, Sequence<PropertyValue>() );
311*b1cdbd2cSJim Jagielski 		}
312*b1cdbd2cSJim Jagielski 	}
313*b1cdbd2cSJim Jagielski */
314*b1cdbd2cSJim Jagielski 	m_pDatMan = (*m_pBibMod)->createDataManager();
315*b1cdbd2cSJim Jagielski 	m_xDatMan = m_pDatMan;
316*b1cdbd2cSJim Jagielski 	BibDBDescriptor aBibDesc = BibModul::GetConfig()->GetBibliographyURL();
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski 	if(!aBibDesc.sDataSource.getLength())
319*b1cdbd2cSJim Jagielski 	{
320*b1cdbd2cSJim Jagielski 		DBChangeDialogConfig_Impl aConfig;
321*b1cdbd2cSJim Jagielski 		const Sequence<OUString> aSources = aConfig.GetDataSourceNames();
322*b1cdbd2cSJim Jagielski 		if(aSources.getLength())
323*b1cdbd2cSJim Jagielski 			aBibDesc.sDataSource = aSources.getConstArray()[0];
324*b1cdbd2cSJim Jagielski 	}
325*b1cdbd2cSJim Jagielski 
326*b1cdbd2cSJim Jagielski 	Reference< XForm > xForm = m_pDatMan->createDatabaseForm( aBibDesc );
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski     Reference< awt::XWindow >  aWindow = rFrame->getContainerWindow();
329*b1cdbd2cSJim Jagielski     VCLXWindow* pParentComponent = VCLXWindow::GetImplementation(aWindow);
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski     Window* pParent = VCLUnoHelper::GetWindow( aWindow );
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski     BibBookContainer *pMyWindow = new BibBookContainer( pParent, m_pDatMan );
334*b1cdbd2cSJim Jagielski     pMyWindow->Show();
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski     ::bib::BibView* pView = new ::bib::BibView( pMyWindow, m_pDatMan, WB_VSCROLL | WB_HSCROLL | WB_3DLOOK );
337*b1cdbd2cSJim Jagielski     pView->Show();
338*b1cdbd2cSJim Jagielski     m_pDatMan->SetView( pView );
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski     ::bib::BibBeamer* pBeamer = new ::bib::BibBeamer( pMyWindow, m_pDatMan );
341*b1cdbd2cSJim Jagielski     pBeamer->Show();
342*b1cdbd2cSJim Jagielski     pMyWindow->createTopFrame(pBeamer);
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski     pMyWindow->createBottomFrame(pView);
345*b1cdbd2cSJim Jagielski 
346*b1cdbd2cSJim Jagielski     Reference< awt::XWindow >  xWin ( pMyWindow->GetComponentInterface(), UNO_QUERY );
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski     Reference< XController >  xCtrRef( new BibFrameController_Impl( xWin, m_pDatMan ) );
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski     xCtrRef->attachFrame(rFrame);
351*b1cdbd2cSJim Jagielski     rFrame->setComponent( xWin, xCtrRef);
352*b1cdbd2cSJim Jagielski     pBeamer->SetXController(xCtrRef);
353*b1cdbd2cSJim Jagielski     //!
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski     // not earlier because SetFocus() is triggered in setVisible()
356*b1cdbd2cSJim Jagielski     pParentComponent->setVisible(sal_True);
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski     m_xDatMan->load();
359*b1cdbd2cSJim Jagielski     // #100312# ----------
360*b1cdbd2cSJim Jagielski     m_pDatMan->RegisterInterceptor(pBeamer);
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski     if ( rListener.is() )
363*b1cdbd2cSJim Jagielski         rListener->loadFinished( this );
364*b1cdbd2cSJim Jagielski 
365*b1cdbd2cSJim Jagielski     // attach menu bar
366*b1cdbd2cSJim Jagielski     Reference< XPropertySet > xPropSet( rFrame, UNO_QUERY );
367*b1cdbd2cSJim Jagielski     Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager;
368*b1cdbd2cSJim Jagielski     if ( xPropSet.is() )
369*b1cdbd2cSJim Jagielski     {
370*b1cdbd2cSJim Jagielski         try
371*b1cdbd2cSJim Jagielski         {
372*b1cdbd2cSJim Jagielski             Any a = xPropSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" )));
373*b1cdbd2cSJim Jagielski             a >>= xLayoutManager;
374*b1cdbd2cSJim Jagielski         }
375*b1cdbd2cSJim Jagielski         catch ( uno::Exception& )
376*b1cdbd2cSJim Jagielski         {
377*b1cdbd2cSJim Jagielski         }
378*b1cdbd2cSJim Jagielski     }
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski     if ( xLayoutManager.is() )
381*b1cdbd2cSJim Jagielski         xLayoutManager->createElement( OUString( RTL_CONSTASCII_USTRINGPARAM( "private:resource/menubar/menubar" )));
382*b1cdbd2cSJim Jagielski }
383*b1cdbd2cSJim Jagielski /* -----------------06.12.99 14:37-------------------
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski  --------------------------------------------------*/
GetDataManager() const386*b1cdbd2cSJim Jagielski BibDataManager* BibliographyLoader::GetDataManager()const
387*b1cdbd2cSJim Jagielski {
388*b1cdbd2cSJim Jagielski 	if(!m_pDatMan)
389*b1cdbd2cSJim Jagielski 	{
390*b1cdbd2cSJim Jagielski 		if(!m_pBibMod)
391*b1cdbd2cSJim Jagielski 			const_cast< BibliographyLoader* >( this )->m_pBibMod = OpenBibModul();
392*b1cdbd2cSJim Jagielski 		const_cast< BibliographyLoader* >( this )->m_pDatMan = (*m_pBibMod)->createDataManager();
393*b1cdbd2cSJim Jagielski 		const_cast< BibliographyLoader* >( this )->m_xDatMan = m_pDatMan;
394*b1cdbd2cSJim Jagielski 	}
395*b1cdbd2cSJim Jagielski 	return m_pDatMan;
396*b1cdbd2cSJim Jagielski }
397*b1cdbd2cSJim Jagielski /* -----------------06.12.99 14:39-------------------
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski  --------------------------------------------------*/
GetDataColumns() const400*b1cdbd2cSJim Jagielski Reference< XNameAccess >  BibliographyLoader::GetDataColumns() const
401*b1cdbd2cSJim Jagielski {
402*b1cdbd2cSJim Jagielski 	if (!m_xColumns.is())
403*b1cdbd2cSJim Jagielski 	{
404*b1cdbd2cSJim Jagielski 		Reference< XMultiServiceFactory >  xMgr = comphelper::getProcessServiceFactory();
405*b1cdbd2cSJim Jagielski 		Reference< XRowSet >  xRowSet(xMgr->createInstance(C2U("com.sun.star.sdb.RowSet")), UNO_QUERY);
406*b1cdbd2cSJim Jagielski 		Reference< XPropertySet >  xResultSetProps(xRowSet, UNO_QUERY);
407*b1cdbd2cSJim Jagielski 		DBG_ASSERT(xResultSetProps.is() , "BibliographyLoader::GetDataCursor : invalid row set (no XResultSet or no XPropertySet) !");
408*b1cdbd2cSJim Jagielski 
409*b1cdbd2cSJim Jagielski 		BibDBDescriptor aBibDesc = BibModul::GetConfig()->GetBibliographyURL();
410*b1cdbd2cSJim Jagielski 
411*b1cdbd2cSJim Jagielski 		Any aBibUrlAny; aBibUrlAny <<= aBibDesc.sDataSource;
412*b1cdbd2cSJim Jagielski 		xResultSetProps->setPropertyValue(C2U("DataSourceName"), aBibUrlAny);
413*b1cdbd2cSJim Jagielski 		Any aCommandType; aCommandType <<= aBibDesc.nCommandType;
414*b1cdbd2cSJim Jagielski 		xResultSetProps->setPropertyValue(C2U("CommandType"), aCommandType);
415*b1cdbd2cSJim Jagielski 		Any aTableName; aTableName <<= aBibDesc.sTableOrQuery;
416*b1cdbd2cSJim Jagielski 		xResultSetProps->setPropertyValue(C2U("Command"), aTableName);
417*b1cdbd2cSJim Jagielski 		Any aResultSetType; aResultSetType <<= (sal_Int32)(ResultSetType::SCROLL_INSENSITIVE);
418*b1cdbd2cSJim Jagielski 		xResultSetProps->setPropertyValue(C2U("ResultSetType"), aResultSetType);
419*b1cdbd2cSJim Jagielski 		Any aResultSetCurrency; aResultSetCurrency <<= (sal_Int32)(ResultSetConcurrency::UPDATABLE);
420*b1cdbd2cSJim Jagielski 		xResultSetProps->setPropertyValue(C2U("ResultSetConcurrency"), aResultSetCurrency);
421*b1cdbd2cSJim Jagielski 
422*b1cdbd2cSJim Jagielski 		sal_Bool bSuccess = sal_False;
423*b1cdbd2cSJim Jagielski 		try
424*b1cdbd2cSJim Jagielski 		{
425*b1cdbd2cSJim Jagielski 			xRowSet->execute();
426*b1cdbd2cSJim Jagielski 			bSuccess = sal_True;
427*b1cdbd2cSJim Jagielski 		}
428*b1cdbd2cSJim Jagielski 		catch(const SQLException&)
429*b1cdbd2cSJim Jagielski 		{
430*b1cdbd2cSJim Jagielski             DBG_UNHANDLED_EXCEPTION();
431*b1cdbd2cSJim Jagielski 		}
432*b1cdbd2cSJim Jagielski 		catch(const Exception& )
433*b1cdbd2cSJim Jagielski 		{
434*b1cdbd2cSJim Jagielski             DBG_UNHANDLED_EXCEPTION();
435*b1cdbd2cSJim Jagielski 			bSuccess = sal_False;
436*b1cdbd2cSJim Jagielski 		}
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski 		if (!bSuccess)
439*b1cdbd2cSJim Jagielski 		{
440*b1cdbd2cSJim Jagielski 			Reference< XComponent >  xSetComp(xRowSet, UNO_QUERY);
441*b1cdbd2cSJim Jagielski 			if (xSetComp.is())
442*b1cdbd2cSJim Jagielski 				xSetComp->dispose();
443*b1cdbd2cSJim Jagielski 			xRowSet = NULL;
444*b1cdbd2cSJim Jagielski 		}
445*b1cdbd2cSJim Jagielski 		else
446*b1cdbd2cSJim Jagielski 			((BibliographyLoader*)this)->m_xCursor = xRowSet.get();
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski 		Reference< sdbcx::XColumnsSupplier >  xSupplyCols(m_xCursor, UNO_QUERY);
449*b1cdbd2cSJim Jagielski 		if (xSupplyCols.is())
450*b1cdbd2cSJim Jagielski 			((BibliographyLoader*)this)->m_xColumns = xSupplyCols->getColumns();
451*b1cdbd2cSJim Jagielski 	}
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski 	return m_xColumns;
454*b1cdbd2cSJim Jagielski }
455*b1cdbd2cSJim Jagielski /* -----------------17.12.99 12:29-------------------
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski  --------------------------------------------------*/
GetIdentifierColumn() const458*b1cdbd2cSJim Jagielski Reference< sdb::XColumn >  BibliographyLoader::GetIdentifierColumn() const
459*b1cdbd2cSJim Jagielski {
460*b1cdbd2cSJim Jagielski 	BibDataManager* pDatMan = GetDataManager();
461*b1cdbd2cSJim Jagielski 	Reference< XNameAccess >  xColumns = GetDataColumns();
462*b1cdbd2cSJim Jagielski 	rtl::OUString sIdentifierColumnName = pDatMan->GetIdentifierMapping();
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski 	Reference< sdb::XColumn >  xReturn;
465*b1cdbd2cSJim Jagielski 	if (xColumns.is() && xColumns->hasByName(sIdentifierColumnName))
466*b1cdbd2cSJim Jagielski 	{
467*b1cdbd2cSJim Jagielski 		xReturn = Reference< XColumn > (*(Reference< XInterface > *)
468*b1cdbd2cSJim Jagielski 				xColumns->getByName(sIdentifierColumnName).getValue(), UNO_QUERY);
469*b1cdbd2cSJim Jagielski 	}
470*b1cdbd2cSJim Jagielski 	return xReturn;
471*b1cdbd2cSJim Jagielski }
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski /* -----------------06.12.99 15:05-------------------
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski  --------------------------------------------------*/
GetDataCursor() const476*b1cdbd2cSJim Jagielski Reference< XResultSet >  BibliographyLoader::GetDataCursor() const
477*b1cdbd2cSJim Jagielski {
478*b1cdbd2cSJim Jagielski 	if (!m_xCursor.is())
479*b1cdbd2cSJim Jagielski 		GetDataColumns();
480*b1cdbd2cSJim Jagielski 	if (m_xCursor.is())
481*b1cdbd2cSJim Jagielski 		m_xCursor->first();
482*b1cdbd2cSJim Jagielski 	return m_xCursor;
483*b1cdbd2cSJim Jagielski }
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski /*-- 17.11.99 12:51:38---------------------------------------------------
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
lcl_AddProperty(Reference<XNameAccess> xColumns,const Mapping * pMapping,const String & rColumnName)488*b1cdbd2cSJim Jagielski rtl::OUString lcl_AddProperty(Reference< XNameAccess >  xColumns,
489*b1cdbd2cSJim Jagielski 		const Mapping* pMapping, const String& rColumnName)
490*b1cdbd2cSJim Jagielski {
491*b1cdbd2cSJim Jagielski 	String sColumnName(rColumnName);
492*b1cdbd2cSJim Jagielski 	if(pMapping)
493*b1cdbd2cSJim Jagielski 	{
494*b1cdbd2cSJim Jagielski 		for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++)
495*b1cdbd2cSJim Jagielski 		{
496*b1cdbd2cSJim Jagielski 			if(pMapping->aColumnPairs[nEntry].sLogicalColumnName == OUString(rColumnName))
497*b1cdbd2cSJim Jagielski 			{
498*b1cdbd2cSJim Jagielski 				sColumnName = pMapping->aColumnPairs[nEntry].sRealColumnName;
499*b1cdbd2cSJim Jagielski 				break;
500*b1cdbd2cSJim Jagielski 			}
501*b1cdbd2cSJim Jagielski 		}
502*b1cdbd2cSJim Jagielski 	}
503*b1cdbd2cSJim Jagielski 	rtl::OUString uColumnName(sColumnName);
504*b1cdbd2cSJim Jagielski 	rtl::OUString uRet;
505*b1cdbd2cSJim Jagielski 	Reference< sdb::XColumn >  xCol;
506*b1cdbd2cSJim Jagielski 	if (xColumns->hasByName(uColumnName))
507*b1cdbd2cSJim Jagielski 		xCol = Reference< sdb::XColumn > (*(Reference< XInterface > *)xColumns->getByName(uColumnName).getValue(), UNO_QUERY);
508*b1cdbd2cSJim Jagielski 	if (xCol.is())
509*b1cdbd2cSJim Jagielski 		uRet = xCol->getString();
510*b1cdbd2cSJim Jagielski 	return uRet;
511*b1cdbd2cSJim Jagielski }
512*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
getByName(const rtl::OUString & rName)513*b1cdbd2cSJim Jagielski Any BibliographyLoader::getByName(const rtl::OUString& rName) throw
514*b1cdbd2cSJim Jagielski 						( NoSuchElementException, WrappedTargetException, RuntimeException )
515*b1cdbd2cSJim Jagielski {
516*b1cdbd2cSJim Jagielski 	Any aRet;
517*b1cdbd2cSJim Jagielski 	try
518*b1cdbd2cSJim Jagielski 	{
519*b1cdbd2cSJim Jagielski 		BibDataManager* pDatMan = ((BibliographyLoader*)this)->GetDataManager();
520*b1cdbd2cSJim Jagielski 		Reference< XResultSet >  xCursor = GetDataCursor();
521*b1cdbd2cSJim Jagielski 		Reference< sdbcx::XColumnsSupplier >  xSupplyCols(xCursor, UNO_QUERY);
522*b1cdbd2cSJim Jagielski 		Reference< XNameAccess >  xColumns;
523*b1cdbd2cSJim Jagielski 		if (!xSupplyCols.is())
524*b1cdbd2cSJim Jagielski 			return aRet;
525*b1cdbd2cSJim Jagielski 		xColumns = xSupplyCols->getColumns();
526*b1cdbd2cSJim Jagielski 		DBG_ASSERT(xSupplyCols.is(), "BibliographyLoader::getByName : invalid columns returned by the data cursor (may be the result set is not alive ?) !");
527*b1cdbd2cSJim Jagielski 		if (!xColumns.is())
528*b1cdbd2cSJim Jagielski 			return aRet;
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski 		String sIdentifierMapping = pDatMan->GetIdentifierMapping();
531*b1cdbd2cSJim Jagielski 		rtl::OUString sId = sIdentifierMapping;
532*b1cdbd2cSJim Jagielski 		Reference< sdb::XColumn >  xColumn;
533*b1cdbd2cSJim Jagielski 		if (xColumns->hasByName(sId))
534*b1cdbd2cSJim Jagielski 			xColumn = Reference< sdb::XColumn > (*(Reference< XInterface > *)xColumns->getByName(sId).getValue(), UNO_QUERY);
535*b1cdbd2cSJim Jagielski 		if (xColumn.is())
536*b1cdbd2cSJim Jagielski 		{
537*b1cdbd2cSJim Jagielski 			do
538*b1cdbd2cSJim Jagielski 			{
539*b1cdbd2cSJim Jagielski 				if ((rName == xColumn->getString()) && !xColumn->wasNull())
540*b1cdbd2cSJim Jagielski 				{
541*b1cdbd2cSJim Jagielski 					Sequence<PropertyValue> aPropSequ(COLUMN_COUNT);
542*b1cdbd2cSJim Jagielski 					PropertyValue* pValues = aPropSequ.getArray();
543*b1cdbd2cSJim Jagielski 					BibConfig* pConfig = BibModul::GetConfig();
544*b1cdbd2cSJim Jagielski 					BibDBDescriptor aBibDesc = BibModul::GetConfig()->GetBibliographyURL();
545*b1cdbd2cSJim Jagielski 					const Mapping* pMapping = pConfig->GetMapping(aBibDesc);
546*b1cdbd2cSJim Jagielski 					for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++)
547*b1cdbd2cSJim Jagielski 					{
548*b1cdbd2cSJim Jagielski 						const String sColName = pConfig->GetDefColumnName(
549*b1cdbd2cSJim Jagielski 													nEntry);
550*b1cdbd2cSJim Jagielski 						pValues[nEntry].Name = sColName;
551*b1cdbd2cSJim Jagielski 						pValues[nEntry].Value <<= lcl_AddProperty(xColumns, pMapping, sColName);
552*b1cdbd2cSJim Jagielski 					}
553*b1cdbd2cSJim Jagielski 					aRet.setValue(&aPropSequ, ::getCppuType((Sequence<PropertyValue>*)0));
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski 					break;
556*b1cdbd2cSJim Jagielski 				}
557*b1cdbd2cSJim Jagielski 			}
558*b1cdbd2cSJim Jagielski 			while(xCursor->next());
559*b1cdbd2cSJim Jagielski 		}
560*b1cdbd2cSJim Jagielski 	}
561*b1cdbd2cSJim Jagielski 	catch(const Exception&)
562*b1cdbd2cSJim Jagielski 	{
563*b1cdbd2cSJim Jagielski         DBG_UNHANDLED_EXCEPTION();
564*b1cdbd2cSJim Jagielski 	}
565*b1cdbd2cSJim Jagielski 	return aRet;
566*b1cdbd2cSJim Jagielski }
567*b1cdbd2cSJim Jagielski /*-- 17.11.99 12:51:39---------------------------------------------------
568*b1cdbd2cSJim Jagielski 
569*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
getElementNames(void)570*b1cdbd2cSJim Jagielski Sequence< rtl::OUString > BibliographyLoader::getElementNames(void) throw ( RuntimeException )
571*b1cdbd2cSJim Jagielski {
572*b1cdbd2cSJim Jagielski 	Sequence< rtl::OUString > aRet(10);
573*b1cdbd2cSJim Jagielski 	int nRealNameCount = 0;
574*b1cdbd2cSJim Jagielski 	try
575*b1cdbd2cSJim Jagielski 	{
576*b1cdbd2cSJim Jagielski 		Reference< XResultSet >  xCursor(GetDataCursor());
577*b1cdbd2cSJim Jagielski 		Reference< sdb::XColumn >  xIdColumn(GetIdentifierColumn());
578*b1cdbd2cSJim Jagielski 		if (xIdColumn.is()) // implies xCursor.is()
579*b1cdbd2cSJim Jagielski 		{
580*b1cdbd2cSJim Jagielski 			do
581*b1cdbd2cSJim Jagielski 			{
582*b1cdbd2cSJim Jagielski 				rtl::OUString sTemp = xIdColumn->getString();
583*b1cdbd2cSJim Jagielski 				if (sTemp.getLength() && !xIdColumn->wasNull())
584*b1cdbd2cSJim Jagielski 				{
585*b1cdbd2cSJim Jagielski 					int nLen = aRet.getLength();
586*b1cdbd2cSJim Jagielski                     if(nLen == nRealNameCount)
587*b1cdbd2cSJim Jagielski 						aRet.realloc(nLen + 10);
588*b1cdbd2cSJim Jagielski 					rtl::OUString* pArray = aRet.getArray();
589*b1cdbd2cSJim Jagielski 					pArray[nRealNameCount] = sTemp;
590*b1cdbd2cSJim Jagielski 					nRealNameCount++;
591*b1cdbd2cSJim Jagielski 				}
592*b1cdbd2cSJim Jagielski 			}
593*b1cdbd2cSJim Jagielski 			while (xCursor->next());
594*b1cdbd2cSJim Jagielski 		}
595*b1cdbd2cSJim Jagielski 	}
596*b1cdbd2cSJim Jagielski 	catch(const Exception&)
597*b1cdbd2cSJim Jagielski 	{
598*b1cdbd2cSJim Jagielski         DBG_UNHANDLED_EXCEPTION();
599*b1cdbd2cSJim Jagielski 	}
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski 	aRet.realloc(nRealNameCount);
602*b1cdbd2cSJim Jagielski 	return aRet;
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski /*-- 17.11.99 12:51:39---------------------------------------------------
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
hasByName(const rtl::OUString & rName)607*b1cdbd2cSJim Jagielski sal_Bool BibliographyLoader::hasByName(const rtl::OUString& rName) throw ( RuntimeException )
608*b1cdbd2cSJim Jagielski {
609*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
610*b1cdbd2cSJim Jagielski 	try
611*b1cdbd2cSJim Jagielski 	{
612*b1cdbd2cSJim Jagielski 		Reference< XResultSet >  xCursor = GetDataCursor();
613*b1cdbd2cSJim Jagielski 		Reference< sdb::XColumn >  xIdColumn = GetIdentifierColumn();
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski 		if (xIdColumn.is()) 	// implies xCursor.is()
616*b1cdbd2cSJim Jagielski 		{
617*b1cdbd2cSJim Jagielski 			do
618*b1cdbd2cSJim Jagielski 			{
619*b1cdbd2cSJim Jagielski 				rtl::OUString sCurrentId = xIdColumn->getString();
620*b1cdbd2cSJim Jagielski 				if (!xIdColumn->wasNull() && (rName.compareTo(sCurrentId) == COMPARE_EQUAL))
621*b1cdbd2cSJim Jagielski 				{
622*b1cdbd2cSJim Jagielski 					bRet = sal_True;
623*b1cdbd2cSJim Jagielski 					break;
624*b1cdbd2cSJim Jagielski 				}
625*b1cdbd2cSJim Jagielski 			}
626*b1cdbd2cSJim Jagielski 			while(xCursor->next());
627*b1cdbd2cSJim Jagielski 		}
628*b1cdbd2cSJim Jagielski 	}
629*b1cdbd2cSJim Jagielski 	catch(const Exception&)
630*b1cdbd2cSJim Jagielski 	{
631*b1cdbd2cSJim Jagielski         DBG_UNHANDLED_EXCEPTION();
632*b1cdbd2cSJim Jagielski 	}
633*b1cdbd2cSJim Jagielski 	return bRet;
634*b1cdbd2cSJim Jagielski }
635*b1cdbd2cSJim Jagielski /*-- 17.11.99 12:51:39---------------------------------------------------
636*b1cdbd2cSJim Jagielski 
637*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
getElementType(void)638*b1cdbd2cSJim Jagielski Type  BibliographyLoader::getElementType(void) throw ( RuntimeException )
639*b1cdbd2cSJim Jagielski {
640*b1cdbd2cSJim Jagielski 	return ::getCppuType((Sequence<PropertyValue>*)0);
641*b1cdbd2cSJim Jagielski }
642*b1cdbd2cSJim Jagielski /*-- 17.11.99 12:51:40---------------------------------------------------
643*b1cdbd2cSJim Jagielski 
644*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
hasElements(void)645*b1cdbd2cSJim Jagielski sal_Bool BibliographyLoader::hasElements(void) throw ( RuntimeException )
646*b1cdbd2cSJim Jagielski {
647*b1cdbd2cSJim Jagielski 	Reference< XResultSet >  xCursor = GetDataCursor();
648*b1cdbd2cSJim Jagielski 	Reference< XNameAccess >  xColumns = GetDataColumns();
649*b1cdbd2cSJim Jagielski 	return xColumns.is() && (xColumns->getElementNames().getLength() != 0);
650*b1cdbd2cSJim Jagielski }
651*b1cdbd2cSJim Jagielski 
652*b1cdbd2cSJim Jagielski /*-- 07.12.99 14:28:39---------------------------------------------------
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
getPropertySetInfo(void)655*b1cdbd2cSJim Jagielski Reference< XPropertySetInfo >  BibliographyLoader::getPropertySetInfo(void) throw
656*b1cdbd2cSJim Jagielski 											( RuntimeException )
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski     static SfxItemPropertyMapEntry aBibProps_Impl[] =
659*b1cdbd2cSJim Jagielski 	{
660*b1cdbd2cSJim Jagielski 		{ MAP_CHAR_LEN("BibliographyDataFieldNames"), 0, &::getCppuType((Sequence<PropertyValue>*)0), PropertyAttribute::READONLY, 0},
661*b1cdbd2cSJim Jagielski 		{0,0,0,0,0,0}
662*b1cdbd2cSJim Jagielski 	};
663*b1cdbd2cSJim Jagielski 	static Reference< XPropertySetInfo >  xRet =
664*b1cdbd2cSJim Jagielski 		SfxItemPropertySet(aBibProps_Impl).getPropertySetInfo();
665*b1cdbd2cSJim Jagielski 	return xRet;
666*b1cdbd2cSJim Jagielski }
667*b1cdbd2cSJim Jagielski /*-- 07.12.99 14:28:39---------------------------------------------------
668*b1cdbd2cSJim Jagielski 
669*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
setPropertyValue(const rtl::OUString &,const Any &)670*b1cdbd2cSJim Jagielski void BibliographyLoader::setPropertyValue(const rtl::OUString& /*PropertyName*/,
671*b1cdbd2cSJim Jagielski 										const Any& /*aValue*/)
672*b1cdbd2cSJim Jagielski 	throw( UnknownPropertyException, PropertyVetoException,
673*b1cdbd2cSJim Jagielski 		IllegalArgumentException, WrappedTargetException, RuntimeException)
674*b1cdbd2cSJim Jagielski {
675*b1cdbd2cSJim Jagielski 	throw UnknownPropertyException();
676*b1cdbd2cSJim Jagielski 	//no changeable properties
677*b1cdbd2cSJim Jagielski }
678*b1cdbd2cSJim Jagielski /*-- 07.12.99 14:28:39---------------------------------------------------
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
getPropertyValue(const rtl::OUString & rPropertyName)681*b1cdbd2cSJim Jagielski Any BibliographyLoader::getPropertyValue(const rtl::OUString& rPropertyName)
682*b1cdbd2cSJim Jagielski 	throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
683*b1cdbd2cSJim Jagielski {
684*b1cdbd2cSJim Jagielski 	Any aRet;
685*b1cdbd2cSJim Jagielski 	static const sal_uInt16 aInternalMapping[] =
686*b1cdbd2cSJim Jagielski 	{
687*b1cdbd2cSJim Jagielski 		IDENTIFIER_POS			   , // BibliographyDataField_IDENTIFIER
688*b1cdbd2cSJim Jagielski 		AUTHORITYTYPE_POS		   , // BibliographyDataField_BIBILIOGRAPHIC_TYPE
689*b1cdbd2cSJim Jagielski 		ADDRESS_POS 			   , // BibliographyDataField_ADDRESS
690*b1cdbd2cSJim Jagielski 		ANNOTE_POS				   , // BibliographyDataField_ANNOTE
691*b1cdbd2cSJim Jagielski 		AUTHOR_POS				   , // BibliographyDataField_AUTHOR
692*b1cdbd2cSJim Jagielski 		BOOKTITLE_POS			   , // BibliographyDataField_BOOKTITLE
693*b1cdbd2cSJim Jagielski 		CHAPTER_POS 			   , // BibliographyDataField_CHAPTER
694*b1cdbd2cSJim Jagielski 		EDITION_POS 			   , // BibliographyDataField_EDITION
695*b1cdbd2cSJim Jagielski 		EDITOR_POS				   , // BibliographyDataField_EDITOR
696*b1cdbd2cSJim Jagielski 		HOWPUBLISHED_POS		   , // BibliographyDataField_HOWPUBLISHED
697*b1cdbd2cSJim Jagielski 		INSTITUTION_POS 		   , // BibliographyDataField_INSTITUTION
698*b1cdbd2cSJim Jagielski 		JOURNAL_POS 			   , // BibliographyDataField_JOURNAL
699*b1cdbd2cSJim Jagielski 		MONTH_POS				   , // BibliographyDataField_MONTH
700*b1cdbd2cSJim Jagielski 		NOTE_POS				   , // BibliographyDataField_NOTE
701*b1cdbd2cSJim Jagielski 		NUMBER_POS				   , // BibliographyDataField_NUMBER
702*b1cdbd2cSJim Jagielski 		ORGANIZATIONS_POS		   , // BibliographyDataField_ORGANIZATIONS
703*b1cdbd2cSJim Jagielski 		PAGES_POS				   , // BibliographyDataField_PAGES
704*b1cdbd2cSJim Jagielski 		PUBLISHER_POS			   , // BibliographyDataField_PUBLISHER
705*b1cdbd2cSJim Jagielski 		SCHOOL_POS				   , // BibliographyDataField_SCHOOL
706*b1cdbd2cSJim Jagielski 		SERIES_POS				   , // BibliographyDataField_SERIES
707*b1cdbd2cSJim Jagielski 		TITLE_POS				   , // BibliographyDataField_TITLE
708*b1cdbd2cSJim Jagielski 		REPORTTYPE_POS			   , // BibliographyDataField_REPORT_TYPE
709*b1cdbd2cSJim Jagielski 		VOLUME_POS				   , // BibliographyDataField_VOLUME
710*b1cdbd2cSJim Jagielski 		YEAR_POS				   , // BibliographyDataField_YEAR
711*b1cdbd2cSJim Jagielski 		URL_POS 				   , // BibliographyDataField_URL
712*b1cdbd2cSJim Jagielski 		CUSTOM1_POS 			   , // BibliographyDataField_CUSTOM1
713*b1cdbd2cSJim Jagielski 		CUSTOM2_POS 			   , // BibliographyDataField_CUSTOM2
714*b1cdbd2cSJim Jagielski 		CUSTOM3_POS 			   , // BibliographyDataField_CUSTOM3
715*b1cdbd2cSJim Jagielski 		CUSTOM4_POS 			   , // BibliographyDataField_CUSTOM4
716*b1cdbd2cSJim Jagielski 		CUSTOM5_POS 			   , // BibliographyDataField_CUSTOM5
717*b1cdbd2cSJim Jagielski 		ISBN_POS					//BibliographyDataField_ISBN
718*b1cdbd2cSJim Jagielski 	};
719*b1cdbd2cSJim Jagielski 	if(C2U("BibliographyDataFieldNames") == rPropertyName)
720*b1cdbd2cSJim Jagielski 	{
721*b1cdbd2cSJim Jagielski 		Sequence<PropertyValue> aSeq(COLUMN_COUNT);
722*b1cdbd2cSJim Jagielski 		PropertyValue* pArray = aSeq.getArray();
723*b1cdbd2cSJim Jagielski 		BibConfig* pConfig = BibModul::GetConfig();
724*b1cdbd2cSJim Jagielski 		for(sal_uInt16 i = 0; i <= text::BibliographyDataField::ISBN ; i++)
725*b1cdbd2cSJim Jagielski 		{
726*b1cdbd2cSJim Jagielski 			pArray[i].Name = pConfig->GetDefColumnName(aInternalMapping[i]);
727*b1cdbd2cSJim Jagielski 			pArray[i].Value <<= (sal_Int16) i;
728*b1cdbd2cSJim Jagielski 		}
729*b1cdbd2cSJim Jagielski 		aRet.setValue(&aSeq, ::getCppuType((Sequence<PropertyValue>*)0));
730*b1cdbd2cSJim Jagielski 	}
731*b1cdbd2cSJim Jagielski 	else
732*b1cdbd2cSJim Jagielski 		throw UnknownPropertyException();
733*b1cdbd2cSJim Jagielski 	return aRet;
734*b1cdbd2cSJim Jagielski }
735*b1cdbd2cSJim Jagielski /*-- 07.12.99 14:28:40---------------------------------------------------
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
addPropertyChangeListener(const rtl::OUString &,const Reference<XPropertyChangeListener> &)738*b1cdbd2cSJim Jagielski void BibliographyLoader::addPropertyChangeListener(
739*b1cdbd2cSJim Jagielski 		const rtl::OUString& /*PropertyName*/, const Reference< XPropertyChangeListener > & /*aListener*/)
740*b1cdbd2cSJim Jagielski 		throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
741*b1cdbd2cSJim Jagielski {
742*b1cdbd2cSJim Jagielski 	//no bound properties
743*b1cdbd2cSJim Jagielski }
744*b1cdbd2cSJim Jagielski /*-- 07.12.99 14:28:40---------------------------------------------------
745*b1cdbd2cSJim Jagielski 
746*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
removePropertyChangeListener(const rtl::OUString &,const Reference<XPropertyChangeListener> &)747*b1cdbd2cSJim Jagielski void BibliographyLoader::removePropertyChangeListener(
748*b1cdbd2cSJim Jagielski 		const rtl::OUString& /*PropertyName*/, const Reference< XPropertyChangeListener > & /*aListener*/)
749*b1cdbd2cSJim Jagielski 		throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
750*b1cdbd2cSJim Jagielski {
751*b1cdbd2cSJim Jagielski 	//no bound properties
752*b1cdbd2cSJim Jagielski }
753*b1cdbd2cSJim Jagielski /*-- 07.12.99 14:28:40---------------------------------------------------
754*b1cdbd2cSJim Jagielski 
755*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
addVetoableChangeListener(const rtl::OUString &,const Reference<XVetoableChangeListener> &)756*b1cdbd2cSJim Jagielski void BibliographyLoader::addVetoableChangeListener(
757*b1cdbd2cSJim Jagielski 	const rtl::OUString& /*PropertyName*/, const Reference< XVetoableChangeListener > & /*aListener*/)
758*b1cdbd2cSJim Jagielski 	throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski 	//no vetoable properties
761*b1cdbd2cSJim Jagielski }
762*b1cdbd2cSJim Jagielski /*-- 07.12.99 14:28:40---------------------------------------------------
763*b1cdbd2cSJim Jagielski 
764*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
removeVetoableChangeListener(const rtl::OUString &,const Reference<XVetoableChangeListener> &)765*b1cdbd2cSJim Jagielski void BibliographyLoader::removeVetoableChangeListener(
766*b1cdbd2cSJim Jagielski 	const rtl::OUString& /*PropertyName*/, const Reference< XVetoableChangeListener > & /*aListener*/)
767*b1cdbd2cSJim Jagielski 	throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
768*b1cdbd2cSJim Jagielski {
769*b1cdbd2cSJim Jagielski 	//no vetoable properties
770*b1cdbd2cSJim Jagielski }
771*b1cdbd2cSJim Jagielski 
772*b1cdbd2cSJim Jagielski 
773*b1cdbd2cSJim Jagielski 
774