All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gdv.xport.satz.Vorsatz Maven / Gradle / Ivy

Go to download

gdv-xport-lib ist die Java-Bibliothek fuer den Umgang mit dem GDV-Format. Sie erleichtert den Export und Export dieses Datenformats.

There is a newer version: 7.2.2
Show newest version
/*
 * Copyright (c) 2009 - 2019 by Oli B.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express orimplied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * (c)reated 05.10.2009 by Oli B. ([email protected])
 */

package gdv.xport.satz;

import gdv.xport.config.Config;
import gdv.xport.feld.Bezeichner;
import gdv.xport.feld.Datum;
import gdv.xport.feld.Feld;
import gdv.xport.util.SatzTyp;
import gdv.xport.util.VersionHandler;
import gdv.xport.util.SatzRegistry;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Formatter;
import java.util.List;

import static gdv.xport.feld.Bezeichner.ERSTELLUNGSDAT_ZEITRAUM_BIS;
import static gdv.xport.feld.Bezeichner.ERSTELLUNGSDAT_ZEITRAUM_VOM;

/**
 * Dies ist der erste Satz, der Vorsatz eben.
 * 

* Da Vorsatz und Nachsatz von der Datenpaket-Klasse benoetigt werden, habe * ich das "deprecated" wieder entfernt (24-Nov-2012, oboehm). *

* * @author oliver * @since 0.0.1 (09-Okt-2009) */ public class Vorsatz extends Satz { private static final Logger LOG = LogManager.getLogger(Vorsatz.class); private final VersionHandler versionHandler; /** * Hiermit wird ein Vorsatz mit 3 Teildatensaetzen erstellt. */ public Vorsatz() { this(SatzRegistry.getInstance()); } /** * Ueber die mitgegebene Factory wird der Vorsatz genauso aufgebaut, wie * die {@link SatzRegistry} als Vorlage liefert. * * @param factory sollte die Vorlage fuer den Vorsatz liefern. * @since 5.0 */ public Vorsatz(SatzRegistry factory) { this(factory.getDatensatz(SatzTyp.of("0001")), factory); } private Vorsatz(Satz vorlage, VersionHandler versionHandler) { super(vorlage, vorlage.cloneTeildatensaetze()); this.versionHandler = versionHandler; setVuNummer(Config.getVUNummer().getInhalt()); } /** * Legt einen Vorsatz mit dem angegebenen Inhalt an. * * @param content Inhalt des Vorsatzes */ public Vorsatz(final String content) { this(); try { this.importFrom(content); LOG.debug(this + " created from \"" + content + '"'); } catch (IOException ioe) { throw new IllegalArgumentException("argument too short", ioe); } } /** * Dies ist der Copy-Constructor, mit dem man einen bestehenden Vorsatz * kopieren kann. * * @param other der originale Vorsatz */ public Vorsatz(final Vorsatz other) { this(other, other.versionHandler); } private static Bezeichner getVersionBezeichner(final int art) { try (Formatter formatter = new Formatter()) { String bezeichnung = formatter.format("Version Satzart %04d", art).toString(); return Bezeichner.of(bezeichnung); } } private static Bezeichner getVersionBezeichner(final int art, final int sparte) { try (Formatter formatter = new Formatter()) { String bezeichnung = formatter.format("Version Satzart %04d %03d", art, sparte).toString(); return Bezeichner.of(bezeichnung); } } /** * Um die VU-Nummer (Byte 5 - 9) in allen Teildatensaetzen setzen zu koennen. * * @param s * VU-Nummer (max. 5-stellig) */ public void setVuNummer(final String s) { assert s.length() <= 5 : s + " darf nur max. 5 Zeichen lang sein"; this.set(Bezeichner.VU_NUMMER, s); } /** * @return VU-Nummer */ public String getVuNummer() { return this.getFeld(Bezeichner.VU_NUMMER) .getInhalt() .trim(); } /** * Um Absender (Byte 10 - 39) in allen Teildatensaetzen setzen zu koennen. * * @param name Absender */ public void setAbsender(final String name) { this.set(Bezeichner.ABSENDER, name); } /** * Liefert den Absender (Byte 10 - 39). * * @return Absender */ public String getAbsender() { return this.getFeld(Bezeichner.ABSENDER).getInhalt().trim(); } /** * Um Adressat (Byte 40 - 69) in allen Teildatensaetzen setzen zu koennen. * * @param name neuer Adressat */ public void setAdressat(final String name) { this.set(Bezeichner.ADRESSAT, name); } /** * @return Adressat */ public String getAdressat() { return this.getFeld(Bezeichner.ADRESSAT) .getInhalt() .trim(); } /** * Um Erstellungs-Datum Zeitraum vom- Zeitraum bis (Byte 70 - 85) in allen * Teildatensaetzen setzen zu koennen. * * @param startDatum im Format "TTMMJJJJ" * @param endDatum im Format "TTMMJJJJ" */ public void setErstellungsZeitraum(final String startDatum, final String endDatum) { Datum von = new Datum(Bezeichner.ERSTELLUNGSDAT_ZEITRAUM_VOM, 70); Datum bis = new Datum(Bezeichner.ERSTELLUNGSDAT_ZEITRAUM_BIS, 78); von.setInhalt(startDatum); bis.setInhalt(endDatum); this.set(Bezeichner.ERSTELLUNGS_DAT_ZEITRAUM_VOM_ZEITRAUM_BIS, (von .getInhalt()).concat(bis.getInhalt())); } /** * Um Erstellungs-Datum Zeitraum vom- Zeitraum bis (Byte 70 - 85) in allen * Teildatensaetzen setzen zu koennen. * * @param startDatum im Format "TTMMJJJJ" * @param endDatum im Format "TTMMJJJJ" */ public void setErstellungsZeitraum(final Datum startDatum, final Datum endDatum) { this.set(Bezeichner.ERSTELLUNGS_DAT_ZEITRAUM_VOM_ZEITRAUM_BIS, (startDatum .getInhalt()).concat(endDatum.getInhalt())); } /** * @return Erstellungszeitraum (VonDatum, BisDatum) * TODO: Hier wuerde ich als Ergebnis eher eine Date-Range erwarten, */ public String getErstellungsZeitraum() { return this.getFeld(Bezeichner.ERSTELLUNGS_DAT_ZEITRAUM_VOM_ZEITRAUM_BIS).getInhalt().trim(); } public void setErstellungsZeitraumVon(Datum von) { setErstellungsZeitraum(von, getErstellungsZeitraumBis()); } public Datum getErstellungsZeitraumVon() { Feld vonBis = super.getFeld(Bezeichner.ERSTELLUNGS_DAT_ZEITRAUM_VOM_ZEITRAUM_BIS); Datum von = new Datum(ERSTELLUNGSDAT_ZEITRAUM_VOM, 8, vonBis.getByteAdresse()); von.setInhalt(vonBis.getInhalt().substring(0, 8)); return von; } public void setErstellungsZeitraumBis(Datum bis) { setErstellungsZeitraum(getErstellungsZeitraumVon(), bis); } public Datum getErstellungsZeitraumBis() { Feld vonBis = super.getFeld(Bezeichner.ERSTELLUNGS_DAT_ZEITRAUM_VOM_ZEITRAUM_BIS); Datum bis = new Datum(ERSTELLUNGSDAT_ZEITRAUM_BIS, 8, vonBis.getByteAdresse() + 8); bis.setInhalt(vonBis.getInhalt().substring(8)); return bis; } /** * Um Geschaeftsstelle/Vermittler (Byte 86 - 95) in allen Teildatensaetzen * setzen zu koennen. * * @param s neuer Vermittler */ public void setVermittler(final String s) { this.set(Bezeichner.GESCHAEFTSSTELLE_VERMITTLER, s); } /** * @return Vermittler */ public String getVermittler() { return this.getFeld(Bezeichner.GESCHAEFTSSTELLE_VERMITTLER) .getInhalt() .trim(); } /** * Setzen der Satzart-Version eines Datensatzes, falls die Satzart im Vorsatz * bekannt ist. * * @param satz der Satz * @return die Satzversion oder null wenn Satzart unbekannt */ public String getVersion(Satz satz) { return getVersion(satz.getSatzTyp()); } /** * Ermittelt die Version des uebergebenen Bezeichners. * * @param bezeichner z.B. VERSION_VORSATZ; hier koennen alle die * Bezeichner-Konstanten gewaehlt werden, die mit "VERSION_" * anfangen. * @return Version des gewuenschten Bezeichners * @since 2.0 */ public String getVersion(final Bezeichner bezeichner) { return this.getFeld(bezeichner).getInhalt(); } /** * Ermittelt die Version des uebergebenen Bezeichners. * * @param bezeichner z.B. VERSION_VORSATZ; hier koennen alle die * Bezeichner-Konstanten gewaehlt werden, die mit "VERSION_" * anfangen. * @return Version des gewuenschten Bezeichners */ public String getVersion(final String bezeichner) { return this.getFeld(bezeichner).getInhalt(); } /** * @param art Satzart * @return z.B. 1.1 */ public String getVersion(final int art) { return this.getVersion(getVersionBezeichner(art)); } /** * @param art Satzart * @param sparte z.B. 70 (Rechtsschutz) * @return z.B. 1.1 */ public String getVersion(final int art, final int sparte) { return this.getVersion(getVersionBezeichner(art, sparte)); } /** * Liefert die Version zum gewuenschten SatzTyp. * * @param satzTyp z.B. SatzTyp.of("0100"); * @return z.B. 2.3 * @since 5.0 */ public String getVersion(SatzTyp satzTyp) { Bezeichner bezeichner = Bezeichner.of("Version Satzart " + satzTyp); return this.getVersion(bezeichner); } /** * Setzen der Satzart-Version eines Datensatzes. * * @param satz der Satz */ public void setVersion(Satz satz) { StringBuilder buf = new StringBuilder(); String[] parts = StringUtils.split(satz.getSatzTyp() .toString(), '.'); buf.append("Satzart"); buf.append(parts[0]); if (parts.length > 1) buf.append(parts[1]); Bezeichner bezeichner = new Bezeichner(buf.toString()); if (this.hasFeld(bezeichner)) { this.set(bezeichner, satz.getSatzversion() .getInhalt()); } else { /* * @Oli: im Vorsatz gibt es kein Feld mit Namen"Satzart 0212.050" sondern nur "Satzart 0212" ! * Damit sind KFZ - Fahrzeugdaten "Antrag" gemeint. * Oder waere es besser, dies in den VUVMs zu korrigieren? */ if (satz.getSatzTyp().toString().equalsIgnoreCase("0212.050")) { buf = new StringBuilder(); buf.append("Satzart"); buf.append(parts[0]); bezeichner = new Bezeichner(buf.toString()); if (this.hasFeld(bezeichner)) { this.set(bezeichner, satz.getSatzversion() .getInhalt()); } else { LOG.warn("Version Satzart {} ist im Vorsatz unbekannt.", satz.getSatzTyp()); } } } } /** * Setzen der Satzart-Version eines SatzTyps. * * @param satzTyp der Satztyp */ public void setVersion(SatzTyp satzTyp) { StringBuilder buf = new StringBuilder(); String[] parts = StringUtils.split(satzTyp.toString(), '.'); buf.append("Satzart"); buf.append(parts[0]); if (parts.length > 1) buf.append(parts[1]); Bezeichner bezeichner = new Bezeichner(buf.toString()); if (this.hasFeld(bezeichner)) { this.set(bezeichner, versionHandler.getVersionOf(satzTyp)); } else { throw new IllegalArgumentException("Version Satzart " + bezeichner + " unbekannt"); } } /** * Setzen der Version. * * @param bezeichner Bezeichner * @param version z.B. "1.2" * @since 4.1.1 */ public void setVersion(Bezeichner bezeichner, String version) { this.getFeld(bezeichner).setInhalt(version); } /** * Setzen der Version. *

* TODO: wurde nur intern benoetigt und wird mit v5.2 entfernt *

* * @param bezeichner Bezeichner * @param version z.B. "1.2" * @since 4.1.1 * @deprecated durch {@link #setVersion(Bezeichner, String)} ersetzt */ @Deprecated public void setVersion(String bezeichner, String version) { this.getFeld(bezeichner).setInhalt(version); } /** * Setzen der Version. * * @param art Satzart * @param version z.B. "1.2" * @since 4.1.1 * @deprecated durch {@link #setVersion(Bezeichner, String)} ersetzt */ @Deprecated public void setVersion(int art, String version) { this.setVersion(getVersionBezeichner(art), version); } /** * Setzen der Version. * * @param art Satzart * @param sparte Sparte * @param version z.B. "1.2" * @since 4.1.1 */ public void setVersion(int art, int sparte, String version) { this.setVersion(getVersionBezeichner(art, sparte), version); } /** * Da im Feld "Erstellungs-Datum Zeitraum vom- Zeitraum bis" (Adresse 70-85) * 2 Datumsfelder zusammengefasst sind, ist diese Methode ueberschrieben, * um diese beiden Felder auch einzeln abfragen zu koennen. * * @param bezeichner gesuchtes Field * @return Wert des Feldes als String */ @Override public String get(Bezeichner bezeichner) { return getFeld(bezeichner).getInhalt(); } /** * Da im Feld "Erstellungs-Datum Zeitraum vom- Zeitraum bis" (Adresse 70-85) * 2 Datumsfelder zusammengefasst sind, ist diese Methode ueberschrieben, * um diese beiden Felder auch einzeln abfragen zu koennen. * * @param bezeichner gesuchtes Field * @return Feld */ @Override public Feld getFeld(Bezeichner bezeichner) throws IllegalArgumentException { if (bezeichner.equals(ERSTELLUNGSDAT_ZEITRAUM_BIS)) { return getErstellungsZeitraumBis(); } else if (bezeichner.equals(ERSTELLUNGSDAT_ZEITRAUM_VOM)) { return getErstellungsZeitraumVon(); } return super.getFeld(bezeichner); } /** * Hier wird {@link Satz#getFelder()} ueberschrieben, um das Feld * "Erstellungs-Datum, Zeitraum von, Zeitraum bis" in zwei Felder * aufzuteilen. Dies wird u.a. von den verschiedenen Formattern * (wie z.B. {@link gdv.xport.util.CsvFormatter} fuer die Aufbereitung * der Ausgabe verwendet. * * @return alle Felder in der richtigen Reihenfolge */ @Override public Collection getFelder() { List felder = new ArrayList<>(); for (Feld f : super.getFelder()) { if (f.getBezeichner().equals(Bezeichner.ERSTELLUNGS_DAT_ZEITRAUM_VOM_ZEITRAUM_BIS)) { felder.add(getErstellungsZeitraumVon()); felder.add(getErstellungsZeitraumBis()); } else { felder.add(f); } } return felder; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy