blob: 2b524b9e4ae854150b8ce2f158714ec8b0a69c22 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_dbaccess.hxx"
#ifndef DBAUI_TABLEROW_HXX
#include "TableRow.hxx"
#endif
#ifndef _TOOLS_DEBUG_HXX
#include <tools/debug.hxx>
#endif
#ifndef DBAUI_FIELDDESCRIPTIONS_HXX
#include "FieldDescriptions.hxx"
#endif
#include <algorithm>
#include <comphelper/types.hxx>
using namespace dbaui;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
//========================================================================
// class OTableRow
//========================================================================
DBG_NAME(OTableRow)
//------------------------------------------------------------------------------
OTableRow::OTableRow()
:m_pActFieldDescr( NULL )
,m_nPos( -1 )
,m_bReadOnly( false )
,m_bOwnsDescriptions(false)
{
DBG_CTOR(OTableRow,NULL);
}
//------------------------------------------------------------------------------
OTableRow::OTableRow(const Reference< XPropertySet >& xAffectedCol)
:m_pActFieldDescr( NULL )
,m_nPos( -1 )
,m_bReadOnly( false )
,m_bOwnsDescriptions(true)
{
DBG_CTOR(OTableRow,NULL);
m_pActFieldDescr = new OFieldDescription(xAffectedCol);
}
//------------------------------------------------------------------------------
OTableRow::OTableRow( const OTableRow& rRow, long nPosition )
:m_pActFieldDescr(NULL)
,m_nPos( nPosition )
,m_bReadOnly(rRow.IsReadOnly())
,m_bOwnsDescriptions(false)
{
DBG_CTOR(OTableRow,NULL);
OFieldDescription* pSrcField = rRow.GetActFieldDescr();
if(pSrcField)
{
m_pActFieldDescr = new OFieldDescription(*pSrcField);
m_bOwnsDescriptions = true;
}
}
//------------------------------------------------------------------------------
OTableRow::~OTableRow()
{
DBG_DTOR(OTableRow,NULL);
if(m_bOwnsDescriptions)
delete m_pActFieldDescr;
}
//------------------------------------------------------------------------------
void OTableRow::SetPrimaryKey( sal_Bool bSet )
{
DBG_CHKTHIS(OTableRow,NULL);
if(m_pActFieldDescr)
m_pActFieldDescr->SetPrimaryKey(bSet);
}
// -----------------------------------------------------------------------------
sal_Bool OTableRow::IsPrimaryKey() const
{
DBG_CHKTHIS(OTableRow,NULL);
return m_pActFieldDescr && m_pActFieldDescr->IsPrimaryKey();
}
// -----------------------------------------------------------------------------
void OTableRow::SetFieldType( const TOTypeInfoSP& _pType, sal_Bool _bForce )
{
DBG_CHKTHIS(OTableRow,NULL);
if ( _pType.get() )
{
if( !m_pActFieldDescr )
{
m_pActFieldDescr = new OFieldDescription();
m_bOwnsDescriptions = true;
}
m_pActFieldDescr->FillFromTypeInfo(_pType,_bForce,sal_True);
}
else
{
delete m_pActFieldDescr;
m_pActFieldDescr = NULL;
}
}
// -----------------------------------------------------------------------------
namespace dbaui
{
// -----------------------------------------------------------------------------
SvStream& operator<<( SvStream& _rStr, const OTableRow& _rRow )
{
_rStr << _rRow.m_nPos;
OFieldDescription* pFieldDesc = _rRow.GetActFieldDescr();
if(pFieldDesc)
{
_rStr << (sal_Int32)1;
_rStr.WriteByteString(pFieldDesc->GetName());
_rStr.WriteByteString(pFieldDesc->GetDescription());
_rStr.WriteByteString(pFieldDesc->GetHelpText());
double nValue = 0.0;
Any aValue = pFieldDesc->GetControlDefault();
if ( aValue >>= nValue )
{
_rStr << sal_Int32(1);
_rStr << nValue;
}
else
{
_rStr << sal_Int32(2);
_rStr.WriteByteString(::comphelper::getString(aValue));
}
_rStr << pFieldDesc->GetType();
_rStr << pFieldDesc->GetPrecision();
_rStr << pFieldDesc->GetScale();
_rStr << pFieldDesc->GetIsNullable();
_rStr << pFieldDesc->GetFormatKey();
_rStr << (sal_Int32)pFieldDesc->GetHorJustify();
_rStr << sal_Int32(pFieldDesc->IsAutoIncrement() ? 1 : 0);
_rStr << sal_Int32(pFieldDesc->IsPrimaryKey() ? 1 : 0);
_rStr << sal_Int32(pFieldDesc->IsCurrency() ? 1 : 0);
} // if(pFieldDesc)
else
_rStr << (sal_Int32)0;
return _rStr;
}
// -----------------------------------------------------------------------------
SvStream& operator>>( SvStream& _rStr, OTableRow& _rRow )
{
_rStr >> _rRow.m_nPos;
sal_Int32 nValue = 0;
_rStr >> nValue;
if ( nValue )
{
OFieldDescription* pFieldDesc = new OFieldDescription();
_rRow.m_pActFieldDescr = pFieldDesc;
String sValue;
_rStr.ReadByteString(sValue);
pFieldDesc->SetName(sValue);
_rStr.ReadByteString(sValue);
pFieldDesc->SetDescription(sValue);
_rStr.ReadByteString(sValue);
pFieldDesc->SetHelpText(sValue);
_rStr >> nValue;
Any aControlDefault;
switch ( nValue )
{
case 1:
{
double nControlDefault;
_rStr >> nControlDefault;
aControlDefault <<= nControlDefault;
break;
}
case 2:
_rStr.ReadByteString(sValue);
aControlDefault <<= ::rtl::OUString(sValue);
break;
}
pFieldDesc->SetControlDefault(aControlDefault);
_rStr >> nValue;
pFieldDesc->SetTypeValue(nValue);
_rStr >> nValue;
pFieldDesc->SetPrecision(nValue);
_rStr >> nValue;
pFieldDesc->SetScale(nValue);
_rStr >> nValue;
pFieldDesc->SetIsNullable(nValue);
_rStr >> nValue;
pFieldDesc->SetFormatKey(nValue);
_rStr >> nValue;
pFieldDesc->SetHorJustify((SvxCellHorJustify)nValue);
_rStr >> nValue;
pFieldDesc->SetAutoIncrement(nValue != 0);
_rStr >> nValue;
pFieldDesc->SetPrimaryKey(nValue != 0);
_rStr >> nValue;
pFieldDesc->SetCurrency(nValue != 0);
}
return _rStr;
}
// -----------------------------------------------------------------------------
}