[Libreoffice-commits] core.git: sc/qa sc/source
Vikas
vikasmahato0 at gmail.com
Fri Jul 6 06:41:14 UTC 2018
sc/qa/unit/datatransformation_test.cxx | 70 ++++++++++++++++
sc/source/ui/dataprovider/datatransformation.cxx | 95 +++++++++++++++++++++++
sc/source/ui/inc/datatransformation.hxx | 16 +++
3 files changed, 180 insertions(+), 1 deletion(-)
New commits:
commit 483ca6e6bb9c920cc96212c7042e13fbbb5fa767
Author: Vikas <vikasmahato0 at gmail.com>
Date: Mon Jul 2 01:29:09 2018 +0530
Added text transformations for external data
- Uppercase, which sets all text in the selected columns to upper case.
- Lowercase, which sets all text in the selected columns to lower case.
- Capitalize Each Word, which makes all words in the selected column start with a capital letter and sets all subsequent letters in a word to lower case.
- Trim, which removes any leading or trailing whitespace characters from text.
Change-Id: I6da37bec9d820887a155da57d0b0c75f36e8ac69
Reviewed-on: https://gerrit.libreoffice.org/56780
Tested-by: Jenkins
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
diff --git a/sc/qa/unit/datatransformation_test.cxx b/sc/qa/unit/datatransformation_test.cxx
index d4c0e11a2642..8cec163eeb43 100644
--- a/sc/qa/unit/datatransformation_test.cxx
+++ b/sc/qa/unit/datatransformation_test.cxx
@@ -31,11 +31,19 @@ public:
void testColumnRemove();
void testColumnSplit();
void testColumnMerge();
+ void testTextToLower();
+ void testTextToUpper();
+ void testTextCapitalize();
+ void testTextTrim();
CPPUNIT_TEST_SUITE(ScDataTransformationTest);
CPPUNIT_TEST(testColumnRemove);
CPPUNIT_TEST(testColumnSplit);
CPPUNIT_TEST(testColumnMerge);
+ CPPUNIT_TEST(testTextToLower);
+ CPPUNIT_TEST(testTextToUpper);
+ CPPUNIT_TEST(testTextCapitalize);
+ CPPUNIT_TEST(testTextTrim);
CPPUNIT_TEST_SUITE_END();
private:
@@ -123,6 +131,68 @@ void ScDataTransformationTest::testColumnMerge()
}
}
+void ScDataTransformationTest::testTextToLower()
+{
+ m_pDoc->SetString(2, 0, 0, "Berlin");
+ m_pDoc->SetString(2, 1, 0, "Brussels");
+ m_pDoc->SetString(2, 2, 0, "Paris");
+ m_pDoc->SetString(2, 3, 0, "Peking");
+
+ sc::TextTransformation aTransform(2, sc::TEXT_TRANSFORM_TYPE::TO_LOWER);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("berlin"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("brussels"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("paris"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("peking"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testTextToUpper()
+{
+ m_pDoc->SetString(2, 0, 0, "Berlin");
+ m_pDoc->SetString(2, 1, 0, "Brussels");
+ m_pDoc->SetString(2, 2, 0, "Paris");
+ m_pDoc->SetString(2, 3, 0, "Peking");
+
+ sc::TextTransformation aTransform(2, sc::TEXT_TRANSFORM_TYPE::TO_UPPER);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("BERLIN"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("BRUSSELS"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("PARIS"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("PEKING"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testTextCapitalize()
+{
+ m_pDoc->SetString(2, 0, 0, "hello woRlD");
+ m_pDoc->SetString(2, 1, 0, "qUe vA");
+ m_pDoc->SetString(2, 2, 0, "si tu la ves");
+ m_pDoc->SetString(2, 3, 0, "cUaNdO mE EnAmOro");
+
+ sc::TextTransformation aTransform(2, sc::TEXT_TRANSFORM_TYPE::CAPITALIZE);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello World"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Que Va"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Si Tu La Ves"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Cuando Me Enamoro"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testTextTrim()
+{
+ m_pDoc->SetString(2, 0, 0, " Berlin");
+ m_pDoc->SetString(2, 1, 0, "Brussels ");
+ m_pDoc->SetString(2, 2, 0, " Paris ");
+
+ sc::TextTransformation aTransform(2, sc::TEXT_TRANSFORM_TYPE::TRIM);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Berlin"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Brussels"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Paris"), m_pDoc->GetString(2, 2, 0));
+}
+
ScDataTransformationTest::ScDataTransformationTest() :
ScBootstrapFixture( "sc/qa/unit/data/dataprovider" ),
m_pDoc(nullptr)
diff --git a/sc/source/ui/dataprovider/datatransformation.cxx b/sc/source/ui/dataprovider/datatransformation.cxx
index 09370a8e82c7..84df313aacdc 100644
--- a/sc/source/ui/dataprovider/datatransformation.cxx
+++ b/sc/source/ui/dataprovider/datatransformation.cxx
@@ -173,6 +173,101 @@ ScSortParam SortTransformation::getSortParam() const
return maSortParam;
}
+TextTransformation::TextTransformation(SCCOL nCol, const TEXT_TRANSFORM_TYPE rType):
+ mnCol(nCol),
+ maType(rType)
+{
+}
+
+void TextTransformation::Transform(ScDocument& rDoc) const
+{
+ SCROW nEndRow = getLastRow(rDoc, mnCol);
+
+ switch (maType)
+ {
+ case TEXT_TRANSFORM_TYPE::TO_LOWER:
+ {
+ for (SCROW nRow = 0; nRow <= nEndRow; ++nRow)
+ {
+ CellType eType;
+ rDoc.GetCellType(mnCol, nRow, 0, eType);
+ if (eType == CELLTYPE_STRING)
+ {
+ OUString aStr = rDoc.GetString(mnCol, nRow, 0);
+ rDoc.SetString(mnCol, nRow, 0, ScGlobal::pCharClass->lowercase(aStr));
+ }
+ }
+ }
+ break;
+ case TEXT_TRANSFORM_TYPE::TO_UPPER:
+ {
+ for (SCROW nRow = 0; nRow <= nEndRow; ++nRow)
+ {
+ CellType eType;
+ rDoc.GetCellType(mnCol, nRow, 0, eType);
+ if (eType == CELLTYPE_STRING)
+ {
+ OUString aStr = rDoc.GetString(mnCol, nRow, 0);
+ rDoc.SetString(mnCol, nRow, 0, ScGlobal::pCharClass->uppercase(aStr));
+ }
+ }
+ }
+ break;
+ case TEXT_TRANSFORM_TYPE::CAPITALIZE:
+ {
+ sal_Unicode separator = sal_Unicode(U' ');
+ for (SCROW nRow = 0; nRow <= nEndRow; ++nRow)
+ {
+ CellType eType;
+ rDoc.GetCellType(mnCol, nRow, 0, eType);
+ if (eType == CELLTYPE_STRING)
+ {
+ OUString aStr = rDoc.GetString(mnCol, nRow, 0);
+
+ sal_Int32 length = aStr.getLength();
+
+ if(length != 0)
+ aStr = aStr.replaceAt(0, 1, ScGlobal::pCharClass->uppercase(OUString(aStr[0])));
+
+ for (sal_Int32 i = 1; i < length; i++){
+ if (aStr[i-1] == separator)
+ {
+ aStr = aStr.replaceAt(i, 1, ScGlobal::pCharClass->uppercase(OUString(aStr[i])));
+ }
+ else
+ {
+ aStr = aStr.replaceAt(i, 1, ScGlobal::pCharClass->lowercase(OUString(aStr[i])));
+ }
+ }
+ rDoc.SetString(mnCol, nRow, 0, aStr);
+ }
+ }
+ }
+ break;
+ case TEXT_TRANSFORM_TYPE::TRIM:
+ {
+ for (SCROW nRow = 0; nRow <= nEndRow; ++nRow)
+ {
+ CellType eType;
+ rDoc.GetCellType(mnCol, nRow, 0, eType);
+ if (eType == CELLTYPE_STRING)
+ {
+ OUString aStr = rDoc.GetString(mnCol, nRow, 0);
+ rDoc.SetString(mnCol, nRow, 0, aStr.trim());
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+TransformationType TextTransformation::getTransformationType() const
+{
+ return TransformationType::TEXT_TRANSFORMATION;
+}
+
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/datatransformation.hxx b/sc/source/ui/inc/datatransformation.hxx
index 8dbae9600384..522c039851ae 100644
--- a/sc/source/ui/inc/datatransformation.hxx
+++ b/sc/source/ui/inc/datatransformation.hxx
@@ -26,9 +26,12 @@ enum class TransformationType
MERGE_TRANSFORMATION,
SPLIT_TRANSFORMATION,
DELETE_TRANSFORMATION,
- SORT_TRANSFORMATION
+ SORT_TRANSFORMATION,
+ TEXT_TRANSFORMATION
};
+enum class TEXT_TRANSFORM_TYPE { TO_LOWER, TO_UPPER, CAPITALIZE, TRIM };
+
class SC_DLLPUBLIC DataTransformation
{
protected:
@@ -96,6 +99,17 @@ public:
ScSortParam getSortParam() const;
};
+class SC_DLLPUBLIC TextTransformation : public DataTransformation
+{
+ SCCOL mnCol;
+ TEXT_TRANSFORM_TYPE maType;
+
+ public:
+ TextTransformation(SCCOL nCol, const TEXT_TRANSFORM_TYPE rType);
+ virtual void Transform(ScDocument& rDoc) const override;
+ virtual TransformationType getTransformationType() const override;
+};
+
}
#endif
More information about the Libreoffice-commits
mailing list