Skip to content

Commit

Permalink
help util: replace jtextutils with asciitable (#415)
Browse files Browse the repository at this point in the history
* main motivation: jtextutils became vulnerable because the domain
`com.massisframework` is available for sale...
* also: asciitable is better IMO
  • Loading branch information
mpollmeier authored Feb 6, 2024
1 parent 7392bb8 commit ad8bec6
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import overflowdb.{Node, toPropertyKeyOps}

import scala.collection.mutable
import overflowdb.traversal._
import overflowdb.traversal.help.Table

import scala.jdk.CollectionConverters.IteratorHasAsScala

Expand Down Expand Up @@ -199,7 +200,7 @@ class TraversalTests extends AnyWordSpec with ExampleGraphSetup {
thingTraversalHelpVerbose should include(".label") // step from ElementTraversal
thingTraversalHelpVerbose should include(".out") // step from NodeTraversal
thingTraversalHelpVerbose should include(
"just like name, but in a different package"
"name2 (just like name"
) // step from helptest.SimpleDomainTraversal
}

Expand Down Expand Up @@ -236,3 +237,17 @@ class TraversalTests extends AnyWordSpec with ExampleGraphSetup {
}

}

object TableStyleTester {
def main(args: Array[String]): Unit = {
println(
Table(
Seq("column a", "column b"),
Seq(
Seq("abc 1", "bde 1"),
Seq("abc 2", "bde 2")
)
).render()
)
}
}
4 changes: 2 additions & 2 deletions traversal/build.sbt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name := "overflowdb-traversal"

libraryDependencies ++= Seq(
"net.oneandone.reflections8" % "reflections8" % "0.11.7", // go back to reflections once 0.9.13 is released
"com.massisframework" % "j-text-utils" % "0.3.4"
"net.oneandone.reflections8" % "reflections8" % "0.11.7",
"de.vandermeer" % "asciitable" % "0.3.2",
)
36 changes: 22 additions & 14 deletions traversal/src/main/scala/overflowdb/traversal/help/Table.scala
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
package overflowdb.traversal.help

import dnl.utils.text.table.TextTable
import java.io.{ByteArrayOutputStream, PrintStream}
import java.nio.charset.StandardCharsets
import scala.util.Using
import de.vandermeer.asciitable.AsciiTable
import de.vandermeer.asciithemes.TA_GridThemes
import de.vandermeer.skb.interfaces.transformers.textformat.TextAlignment

case class Table(columnNames: Iterable[String], rows: Iterable[Iterable[String]]) {
import scala.jdk.CollectionConverters.SeqHasAsJava

lazy val render: String = {
Using.Manager { use =>
val charset = StandardCharsets.UTF_8
val baos = use(new ByteArrayOutputStream)
val ps = use(new PrintStream(baos, true, charset.name))
val rowsAsArray = rows.map(_.map(_ + " ").toArray.asInstanceOf[Array[Object]]).toArray
new TextTable(columnNames.toArray, rowsAsArray).printTable(ps, 0)
new String(baos.toByteArray, charset)
}.get
case class Table(columnNames: Seq[String], rows: Seq[Seq[String]]) {

def render(width: Int = 120): String = {
if (columnNames.isEmpty && rows.isEmpty) {
""
} else {
val table = new AsciiTable()
table.addRule()
table.addRow(columnNames.asJava)
table.addRule()
if (rows.nonEmpty) {
rows.map(_.asJava).foreach(table.addRow)
}
table.addRule()
table.getContext.setGridTheme(TA_GridThemes.FULL)
table.setTextAlignment(TextAlignment.LEFT)
table.render(width)
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class TraversalHelp(searchPackages: DocSearchPackages) {
)

s"""Available steps for ${elementClass.getSimpleName}:
|${table.render}
|${table.render()}
|""".stripMargin
}

Expand All @@ -73,7 +73,7 @@ class TraversalHelp(searchPackages: DocSearchPackages) {
)

s"""Available starter steps:
|${table.render}
|${table.render()}
|""".stripMargin
}

Expand Down

0 comments on commit ad8bec6

Please sign in to comment.