summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2017-08-15 19:58:04 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2017-08-16 16:16:41 +0200
commit7299bdf02746d23de98d3237e47eba365a9657a5 (patch)
tree9b7c0538a940ed531e7ccd2c9c3c119aa10bbe72 /sc
parent17192ce5588f84192d1dd0d963622bda48566fdc (diff)
external data: apply the transformation still in the fetch thread
Change-Id: I0509a569f47fcf838ea5c102e6fd0c6e765a0152 Reviewed-on: https://gerrit.libreoffice.org/41208 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/dataprovider/csvdataprovider.cxx12
-rw-r--r--sc/source/ui/dataprovider/dataprovider.cxx11
-rw-r--r--sc/source/ui/dataprovider/datatransformation.cxx8
-rw-r--r--sc/source/ui/dataprovider/htmldataprovider.cxx17
-rw-r--r--sc/source/ui/dataprovider/htmldataprovider.hxx1
-rw-r--r--sc/source/ui/inc/dataprovider.hxx10
-rw-r--r--sc/source/ui/inc/datatransformation.hxx10
7 files changed, 47 insertions, 22 deletions
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;
};
}