blob: f7e94c05e36ea57129c5f5da9b42f7b2fa912e48 [file] [log] [blame]
Matthias Andreas Benkard7d46f072026-08-24 21:43:05 +02001// SPDX-FileCopyrightText: 2026 Matthias Andreas Benkard <code@mail.matthias.benkard.de>
Matthias Andreas Benkard279fca62026-08-23 08:32:08 +02002// SPDX-License-Identifier: AGPL-3.0-or-later
Matthias Andreas Benkardd1e2fac2026-07-13 07:09:04 +02003package eu.mulk.aendggner.gesetz;
4
5import java.util.List;
6import java.util.Optional;
Matthias Andreas Benkard2febdfd2026-08-23 21:17:36 +02007import org.jspecify.annotations.Nullable;
Matthias Andreas Benkardd1e2fac2026-07-13 07:09:04 +02008
Matthias Andreas Benkarde486b1f2026-07-13 21:33:47 +02009/**
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 Benkard2febdfd2026-08-23 21:17:36 +020012 *
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 Benkarde486b1f2026-07-13 21:33:47 +020016 */
17public record Gesetz(
Matthias Andreas Benkard2febdfd2026-08-23 21:17:36 +020018 String jurabk,
19 String langue,
20 String kurzue,
21 List<Norm> normen,
22 List<Gliederung> gliederungen,
23 @Nullable Stand stand) {
Matthias Andreas Benkardd1e2fac2026-07-13 07:09:04 +020024
25 public Gesetz {
26 normen = List.copyOf(normen);
Matthias Andreas Benkarde486b1f2026-07-13 21:33:47 +020027 gliederungen = List.copyOf(gliederungen);
28 }
29
Matthias Andreas Benkard2febdfd2026-08-23 21:17:36 +020030 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 Benkarde486b1f2026-07-13 21:33:47 +020039 public Gesetz(String jurabk, String langue, String kurzue, List<Norm> normen) {
Matthias Andreas Benkard2febdfd2026-08-23 21:17:36 +020040 this(jurabk, langue, kurzue, normen, List.of(), null);
Matthias Andreas Benkardd1e2fac2026-07-13 07:09:04 +020041 }
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 Benkard2febdfd2026-08-23 21:17:36 +020048 return new Gesetz(jurabk, langue, kurzue, neueNormen, gliederungen, stand);
Matthias Andreas Benkarde486b1f2026-07-13 21:33:47 +020049 }
50
51 public Gesetz mitGliederungen(List<Gliederung> neueGliederungen) {
Matthias Andreas Benkard2febdfd2026-08-23 21:17:36 +020052 return new Gesetz(jurabk, langue, kurzue, normen, neueGliederungen, stand);
Matthias Andreas Benkardd1e2fac2026-07-13 07:09:04 +020053 }
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +020054
55 public Gesetz mitLangue(String neuerLangtitel) {
Matthias Andreas Benkard2febdfd2026-08-23 21:17:36 +020056 return new Gesetz(jurabk, neuerLangtitel, kurzue, normen, gliederungen, stand);
Matthias Andreas Benkardb7e9f0f2026-07-16 21:12:08 +020057 }
Matthias Andreas Benkardd1e2fac2026-07-13 07:09:04 +020058}