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_dbui.hxx"
26 
27 #ifndef _DBAUI_SQLMESSAGE_HXX_
28 #include "sqlmessage.hxx"
29 #endif
30 #ifndef _DBAUI_UNOSQLMESSAGE_HXX_
31 #include "unosqlmessage.hxx"
32 #endif
33 #ifndef _DBU_REGHELPER_HXX_
34 #include "dbu_reghelper.hxx"
35 #endif
36 #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC
37 #include "dbustrings.hrc"
38 #endif
39 #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
40 #include <cppuhelper/typeprovider.hxx>
41 #endif
42 #ifndef _DBHELPER_DBEXCEPTION_HXX_
43 #include <connectivity/dbexception.hxx>
44 #endif
45 
46 using namespace dbaui;
47 using namespace dbtools;
48 
49 using namespace ::com::sun::star::sdbc;
50 using namespace ::com::sun::star::sdb;
51 
createRegistryInfo_OSQLMessageDialog()52 extern "C" void SAL_CALL createRegistryInfo_OSQLMessageDialog()
53 {
54 	static OMultiInstanceAutoRegistration< OSQLMessageDialog > aAutoRegistration;
55 }
56 
57 //.........................................................................
58 namespace dbaui
59 {
60 //.........................................................................
61 
62 	using namespace ::com::sun::star::uno;
63 	using namespace ::com::sun::star::lang;
64 	using namespace ::com::sun::star::beans;
65 
66 //=========================================================================
67 //-------------------------------------------------------------------------
OSQLMessageDialog(const Reference<XMultiServiceFactory> & _rxORB)68 OSQLMessageDialog::OSQLMessageDialog(const Reference< XMultiServiceFactory >& _rxORB)
69 	:OSQLMessageDialogBase(_rxORB)
70 {
71 	registerMayBeVoidProperty(PROPERTY_SQLEXCEPTION, PROPERTY_ID_SQLEXCEPTION, PropertyAttribute::TRANSIENT | PropertyAttribute::MAYBEVOID,
72 		&m_aException, ::getCppuType(static_cast<SQLException*>(NULL)));
73     registerProperty( PROPERTY_HELP_URL, PROPERTY_ID_HELP_URL, PropertyAttribute::TRANSIENT,
74         &m_sHelpURL, ::getCppuType( &m_sHelpURL ) );
75 }
76 
77 //-------------------------------------------------------------------------
getImplementationId()78 Sequence<sal_Int8> SAL_CALL OSQLMessageDialog::getImplementationId(  ) throw(RuntimeException)
79 {
80 	static ::cppu::OImplementationId aId;
81 	return aId.getImplementationId();
82 }
83 
84 //-------------------------------------------------------------------------
Create(const Reference<XMultiServiceFactory> & _rxFactory)85 Reference< XInterface > SAL_CALL OSQLMessageDialog::Create(const Reference< XMultiServiceFactory >& _rxFactory)
86 {
87 	return *(new OSQLMessageDialog(_rxFactory));
88 }
89 
90 //-------------------------------------------------------------------------
getImplementationName()91 ::rtl::OUString SAL_CALL OSQLMessageDialog::getImplementationName() throw(RuntimeException)
92 {
93 	return getImplementationName_Static();
94 }
95 
96 //-------------------------------------------------------------------------
getImplementationName_Static()97 ::rtl::OUString OSQLMessageDialog::getImplementationName_Static() throw(RuntimeException)
98 {
99 	return ::rtl::OUString::createFromAscii("org.openoffice.comp.dbu.OSQLMessageDialog");
100 }
101 
102 //-------------------------------------------------------------------------
getSupportedServiceNames()103 ::comphelper::StringSequence SAL_CALL OSQLMessageDialog::getSupportedServiceNames() throw(RuntimeException)
104 {
105 	return getSupportedServiceNames_Static();
106 }
107 
108 //-------------------------------------------------------------------------
getSupportedServiceNames_Static()109 ::comphelper::StringSequence OSQLMessageDialog::getSupportedServiceNames_Static() throw(RuntimeException)
110 {
111 	::comphelper::StringSequence aSupported(1);
112 	aSupported.getArray()[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdb.ErrorMessageDialog");
113 	return aSupported;
114 }
115 
116 //-------------------------------------------------------------------------
convertFastPropertyValue(Any & _rConvertedValue,Any & _rOldValue,sal_Int32 _nHandle,const Any & _rValue)117 sal_Bool SAL_CALL OSQLMessageDialog::convertFastPropertyValue( Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue) throw(IllegalArgumentException)
118 {
119 	switch (_nHandle)
120 	{
121 		case PROPERTY_ID_SQLEXCEPTION:
122 		{
123 			SQLExceptionInfo aInfo(_rValue);
124 			if (!aInfo.isValid())
125 				throw IllegalArgumentException();
126 
127 			_rOldValue = m_aException;
128 			_rConvertedValue = aInfo.get();
129 
130 			return sal_True;
131 				// always assume "modified", don't bother with with comparing the two values
132 		}
133 		default:
134 			return OSQLMessageDialogBase::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue);
135 	}
136 }
137 
138 //-------------------------------------------------------------------------
getPropertySetInfo()139 Reference<XPropertySetInfo>  SAL_CALL OSQLMessageDialog::getPropertySetInfo() throw(RuntimeException)
140 {
141 	Reference<XPropertySetInfo>  xInfo( createPropertySetInfo( getInfoHelper() ) );
142 	return xInfo;
143 }
144 
145 //-------------------------------------------------------------------------
getInfoHelper()146 ::cppu::IPropertyArrayHelper& OSQLMessageDialog::getInfoHelper()
147 {
148 	return *const_cast<OSQLMessageDialog*>(this)->getArrayHelper();
149 }
150 
151 //------------------------------------------------------------------------------
createArrayHelper() const152 ::cppu::IPropertyArrayHelper* OSQLMessageDialog::createArrayHelper( ) const
153 {
154 	Sequence< Property > aProps;
155 	describeProperties(aProps);
156 	return new ::cppu::OPropertyArrayHelper(aProps);
157 }
158 
159 //------------------------------------------------------------------------------
createDialog(Window * _pParent)160 Dialog*	OSQLMessageDialog::createDialog(Window* _pParent)
161 {
162 	if ( m_aException.hasValue() )
163         return new OSQLMessageBox( _pParent, SQLExceptionInfo( m_aException ), WB_OK | WB_DEF_OK, m_sHelpURL );
164 
165 	OSL_ENSURE(sal_False, "OSQLMessageDialog::createDialog : You should use the SQLException property to specify the error to display!");
166 	return new OSQLMessageBox(_pParent, SQLException());
167 }
168 
169 //.........................................................................
170 }	// namespace dbaui
171 //.........................................................................
172 
173