Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
titlegetSorReplacedByEntities
// Finder hele træet af SorId'er, som er blevet erstattet af en given SorId
// Eksempel: Hvis SorId er 101 og vi har denne data struktur:
//   101
//    ├── 102
//    ├── 103
//    │   └── 104
//    └── 105
//        └── 106
// Vil den returner alle disse [102, 103, 104, 105, 106] SorId'er.
public List<Long> getSorReplacedByEntities(Long sorId) {
    Set<Long> visitedSorIds = new HashSet<>();
    List<Long> result = new ArrayList<>();
    recursiveFetch(sorId, visitedSorIds, result);
    return result;
}

private void recursiveFetch(Long sorId, Set<Long> visitedSorIds, List<Long> result) {
    // Hvis vi allerede har fundet SorId'et, så returner for at undgå uendelig rekursion
    // Data'en er ikke cirkulær, så dette burde ikke ske
    if (visitedSorIds.contains(sorId)) {
        return;
    }
    visitedSorIds.add(sorId);

    // Find alle SorId'er som er blevet erstattet af den givne SorId
    String query = "SELECT ReplacedBySorId FROM SOR2SorReplacedByEntities WHERE ReplacedSorId = :sorId";
    HashMap<String, Object> parameters = new HashMap<>();
    parameters.put("sorId", sorId);
    List<Long> replacedByIds = jdbcTemplate.queryForList(query, parameters, Long.class);
    
	// Tilføj de fundet sorId'er til resultatet
    result.addAll(replacedByIds);
    
	// Recursivt kald for hver af de fundne underliggende sorId'er for at finde alle SorId'er i træet
    for (Long id : replacedByIds) {
        recursiveFetch(id, visitedSorIds, result);
    }
}

...