Skip to content

Commit

Permalink
prnt command: added options oneRowTable, structsOnTable and columns
Browse files Browse the repository at this point in the history
  • Loading branch information
mattirn committed Mar 10, 2020
1 parent 6e61b97 commit eedaff3
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 7 deletions.
51 changes: 44 additions & 7 deletions builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -951,7 +951,7 @@ private List<AttributedString> highlight(Map<String, Object> options, Object obj
Collection<?> collection = obj instanceof Collection<?> ? (Collection<?>)obj
: Arrays.asList((Object[])obj);
if (!collection.isEmpty()) {
if (collection.size() == 1) {
if (collection.size() == 1 && !options.containsKey("oneRowTable")) {
Object elem = collection.iterator().next();
if (elem instanceof Map) {
out = highlightMap(keyToString((Map<Object, Object>)elem), width);
Expand All @@ -965,10 +965,28 @@ private List<AttributedString> highlight(Map<String, Object> options, Object obj
boolean convert = canConvert(elem);
if (elem instanceof Map || convert) {
Map<String, Object> map = convert ? engine.toMap(elem): keyToString((Map<Object, Object>)elem);
List<String> header = map.keySet().stream().collect(Collectors.toList());
List<String> _header = null;
if (options.containsKey("columns")) {
_header = (List<String>)options.get("columns");
} else {
_header = map.keySet().stream().collect(Collectors.toList());
}
List<String> header = new ArrayList<>();
List<Integer> columns = new ArrayList<>();
for (int i = 0; i < header.size(); i++) {
columns.add(header.get(i).length() + 1);
for (int i = 0; i < _header.size(); i++) {
if (!map.containsKey(_header.get(i))) {
continue;
}
Object val = map.get(_header.get(i));
if (options.containsKey("columns")) {
if (!((List<String>)options.get("columns")).contains(_header.get(i))) {
continue;
}
} else if (!options.containsKey("structsOnTable") && (val == null || !simpleObject(val))) {
continue;
}
header.add(_header.get(i));
columns.add(_header.get(i).length() + 1);
}
for (Object o : collection) {
for (int i = 0; i < header.size(); i++) {
Expand Down Expand Up @@ -1060,10 +1078,17 @@ private List<AttributedString> highlight(Map<String, Object> options, Object obj
return out;
}

private boolean collectionObject(Object obj) {
return obj instanceof Map || obj instanceof Iterable || obj instanceof Object[] || obj instanceof Collection;
}

private boolean simpleObject(Object obj) {
return obj instanceof Number || obj instanceof String || obj instanceof Date || obj instanceof File
|| obj instanceof Boolean || obj instanceof Enum;
}

private boolean canConvert(Object obj) {
if (obj instanceof Number || obj instanceof Map || obj instanceof Iterable || obj instanceof String
|| obj instanceof Date || obj instanceof File || obj instanceof Boolean || obj instanceof Object[]
|| obj instanceof Collection || obj instanceof Enum) {
if (simpleObject(obj) || collectionObject(obj)) {
return false;
}
return true;
Expand Down Expand Up @@ -1142,7 +1167,10 @@ private Object prnt(Builtins.CommandInput input) {
"prnt - print object",
"Usage: prnt [OPTIONS] object",
" -? --help Displays command help",
" --columns=COLUMNS,... Display given columns on table",
" --oneRowTable Display one row data on table",
" -r --rownum Display table row numbers",
" --structsOnTable Display structs and lists on table",
" -s --style=STYLE Use nanorc STYLE",
" -w --width=WIDTH Display width (default terminal width)"
};
Expand All @@ -1161,6 +1189,15 @@ private Object prnt(Builtins.CommandInput input) {
if (opt.isSet("rownum")) {
options.put("rownum", true);
}
if (opt.isSet("oneRowTable")) {
options.put("oneRowTable", true);
}
if (opt.isSet("structsOnTable")) {
options.put("structsOnTable", true);
}
if (opt.isSet("columns")) {
options.put("columns", Arrays.asList(opt.get("columns").split(",")));
}
options.put("exception", "stack");
List<Object> args = opt.argObjects();
if (args.size() > 0) {
Expand Down
1 change: 1 addition & 0 deletions demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
<directory>src/main/scripts</directory>
<includes>
<include>init.jline</include>
<include>data.json</include>
</includes>
</resource>
</resources>
Expand Down
1 change: 1 addition & 0 deletions demo/src/main/scripts/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"responseHeader":{"status":0,"QTime":1,"params":{"q":"a:jline","core":"gav","indent":"off","fl":"id,g,a,v,p,ec,timestamp,tags","start":"","sort":"score desc,timestamp desc,g asc,a asc,v desc","rows":"30","wt":"json","version":"2.2"}},"response":{"numFound":139,"start":0,"docs":[{"id":"org.jline:jline:3.13.3","g":"org.jline","a":"jline","v":"3.13.3","p":"jar","timestamp":1578390706000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.13.2","g":"org.jline","a":"jline","v":"3.13.2","p":"jar","timestamp":1574846327000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.13.1","g":"org.jline","a":"jline","v":"3.13.1","p":"jar","timestamp":1571995758000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.13.0","g":"org.jline","a":"jline","v":"3.13.0","p":"jar","timestamp":1571243077000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.12.1","g":"org.jline","a":"jline","v":"3.12.1","p":"jar","timestamp":1562570172000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.12.0","g":"org.jline","a":"jline","v":"3.12.0","p":"jar","timestamp":1562252029000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.11.0","g":"org.jline","a":"jline","v":"3.11.0","p":"jar","timestamp":1554406548000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.10.0","g":"org.jline","a":"jline","v":"3.10.0","p":"jar","timestamp":1549961984000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.9.0","g":"org.jline","a":"jline","v":"3.9.0","p":"jar","timestamp":1531854452000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.8.2","g":"org.jline","a":"jline","v":"3.8.2","p":"jar","timestamp":1531853039000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.8.1","g":"org.jline","a":"jline","v":"3.8.1","p":"jar","timestamp":1531770227000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.8.0","g":"org.jline","a":"jline","v":"3.8.0","p":"jar","timestamp":1529487955000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.7.1","g":"org.jline","a":"jline","v":"3.7.1","p":"jar","timestamp":1527581950000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.7.0","g":"org.jline","a":"jline","v":"3.7.0","p":"jar","timestamp":1523864387000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"jline:jline:2.14.6","g":"jline","a":"jline","v":"2.14.6","p":"jar","timestamp":1522055920000,"ec":["-javadoc.jar","-sources.jar",".jar","-tests.jar",".pom"],"tags":["https","open","projects","maven","sonatype","repositories","source","helps"]},{"id":"org.jline:jline:3.6.2","g":"org.jline","a":"jline","v":"3.6.2","p":"jar","timestamp":1521117841000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.6.1","g":"org.jline","a":"jline","v":"3.6.1","p":"jar","timestamp":1518685024000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.6.0","g":"org.jline","a":"jline","v":"3.6.0","p":"jar","timestamp":1517574347000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.5.2","g":"org.jline","a":"jline","v":"3.5.2","p":"jar","timestamp":1513681163000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.scala-lang:jline:2.10.7","g":"org.scala-lang","a":"jline","v":"2.10.7","p":"jar","timestamp":1509739624000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["readline","better","like"]},{"id":"org.jline:jline:3.5.1","g":"org.jline","a":"jline","v":"3.5.1","p":"jar","timestamp":1506080801000,"ec":["-sources.jar","-javadoc.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.5.0","g":"org.jline","a":"jline","v":"3.5.0","p":"jar","timestamp":1505236425000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.4.0","g":"org.jline","a":"jline","v":"3.4.0","p":"jar","timestamp":1501763894000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"jline:jline:2.14.5","g":"jline","a":"jline","v":"2.14.5","p":"jar","timestamp":1498507667000,"ec":["-sources.jar","-javadoc.jar","-tests.jar",".jar",".pom"],"tags":["https","open","projects","maven","sonatype","repositories","source","helps"]},{"id":"org.jline:jline:3.3.1","g":"org.jline","a":"jline","v":"3.3.1","p":"jar","timestamp":1496731372000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"jline:jline:2.14.4","g":"jline","a":"jline","v":"2.14.4","p":"jar","timestamp":1496731057000,"ec":["-sources.jar","-javadoc.jar","-tests.jar",".jar",".pom"],"tags":["https","open","projects","maven","sonatype","repositories","source","helps"]},{"id":"org.jline:jline:3.3.0","g":"org.jline","a":"jline","v":"3.3.0","p":"jar","timestamp":1494632386000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.2.0","g":"org.jline","a":"jline","v":"3.2.0","p":"jar","timestamp":1489399766000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["jline"]},{"id":"org.jline:jline:3.1.3","g":"org.jline","a":"jline","v":"3.1.3","p":"jar","timestamp":1485945557000,"ec":["-javadoc.jar","-sources.jar",".jar",".pom"],"tags":["https","open","projects","maven","sonatype","repositories","source","helps"]},{"id":"jline:jline:2.14.3","g":"jline","a":"jline","v":"2.14.3","p":"jar","timestamp":1483696017000,"ec":["-sources.jar","-javadoc.jar","-tests.jar",".jar",".pom"],"tags":["https","open","projects","maven","sonatype","repositories","source","helps"]}]}}

0 comments on commit eedaff3

Please sign in to comment.