Class Satz

java.lang.Object
gdv.xport.satz.Satz
All Implemented Interfaces:
Cloneable
Direct Known Subclasses:
Datensatz, Nachsatz, Vorsatz

public abstract class Satz extends Object implements Cloneable
Die Satz-Klasse ist die oberste Klasse, von der alle weiteren Saetze abgeleitet sind.
Author:
oliver
  • Constructor Details

    • Satz

      public Satz(SatzTyp art, int n)
      Mit diesem Konstruktor wird ein Satz fuer die entsprechende Satzart mit n Teildatensaetzen angelegt.
      Parameters:
      art - z.B. Satzart 0100 (f. Adressteil)
      n - Anzahl der Teildatensaetze
      Since:
      5.0
    • Satz

      protected Satz(SatzTyp art, int n, Config cfg)
    • Satz

      protected Satz()
    • Satz

      public Satz(Satz satz, int n)
      The Constructor.
      Parameters:
      satz - z.B. Satzart 0100 (f. Adressteil)
      n - Anzahl der Teildatensaetze
    • Satz

      public Satz(SatzTyp art, List<? extends Teildatensatz> tdsList)
      Instanziiert einen neuen Satz.
      Parameters:
      art - Satzart, z.B. 100 (f. Adressteil)
      tdsList - Liste mit den Teildatensaetzen
      Since:
      5.0
    • Satz

      protected Satz(Satz satz, List<? extends Teildatensatz> tdsList)
      Instanziiert einen neuen Satz.
      Parameters:
      satz - z.B. 100 (f. Adressteil)
      tdsList - Liste mit den Teildatensaetzen
  • Method Details

    • getConfig

      public final Config getConfig()
      Liefert die aktuelle Konfiguration zurueck.
      Returns:
      aktuelles Config-Objekt
      Since:
      6.2
    • getTeildatensaetze

      public final List<Teildatensatz> getTeildatensaetze()
      Liefert alle Teildatensaetze zurueck. Aus Performance-Gruenden wird keine Kopie zurueckgegeben. Sollte eine Kopie gewuenscht sein, kann man auf cloneTeildatensaetze() zurueckgreifen.
      Returns:
      Teildatensaetze
      Since:
      0.2
    • cloneTeildatensaetze

      protected final List<Teildatensatz> cloneTeildatensaetze()
      Hier wird eine Kopie aller Teildatensaetze zurueckgegeben.
      Returns:
      Liste mit Teildatensaetzen
      Since:
      1.0
    • getNumberOfTeildatensaetze

      public final int getNumberOfTeildatensaetze()
      Liefert die Anzahl der Teildatensaetze.
      Returns:
      Anzahl der Teildatensaetze.
      Since:
      0.6
    • getTeildatensatz

      public final Teildatensatz getTeildatensatz(int n)
      Liefert den n-ten Teildatensatz aus der Liste der Teildatensätze zurueck.

      Achtung n ist nicht immer identisch mit der Satznummer des Teildatensatzes (siehe z.B. Satzart 0221.140). Dazu besser getTeildatensatzBySatzNr(int) verwenden.

      Parameters:
      n - Nummer (Index n-1 in der Liste der Teildatensätze) des Teildatensatzes (beginnend mit 1)
      Returns:
      the teildatensatz
      Since:
      0.2
    • getTeildatensatzBySatzNr

      public final Teildatensatz getTeildatensatzBySatzNr(int n)
      Liefert den Teildatensatz mit der wirklichen Satznummer n zurueck.
      Parameters:
      n - Satznummer des Teildatensatzes
      Returns:
      the teildatensatz
    • removeAllTeildatensaetze

      public final void removeAllTeildatensaetze()
      Hiermit koennen Unterklassen alle Teildatensaetze wieder entfernen (wird z.B. vom Satz 0220.030 benoetigt).
      Since:
      0.4
    • removeTeildatensatz

      public final void removeTeildatensatz(int n)
      Entfernt den gewuenschten Teildatensatz. Ein neuer Teildatensatz kann ueber add() hinzugefuegt werden.
      Parameters:
      n - der gewuenschte Teildatensatz (beginnend bei 1)
      Since:
      0.4
      See Also:
    • removeTeildatensatzBySatzNr

      public final void removeTeildatensatzBySatzNr(int n)
      Entfernt den gewuenschten Teildatensatz mit der wirklichen Satznummer n.
      Parameters:
      n - wirkliche Satznummer des Teildatensatzes
    • add

      public final void add(Teildatensatz tds)
      Und hierueber kann ein Teildatensatz hinzugefuegt werden.
      Parameters:
      tds - der neue (gefuellte) Teildatensatz
      Since:
      0.4
    • add

      public void add(Feld feld)
      Fuegt das uebergebene Feld zur Liste der Datenfelder hinzu.
      Parameters:
      feld - das Feld
    • addAll

      public void addAll(Feld feld)
      Fuegt das uebergebene Feld in jeden Teildatensatz hinzu.
      Parameters:
      feld - das Feld
      Since:
      6.1
    • add

      public void add(Feld feld, int teildatensatzNr)
      Fuegt das uebergebene Feld zur Liste der Datenfelder hinzu.
      Parameters:
      feld - the feld
      teildatensatzNr - the teildatensatz nr
    • addFiller

      public void addFiller()
      Fuellt fuer alle leeren Stellen ein entsprechendes Fuellfeld auf.
    • remove

      public void remove(String name)
      Falls ein Feld zuviel gesetzt wurde, kann es mit 'remove" wieder entfernt werden.
      Parameters:
      name - Name des Feldes
    • remove

      public void remove(Bezeichner bezeichner)
      Falls ein Feld zuviel gesetzt wurde, kann es mit 'remove" wieder entfernt werden.
      Parameters:
      bezeichner - der Feld-Beezeichner
      Since:
      1.0
    • setFeld

      public void setFeld(String name, String value)
      Setzt das angegebene Feld in allen Teildatensaetzen, in denen es gefunden wird. Normalerweise braeuchten wir eigentlich nur die erste Fundstelle setzen, da die anderen Teildatensaetze (hoffentlich) auf die gleiche Referenz verweisen - aber sicher ist sicher. Falls das Feld nicht gefunden wird, wird eine IllegalArgumentException geworfen.
      Parameters:
      name - Name des Felds (Bezeichnung)
      value - the value
      Since:
      5.2
    • setFeld

      public void setFeld(Bezeichner name, Integer value)
      Setzt den Inhalt des gewuenschten Feldes.
      Parameters:
      name - Name des Felds (Bezeichnung)
      value - neuer Inhalt
      Since:
      5.2
    • setFeld

      public void setFeld(Bezeichner name, String value)
      Setzt das angegebene Feld in allen Teildatensaetzen, in denen es gefunden wird. Normalerweise braeuchten wir eigentlich nur die erste Fundstelle setzen, da die anderen Teildatensaetze (hoffentlich) auf die gleiche Referenz verweisen - aber sicher ist sicher. Falls das Feld nicht gefunden wird, wird eine IllegalArgumentException geworfen.
      Parameters:
      name - Name des Felds (Bezeichnung)
      value - the value
      Since:
      5.2
    • setFeld

      public void setFeld(ByteAdresse adresse, String value)
      Setzt das angegebene Feld anhand der Adresse in allen Teildatensaetzen. Das macht nur Sinn fuer Felder, die in allen Teildatensaezten vorkommen (z.B. die ersten 7 Felder). Moechte man hingegen nur das Feld in einem Teildatensatz setzen, so sollte man sich den entsprechenden Teildatensatz holen und das Feld dort setzen.
      Parameters:
      adresse - Adresse des Felds (Bezeichnung)
      value - neuer Wert
      Since:
      6.2
    • setVermittler

      public final void setVermittler(String vermittler)
      Setzt den Vermittler in das entsprechende Feld.
      Parameters:
      vermittler - der Vermittler
      Since:
      5.2
    • getVermittler

      public final String getVermittler()
      Liefert den Vermittler zurueck.
      Returns:
      Vermittler
      Since:
      5.2
    • getGdvSatzartNummer

      @Deprecated public String getGdvSatzartNummer()
      Deprecated.
      bitte Satzartnummer ueber getSatzTyp() ermitteln
      Gets die Satzartnummer. Nicht verwechseln mit Satznummer!

      Manche Satzarten wie Leben haben ein Element fuer die Satznummer, im Feld Satzartnummer gespeichert. Dies ist z.B. fuer Satz 0220.010.13.6 (Bezugsrechte) der Fall.

      Returns:
      die Satzartnummer als String
    • getGdvSatzartName

      public String getGdvSatzartName()
      Returns:
      Name der GDV-Satzart gemaess Online-Version bei gdv-online.de
    • setGdvSatzartName

      protected void setGdvSatzartName(String string)
      Setzen des Namens einer Gdv-Satzart.
      Parameters:
      string - Satzart-Name
    • resetGdvSatzartName

      public void resetGdvSatzartName()
    • getSatzversion

      public final AlphaNumFeld getSatzversion()
      Liefert die Satzversion
      Returns:
      die Satzversion
    • getVersion

      public final String getVersion()
      Liefert die Version des Satzes.
      Returns:
      z.B. "1.2"
      Since:
      5.2
    • getFeld

      @Deprecated public Feld getFeld(String name) throws IllegalArgumentException
      Deprecated.
      bitte getFeld(Bezeichner) verwenden (TODO: wird mit v8 oder v9 entsorgt)
      Liefert das gewuenschte Feld.
      Parameters:
      name - gewuenschter Bezeichner des Feldes
      Returns:
      das gesuchte Feld
      Throws:
      IllegalArgumentException - falls es das Feld nicht gibt
    • hasFeld

      public boolean hasFeld(Bezeichner bezeichner)
      Fraegt ab, ob das entsprechende Feld vorhanden ist.
      Parameters:
      bezeichner - gewuenschter Bezeichner des Feldes
      Returns:
      true / false
    • hasFeld

      public boolean hasFeld(ByteAdresse adresse)
      Fraegt ab, ob das entsprechende Feld vorhanden ist.
      Parameters:
      adresse - gewuenschter Bezeichner des Feldes
      Returns:
      true / false
    • getFeld

      public Feld getFeld(Bezeichner bezeichner) throws IllegalArgumentException
      Liefert das gewuenschte Feld.
      Parameters:
      bezeichner - gewuenschter Bezeichner des Feldes
      Returns:
      das gesuchte Feld
      Throws:
      IllegalArgumentException - falls es das Feld nicht gibt
    • getFeld

      public Feld getFeld(ByteAdresse adresse)
      Holt sich das entsprechende Feld aus dem Teildatensatz.
      Parameters:
      adresse - ByteAdresse des entsprechende Feld
      Returns:
      das Feld aus dem ersten Teildatensatz.
      Since:
      6.2
    • getFeld

      public <T extends Feld> T getFeld(Bezeichner bezeichner, Class<T> clazz)
      Liefert das gewuenschte Feld im gewuenschten Typ. Falls als Typ BetragMitVorzeichen gewuenscht wird, wird das Feld mit dem angegebenen Bezeichner und das benachbarte Vorzeichenfeld zusammengefasst und als Einheit zurueckgegeben.
      Type Parameters:
      T - Unterklasse von Feld
      Parameters:
      bezeichner - gewuenschter Bezeichner des Feldes
      clazz - Feld-Typ
      Returns:
      das gesuchte Feld
      Throws:
      IllegalArgumentException - falls es das Feld nicht gibt
      Since:
      5.0
    • getFeldInhalt

      public final String getFeldInhalt(Bezeichner bezeichner) throws IllegalArgumentException
      Liefert den Inhalt des gewuenschten Feldes.
      Parameters:
      bezeichner - gewuenschter Bezeichner des Feldes
      Returns:
      Inhalt des Feldes (getrimmt, d.h. ohne Leerzeichen am Ende)
      Throws:
      IllegalArgumentException - falls es das Feld nicht gibt
      Since:
      2.0
    • getFeld

      public final Feld getFeld(Bezeichner bezeichner, int nr) throws IllegalArgumentException
      Liefert das gewuenschte Feld.
      Parameters:
      bezeichner - gewuenschter Bezeichner des Feldes
      nr - Nummer des Teildatensatzes (1, 2, ...)
      Returns:
      NULL_FELD, falls das angegebene Feld nicht gefunden wird
      Throws:
      IllegalArgumentException - falls es das Feld nicht gibt
      Since:
      2.0
    • getFeld

      @Deprecated public final Feld getFeld(String name, int nr)
      Deprecated.
      bitte getFeld(Bezeichner, int) verwenden (TODO: wird mit v8 oder v9 entsorgt)
      Liefert das gewuenschte Feld.
      Parameters:
      name - gewuenschter Bezeichner des Feldes
      nr - Nummer des Teildatensatzes (1, 2, ...)
      Returns:
      NULL_FELD, falls das angegebene Feld nicht gefunden wird
      Since:
      0.2
    • getFeldInhalt

      public final String getFeldInhalt(String name, int nr)
      Liefert den Inhalt des gewuenschten Feldes.
      Parameters:
      name - gewuenschter Bezeichner des Feldes
      nr - Nummer des Teildatensatzes (1, 2, ...)
      Returns:
      Inhalt des Feldes (getrimmt, d.h. ohne Leerzeichen am Ende)
      Since:
      0.3
    • getSatzartFeld

      public NumFeld getSatzartFeld()
      Liefert die Satzart.
      Returns:
      the satzart
    • getSatzart

      public int getSatzart()
      Liefert die Satzart zurueck.
      Returns:
      die Satzart als int
      Since:
      0.3
    • getSatzTyp

      public SatzTyp getSatzTyp()
      Liefert den Satz-Typ zurueck. Der Satz-Typ ist eine Zusammenfassung aus Satzart und Sparte (in Datensatz).
      Returns:
      den Satz-Typ
      Since:
      1.0
    • hasSparte

      public boolean hasSparte()
      Schaut nach einem Feld "SPARTE" und liefert true zurueck, falls es existiert.

      Anmerkung: Diese Methode macht nur beim Datensatz Sinn. Daher wird diese Methode ab V9 nicht mehr in Satz zur Verfuegung stehen.

      Returns:
      true, falls Sparten-Feld vorhanden ist
      Since:
      0.9
    • hasWagnisart

      public boolean hasWagnisart()
      Schaut nach einem Feld "WAGNISART" und liefert true zurueck, falls es existiert.

      Anmerkung: Diese Methode macht nur beim Datensatz Sinn. Daher wird diese Methode ab V9 nicht mehr in Satz zur Verfuegung stehen.

      Returns:
      true, falls Wagnisart-Feld vorhanden ist
      Since:
      1.0
    • hasKrankenFolgeNr

      public boolean hasKrankenFolgeNr()
      Schaut nach dem 10. Feld in Satzart 220, Sparte 20 (Kranken) und liefert true zurueck, falls es existiert.

      Anmerkung: Diese Methode macht nur beim Datensatz Sinn. Daher wird diese Methode ab V9 nicht mehr in Satz zur Verfuegung stehen.

      Returns:
      true, falls das Feld existiert
      Since:
      18.04.2018
    • hasBausparenArt

      public boolean hasBausparenArt()
      Schaut nach dem 9. Feld in Satzart 220, Sparte 580 (Bausparen) und liefert true zurueck, falls es existiert.

      Anmerkung: Diese Methode macht nur beim Datensatz Sinn. Daher wird diese Methode ab V9 nicht mehr in Satz zur Verfuegung stehen.

      Returns:
      true, falls das Feld existiert
      Since:
      30.06.2021
    • getSparte

      public int getSparte()
      Liefert den Inhalt des Sparten-Felds. Vorher sollte allerdings mittels hasSparte() geprueft werden, ob der Satz ein Sparten-Feld besitzt.

      Anmerkung: Diese Methode macht nur beim Datensatz Sinn. Daher wird diese Methode ab V9 nicht mehr in Satz zur Verfuegung stehen.

      Returns:
      die Sparte
      Since:
      0.9
    • getWagnisart

      public final String getWagnisart()
      Liefert den Inhalt des Wagnisart-Felds. Vorher sollte allerdings mittels hasWagnisart() geprueft werden, ob der Satz ein Wagnisart-Feld besitzt.

      Anmerkung: Vor 1.0 war diese Methode noch in der Datensatz-Klasse beheimatet.

      Returns:
      die Wagnisart
    • getKrankenFolgeNr

      public final String getKrankenFolgeNr()
      Liefert den Inhalt des Feldes, in dessen Bezeichnung "Folge-Nr" oder "Folgenummer" gefolgt von "zur laufenden" vorkommt (ByteAdresse 48), wenn es existiert.

      Die Methode funktioniert bei allen Satzarten und besonders auch bei frei definierten Satzarten!

      Returns:
      die KrankenFolgeNr (wenn vorhanden)
    • getBausparenArt

      public final String getBausparenArt()
      Liefert den Inhalt des 9. Feldes in Satzart 0220, Sparte 580 (Bausparen). Vorher sollte allerdings mittels hasBausparenArt() geprueft werden, ob der Satz ein Bausparenart-Feld besitzt.

      Returns:
      die Bausparenart
    • export

      public void export(Writer writer) throws IOException
      Exportiert den Satz.
      Parameters:
      writer - the writer
      Throws:
      IOException - Signals that an I/O exception has occurred.
    • export

      public void export(File file) throws IOException
      Exportiert den Satz.
      Parameters:
      file - Datei
      Throws:
      IOException - Signals that an I/O exception has occurred.
    • export

      public void export(Writer writer, String eod) throws IOException
      Export.
      Parameters:
      writer - the writer
      eod - das End-of-Datensatz- oder Trennzeichen (z.B. linefeed)
      Throws:
      IOException - Signals that an I/O exception has occurred.
    • export

      public void export(OutputStream ostream) throws IOException
      Parameters:
      ostream - z.B. System.out
      Throws:
      IOException - falls mal was schief geht
      Since:
      0.3
    • importFrom

      public Satz importFrom(String s) throws IOException
      Eigentlich wollte ich ja diese Methode "import" nennen, aber das kollidiert leider mit dem Schluesselwort "import" in Java. Inzwischen beruecksichtigt diese Import-Methode auch zusaetzlich eingestreute Newlines ("\n") oder/und Wagenruecklaeufe ("\r").

      Vor der Behebung von Issue #8 ist man davon ausgegangen, dass die Teildatensaetze hintereinander kommen und dass es keine Luecken gibt. Dies ist aber nicht der Fall. Jetzt koennen die Teildatensaetze in beliebiger Reihenfolge kommen. Nicht importierte Teildatensaetze werden am Ende aussortiert.

      Parameters:
      s - String zum Importieren
      Returns:
      Satz zur Weiterverabeitung (seit 5.2)
      Throws:
      IOException - Signals that an I/O exception has occurred.
    • removeUnusedTeildatensaetze

      protected void removeUnusedTeildatensaetze(SortedSet<Integer> usedIndexes)
    • importFrom

      public Satz importFrom(File file) throws IOException
      Importiert einen Satz von der angegebenen Datei.
      Parameters:
      file - die Import-Datei
      Returns:
      Satz zur Weiterverabeitung (seit 5.2)
      Throws:
      IOException - Signals that an I/O exception has occurred.
    • importFrom

      public final Satz importFrom(InputStream istream) throws IOException
      Import von einem InputStream.
      Parameters:
      istream - the istream
      Returns:
      Satz zur Weiterverabeitung (seit 5.2)
      Throws:
      IOException - Signals that an I/O exception has occurred.
    • importFrom

      public final Satz importFrom(Reader reader) throws IOException
      Import von einem Reader.
      Parameters:
      reader - the reader
      Returns:
      Satz zur Weiterverabeitung (seit 5.2)
      Throws:
      IOException - Signals that an I/O exception has occurred.
    • importFrom

      public final Satz importFrom(PushbackLineNumberReader reader) throws IOException
      Der hier verwendete PushbackReader wird benoetigt, damit die gelesene Satzart und Sparte wieder zurueckgesetllt werden kann.
      Parameters:
      reader - the reader
      Returns:
      Satz zur Weiterverabeitung (seit 5.2)
      Throws:
      IOException - Signals that an I/O exception has occurred.
    • matchesNextTeildatensatz

      protected boolean matchesNextTeildatensatz(PushbackLineNumberReader reader, char[] lastFeld1To7, Character satznummer) throws IOException
      Prueft, ob die kommende Zeile noch zu dem aktuellen Datensatz gehoert. D.h. es wird geprueft, ob es ein weiterer Teildatensatz oder ein neuer Datensatz ist.

      Unterklassen (wie Datensatz) sind dafuer verantwortlich, dass auch noch die Sparte/... ueberprueft wird, ob sie noch richtig ist oder ob da schon der naechste Satz beginnt. Hier (fuer den allgemeinen Fall) wird nur die Satzart ueberprueft.

      Parameters:
      reader - den Reader
      lastFeld1To7 - die Felder 1 .. 7 aus dem letzten Datensatz
      satznummer - die Satznummer
      Returns:
      true wenn wenigstens die Satzart uebereinstimmt (nur für Vor/Nachsatz anwendbar)
      Throws:
      IOException - bei I/O-Fehlern
      Since:
      0.5.1
    • isValid

      public boolean isValid()
      Aus Performance-Gruenden stuetzt sich diese Methode nicht auf die validate()-Methode ab.
      Returns:
      true/false
    • isComplete

      public boolean isComplete()
      Sind alle Teildatensaetze eines Satzes vorhanden und ausgefuellt, liefert diese Methode 'true' zurueck.
      Returns:
      false, wenn ein Teildatensatz fehlt
      Since:
      5.2
    • mergeWith

      public void mergeWith(Satz other)
      Vereinigt den anderen Satz mit dem aktuellen Satz, falls das moeglich ist. In diesem Fall werden aus dem anderen Satz alle Teildatensaetze entfernt.
      Parameters:
      other - der andere Satz, aus dem die Teildatensaetze gezogen werden
      Since:
      5.2
    • validate

      public List<net.sf.oval.ConstraintViolation> validate()
      Validiert die einzelnen Teildatensaetze mit der eingestellten Standard-Konfiguration.
      Returns:
      Liste mit Constraint-Verletzungen
    • validate

      public List<net.sf.oval.ConstraintViolation> validate(Config validationConfig)
      Im Unterschied zur normalen validate-Methode kann man hier eine die Validierung ueber Config.LAX oder Config.STRICT verschaerfen oder abmildern.
      Parameters:
      validationConfig - z.B. Config.STRICT
      Returns:
      Liste mit Constraint-Verletzungen
      Since:
      5.4
    • toString

      public final String toString()
      Overrides:
      toString in class Object
    • toShortString

      public String toShortString()
      To short string.
      Returns:
      the string
    • toLongString

      public String toLongString()
      To long string.
      Returns:
      the string
    • equals

      public boolean equals(Object obj)
      Zwei Saetze sind gleich, wenn sie die gleichen Daten besitzen. Die Idee dabei ist, dass wir die beiden Saetze exportieren und dann das Resultat vergleichen.
      Overrides:
      equals in class Object
      Parameters:
      obj - der andere Satz
      Returns:
      true, wenn beide Saetze gleich sind
      See Also:
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • getFelder

      public Collection<Feld> getFelder()
      Liefert die Felder aller Teildatensaetze zurueck.
      Returns:
      the felder
      Since:
      1.2
    • clone

      public Object clone() throws CloneNotSupportedException
      Legt eine Kopie des Satzes an.
      Overrides:
      clone in class Object
      Returns:
      Kopie
      Throws:
      CloneNotSupportedException - sollte nicht auftreten
      See Also: