Skip to content

Commit 201d4c3

Browse files
committed
Validation NeTEx: support des warnings
1 parent 61c0c61 commit 201d4c3

21 files changed

Lines changed: 831 additions & 49 deletions

File tree

apps/transport/client/stylesheets/components/_validation.scss

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,18 @@ details > code {
163163
}
164164

165165
table.netex_generic_issue {
166-
th, td {
167-
&:nth-child(1) {
168-
width: 60%;
169-
}
170-
&:nth-child(3) {
171-
width: 10%;
172-
}
166+
col.level {
167+
width: 5%;
168+
}
169+
col.message {
170+
width: 60%;
171+
}
172+
col.line {
173+
width: 10%;
174+
}
175+
td.line {
176+
text-align: right;
173177
}
174-
175178
tr.debug {
176179
&:hover {
177180
background: revert;
@@ -303,6 +306,10 @@ details > code {
303306
button[popovertarget="french-profile-rules"] {
304307
margin-left: 0.5em;
305308
}
309+
310+
.text-error { color: var(--red); }
311+
.text-warning { color: var(--orange); }
312+
.text-info { color: var(--dark-blue); }
306313
}
307314

308315
blockquote {

apps/transport/lib/transport_web/controllers/resource_controller.ex

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ defmodule TransportWeb.ResourceController do
195195
defp render_netex_details(conn, params, resource, validation) do
196196
config = make_pagination_config(params, @netex_issues_page_size)
197197

198-
{results_adapter, validation_details, issues, errors_template, max_severity, xsd_errors} =
198+
{results_adapter, validation_details, issues, errors_template, max_severity, xsd_errors, category_severity_counts} =
199199
build_netex_validation_details(validation, params, config)
200200

201201
{filter, pagination} = issues
@@ -215,6 +215,7 @@ defmodule TransportWeb.ResourceController do
215215
|> assign(:results_adapter, results_adapter)
216216
|> assign(:max_severity, max_severity)
217217
|> assign(:data_vis, nil)
218+
|> assign(:category_severity_counts, category_severity_counts)
218219
|> render("netex_details.html")
219220
end
220221

@@ -244,7 +245,7 @@ defmodule TransportWeb.ResourceController do
244245
end
245246

246247
defp build_netex_validation_details(nil, _params, _pagination_config),
247-
do: {nil, {nil, nil, nil, []}, {%{}, {0, []}}, nil, nil, []}
248+
do: {nil, {nil, nil, nil, []}, {%{}, {0, []}}, nil, nil, [], %{}}
248249

249250
defp build_netex_validation_details(
250251
%{
@@ -257,16 +258,17 @@ defmodule TransportWeb.ResourceController do
257258
pagination_config
258259
) do
259260
results_adapter = Transport.Validators.NeTEx.ResultsAdapter.resolve(version)
260-
summary = digest["summary"]
261+
summary = results_adapter.summary_from_binary(binary_result)
261262
stats = digest["stats"]
262263
errors_template = pick_netex_errors_template(version)
263264
max_severity = digest["max_severity"]
264265

265266
issues = results_adapter.get_issues(binary_result, params, pagination_config)
266267
xsd_errors = results_adapter.summarize_xsd_errors(binary_result)
268+
category_severity_counts = results_adapter.count_by_category_and_severity(binary_result)
267269

268270
{results_adapter, {summary, stats, metadata.metadata, metadata.modes}, issues, errors_template, max_severity,
269-
xsd_errors}
271+
xsd_errors, category_severity_counts}
270272
end
271273

272274
defp pick_netex_errors_template("0.2.2"), do: "_netex_validation_errors_v0_2_x.html"

apps/transport/lib/transport_web/controllers/validation_controller.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,20 @@ defmodule TransportWeb.ValidationController do
198198

199199
xsd_errors = results_adapter.summarize_xsd_errors(validation.binary_result)
200200

201+
category_severity_counts =
202+
results_adapter.count_by_category_and_severity(validation.binary_result)
203+
201204
conn
202205
|> assign_base_validation_details(params)
203206
|> assign(:filter, filter)
204207
|> assign(:issues, TransportWeb.ResourceController.paginate_netex_results(pagination, config))
205208
|> assign(:results_adapter, results_adapter)
206209
|> assign(:metadata, validation.metadata.metadata)
207210
|> assign(:max_severity, validation.digest["max_severity"])
208-
|> assign(:validation_summary, validation.digest["summary"])
211+
|> assign(:validation_summary, results_adapter.summary_from_binary(validation.binary_result))
209212
|> assign(:severities_count, validation.digest["stats"])
213+
|> assign(:category_severity_counts, category_severity_counts)
214+
|> assign(:pagination, pagination)
210215
|> assign(:validation_report_url, validation_report_url)
211216
|> assign(:xsd_errors, xsd_errors)
212217
|> render(template)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<.netex_generic_issues issues={@issues} />
1+
<.netex_generic_issues issues={@issues} severities_count={@severities_count || %{}} results_adapter={@results_adapter} />

apps/transport/lib/transport_web/templates/resource/_netex_validation_errors_v0_1_0.html.heex

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,20 @@
1313
)}
1414
</nav>
1515
<% issue_type = @results_adapter.issue_type(@issues.entries) %>
16+
<% current_category = Map.get(@filter, "issues_category") || "base-rules" %>
17+
<% all_counts = @category_severity_counts || Map.new() %>
18+
<% category_counts = Map.get(all_counts, current_category, Map.new()) %>
1619
<div class="main-pane">
1720
{pagination_links(@conn, @issues, [@resource.id],
1821
issue_type: issue_type,
1922
path: &resource_path/4,
2023
action: :details
2124
)}
22-
{render(netex_template(), issues: @issues || [], conn: @conn)}
25+
{render(netex_template(),
26+
issues: @issues || [],
27+
severities_count: category_counts,
28+
results_adapter: @results_adapter,
29+
conn: @conn
30+
)}
2331
</div>
2432
<% end %>

apps/transport/lib/transport_web/templates/resource/_netex_validation_errors_v0_2_x.html.heex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
<.netex_validation_report_content
1111
conn={@conn}
1212
current_category={current_category}
13+
severities_count={@severities_count}
14+
category_severity_counts={@category_severity_counts || %{}}
1315
xsd_errors={@xsd_errors}
1416
issues={@issues}
1517
results_adapter={@results_adapter}

apps/transport/lib/transport_web/templates/resource/netex_details.html.heex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@
5959
max_severity: @max_severity,
6060
filter: @filter,
6161
validation_report_url: @validation_report_url,
62-
xsd_errors: @xsd_errors
62+
xsd_errors: @xsd_errors,
63+
category_severity_counts: @category_severity_counts
6364
)}
6465
<div class="issues-footer">
6566
<%= unless is_nil(@metadata) or @metadata == %{} do %>

apps/transport/lib/transport_web/templates/validation/show_netex_v0_1_0.html.heex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,12 @@
4848
action: :show
4949
) %>
5050
{pagination}
51-
{render(netex_template(), issues: @issues || [], conn: @conn)}
51+
{render(netex_template(),
52+
issues: @issues || [],
53+
severities_count: @severities_count || %{},
54+
results_adapter: @results_adapter,
55+
conn: @conn
56+
)}
5257
<div class="pt-24">{pagination}</div>
5358
<% else %>
5459
<h2>{dgettext("validations", "Nice work, there are no issues!")}</h2>

apps/transport/lib/transport_web/templates/validation/show_netex_v0_2_x.html.heex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
xsd_errors={@xsd_errors}
3232
issues={@issues}
3333
results_adapter={@results_adapter}
34+
severities_count={@severities_count}
35+
category_severity_counts={@category_severity_counts}
3436
validation_report_url={@validation_report_url}
3537
validation_summary={@validation_summary}
3638
pagination={netex_pagination_links(@conn, @issues, @validation_id, current_category)}

apps/transport/lib/transport_web/views/netex_report_components.ex

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,39 @@ defmodule TransportWeb.NeTExReportComponents do
1313

1414
def to_netex_validation_report(url), do: url <> "#validation-report"
1515

16-
def netex_generic_issues(%{issues: _} = assigns) do
16+
def netex_generic_issues(%{issues: _, severities_count: _, results_adapter: _} = assigns) do
17+
filtered_severities =
18+
Map.get(assigns, :severities_count, %{})
19+
|> Enum.filter(fn {_k, v} -> is_integer(v) and v > 0 end)
20+
21+
assigns = assign(assigns, :filtered_severities, filtered_severities)
22+
1723
~H"""
24+
<ul :if={Enum.any?(@filtered_severities)}>
25+
<li :for={{severity, count} <- @filtered_severities}>
26+
{@results_adapter.format_severity(severity, count)}
27+
</li>
28+
</ul>
1829
<table class="table netex_generic_issue">
30+
<colgroup>
31+
<col class="message" />
32+
<col class="file" />
33+
<col class="line" />
34+
</colgroup>
35+
1936
<tr>
2037
<th>{dgettext("validations-explanations", "Message")}</th>
2138
<th>{dgettext("validations-explanations", "File")}</th>
2239
<th>{dgettext("validations-explanations", "Line")}</th>
2340
</tr>
2441
2542
<tr :for={issue <- @issues} class="message">
26-
<td lang="en">{issue["message"]}</td>
43+
<td><.validity_icon criticity={issue["criticity"]} /> <span lang="en">{issue["message"]}</span></td>
2744
<%= if is_nil(issue["resource"]) or is_nil(issue["resource"]["filename"]) or is_nil(issue["resource"]["line"]) do %>
2845
<td colspan="2">{dgettext("validations-explanations", "Unknown location")}</td>
2946
<% else %>
3047
<td>{issue["resource"]["filename"]}</td>
31-
<td>{issue["resource"]["line"]}</td>
48+
<td class="line">{issue["resource"]["line"]}</td>
3249
<% end %>
3350
</tr>
3451
</table>
@@ -76,6 +93,8 @@ defmodule TransportWeb.NeTExReportComponents do
7693
current_category: _,
7794
issues: _,
7895
results_adapter: _,
96+
severities_count: _,
97+
category_severity_counts: _,
7998
validation_report_url: _,
8099
validation_summary: _,
81100
xsd_errors: _,
@@ -102,6 +121,8 @@ defmodule TransportWeb.NeTExReportComponents do
102121
conn={@conn}
103122
compliance_check={compliance_check}
104123
current_category={@current_category}
124+
severities_count={@severities_count}
125+
category_severity_counts={@category_severity_counts}
105126
errors={errors}
106127
validation_report_url={@validation_report_url}
107128
pagination={@pagination}
@@ -138,6 +159,8 @@ defmodule TransportWeb.NeTExReportComponents do
138159
conn: _,
139160
compliance_check: _,
140161
current_category: _,
162+
severities_count: _,
163+
category_severity_counts: _,
141164
errors: _,
142165
validation_report_url: _,
143166
pagination: _,
@@ -180,7 +203,11 @@ defmodule TransportWeb.NeTExReportComponents do
180203
</table>
181204
<% else %>
182205
<.non_translated_messages locale={locale} />
183-
<.netex_generic_issues issues={@errors} />
206+
<.netex_generic_issues
207+
issues={@errors}
208+
severities_count={Map.get(@category_severity_counts, @current_category, %{})}
209+
results_adapter={@results_adapter}
210+
/>
184211
{@pagination}
185212
<% end %>
186213
</div>
@@ -329,17 +356,11 @@ defmodule TransportWeb.NeTExReportComponents do
329356
~H"""
330357
<.colorful_link
331358
href={netex_link_to_category(@conn, @category)}
332-
variant={
333-
if @stats["count"] == 0 do
334-
:valid
335-
else
336-
:error
337-
end
338-
}
359+
variant={severity_variant(@stats["criticity"])}
339360
selected={@current_category == @category}
340361
>
341362
<:icon>
342-
<.validity_icon errors={@stats["count"]} />
363+
<.validity_icon criticity={@stats["criticity"]} />
343364
</:icon>
344365
<:label>
345366
<span class="category">
@@ -404,9 +425,21 @@ defmodule TransportWeb.NeTExReportComponents do
404425
"""
405426
end
406427

407-
defp validity_icon(%{errors: errors} = assigns) when errors > 0 do
428+
defp validity_icon(%{criticity: criticity} = assigns) when criticity == "error" do
429+
~H"""
430+
<i class="fa fa-xmark fa-lg text-error"></i>
431+
"""
432+
end
433+
434+
defp validity_icon(%{criticity: criticity} = assigns) when criticity == "warning" do
435+
~H"""
436+
<i class="fa fa-triangle-exclamation fa-lg text-warning"></i>
437+
"""
438+
end
439+
440+
defp validity_icon(%{criticity: criticity} = assigns) when criticity == "information" do
408441
~H"""
409-
<i class="fa fa-xmark fa-lg"></i>
442+
<i class="fa fa-circle-info fa-lg text-info"></i>
410443
"""
411444
end
412445

@@ -422,6 +455,11 @@ defmodule TransportWeb.NeTExReportComponents do
422455
"""
423456
end
424457

458+
defp severity_variant("error"), do: :error
459+
defp severity_variant("warning"), do: :warning
460+
defp severity_variant("information"), do: :information
461+
defp severity_variant(_), do: nil
462+
425463
defp netex_category_label("xsd-schema"), do: dgettext("validations", "XSD")
426464
defp netex_category_label("french-profile"), do: dgettext("validations", "French profile")
427465
defp netex_category_label("base-rules"), do: dgettext("validations", "Base rules")

0 commit comments

Comments
 (0)