Skip to content

Commit aa306b0

Browse files
committed
Avoid circular dependency in creating the terminal.
1 parent 355baef commit aa306b0

17 files changed

+234
-170
lines changed

dqops/src/main/java/com/dqops/cli/commands/check/CheckActivateCliCommand.java

+6-12
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@
2424
import com.dqops.cli.completion.completedcommands.ITableNameCommand;
2525
import com.dqops.cli.completion.completers.*;
2626
import com.dqops.cli.output.OutputFormatService;
27-
import com.dqops.cli.terminal.FileWriter;
28-
import com.dqops.cli.terminal.TerminalReader;
29-
import com.dqops.cli.terminal.TerminalTableWritter;
30-
import com.dqops.cli.terminal.TerminalWriter;
27+
import com.dqops.cli.terminal.*;
3128
import com.dqops.metadata.search.CheckSearchFilters;
3229
import com.dqops.utils.serialization.JsonSerializer;
3330
import com.google.common.base.Strings;
@@ -48,8 +45,7 @@
4845
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
4946
@CommandLine.Command(name = "activate", description = "Activates data quality checks matching specified filters")
5047
public class CheckActivateCliCommand extends BaseCommand implements ICommand, ITableNameCommand {
51-
private TerminalReader terminalReader;
52-
private TerminalWriter terminalWriter;
48+
private TerminalFactory terminalFactory;
5349
private TerminalTableWritter terminalTableWritter;
5450
private CheckCliService checkService;
5551
private JsonSerializer jsonSerializer;
@@ -60,15 +56,13 @@ public CheckActivateCliCommand() {
6056
}
6157

6258
@Autowired
63-
public CheckActivateCliCommand(TerminalReader terminalReader,
64-
TerminalWriter terminalWriter,
59+
public CheckActivateCliCommand(TerminalFactory terminalFactory,
6560
TerminalTableWritter terminalTableWritter,
6661
CheckCliService checkService,
6762
JsonSerializer jsonSerializer,
6863
OutputFormatService outputFormatService,
6964
FileWriter fileWriter) {
70-
this.terminalReader = terminalReader;
71-
this.terminalWriter = terminalWriter;
65+
this.terminalFactory = terminalFactory;
7266
this.terminalTableWritter = terminalTableWritter;
7367
this.checkService = checkService;
7468
this.jsonSerializer = jsonSerializer;
@@ -338,11 +332,11 @@ public Map<String, String> getFatalLevelOptions() {
338332
public Integer call() throws Exception {
339333
if (Strings.isNullOrEmpty(this.connection)) {
340334
throwRequiredParameterMissingIfHeadless("--connection");
341-
this.connection = this.terminalReader.prompt("Connection name (--connection)", null, false);
335+
this.connection = this.terminalFactory.getReader().prompt("Connection name (--connection)", null, false);
342336
}
343337
if (Strings.isNullOrEmpty(this.check)) {
344338
throwRequiredParameterMissingIfHeadless("--check");
345-
this.check = this.terminalReader.prompt("Data quality check name (--check)", null, false);
339+
this.check = this.terminalFactory.getReader().prompt("Data quality check name (--check)", null, false);
346340
}
347341

348342
CheckSearchFilters filters = new CheckSearchFilters();

dqops/src/main/java/com/dqops/cli/commands/check/CheckRunCliCommand.java

+14-15
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
import com.dqops.cli.output.OutputFormatService;
2727
import com.dqops.cli.terminal.FileWriter;
2828
import com.dqops.cli.terminal.TablesawDatasetTableModel;
29+
import com.dqops.cli.terminal.TerminalFactory;
2930
import com.dqops.cli.terminal.TerminalTableWritter;
30-
import com.dqops.cli.terminal.TerminalWriter;
3131
import com.dqops.execution.checks.CheckExecutionErrorSummary;
3232
import com.dqops.execution.checks.CheckExecutionSummary;
3333
import com.dqops.execution.checks.progress.CheckExecutionProgressListener;
@@ -51,7 +51,7 @@
5151
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
5252
@CommandLine.Command(name = "run", header = "Run data quality checks that match a given condition", description = "Run data quality checks on your dataset that match a given condition. The command output is a table with the results that provides insight into the data quality.")
5353
public class CheckRunCliCommand extends BaseCommand implements ICommand, ITableNameCommand {
54-
private TerminalWriter terminalWriter;
54+
private TerminalFactory terminalFactory;
5555
private TerminalTableWritter terminalTableWritter;
5656
private CheckCliService checkService;
5757
private CheckExecutionProgressListenerProvider checkExecutionProgressListenerProvider;
@@ -64,19 +64,18 @@ public CheckRunCliCommand() {
6464

6565
/**
6666
* Dependency injection constructor.
67-
* @param terminalWriter Terminal writer.
6867
* @param checkService Check implementation service.
6968
* @param jsonSerializer Json serializer.
7069
*/
7170
@Autowired
72-
public CheckRunCliCommand(TerminalWriter terminalWriter,
71+
public CheckRunCliCommand(TerminalFactory terminalFactory,
7372
TerminalTableWritter terminalTableWritter,
7473
CheckCliService checkService,
7574
CheckExecutionProgressListenerProvider checkExecutionProgressListenerProvider,
7675
JsonSerializer jsonSerializer,
7776
OutputFormatService outputFormatService,
7877
FileWriter fileWriter) {
79-
this.terminalWriter = terminalWriter;
78+
this.terminalFactory = terminalFactory;
8079
this.terminalTableWritter = terminalTableWritter;
8180
this.checkService = checkService;
8281
this.checkExecutionProgressListenerProvider = checkExecutionProgressListenerProvider;
@@ -388,33 +387,33 @@ public Integer call() throws Exception {
388387
CheckExecutionSummary checkExecutionSummary = this.checkService.runChecks(filters, this.timeWindowFilterParameters, progressListener, this.dummyRun);
389388

390389
if (checkExecutionSummary.getTotalChecksExecutedCount() == 0) {
391-
this.terminalWriter.writeLine("No checks with these filters were found.");
390+
this.terminalFactory.getWriter().writeLine("No checks with these filters were found.");
392391
return 0;
393392
}
394393

395394
if (this.mode != CheckRunReportingMode.silent) {
396395
TablesawDatasetTableModel tablesawDatasetTableModel = new TablesawDatasetTableModel(checkExecutionSummary.getSummaryTable());
397-
this.terminalWriter.writeLine("Check evaluation summary per table:");
396+
this.terminalFactory.getWriter().writeLine("Check evaluation summary per table:");
398397
switch(this.getOutputFormat()) {
399398
case CSV: {
400399
String csvContent = this.outputFormatService.tableToCsv(tablesawDatasetTableModel);
401400
if (this.isWriteToFile()) {
402401
CliOperationStatus cliOperationStatus = this.fileWriter.writeStringToFile(csvContent);
403-
this.terminalWriter.writeLine(cliOperationStatus.getMessage());
402+
this.terminalFactory.getWriter().writeLine(cliOperationStatus.getMessage());
404403
}
405404
else {
406-
this.terminalWriter.write(csvContent);
405+
this.terminalFactory.getWriter().write(csvContent);
407406
}
408407
break;
409408
}
410409
case JSON: {
411410
String jsonContent = this.outputFormatService.tableToJson(tablesawDatasetTableModel);
412411
if (this.isWriteToFile()) {
413412
CliOperationStatus cliOperationStatus = this.fileWriter.writeStringToFile(jsonContent);
414-
this.terminalWriter.writeLine(cliOperationStatus.getMessage());
413+
this.terminalFactory.getWriter().writeLine(cliOperationStatus.getMessage());
415414
}
416415
else {
417-
this.terminalWriter.write(jsonContent);
416+
this.terminalFactory.getWriter().write(jsonContent);
418417
}
419418
break;
420419
}
@@ -423,9 +422,9 @@ public Integer call() throws Exception {
423422
TableBuilder tableBuilder = new TableBuilder(tablesawDatasetTableModel);
424423
tableBuilder.addInnerBorder(BorderStyle.oldschool);
425424
tableBuilder.addHeaderBorder(BorderStyle.oldschool);
426-
String renderedTable = tableBuilder.build().render(this.terminalWriter.getTerminalWidth() - 1);
425+
String renderedTable = tableBuilder.build().render(this.terminalFactory.getWriter().getTerminalWidth() - 1);
427426
CliOperationStatus cliOperationStatus = this.fileWriter.writeStringToFile(renderedTable);
428-
this.terminalWriter.writeLine(cliOperationStatus.getMessage());
427+
this.terminalFactory.getWriter().writeLine(cliOperationStatus.getMessage());
429428
}
430429
else {
431430
this.terminalTableWritter.writeTable(tablesawDatasetTableModel, true);
@@ -437,9 +436,9 @@ public Integer call() throws Exception {
437436
CheckExecutionErrorSummary checkExecutionErrorSummary = checkExecutionSummary.getCheckExecutionErrorSummary();
438437
if (checkExecutionErrorSummary != null) {
439438
if (this.mode == CheckRunReportingMode.debug) {
440-
this.terminalWriter.writeLine(checkExecutionErrorSummary.getDebugMessage());
439+
this.terminalFactory.getWriter().writeLine(checkExecutionErrorSummary.getDebugMessage());
441440
} else {
442-
this.terminalWriter.writeLine(checkExecutionErrorSummary.getSummaryMessage());
441+
this.terminalFactory.getWriter().writeLine(checkExecutionErrorSummary.getSummaryMessage());
443442
}
444443
}
445444
}

dqops/src/main/java/com/dqops/cli/commands/column/ColumnListCliCommand.java

+10-13
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@
2525
import com.dqops.cli.completion.completers.ColumnNameCompleter;
2626
import com.dqops.cli.completion.completers.ConnectionNameCompleter;
2727
import com.dqops.cli.completion.completers.FullTableNameCompleter;
28-
import com.dqops.cli.terminal.FileWriter;
29-
import com.dqops.cli.terminal.TablesawDatasetTableModel;
30-
import com.dqops.cli.terminal.TerminalTableWritter;
31-
import com.dqops.cli.terminal.TerminalWriter;
28+
import com.dqops.cli.terminal.*;
3229
import org.springframework.beans.factory.annotation.Autowired;
3330
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
3431
import org.springframework.context.annotation.Scope;
@@ -44,20 +41,20 @@
4441
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
4542
@CommandLine.Command(name = "list", header = "List the columns that match a given condition", description = "List all the columns in a table or filter them based on a specified condition.")
4643
public class ColumnListCliCommand extends BaseCommand implements ICommand, IConnectionNameCommand, ITableNameCommand {
44+
private TerminalFactory terminalFactory;
4745
private ColumnCliService columnCliService;
48-
private TerminalWriter terminalWriter;
4946
private TerminalTableWritter terminalTableWritter;
5047
private FileWriter fileWriter;
5148

5249
public ColumnListCliCommand() {
5350
}
5451

5552
@Autowired
56-
public ColumnListCliCommand(TerminalWriter terminalWriter,
57-
ColumnCliService columnCliService,
53+
public ColumnListCliCommand(TerminalFactory terminalFactory,
54+
ColumnCliService columnCliService,
5855
TerminalTableWritter terminalTableWritter,
5956
FileWriter fileWriter) {
60-
this.terminalWriter = terminalWriter;
57+
this.terminalFactory = terminalFactory;
6158
this.columnCliService = columnCliService;
6259
this.terminalTableWritter = terminalTableWritter;
6360
this.fileWriter = fileWriter;
@@ -164,24 +161,24 @@ public Integer call() throws Exception {
164161
TableBuilder tableBuilder = new TableBuilder(new TablesawDatasetTableModel(cliOperationStatus.getTable()));
165162
tableBuilder.addInnerBorder(BorderStyle.oldschool);
166163
tableBuilder.addHeaderBorder(BorderStyle.oldschool);
167-
String renderedTable = tableBuilder.build().render(this.terminalWriter.getTerminalWidth() - 1);
164+
String renderedTable = tableBuilder.build().render(this.terminalFactory.getWriter().getTerminalWidth() - 1);
168165
CliOperationStatus cliOperationStatus2 = this.fileWriter.writeStringToFile(renderedTable);
169-
this.terminalWriter.writeLine(cliOperationStatus2.getMessage());
166+
this.terminalFactory.getWriter().writeLine(cliOperationStatus2.getMessage());
170167
} else {
171168
this.terminalTableWritter.writeTable(cliOperationStatus.getTable(), true);
172169
}
173170
} else {
174171
if (this.isWriteToFile()) {
175172
CliOperationStatus cliOperationStatus2 = this.fileWriter.writeStringToFile(cliOperationStatus.getMessage());
176-
this.terminalWriter.writeLine(cliOperationStatus2.getMessage());
173+
this.terminalFactory.getWriter().writeLine(cliOperationStatus2.getMessage());
177174
}
178175
else {
179-
this.terminalWriter.write(cliOperationStatus.getMessage());
176+
this.terminalFactory.getWriter().write(cliOperationStatus.getMessage());
180177
}
181178
}
182179
return 0;
183180
} else {
184-
this.terminalWriter.writeLine(cliOperationStatus.getMessage());
181+
this.terminalFactory.getWriter().writeLine(cliOperationStatus.getMessage());
185182
return -1;
186183
}
187184
}

dqops/src/main/java/com/dqops/cli/commands/connection/ConnectionListCliCommand.java

+10-13
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@
2121
import com.dqops.cli.commands.connection.impl.ConnectionCliService;
2222
import com.dqops.cli.commands.connection.impl.models.ConnectionListModel;
2323
import com.dqops.cli.output.OutputFormatService;
24-
import com.dqops.cli.terminal.FileWriter;
25-
import com.dqops.cli.terminal.FormattedTableDto;
26-
import com.dqops.cli.terminal.TerminalTableWritter;
27-
import com.dqops.cli.terminal.TerminalWriter;
24+
import com.dqops.cli.terminal.*;
2825
import com.google.api.client.util.Strings;
2926
import org.springframework.beans.factory.annotation.Autowired;
3027
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
@@ -44,7 +41,7 @@
4441
@CommandLine.Command(name = "list", header = "List connections that match a given condition", description = "Lists all the created connections for the logged-in user that match the conditions specified in the options. It allows the user to filter connections based on various parameters.")
4542
public class ConnectionListCliCommand extends BaseCommand implements ICommand {
4643
private ConnectionCliService connectionCliService;
47-
private TerminalWriter terminalWriter;
44+
private TerminalFactory terminalFactory;
4845
private TerminalTableWritter terminalTableWritter;
4946
private OutputFormatService outputFormatService;
5047
private FileWriter fileWriter;
@@ -54,12 +51,12 @@ public ConnectionListCliCommand() {
5451

5552
@Autowired
5653
public ConnectionListCliCommand(ConnectionCliService connectionCliService,
57-
TerminalWriter terminalWriter,
54+
TerminalFactory terminalFactory,
5855
TerminalTableWritter terminalTableWritter,
5956
OutputFormatService outputFormatService,
6057
FileWriter fileWriter) {
6158
this.connectionCliService = connectionCliService;
62-
this.terminalWriter = terminalWriter;
59+
this.terminalFactory = terminalFactory;
6360
this.terminalTableWritter = terminalTableWritter;
6461
this.outputFormatService = outputFormatService;
6562
this.fileWriter = fileWriter;
@@ -107,21 +104,21 @@ public Integer call() throws Exception {
107104
String csvContent = this.outputFormatService.tableToCsv(formattedTable);
108105
if (this.isWriteToFile()) {
109106
CliOperationStatus cliOperationStatus = this.fileWriter.writeStringToFile(csvContent);
110-
this.terminalWriter.writeLine(cliOperationStatus.getMessage());
107+
this.terminalFactory.getWriter().writeLine(cliOperationStatus.getMessage());
111108
}
112109
else {
113-
this.terminalWriter.write(csvContent);
110+
this.terminalFactory.getWriter().write(csvContent);
114111
}
115112
break;
116113
}
117114
case JSON: {
118115
String jsonContent = this.outputFormatService.tableToJson(formattedTable);
119116
if (this.isWriteToFile()) {
120117
CliOperationStatus cliOperationStatus = this.fileWriter.writeStringToFile(jsonContent);
121-
this.terminalWriter.writeLine(cliOperationStatus.getMessage());
118+
this.terminalFactory.getWriter().writeLine(cliOperationStatus.getMessage());
122119
}
123120
else {
124-
this.terminalWriter.write(jsonContent);
121+
this.terminalFactory.getWriter().write(jsonContent);
125122
}
126123
break;
127124
}
@@ -131,9 +128,9 @@ public Integer call() throws Exception {
131128
TableBuilder tableBuilder = new TableBuilder(model);
132129
tableBuilder.addInnerBorder(BorderStyle.oldschool);
133130
tableBuilder.addHeaderBorder(BorderStyle.oldschool);
134-
String renderedTable = tableBuilder.build().render(this.terminalWriter.getTerminalWidth() - 1);
131+
String renderedTable = tableBuilder.build().render(this.terminalFactory.getWriter().getTerminalWidth() - 1);
135132
CliOperationStatus cliOperationStatus = this.fileWriter.writeStringToFile(renderedTable);
136-
this.terminalWriter.writeLine(cliOperationStatus.getMessage());
133+
this.terminalFactory.getWriter().writeLine(cliOperationStatus.getMessage());
137134
}
138135
else {
139136
this.terminalTableWritter.writeTable(formattedTable, true);

0 commit comments

Comments
 (0)