| Matthias Andreas Benkard | 7d46f07 | 2026-08-24 21:43:05 +0200 | [diff] [blame] | 1 | // SPDX-FileCopyrightText: 2026 Matthias Andreas Benkard <code@mail.matthias.benkard.de> |
| Matthias Andreas Benkard | 279fca6 | 2026-08-23 08:32:08 +0200 | [diff] [blame] | 2 | // SPDX-License-Identifier: AGPL-3.0-or-later |
| Matthias Andreas Benkard | d1e2fac | 2026-07-13 07:09:04 +0200 | [diff] [blame] | 3 | package eu.mulk.aendggner.gesetz; |
| 4 | |
| 5 | import java.util.List; |
| 6 | import java.util.Optional; |
| Matthias Andreas Benkard | 2febdfd | 2026-08-23 21:17:36 +0200 | [diff] [blame] | 7 | import org.jspecify.annotations.Nullable; |
| Matthias Andreas Benkard | d1e2fac | 2026-07-13 07:09:04 +0200 | [diff] [blame] | 8 | |
| Matthias Andreas Benkard | e486b1f | 2026-07-13 21:33:47 +0200 | [diff] [blame] | 9 | /** |
| 10 | * Ein Stammgesetz, bestehend aus einer geordneten Liste von Einzelnormen und den (ebenfalls |
| 11 | * geordneten) Gliederungseinheiten (Teil/Abschnitt/Unterabschnitt/…), die die Normen strukturieren. |
| Matthias Andreas Benkard | 2febdfd | 2026-08-23 21:17:36 +0200 | [diff] [blame] | 12 | * |
| 13 | * @param stand der Stand der Quelle, soweit sie einen angibt; {@code null} bei handgepflegtem |
| 14 | * Klartext. An ihm hängt die Auskunft, ob das Stammgesetz jünger ist als das Änderungsgesetz, |
| 15 | * das darauf angewandt wird. |
| Matthias Andreas Benkard | e486b1f | 2026-07-13 21:33:47 +0200 | [diff] [blame] | 16 | */ |
| 17 | public record Gesetz( |
| Matthias Andreas Benkard | 2febdfd | 2026-08-23 21:17:36 +0200 | [diff] [blame] | 18 | String jurabk, |
| 19 | String langue, |
| 20 | String kurzue, |
| 21 | List<Norm> normen, |
| 22 | List<Gliederung> gliederungen, |
| 23 | @Nullable Stand stand) { |
| Matthias Andreas Benkard | d1e2fac | 2026-07-13 07:09:04 +0200 | [diff] [blame] | 24 | |
| 25 | public Gesetz { |
| 26 | normen = List.copyOf(normen); |
| Matthias Andreas Benkard | e486b1f | 2026-07-13 21:33:47 +0200 | [diff] [blame] | 27 | gliederungen = List.copyOf(gliederungen); |
| 28 | } |
| 29 | |
| Matthias Andreas Benkard | 2febdfd | 2026-08-23 21:17:36 +0200 | [diff] [blame] | 30 | public Gesetz( |
| 31 | String jurabk, |
| 32 | String langue, |
| 33 | String kurzue, |
| 34 | List<Norm> normen, |
| 35 | List<Gliederung> gliederungen) { |
| 36 | this(jurabk, langue, kurzue, normen, gliederungen, null); |
| 37 | } |
| 38 | |
| Matthias Andreas Benkard | e486b1f | 2026-07-13 21:33:47 +0200 | [diff] [blame] | 39 | public Gesetz(String jurabk, String langue, String kurzue, List<Norm> normen) { |
| Matthias Andreas Benkard | 2febdfd | 2026-08-23 21:17:36 +0200 | [diff] [blame] | 40 | this(jurabk, langue, kurzue, normen, List.of(), null); |
| Matthias Andreas Benkard | d1e2fac | 2026-07-13 07:09:04 +0200 | [diff] [blame] | 41 | } |
| 42 | |
| 43 | public Optional<Norm> norm(String enbez) { |
| 44 | return normen.stream().filter(n -> n.enbez().equals(enbez)).findFirst(); |
| 45 | } |
| 46 | |
| 47 | public Gesetz mitNormen(List<Norm> neueNormen) { |
| Matthias Andreas Benkard | 2febdfd | 2026-08-23 21:17:36 +0200 | [diff] [blame] | 48 | return new Gesetz(jurabk, langue, kurzue, neueNormen, gliederungen, stand); |
| Matthias Andreas Benkard | e486b1f | 2026-07-13 21:33:47 +0200 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | public Gesetz mitGliederungen(List<Gliederung> neueGliederungen) { |
| Matthias Andreas Benkard | 2febdfd | 2026-08-23 21:17:36 +0200 | [diff] [blame] | 52 | return new Gesetz(jurabk, langue, kurzue, normen, neueGliederungen, stand); |
| Matthias Andreas Benkard | d1e2fac | 2026-07-13 07:09:04 +0200 | [diff] [blame] | 53 | } |
| Matthias Andreas Benkard | b7e9f0f | 2026-07-16 21:12:08 +0200 | [diff] [blame] | 54 | |
| 55 | public Gesetz mitLangue(String neuerLangtitel) { |
| Matthias Andreas Benkard | 2febdfd | 2026-08-23 21:17:36 +0200 | [diff] [blame] | 56 | return new Gesetz(jurabk, neuerLangtitel, kurzue, normen, gliederungen, stand); |
| Matthias Andreas Benkard | b7e9f0f | 2026-07-16 21:12:08 +0200 | [diff] [blame] | 57 | } |
| Matthias Andreas Benkard | d1e2fac | 2026-07-13 07:09:04 +0200 | [diff] [blame] | 58 | } |