xref: /trunk/main/dbaccess/source/ui/tabledesign/TableRow.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_dbaccess.hxx"
30 #ifndef DBAUI_TABLEROW_HXX
31 #include "TableRow.hxx"
32 #endif
33 #ifndef _TOOLS_DEBUG_HXX
34 #include <tools/debug.hxx>
35 #endif
36 #ifndef DBAUI_FIELDDESCRIPTIONS_HXX
37 #include "FieldDescriptions.hxx"
38 #endif
39 #include <algorithm>
40 #include <comphelper/types.hxx>
41 
42 using namespace dbaui;
43 using namespace ::com::sun::star::sdbc;
44 using namespace ::com::sun::star::uno;
45 using namespace ::com::sun::star::beans;
46 
47 //========================================================================
48 // class OTableRow
49 //========================================================================
50 DBG_NAME(OTableRow)
51 //------------------------------------------------------------------------------
52 OTableRow::OTableRow()
53     :m_pActFieldDescr( NULL )
54     ,m_nPos( -1 )
55     ,m_bReadOnly( false )
56     ,m_bOwnsDescriptions(false)
57 {
58     DBG_CTOR(OTableRow,NULL);
59 }
60 //------------------------------------------------------------------------------
61 OTableRow::OTableRow(const Reference< XPropertySet >& xAffectedCol)
62     :m_pActFieldDescr( NULL )
63     ,m_nPos( -1 )
64     ,m_bReadOnly( false )
65     ,m_bOwnsDescriptions(true)
66 {
67     DBG_CTOR(OTableRow,NULL);
68     m_pActFieldDescr = new OFieldDescription(xAffectedCol);
69 }
70 //------------------------------------------------------------------------------
71 OTableRow::OTableRow( const OTableRow& rRow, long nPosition )
72     :m_pActFieldDescr(NULL)
73     ,m_nPos( nPosition )
74     ,m_bReadOnly(rRow.IsReadOnly())
75     ,m_bOwnsDescriptions(false)
76 {
77     DBG_CTOR(OTableRow,NULL);
78 
79     OFieldDescription* pSrcField = rRow.GetActFieldDescr();
80     if(pSrcField)
81     {
82         m_pActFieldDescr = new OFieldDescription(*pSrcField);
83         m_bOwnsDescriptions = true;
84     }
85 }
86 
87 //------------------------------------------------------------------------------
88 OTableRow::~OTableRow()
89 {
90     DBG_DTOR(OTableRow,NULL);
91     if(m_bOwnsDescriptions)
92         delete m_pActFieldDescr;
93 }
94 
95 //------------------------------------------------------------------------------
96 void OTableRow::SetPrimaryKey( sal_Bool bSet )
97 {
98     DBG_CHKTHIS(OTableRow,NULL);
99     if(m_pActFieldDescr)
100         m_pActFieldDescr->SetPrimaryKey(bSet);
101 }
102 // -----------------------------------------------------------------------------
103 sal_Bool OTableRow::IsPrimaryKey() const
104 {
105     DBG_CHKTHIS(OTableRow,NULL);
106     return m_pActFieldDescr && m_pActFieldDescr->IsPrimaryKey();
107 }
108 // -----------------------------------------------------------------------------
109 void OTableRow::SetFieldType( const TOTypeInfoSP& _pType, sal_Bool _bForce )
110 {
111     DBG_CHKTHIS(OTableRow,NULL);
112     if ( _pType.get() )
113     {
114         if( !m_pActFieldDescr )
115         {
116             m_pActFieldDescr = new OFieldDescription();
117             m_bOwnsDescriptions = true;
118         }
119         m_pActFieldDescr->FillFromTypeInfo(_pType,_bForce,sal_True);
120     }
121     else
122     {
123         delete m_pActFieldDescr;
124         m_pActFieldDescr = NULL;
125     }
126 }
127 // -----------------------------------------------------------------------------
128 namespace dbaui
129 {
130     // -----------------------------------------------------------------------------
131     SvStream& operator<<( SvStream& _rStr, const OTableRow& _rRow )
132     {
133         _rStr << _rRow.m_nPos;
134         OFieldDescription* pFieldDesc = _rRow.GetActFieldDescr();
135         if(pFieldDesc)
136         {
137             _rStr << (sal_Int32)1;
138             _rStr.WriteByteString(pFieldDesc->GetName());
139             _rStr.WriteByteString(pFieldDesc->GetDescription());
140             _rStr.WriteByteString(pFieldDesc->GetHelpText());
141             double nValue = 0.0;
142             Any aValue = pFieldDesc->GetControlDefault();
143             if ( aValue >>= nValue )
144             {
145                 _rStr << sal_Int32(1);
146                 _rStr << nValue;
147             }
148             else
149             {
150                 _rStr << sal_Int32(2);
151                 _rStr.WriteByteString(::comphelper::getString(aValue));
152             }
153 
154             _rStr << pFieldDesc->GetType();
155 
156             _rStr << pFieldDesc->GetPrecision();
157             _rStr << pFieldDesc->GetScale();
158             _rStr << pFieldDesc->GetIsNullable();
159             _rStr << pFieldDesc->GetFormatKey();
160             _rStr << (sal_Int32)pFieldDesc->GetHorJustify();
161             _rStr << sal_Int32(pFieldDesc->IsAutoIncrement() ? 1 : 0);
162             _rStr << sal_Int32(pFieldDesc->IsPrimaryKey() ? 1 : 0);
163             _rStr << sal_Int32(pFieldDesc->IsCurrency() ? 1 : 0);
164         } // if(pFieldDesc)
165         else
166             _rStr << (sal_Int32)0;
167         return _rStr;
168     }
169     // -----------------------------------------------------------------------------
170     SvStream& operator>>( SvStream& _rStr, OTableRow& _rRow )
171     {
172         _rStr >> _rRow.m_nPos;
173         sal_Int32 nValue = 0;
174         _rStr >> nValue;
175         if ( nValue )
176         {
177             OFieldDescription* pFieldDesc = new OFieldDescription();
178             _rRow.m_pActFieldDescr = pFieldDesc;
179             String sValue;
180             _rStr.ReadByteString(sValue);
181             pFieldDesc->SetName(sValue);
182 
183             _rStr.ReadByteString(sValue);
184             pFieldDesc->SetDescription(sValue);
185             _rStr.ReadByteString(sValue);
186             pFieldDesc->SetHelpText(sValue);
187 
188             _rStr >> nValue;
189             Any aControlDefault;
190             switch ( nValue )
191             {
192                 case 1:
193                 {
194                     double nControlDefault;
195                     _rStr >> nControlDefault;
196                     aControlDefault <<= nControlDefault;
197                     break;
198                 }
199                 case 2:
200                     _rStr.ReadByteString(sValue);
201                     aControlDefault <<= ::rtl::OUString(sValue);
202                     break;
203             }
204 
205             pFieldDesc->SetControlDefault(aControlDefault);
206 
207 
208             _rStr >> nValue;
209             pFieldDesc->SetTypeValue(nValue);
210 
211             _rStr >> nValue;
212             pFieldDesc->SetPrecision(nValue);
213             _rStr >> nValue;
214             pFieldDesc->SetScale(nValue);
215             _rStr >> nValue;
216             pFieldDesc->SetIsNullable(nValue);
217             _rStr >> nValue;
218             pFieldDesc->SetFormatKey(nValue);
219             _rStr >> nValue;
220             pFieldDesc->SetHorJustify((SvxCellHorJustify)nValue);
221 
222             _rStr >> nValue;
223             pFieldDesc->SetAutoIncrement(nValue != 0);
224             _rStr >> nValue;
225             pFieldDesc->SetPrimaryKey(nValue != 0);
226             _rStr >> nValue;
227             pFieldDesc->SetCurrency(nValue != 0);
228         }
229         return _rStr;
230     }
231     // -----------------------------------------------------------------------------
232 }
233 
234 
235 
236