| /************************************************************** |
| * |
| * 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_TABLECONNECTIONDATA_HXX |
| #include "TableConnectionData.hxx" |
| #endif |
| #ifndef _TOOLS_DEBUG_HXX |
| #include <tools/debug.hxx> |
| #endif |
| #ifndef _COMPHELPER_STLTYPES_HXX_ |
| #include <comphelper/stl_types.hxx> |
| #endif |
| |
| using namespace dbaui; |
| using namespace comphelper; |
| //================================================================== |
| // class OTableConnectionData |
| //================================================================== |
| DBG_NAME(OTableConnectionData) |
| //------------------------------------------------------------------------ |
| OTableConnectionData::OTableConnectionData() |
| { |
| DBG_CTOR(OTableConnectionData,NULL); |
| Init(); |
| } |
| // ----------------------------------------------------------------------------- |
| OTableConnectionData::OTableConnectionData(const TTableWindowData::value_type& _pReferencingTable |
| ,const TTableWindowData::value_type& _pReferencedTable |
| ,const String& rConnName ) |
| :m_pReferencingTable(_pReferencingTable) |
| ,m_pReferencedTable(_pReferencedTable) |
| ,m_aConnName( rConnName ) |
| { |
| DBG_CTOR(OTableConnectionData,NULL); |
| Init(); |
| } |
| //------------------------------------------------------------------------ |
| void OTableConnectionData::Init() |
| { |
| ////////////////////////////////////////////////////////////////////// |
| // LineDataList mit Defaults initialisieren |
| DBG_ASSERT(m_vConnLineData.size() == 0, "OTableConnectionData::Init() : nur mit leere Linienliste aufzurufen !"); |
| ResetConnLines(sal_True); |
| // das legt Defaults an |
| } |
| //------------------------------------------------------------------------ |
| OTableConnectionData::OTableConnectionData( const OTableConnectionData& rConnData ) |
| { |
| DBG_CTOR(OTableConnectionData,NULL); |
| *this = rConnData; |
| } |
| //------------------------------------------------------------------------ |
| void OTableConnectionData::CopyFrom(const OTableConnectionData& rSource) |
| { |
| *this = rSource; |
| // hier ziehe ich mich auf das (nicht-virtuelle) operator= zurueck, das nur meine Members kopiert |
| } |
| |
| //------------------------------------------------------------------------ |
| OTableConnectionData::~OTableConnectionData() |
| { |
| DBG_DTOR(OTableConnectionData,NULL); |
| // LineDataList loeschen |
| OConnectionLineDataVec().swap(m_vConnLineData); |
| //ResetConnLines(sal_False); |
| } |
| |
| //------------------------------------------------------------------------ |
| OTableConnectionData& OTableConnectionData::operator=( const OTableConnectionData& rConnData ) |
| { |
| if (&rConnData == this) |
| return *this; |
| |
| m_pReferencingTable = rConnData.m_pReferencingTable; |
| m_pReferencedTable = rConnData.m_pReferencedTable; |
| m_aConnName = rConnData.GetConnName(); |
| |
| // clear line list |
| ResetConnLines(sal_False); |
| |
| // und kopieren |
| OConnectionLineDataVec* pLineData = const_cast<OTableConnectionData*>(&rConnData)->GetConnLineDataList(); |
| |
| OConnectionLineDataVec::const_iterator aIter = pLineData->begin(); |
| OConnectionLineDataVec::const_iterator aEnd = pLineData->end(); |
| for(;aIter != aEnd;++aIter) |
| m_vConnLineData.push_back(new OConnectionLineData(**aIter)); |
| |
| return *this; |
| } |
| |
| //------------------------------------------------------------------------ |
| sal_Bool OTableConnectionData::SetConnLine( sal_uInt16 nIndex, const String& rSourceFieldName, const String& rDestFieldName ) |
| { |
| if (sal_uInt16(m_vConnLineData.size()) < nIndex) |
| return sal_False; |
| // == ist noch erlaubt, das entspricht einem Append |
| |
| if (m_vConnLineData.size() == nIndex) |
| return AppendConnLine(rSourceFieldName, rDestFieldName); |
| |
| OConnectionLineDataRef pConnLineData = m_vConnLineData[nIndex]; |
| DBG_ASSERT(pConnLineData != NULL, "OTableConnectionData::SetConnLine : habe ungueltiges LineData-Objekt"); |
| |
| pConnLineData->SetSourceFieldName( rSourceFieldName ); |
| pConnLineData->SetDestFieldName( rDestFieldName ); |
| |
| return sal_True; |
| } |
| |
| //------------------------------------------------------------------------ |
| sal_Bool OTableConnectionData::AppendConnLine( const ::rtl::OUString& rSourceFieldName, const ::rtl::OUString& rDestFieldName ) |
| { |
| OConnectionLineDataVec::iterator aIter = m_vConnLineData.begin(); |
| OConnectionLineDataVec::iterator aEnd = m_vConnLineData.end(); |
| for(;aIter != aEnd;++aIter) |
| { |
| if((*aIter)->GetDestFieldName() == rDestFieldName && (*aIter)->GetSourceFieldName() == rSourceFieldName) |
| break; |
| } |
| if(aIter == aEnd) |
| { |
| OConnectionLineDataRef pNew = new OConnectionLineData(rSourceFieldName, rDestFieldName); |
| if (!pNew.isValid()) |
| return sal_False; |
| |
| m_vConnLineData.push_back(pNew); |
| } |
| return sal_True; |
| } |
| |
| //------------------------------------------------------------------------ |
| void OTableConnectionData::ResetConnLines( sal_Bool /*bUseDefaults*/ ) |
| { |
| OConnectionLineDataVec().swap(m_vConnLineData); |
| } |
| |
| //------------------------------------------------------------------------ |
| OConnectionLineDataRef OTableConnectionData::CreateLineDataObj() |
| { |
| return new OConnectionLineData(); |
| } |
| |
| //------------------------------------------------------------------------ |
| OConnectionLineDataRef OTableConnectionData::CreateLineDataObj( const OConnectionLineData& rConnLineData ) |
| { |
| return new OConnectionLineData( rConnLineData ); |
| } |
| // ----------------------------------------------------------------------------- |
| OTableConnectionData* OTableConnectionData::NewInstance() const |
| { |
| return new OTableConnectionData(); |
| } |
| // ----------------------------------------------------------------------------- |
| void OTableConnectionData::normalizeLines() |
| { |
| // noch ein wenig Normalisierung auf den LineDatas : leere Lines vom Anfang an das Ende verschieben |
| sal_Int32 nCount = m_vConnLineData.size(); |
| for(sal_Int32 i=0;i<nCount;) |
| { |
| if(!m_vConnLineData[i]->GetSourceFieldName().getLength() || !m_vConnLineData[i]->GetDestFieldName().getLength()) |
| { |
| OConnectionLineDataRef pData = m_vConnLineData[i]; |
| m_vConnLineData.erase(m_vConnLineData.begin()+i); |
| m_vConnLineData.push_back(pData); |
| --nCount; |
| } |
| else |
| ++i; |
| } |
| } |
| // ----------------------------------------------------------------------------- |
| |
| |
| |
| |