196de5490SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 396de5490SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 496de5490SAndrew Rist * or more contributor license agreements. See the NOTICE file 596de5490SAndrew Rist * distributed with this work for additional information 696de5490SAndrew Rist * regarding copyright ownership. The ASF licenses this file 796de5490SAndrew Rist * to you under the Apache License, Version 2.0 (the 896de5490SAndrew Rist * "License"); you may not use this file except in compliance 996de5490SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 1196de5490SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 1396de5490SAndrew Rist * Unless required by applicable law or agreed to in writing, 1496de5490SAndrew Rist * software distributed under the License is distributed on an 1596de5490SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1696de5490SAndrew Rist * KIND, either express or implied. See the License for the 1796de5490SAndrew Rist * specific language governing permissions and limitations 1896de5490SAndrew Rist * under the License. 19cdf0e10cSrcweir * 2096de5490SAndrew Rist *************************************************************/ 2196de5490SAndrew Rist 2296de5490SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25*b63233d8Sdamjan #include "precompiled_dbui.hxx" 26cdf0e10cSrcweir #ifndef DBAUI_TABLECONNECTIONDATA_HXX 27cdf0e10cSrcweir #include "TableConnectionData.hxx" 28cdf0e10cSrcweir #endif 29cdf0e10cSrcweir #ifndef _TOOLS_DEBUG_HXX 30cdf0e10cSrcweir #include <tools/debug.hxx> 31cdf0e10cSrcweir #endif 32cdf0e10cSrcweir #ifndef _COMPHELPER_STLTYPES_HXX_ 33cdf0e10cSrcweir #include <comphelper/stl_types.hxx> 34cdf0e10cSrcweir #endif 35cdf0e10cSrcweir 36cdf0e10cSrcweir using namespace dbaui; 37cdf0e10cSrcweir using namespace comphelper; 38cdf0e10cSrcweir //================================================================== 39cdf0e10cSrcweir // class OTableConnectionData 40cdf0e10cSrcweir //================================================================== 41cdf0e10cSrcweir DBG_NAME(OTableConnectionData) 42cdf0e10cSrcweir //------------------------------------------------------------------------ 43cdf0e10cSrcweir OTableConnectionData::OTableConnectionData() 44cdf0e10cSrcweir { 45cdf0e10cSrcweir DBG_CTOR(OTableConnectionData,NULL); 46cdf0e10cSrcweir Init(); 47cdf0e10cSrcweir } 48cdf0e10cSrcweir // ----------------------------------------------------------------------------- 49cdf0e10cSrcweir OTableConnectionData::OTableConnectionData(const TTableWindowData::value_type& _pReferencingTable 50cdf0e10cSrcweir ,const TTableWindowData::value_type& _pReferencedTable 51cdf0e10cSrcweir ,const String& rConnName ) 52cdf0e10cSrcweir :m_pReferencingTable(_pReferencingTable) 53cdf0e10cSrcweir ,m_pReferencedTable(_pReferencedTable) 54cdf0e10cSrcweir ,m_aConnName( rConnName ) 55cdf0e10cSrcweir { 56cdf0e10cSrcweir DBG_CTOR(OTableConnectionData,NULL); 57cdf0e10cSrcweir Init(); 58cdf0e10cSrcweir } 59cdf0e10cSrcweir //------------------------------------------------------------------------ 60cdf0e10cSrcweir void OTableConnectionData::Init() 61cdf0e10cSrcweir { 62cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 63cdf0e10cSrcweir // LineDataList mit Defaults initialisieren 64cdf0e10cSrcweir DBG_ASSERT(m_vConnLineData.size() == 0, "OTableConnectionData::Init() : nur mit leere Linienliste aufzurufen !"); 65cdf0e10cSrcweir ResetConnLines(sal_True); 66cdf0e10cSrcweir // das legt Defaults an 67cdf0e10cSrcweir } 68cdf0e10cSrcweir //------------------------------------------------------------------------ 69cdf0e10cSrcweir OTableConnectionData::OTableConnectionData( const OTableConnectionData& rConnData ) 70cdf0e10cSrcweir { 71cdf0e10cSrcweir DBG_CTOR(OTableConnectionData,NULL); 72cdf0e10cSrcweir *this = rConnData; 73cdf0e10cSrcweir } 74cdf0e10cSrcweir //------------------------------------------------------------------------ 75cdf0e10cSrcweir void OTableConnectionData::CopyFrom(const OTableConnectionData& rSource) 76cdf0e10cSrcweir { 77cdf0e10cSrcweir *this = rSource; 78cdf0e10cSrcweir // hier ziehe ich mich auf das (nicht-virtuelle) operator= zurueck, das nur meine Members kopiert 79cdf0e10cSrcweir } 80cdf0e10cSrcweir 81cdf0e10cSrcweir //------------------------------------------------------------------------ 82cdf0e10cSrcweir OTableConnectionData::~OTableConnectionData() 83cdf0e10cSrcweir { 84cdf0e10cSrcweir DBG_DTOR(OTableConnectionData,NULL); 85cdf0e10cSrcweir // LineDataList loeschen 86cdf0e10cSrcweir OConnectionLineDataVec().swap(m_vConnLineData); 87cdf0e10cSrcweir //ResetConnLines(sal_False); 88cdf0e10cSrcweir } 89cdf0e10cSrcweir 90cdf0e10cSrcweir //------------------------------------------------------------------------ 91cdf0e10cSrcweir OTableConnectionData& OTableConnectionData::operator=( const OTableConnectionData& rConnData ) 92cdf0e10cSrcweir { 93cdf0e10cSrcweir if (&rConnData == this) 94cdf0e10cSrcweir return *this; 95cdf0e10cSrcweir 96cdf0e10cSrcweir m_pReferencingTable = rConnData.m_pReferencingTable; 97cdf0e10cSrcweir m_pReferencedTable = rConnData.m_pReferencedTable; 98cdf0e10cSrcweir m_aConnName = rConnData.GetConnName(); 99cdf0e10cSrcweir 100cdf0e10cSrcweir // clear line list 101cdf0e10cSrcweir ResetConnLines(sal_False); 102cdf0e10cSrcweir 103cdf0e10cSrcweir // und kopieren 104cdf0e10cSrcweir OConnectionLineDataVec* pLineData = const_cast<OTableConnectionData*>(&rConnData)->GetConnLineDataList(); 105cdf0e10cSrcweir 106cdf0e10cSrcweir OConnectionLineDataVec::const_iterator aIter = pLineData->begin(); 107cdf0e10cSrcweir OConnectionLineDataVec::const_iterator aEnd = pLineData->end(); 108cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 109cdf0e10cSrcweir m_vConnLineData.push_back(new OConnectionLineData(**aIter)); 110cdf0e10cSrcweir 111cdf0e10cSrcweir return *this; 112cdf0e10cSrcweir } 113cdf0e10cSrcweir 114cdf0e10cSrcweir //------------------------------------------------------------------------ 115cdf0e10cSrcweir sal_Bool OTableConnectionData::SetConnLine( sal_uInt16 nIndex, const String& rSourceFieldName, const String& rDestFieldName ) 116cdf0e10cSrcweir { 117cdf0e10cSrcweir if (sal_uInt16(m_vConnLineData.size()) < nIndex) 118cdf0e10cSrcweir return sal_False; 119cdf0e10cSrcweir // == ist noch erlaubt, das entspricht einem Append 120cdf0e10cSrcweir 121cdf0e10cSrcweir if (m_vConnLineData.size() == nIndex) 122cdf0e10cSrcweir return AppendConnLine(rSourceFieldName, rDestFieldName); 123cdf0e10cSrcweir 124cdf0e10cSrcweir OConnectionLineDataRef pConnLineData = m_vConnLineData[nIndex]; 125cdf0e10cSrcweir DBG_ASSERT(pConnLineData != NULL, "OTableConnectionData::SetConnLine : habe ungueltiges LineData-Objekt"); 126cdf0e10cSrcweir 127cdf0e10cSrcweir pConnLineData->SetSourceFieldName( rSourceFieldName ); 128cdf0e10cSrcweir pConnLineData->SetDestFieldName( rDestFieldName ); 129cdf0e10cSrcweir 130cdf0e10cSrcweir return sal_True; 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir //------------------------------------------------------------------------ 134cdf0e10cSrcweir sal_Bool OTableConnectionData::AppendConnLine( const ::rtl::OUString& rSourceFieldName, const ::rtl::OUString& rDestFieldName ) 135cdf0e10cSrcweir { 136cdf0e10cSrcweir OConnectionLineDataVec::iterator aIter = m_vConnLineData.begin(); 137cdf0e10cSrcweir OConnectionLineDataVec::iterator aEnd = m_vConnLineData.end(); 138cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 139cdf0e10cSrcweir { 140cdf0e10cSrcweir if((*aIter)->GetDestFieldName() == rDestFieldName && (*aIter)->GetSourceFieldName() == rSourceFieldName) 141cdf0e10cSrcweir break; 142cdf0e10cSrcweir } 143cdf0e10cSrcweir if(aIter == aEnd) 144cdf0e10cSrcweir { 145cdf0e10cSrcweir OConnectionLineDataRef pNew = new OConnectionLineData(rSourceFieldName, rDestFieldName); 146cdf0e10cSrcweir if (!pNew.isValid()) 147cdf0e10cSrcweir return sal_False; 148cdf0e10cSrcweir 149cdf0e10cSrcweir m_vConnLineData.push_back(pNew); 150cdf0e10cSrcweir } 151cdf0e10cSrcweir return sal_True; 152cdf0e10cSrcweir } 153cdf0e10cSrcweir 154cdf0e10cSrcweir //------------------------------------------------------------------------ 155cdf0e10cSrcweir void OTableConnectionData::ResetConnLines( sal_Bool /*bUseDefaults*/ ) 156cdf0e10cSrcweir { 157cdf0e10cSrcweir OConnectionLineDataVec().swap(m_vConnLineData); 158cdf0e10cSrcweir } 159cdf0e10cSrcweir 160cdf0e10cSrcweir //------------------------------------------------------------------------ 161cdf0e10cSrcweir OConnectionLineDataRef OTableConnectionData::CreateLineDataObj() 162cdf0e10cSrcweir { 163cdf0e10cSrcweir return new OConnectionLineData(); 164cdf0e10cSrcweir } 165cdf0e10cSrcweir 166cdf0e10cSrcweir //------------------------------------------------------------------------ 167cdf0e10cSrcweir OConnectionLineDataRef OTableConnectionData::CreateLineDataObj( const OConnectionLineData& rConnLineData ) 168cdf0e10cSrcweir { 169cdf0e10cSrcweir return new OConnectionLineData( rConnLineData ); 170cdf0e10cSrcweir } 171cdf0e10cSrcweir // ----------------------------------------------------------------------------- 172cdf0e10cSrcweir OTableConnectionData* OTableConnectionData::NewInstance() const 173cdf0e10cSrcweir { 174cdf0e10cSrcweir return new OTableConnectionData(); 175cdf0e10cSrcweir } 176cdf0e10cSrcweir // ----------------------------------------------------------------------------- 177cdf0e10cSrcweir void OTableConnectionData::normalizeLines() 178cdf0e10cSrcweir { 179cdf0e10cSrcweir // noch ein wenig Normalisierung auf den LineDatas : leere Lines vom Anfang an das Ende verschieben 180cdf0e10cSrcweir sal_Int32 nCount = m_vConnLineData.size(); 181cdf0e10cSrcweir for(sal_Int32 i=0;i<nCount;) 182cdf0e10cSrcweir { 183cdf0e10cSrcweir if(!m_vConnLineData[i]->GetSourceFieldName().getLength() || !m_vConnLineData[i]->GetDestFieldName().getLength()) 184cdf0e10cSrcweir { 185cdf0e10cSrcweir OConnectionLineDataRef pData = m_vConnLineData[i]; 186cdf0e10cSrcweir m_vConnLineData.erase(m_vConnLineData.begin()+i); 187cdf0e10cSrcweir m_vConnLineData.push_back(pData); 188cdf0e10cSrcweir --nCount; 189cdf0e10cSrcweir } 190cdf0e10cSrcweir else 191cdf0e10cSrcweir ++i; 192cdf0e10cSrcweir } 193cdf0e10cSrcweir } 194cdf0e10cSrcweir // ----------------------------------------------------------------------------- 195cdf0e10cSrcweir 196cdf0e10cSrcweir 197cdf0e10cSrcweir 198cdf0e10cSrcweir 199