Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions vuu/src/main/scala/org/finos/vuu/core/sort/SortCompares.scala
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,21 @@ object SortCompares {
}

def compareString(o1: RowData, o2: RowData, column: Column, direction: Char): Int = {
val c1 = o1.get(column).asInstanceOf[String]
val c2 = o2.get(column).asInstanceOf[String]
val c1 = getString(o1.get(column))
val c2 = getString(o2.get(column))

val resultIfAscending = c1.compareToIgnoreCase(c2)
switchSignIfDescending(resultIfAscending, direction = direction)
}

private def getString(value: Any): String = {
if (value == null) {
""
} else {
value.asInstanceOf[String]
}
}

def compareDouble(o1: RowData, o2: RowData, column: Column, direction: Char): Int = {
val c1 = o1.get(column).asInstanceOf[Double]
val c2 = o2.get(column).asInstanceOf[Double]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ class SortComparesTest extends AnyFeatureSpec with Matchers with BeforeAndAfterE
val rowData1 = RowWithData("id-2", Map("stringField" -> "XXX"))
val rowData2 = RowWithData("id-3", Map("stringField" -> "YYY"))
val rowData3 = RowWithData("id-1", Map("stringField" -> "ZZZ"))
val rowData4 = RowWithData("id-4", Map())
val rowData5 = RowWithData("id-5", Map())

val ascending = List(rowData1, rowData2, rowData3)
val unordered = List(rowData1, rowData3, rowData2)
Expand All @@ -31,13 +33,22 @@ class SortComparesTest extends AnyFeatureSpec with Matchers with BeforeAndAfterE

unordered.sorted(TestComparator.compare) shouldEqual ascending.reverse
}

Scenario("can sort null value") {
TestComparator.register((o1, o2) => SortCompares.compareString(o1, o2, col, 'A'))
val data = List(rowData4, rowData3, rowData5)
val sortedData = List(rowData4, rowData5, rowData3)
data.sorted(TestComparator.compare) shouldEqual sortedData
}
}

Feature("compareInt") {
val rowData1 = RowWithData("id-2", Map("intField" -> -10))
val rowData2 = RowWithData("id-3", Map("intField" -> 0))
val rowData3 = RowWithData("id-1", Map("intField" -> 7))
val rowData4 = RowWithData("id-4", Map("intField" -> 10))
val rowData5 = RowWithData("id-5", Map())
val rowData6 = RowWithData("id-6", Map())

val ascending = List(rowData1, rowData2, rowData3, rowData4)
val unordered = List(rowData1, rowData3, rowData4, rowData2)
Expand All @@ -54,13 +65,22 @@ class SortComparesTest extends AnyFeatureSpec with Matchers with BeforeAndAfterE

unordered.sorted(TestComparator.compare) shouldEqual ascending.reverse
}

Scenario("can sort null value") {
TestComparator.register((o1, o2) => SortCompares.compareInt(o1, o2, col, 'A'))
val data = List(rowData5, rowData3, rowData6)
val sortedData = List(rowData5, rowData6, rowData3)
data.sorted(TestComparator.compare) shouldEqual sortedData
}
}

Feature("compareLong") {
val rowData1 = RowWithData("id-2", Map("longField" -> -10L))
val rowData2 = RowWithData("id-3", Map("longField" -> 0L))
val rowData3 = RowWithData("id-1", Map("longField" -> 7L))
val rowData4 = RowWithData("id-4", Map("longField" -> 10L))
val rowData5 = RowWithData("id-5", Map())
val rowData6 = RowWithData("id-6", Map())

val ascending = List(rowData1, rowData2, rowData3, rowData4)
val unordered = List(rowData3, rowData1, rowData4, rowData2)
Expand All @@ -77,13 +97,22 @@ class SortComparesTest extends AnyFeatureSpec with Matchers with BeforeAndAfterE

unordered.sorted(TestComparator.compare) shouldEqual ascending.reverse
}

Scenario("can sort null value") {
TestComparator.register((o1, o2) => SortCompares.compareLong(o1, o2, col, 'A'))
val data = List(rowData5, rowData3, rowData6)
val sortedData = List(rowData5, rowData6, rowData3)
data.sorted(TestComparator.compare) shouldEqual sortedData
}
}

Feature("compareDouble") {
val rowData1 = RowWithData("id-2", Map("doubleField" -> -10.9))
val rowData2 = RowWithData("id-3", Map("doubleField" -> 0.0))
val rowData3 = RowWithData("id-1", Map("doubleField" -> 5.7))
val rowData4 = RowWithData("id-4", Map("doubleField" -> 5.71))
val rowData5 = RowWithData("id-5", Map())
val rowData6 = RowWithData("id-6", Map())

val ascending = List(rowData1, rowData2, rowData3, rowData4)
val unordered = List(rowData1, rowData3, rowData4, rowData2)
Expand All @@ -100,13 +129,22 @@ class SortComparesTest extends AnyFeatureSpec with Matchers with BeforeAndAfterE

unordered.sorted(TestComparator.compare) shouldEqual ascending.reverse
}

Scenario("can sort null value") {
TestComparator.register((o1, o2) => SortCompares.compareDouble(o1, o2, col, 'A'))
val data = List(rowData5, rowData3, rowData6)
val sortedData = List(rowData5, rowData6, rowData3)
data.sorted(TestComparator.compare) shouldEqual sortedData
}
}

Feature("compareChar") {
val rowData1 = RowWithData("id-2", Map("charField" -> '5'))
val rowData2 = RowWithData("id-3", Map("charField" -> 'A'))
val rowData3 = RowWithData("id-1", Map("charField" -> 'Z'))
val rowData4 = RowWithData("id-4", Map("charField" -> 'a'))
val rowData5 = RowWithData("id-5", Map())
val rowData6 = RowWithData("id-6", Map())

val ascending = List(rowData1, rowData2, rowData3, rowData4)
val unordered = List(rowData4, rowData1, rowData3, rowData2)
Expand All @@ -123,13 +161,20 @@ class SortComparesTest extends AnyFeatureSpec with Matchers with BeforeAndAfterE

unordered.sorted(TestComparator.compare) shouldEqual ascending.reverse
}

Scenario("can sort null value") {
TestComparator.register((o1, o2) => SortCompares.compareChar(o1, o2, col, 'A'))
val data = List(rowData5, rowData3, rowData6)
val sortedData = List(rowData5, rowData6, rowData3)
data.sorted(TestComparator.compare) shouldEqual sortedData
}
}

private def column(name: String): Column = SimpleColumn(name, -1, classOf[Any])

private object TestComparator extends Comparator[RowData] {
private type RowComparator = (RowData, RowData) => Int
private val dummyTestComparator: RowComparator = (_, _) => 0
private val dummyTestComparator: RowComparator = (_, _) => 0
private var testComparator: RowComparator = dummyTestComparator

override def compare(o1: RowData, o2: RowData): Int = testComparator(o1, o2)
Expand Down
Loading