| | 396 | |
| | 397 | /** |
| | 398 | * Check if an associatedStreet Relation is obsolete. |
| | 399 | * @param r the relation |
| | 400 | */ |
| | 401 | private void checkIfObsolete(Relation r) { |
| | 402 | for (RelationMember m : r.getMembers()) { |
| | 403 | if (m.getMember().isIncomplete()) |
| | 404 | return; |
| | 405 | |
| | 406 | boolean isHighway = m.isWay() && m.getMember().hasKey("highway"); |
| | 407 | |
| | 408 | switch (m.getRole()) { |
| | 409 | case "house": |
| | 410 | case "addr:houselink": |
| | 411 | case "address": |
| | 412 | if (!m.getMember().hasTag("addr:street") || !m.getMember().hasTag("addr:housenumber")) |
| | 413 | return; |
| | 414 | break; |
| | 415 | case "street": |
| | 416 | if (!m.getMember().hasTag("name") && r.hasTag("name")) |
| | 417 | return; |
| | 418 | break; |
| | 419 | case "": |
| | 420 | if (!isHighway && (!m.getMember().hasTag("addr:street") || !m.getMember().hasTag("addr:housenumber"))) |
| | 421 | return; |
| | 422 | if (isHighway && !m.getMember().hasTag("name") && r.hasTag("name")) |
| | 423 | return; |
| | 424 | break; |
| | 425 | default: |
| | 426 | } |
| | 427 | } |
| | 428 | errors.add(TestError.builder(this, Severity.WARNING, OBSOLETE_RELATION) |
| | 429 | .message(tr("Relation is obsolete")) |
| | 430 | .primitives(r) |
| | 431 | .build()); |
| | 432 | } |
| | 433 | |
| | 434 | /** |
| | 435 | * Merge the nodes into one. |
| | 436 | * Copied from UtilsPlugin.MergePointsAction |
| | 437 | */ |
| | 438 | @Override |
| | 439 | public Command fixError(TestError testError) { |
| | 440 | return new DeleteCommand(testError.getPrimitives()); |
| | 441 | } |
| | 442 | |
| | 443 | @Override |
| | 444 | public boolean isFixable(TestError testError) { |
| | 445 | if (!(testError.getTester() instanceof Addresses)) |
| | 446 | return false; |
| | 447 | return testError.getCode() == OBSOLETE_RELATION; |
| | 448 | } |
| | 449 | |
| | 450 | |