@@ -93,6 +93,47 @@ public void produceReport(final String reporterId, final List<String> pathList)
9393 jdbcTemplate .update (plsql , binds );
9494 }
9595
96+ public void produceReportWithCoverage (final String realtimeReporterId , final String coverageReporterId ,
97+ final List <String > pathList , final List <String > schemaList , final List <String > includeObjectList ,
98+ final List <String > excludeObjectList ) {
99+ StringBuilder sb = new StringBuilder ();
100+ sb .append ("DECLARE\n " );
101+ sb .append (" l_rt_rep ut_realtime_reporter := ut_realtime_reporter();\n " );
102+ sb .append (" l_cov_rep ut_coverage_html_reporter := ut_coverage_html_reporter();\n " );
103+ sb .append ("BEGIN\n " );
104+ sb .append (" l_rt_rep.set_reporter_id(?);\n " );
105+ sb .append (" l_rt_rep.output_buffer.init();\n " );
106+ sb .append (" l_cov_rep.set_reporter_id(?);\n " );
107+ sb .append (" l_cov_rep.output_buffer.init();\n " );
108+ sb .append (" sys.dbms_output.enable(NULL);\n " );
109+ sb .append (" ut_runner.run(\n " );
110+ sb .append (" a_paths => ut_varchar2_list(\n " );
111+ sb .append (StringTools .getCSV (pathList , 31 ));
112+ sb .append (" ),\n " );
113+ if (!schemaList .isEmpty ()) {
114+ sb .append (" a_coverage_schemes => ut_varchar2_list(\n " );
115+ sb .append (StringTools .getCSV (schemaList , 31 ));
116+ sb .append (" ),\n " );
117+ }
118+ if (!includeObjectList .isEmpty ()) {
119+ sb .append (" a_include_objects => ut_varchar2_list(\n " );
120+ sb .append (StringTools .getCSV (includeObjectList , 31 ));
121+ sb .append (" ),\n " );
122+ }
123+ if (!excludeObjectList .isEmpty ()) {
124+ sb .append (" a_exclude_objects => ut_varchar2_list(\n " );
125+ sb .append (StringTools .getCSV (excludeObjectList , 31 ));
126+ sb .append (" ),\n " );
127+ }
128+ sb .append (" a_reporters => ut_reporters(l_rt_rep, l_cov_rep)\n " );
129+ sb .append (" );\n " );
130+ sb .append (" sys.dbms_output.disable;\n " );
131+ sb .append ("END;" );
132+ final String plsql = sb .toString ();
133+ final Object [] binds = { realtimeReporterId , coverageReporterId };
134+ jdbcTemplate .update (plsql , binds );
135+ }
136+
96137 public void consumeReport (final String reporterId , final RealtimeReporterEventConsumer consumer ) {
97138 StringBuilder sb = new StringBuilder ();
98139 sb .append ("DECLARE\n " );
@@ -108,7 +149,7 @@ public Void doInCallableStatement(final CallableStatement cs) throws SQLExceptio
108149 cs .setString (1 , reporterId );
109150 cs .registerOutParameter (2 , OracleTypes .CURSOR );
110151 cs .execute ();
111- final ResultSet rs = (( ResultSet ) cs .getObject (2 ) );
152+ final ResultSet rs = (ResultSet ) cs .getObject (2 );
112153 while (rs .next ()) {
113154 final String itemType = rs .getString ("item_type" );
114155 final Clob textClob = rs .getClob ("text" );
@@ -124,6 +165,36 @@ public Void doInCallableStatement(final CallableStatement cs) throws SQLExceptio
124165 });
125166 }
126167
168+ public String getHtmlCoverage (final String reporterId ) {
169+ StringBuilder sb = new StringBuilder ();
170+ sb .append ("DECLARE\n " );
171+ sb .append (" l_reporter ut_coverage_html_reporter := ut_coverage_html_reporter();\n " );
172+ sb .append ("BEGIN\n " );
173+ sb .append (" l_reporter.set_reporter_id(?);\n " );
174+ sb .append (" ? := l_reporter.get_lines_cursor();\n " );
175+ sb .append ("END;" );
176+ final String plsql = sb .toString ();
177+ return jdbcTemplate .execute (plsql , new CallableStatementCallback <String >() {
178+ @ Override
179+ public String doInCallableStatement (final CallableStatement cs ) throws SQLException {
180+ cs .setString (1 , reporterId );
181+ cs .registerOutParameter (2 , OracleTypes .CURSOR );
182+ cs .execute ();
183+ final StringBuilder sb = new StringBuilder ();
184+ final ResultSet rs = (ResultSet ) cs .getObject (2 );
185+ while (rs .next ()) {
186+ final String text = rs .getString ("text" );
187+ if (text != null ) {
188+ sb .append (text );
189+ sb .append ('\n' );
190+ }
191+ }
192+ rs .close ();
193+ return sb .toString ();
194+ }
195+ });
196+ }
197+
127198 private RealtimeReporterEvent convert (final String itemType , final String text ) {
128199 logger .fine (() -> "\n ---- " + itemType + " ----\n " + text );
129200 try {
0 commit comments