xref: /trunk/main/connectivity/source/drivers/ado/AGroup.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_connectivity.hxx"
30 
31 #ifndef _CONNECTIVITY_ADO_GROUP_HXX_
32 #include "ado/AGroup.hxx"
33 #endif
34 #include "ado/AUsers.hxx"
35 #include <cppuhelper/typeprovider.hxx>
36 #include <comphelper/sequence.hxx>
37 #include <com/sun/star/sdbc/XRow.hpp>
38 #include <com/sun/star/sdbc/XResultSet.hpp>
39 #ifndef _CONNECTIVITY_ADO_BCONNECTION_HXX_
40 #include "ado/AConnection.hxx"
41 #endif
42 #include "TConnection.hxx"
43 
44 using namespace connectivity::ado;
45 using namespace com::sun::star::uno;
46 using namespace com::sun::star::lang;
47 using namespace com::sun::star::beans;
48 using namespace com::sun::star::sdbc;
49 using namespace com::sun::star::sdbcx;
50 
51 // -------------------------------------------------------------------------
52 void WpADOGroup::Create()
53 {
54     HRESULT         hr = -1;
55     ADOGroup* pGroup = NULL;
56     hr = CoCreateInstance(ADOS::CLSID_ADOGROUP_25,
57                           NULL,
58                           CLSCTX_INPROC_SERVER,
59                           ADOS::IID_ADOGROUP_25,
60                           (void**)&pGroup );
61 
62 
63     if( !FAILED( hr ) )
64     {
65         operator=( pGroup );
66         pGroup->Release();
67     }
68 }
69 // -------------------------------------------------------------------------
70 OAdoGroup::OAdoGroup(OCatalog* _pParent,sal_Bool _bCase,    ADOGroup* _pGroup) : OGroup_ADO(_bCase),m_pCatalog(_pParent)
71 {
72     construct();
73     if(_pGroup)
74         m_aGroup = WpADOGroup(_pGroup);
75     else
76         m_aGroup.Create();
77 
78 }
79 // -------------------------------------------------------------------------
80 OAdoGroup::OAdoGroup(OCatalog* _pParent,sal_Bool _bCase, const ::rtl::OUString& _Name) : OGroup_ADO(_Name,_bCase),m_pCatalog(_pParent)
81 {
82     construct();
83     m_aGroup.Create();
84     m_aGroup.put_Name(_Name);
85 }
86 // -------------------------------------------------------------------------
87 void OAdoGroup::refreshUsers()
88 {
89     TStringVector aVector;
90 
91     WpADOUsers aUsers = m_aGroup.get_Users();
92     aUsers.fillElementNames(aVector);
93 
94     if(m_pUsers)
95         m_pUsers->reFill(aVector);
96     else
97         m_pUsers = new OUsers(m_pCatalog,m_aMutex,aVector,aUsers,isCaseSensitive());
98 }
99 //--------------------------------------------------------------------------
100 Sequence< sal_Int8 > OAdoGroup::getUnoTunnelImplementationId()
101 {
102     static ::cppu::OImplementationId * pId = 0;
103     if (! pId)
104     {
105         ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
106         if (! pId)
107         {
108             static ::cppu::OImplementationId aId;
109             pId = &aId;
110         }
111     }
112     return pId->getImplementationId();
113 }
114 
115 // com::sun::star::lang::XUnoTunnel
116 //------------------------------------------------------------------
117 sal_Int64 OAdoGroup::getSomething( const Sequence< sal_Int8 > & rId ) throw (RuntimeException)
118 {
119     return (rId.getLength() == 16 && 0 == rtl_compareMemory(getUnoTunnelImplementationId().getConstArray(),  rId.getConstArray(), 16 ) )
120                 ? reinterpret_cast< sal_Int64 >( this )
121                 : OGroup_ADO::getSomething(rId);
122 }
123 
124 // -------------------------------------------------------------------------
125 void OAdoGroup::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)throw (Exception)
126 {
127     if(m_aGroup.IsValid())
128     {
129 
130         switch(nHandle)
131         {
132             case PROPERTY_ID_NAME:
133                 {
134                     ::rtl::OUString aVal;
135                     rValue >>= aVal;
136                     m_aGroup.put_Name(aVal);
137                 }
138                 break;
139         }
140     }
141 }
142 // -------------------------------------------------------------------------
143 void OAdoGroup::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const
144 {
145     if(m_aGroup.IsValid())
146     {
147         switch(nHandle)
148         {
149             case PROPERTY_ID_NAME:
150                 rValue <<= m_aGroup.get_Name();
151                 break;
152         }
153     }
154 }
155 // -------------------------------------------------------------------------
156 
157 sal_Int32 SAL_CALL OAdoGroup::getPrivileges( const ::rtl::OUString& objName, sal_Int32 objType ) throw(::com::sun::star::sdbc::SQLException, RuntimeException)
158 {
159     return MapRight(m_aGroup.GetPermissions(objName,MapObjectType(objType)));
160 }
161 // -------------------------------------------------------------------------
162 sal_Int32 SAL_CALL OAdoGroup::getGrantablePrivileges( const ::rtl::OUString& objName, sal_Int32 objType ) throw(::com::sun::star::sdbc::SQLException, RuntimeException)
163 {
164     RightsEnum eNum = m_aGroup.GetPermissions(objName,MapObjectType(objType));
165     if(eNum & adRightWithGrant)
166         return MapRight(eNum);
167     return 0;
168 }
169 // -------------------------------------------------------------------------
170 void SAL_CALL OAdoGroup::grantPrivileges( const ::rtl::OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) throw(::com::sun::star::sdbc::SQLException, RuntimeException)
171 {
172     m_aGroup.SetPermissions(objName,MapObjectType(objType),adAccessGrant,Map2Right(objPrivileges));
173 }
174 // -------------------------------------------------------------------------
175 void SAL_CALL OAdoGroup::revokePrivileges( const ::rtl::OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) throw(::com::sun::star::sdbc::SQLException, RuntimeException)
176 {
177     m_aGroup.SetPermissions(objName,MapObjectType(objType),adAccessDeny,Map2Right(objPrivileges));
178 }
179 
180 // -----------------------------------------------------------------------------
181 void SAL_CALL OAdoGroup::acquire() throw()
182 {
183     OGroup_ADO::acquire();
184 }
185 // -----------------------------------------------------------------------------
186 void SAL_CALL OAdoGroup::release() throw()
187 {
188     OGroup_ADO::release();
189 }
190 // -----------------------------------------------------------------------------
191 
192 
193