sc/source/ui/dataprovider/csvdataprovider.cxx | 12 ++++++++++-- sc/source/ui/dataprovider/dataprovider.cxx | 11 ++++++----- sc/source/ui/dataprovider/datatransformation.cxx | 8 ++++---- sc/source/ui/dataprovider/htmldataprovider.cxx | 17 ++++++++++++++--- sc/source/ui/dataprovider/htmldataprovider.hxx | 1 + sc/source/ui/inc/dataprovider.hxx | 10 +++++++--- sc/source/ui/inc/datatransformation.hxx | 10 +++++----- 7 files changed, 47 insertions(+), 22 deletions(-)
New commits: commit 7299bdf02746d23de98d3237e47eba365a9657a5 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Tue Aug 15 19:58:04 2017 +0200 external data: apply the transformation still in the fetch thread Change-Id: I0509a569f47fcf838ea5c102e6fd0c6e765a0152 Reviewed-on: https://gerrit.libreoffice.org/41208 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/source/ui/dataprovider/csvdataprovider.cxx b/sc/source/ui/dataprovider/csvdataprovider.cxx index fb77b4096986..ed7302209896 100644 --- a/sc/source/ui/dataprovider/csvdataprovider.cxx +++ b/sc/source/ui/dataprovider/csvdataprovider.cxx @@ -8,6 +8,7 @@ */ #include <dataprovider.hxx> +#include "datatransformation.hxx" #include <stringutil.hxx> #if defined(_WIN32) @@ -64,11 +65,13 @@ public: namespace sc { -CSVFetchThread::CSVFetchThread(ScDocument& rDoc, const OUString& mrURL, Idle* pIdle): +CSVFetchThread::CSVFetchThread(ScDocument& rDoc, const OUString& mrURL, Idle* pIdle, + const std::vector<std::shared_ptr<sc::DataTransformation>>& rDataTransformations): Thread("CSV Fetch Thread"), mrDocument(rDoc), maURL (mrURL), mbTerminate(false), + maDataTransformations(rDataTransformations), mpIdle(pIdle) { maConfig.delimiters.push_back(','); @@ -107,6 +110,11 @@ void CSVFetchThread::execute() orcus::csv_parser<CSVHandler> parser(aBuffer.getStr(), aBuffer.getLength(), aHdl, maConfig); parser.parse(); + for (auto& itr : maDataTransformations) + { + itr->Transform(mrDocument); + } + SolarMutexGuard aGuard; mpIdle->Start(); } @@ -137,7 +145,7 @@ void CSVDataProvider::Import() mpDoc.reset(new ScDocument(SCDOCMODE_CLIP)); mpDoc->ResetClip(mpDocument, (SCTAB)0); - mxCSVFetchThread = new CSVFetchThread(*mpDoc, maURL, &maIdle); + mxCSVFetchThread = new CSVFetchThread(*mpDoc, maURL, &maIdle, mpDBDataManager->getDataTransformation()); mxCSVFetchThread->launch(); if (mbDeterministic) diff --git a/sc/source/ui/dataprovider/dataprovider.cxx b/sc/source/ui/dataprovider/dataprovider.cxx index 4efc255be20d..67f4394726e2 100644 --- a/sc/source/ui/dataprovider/dataprovider.cxx +++ b/sc/source/ui/dataprovider/dataprovider.cxx @@ -177,10 +177,6 @@ DataProvider::~DataProvider() void ScDBDataManager::WriteToDoc(ScDocument& rDoc) { // first apply all data transformations - for (auto& itr : maDataTransformations) - { - itr->Transform(rDoc); - } bool bShrunk = false; SCCOL nStartCol = 0; @@ -222,11 +218,16 @@ void ScDBDataManager::SetDatabase(const OUString& rDBName) maDBName = rDBName; } -void ScDBDataManager::AddDataTransformation(std::unique_ptr<sc::DataTransformation> mpDataTransformation) +void ScDBDataManager::AddDataTransformation(std::shared_ptr<sc::DataTransformation> mpDataTransformation) { maDataTransformations.push_back(std::move(mpDataTransformation)); } +const std::vector<std::shared_ptr<sc::DataTransformation>>& ScDBDataManager::getDataTransformation() const +{ + return maDataTransformations; +} + ScDBData* ScDBDataManager::getDBData() { ScDBData* pDBData = mpDoc->GetDBCollection()->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(maDBName)); diff --git a/sc/source/ui/dataprovider/datatransformation.cxx b/sc/source/ui/dataprovider/datatransformation.cxx index b4251dc7201a..15e30b0f13c7 100644 --- a/sc/source/ui/dataprovider/datatransformation.cxx +++ b/sc/source/ui/dataprovider/datatransformation.cxx @@ -35,7 +35,7 @@ ColumnRemoveTransformation::~ColumnRemoveTransformation() { } -void ColumnRemoveTransformation::Transform(ScDocument& rDoc) +void ColumnRemoveTransformation::Transform(ScDocument& rDoc) const { rDoc.DeleteCol(0, 0, MAXROW, 0, mnCol, 1); } @@ -46,7 +46,7 @@ SplitColumnTransformation::SplitColumnTransformation(SCCOL nCol, sal_Unicode cSe { } -void SplitColumnTransformation::Transform(ScDocument& rDoc) +void SplitColumnTransformation::Transform(ScDocument& rDoc) const { rDoc.InsertCol(0, 0, MAXROW, 0, mnCol + 1, 1); @@ -75,7 +75,7 @@ MergeColumnTransformation::MergeColumnTransformation(SCCOL nCol1, SCCOL nCol2, c { } -void MergeColumnTransformation::Transform(ScDocument& rDoc) +void MergeColumnTransformation::Transform(ScDocument& rDoc) const { SCROW nEndRow1 = getLastRow(rDoc, mnCol1); SCROW nEndRow2 = getLastRow(rDoc, mnCol2); @@ -96,7 +96,7 @@ SortTransformation::SortTransformation(const ScSortParam& rSortParam): { } -void SortTransformation::Transform(ScDocument& rDoc) +void SortTransformation::Transform(ScDocument& rDoc) const { rDoc.Sort(0, maSortParam, false, false, nullptr, nullptr); } diff --git a/sc/source/ui/dataprovider/htmldataprovider.cxx b/sc/source/ui/dataprovider/htmldataprovider.cxx index 61160c07d309..9ea070782ae4 100644 --- a/sc/source/ui/dataprovider/htmldataprovider.cxx +++ b/sc/source/ui/dataprovider/htmldataprovider.cxx @@ -8,6 +8,7 @@ */ #include "htmldataprovider.hxx" +#include "datatransformation.hxx" #include <salhelper/thread.hxx> #include <libxml/HTMLparser.h> @@ -25,6 +26,7 @@ class HTMLFetchThread : public salhelper::Thread ScDocument& mrDocument; OUString maURL; OUString maID; + const std::vector<std::shared_ptr<sc::DataTransformation>> maDataTransformations; Idle* mpIdle; @@ -34,16 +36,19 @@ class HTMLFetchThread : public salhelper::Thread void handleCell(xmlNodePtr pCell, SCROW nRow, SCCOL nCol); public: - HTMLFetchThread(ScDocument& rDoc, const OUString&, const OUString& rID, Idle* pIdle); + HTMLFetchThread(ScDocument& rDoc, const OUString&, const OUString& rID, Idle* pIdle, + const std::vector<std::shared_ptr<sc::DataTransformation>>& rTransformations); virtual void execute() override; }; -HTMLFetchThread::HTMLFetchThread(ScDocument& rDoc, const OUString& rURL, const OUString& rID, Idle* pIdle): +HTMLFetchThread::HTMLFetchThread(ScDocument& rDoc, const OUString& rURL, const OUString& rID, Idle* pIdle, + const std::vector<std::shared_ptr<sc::DataTransformation>>& rTransformations): salhelper::Thread("HTML Fetch Thread"), mrDocument(rDoc), maURL(rURL), maID(rID), + maDataTransformations(rTransformations), mpIdle(pIdle) { } @@ -196,6 +201,11 @@ void HTMLFetchThread::execute() xmlXPathFreeNodeSetList(pXmlXpathObj); xmlXPathFreeContext(pXmlXpathCtx); + for (auto& itr : maDataTransformations) + { + itr->Transform(mrDocument); + } + SolarMutexGuard aGuard; mpIdle->Start(); } @@ -228,7 +238,8 @@ void HTMLDataProvider::Import() mpDoc.reset(new ScDocument(SCDOCMODE_CLIP)); mpDoc->ResetClip(mpDocument, (SCTAB)0); - mxHTMLFetchThread = new HTMLFetchThread(*mpDoc, maURL, maID, &maIdle); + mxHTMLFetchThread = new HTMLFetchThread(*mpDoc, maURL, maID, &maIdle, + mpDBDataManager->getDataTransformation()); mxHTMLFetchThread->launch(); if (mbDeterministic) diff --git a/sc/source/ui/dataprovider/htmldataprovider.hxx b/sc/source/ui/dataprovider/htmldataprovider.hxx index adbcf37baf5e..36f3a95ece1c 100644 --- a/sc/source/ui/dataprovider/htmldataprovider.hxx +++ b/sc/source/ui/dataprovider/htmldataprovider.hxx @@ -15,6 +15,7 @@ namespace sc { class HTMLFetchThread; +class DataTransformation; class HTMLDataProvider : public DataProvider { diff --git a/sc/source/ui/inc/dataprovider.hxx b/sc/source/ui/inc/dataprovider.hxx index bd5561e382c8..474eff87a427 100644 --- a/sc/source/ui/inc/dataprovider.hxx +++ b/sc/source/ui/inc/dataprovider.hxx @@ -57,11 +57,14 @@ class CSVFetchThread : public salhelper::Thread orcus::csv::parser_config maConfig; + std::vector<std::shared_ptr<sc::DataTransformation>> maDataTransformations; + Idle* mpIdle; public: - CSVFetchThread(ScDocument& rDoc, const OUString&, Idle* pIdle); + CSVFetchThread(ScDocument& rDoc, const OUString&, Idle* pIdle, + const std::vector<std::shared_ptr<sc::DataTransformation>>& mrDataTransformations); virtual ~CSVFetchThread() override; void RequestTerminate(); @@ -134,7 +137,7 @@ class ScDBDataManager OUString maDBName; ScDocument* mpDoc; - std::vector<std::unique_ptr<sc::DataTransformation>> maDataTransformations; + std::vector<std::shared_ptr<sc::DataTransformation>> maDataTransformations; public: ScDBDataManager(const OUString& rDBName, bool bAllowResize, ScDocument* pDoc); @@ -142,7 +145,8 @@ public: void SetDatabase(const OUString& rDBName); - void AddDataTransformation(std::unique_ptr<sc::DataTransformation> mpDataTransformation); + void AddDataTransformation(std::shared_ptr<sc::DataTransformation> mpDataTransformation); + const std::vector<std::shared_ptr<sc::DataTransformation>>& getDataTransformation() const; ScDBData* getDBData(); diff --git a/sc/source/ui/inc/datatransformation.hxx b/sc/source/ui/inc/datatransformation.hxx index 7fef5ac472ae..88c81e345182 100644 --- a/sc/source/ui/inc/datatransformation.hxx +++ b/sc/source/ui/inc/datatransformation.hxx @@ -28,7 +28,7 @@ protected: public: virtual ~DataTransformation(); - virtual void Transform(ScDocument& rDoc) = 0; + virtual void Transform(ScDocument& rDoc) const = 0; }; @@ -41,7 +41,7 @@ public: ColumnRemoveTransformation(SCCOL nCol); virtual ~ColumnRemoveTransformation() override; - virtual void Transform(ScDocument& rDoc) override; + virtual void Transform(ScDocument& rDoc) const override; }; class SC_DLLPUBLIC SplitColumnTransformation : public DataTransformation @@ -52,7 +52,7 @@ class SC_DLLPUBLIC SplitColumnTransformation : public DataTransformation public: SplitColumnTransformation(SCCOL nCol, sal_Unicode cSeparator); - virtual void Transform(ScDocument& rDoc) override; + virtual void Transform(ScDocument& rDoc) const override; }; class SC_DLLPUBLIC MergeColumnTransformation : public DataTransformation @@ -64,7 +64,7 @@ class SC_DLLPUBLIC MergeColumnTransformation : public DataTransformation public: MergeColumnTransformation(SCCOL nCol1, SCCOL nCol2, const OUString& rMergeString); - virtual void Transform(ScDocument& rDoc) override; + virtual void Transform(ScDocument& rDoc) const override; }; class SC_DLLPUBLIC SortTransformation : public DataTransformation @@ -74,7 +74,7 @@ public: SortTransformation(const ScSortParam& rParam); - virtual void Transform(ScDocument& rDoc) override; + virtual void Transform(ScDocument& rDoc) const override; }; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits