gdv.xport.util.SatzFactory Maven / Gradle / Ivy
Show all versions of gdv-xport-lib Show documentation
/*
* Copyright (c) 2009 - 2021 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 30.10.2009 by Oli B. ([email protected])
*/
package gdv.xport.util;
import gdv.xport.Datenpaket;
import gdv.xport.satz.Datensatz;
import gdv.xport.satz.Nachsatz;
import gdv.xport.satz.Satz;
import gdv.xport.satz.Vorsatz;
import gdv.xport.satz.xml.XmlService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Diese Klasse dient dazu, um einen vorgegebene Satz, der z.B. aus einem Import
* kommt, in den entsprechenden Satz wandeln zu koennen.
*
* Mit 5.0 wurde die Funktionalitaet in {@link SatzRegistry} ausgelagert. Im
* Gegensatz zu SatzFactory kann man sich von der {@link SatzRegistry} auch
* verschiedene Instanzen geben lassen - z.B. zur Unterstuetzung von aelteren
* Versionen der GDV-Satzbeschreibungen.
*
*
* @author oliver ([email protected])
* @since 0.1.0 (30.10.2009)
*/
public final class SatzFactory {
private static final Logger LOG = LogManager.getLogger(SatzFactory.class);
private static final SatzRegistry FACTORY = SatzRegistry.getInstance();
private SatzFactory() {
}
/**
* Mit dieser Klasse konnen die Registrierungen wieder komplett
* rueckgaengig gemacht werden. Diese Methode wurde vor allem zur
* Unterstuetzung der Unit-Tests eingefuehrt.
*
* TODO: wird mit v7 entfernt
*
*
* @since 4.1.1
* @deprecated wird nicht mehr benoetigt
*/
@Deprecated
public static void reset() {
FACTORY.reset();
LOG.debug("Satzfactory wurde zurueckgesetzt.");
}
/**
* Mit dieser Methode koennen eigene Klassen fuer (z.B. noch nicht
* unterstuetzte Datensaetze) registriert werden. Die Kasse muss
* einen Default-Konstruktor bereitstellen. Ansonsten wird hier eine
* {@link IllegalArgumentException} geworfen (seit 0.6).
*
* @param clazz the clazz
* @param satzart the satzart
* @since 0.2
*/
public static void register(final Class extends Satz> clazz, final int satzart) {
FACTORY.register(clazz, satzart, SatzRegistry.NO_VALIDATOR);
}
/**
* Hiermit kann man eine Registrierung rueckgaengig machen (was z.B. fuer's
* Testen hilfreich sein kann). Diese unregister-Methode ersetzt ab 4.2 die
* anderen uregister-Methoden.
*
* @param typ SatzTyp bzw. Satzart
* @since 5.0
*/
public static void unregister(SatzTyp typ) {
FACTORY.unregister(typ);
}
/**
* Mit dieser Methode koennen eigene Klassen fuer (z.B. noch nicht
* unterstuetzte Datensaetze) registriert werden.
*
* @param clazz the clazz
* @param satzNr the satz nr
* @since 5.0
*/
public static void register(final Class extends Datensatz> clazz, final SatzTyp satzNr) {
FACTORY.register(clazz, satzNr);
}
/**
* Liefert einen Satz mit der angegebenen Satzart.
*
* Das klappt nur, wenn satzart= 0001, 0052, 0100, 0102, 0200, 0202, 0300,
* 0342, 0350, 0352, 0372, 0382, 0390, 0392, 0400, 0410, 0420, 0430, 0450,
* 0500, 0550, 0600, 9950, 9951, 9952, 9999 !!
* Deswegen wurde diese Methode durch {@link #getSatz(SatzTyp)} ersetzt
*
*
* TODO: Wird mit v7 nicht mehr zur Verfuegung stehen.
*
*
* @param satzart Satzart
* @return angeforderte Satz
* @since 0.2
* @deprecated durch {@link #getSatz(SatzTyp)} abgeloest
*/
@Deprecated
public static Satz getSatz(final int satzart) {
return getSatz(SatzTyp.of(satzart));
}
/**
* Holt einen Satz.
*
* @param satztyp der Satztyp
* @return angeforderter Satz
* @since 3.2
*/
public static Satz getSatz(final SatzTyp satztyp) {
return FACTORY.getSatz(satztyp);
}
/**
* Versucht anhand des uebergebenen Strings herauszufinden, um was fuer eine
* Satzart es sich handelt und liefert dann einen entsprechenden (gefuellten)
* Satz zurueck.
*
* Im ersten Schritt wird nach der passenden Satzart gesucht. Das klappt nur,
* wenn satzart = 0001, 0052, 0100, 0102, 0200, 0202, 0300,
* 0342, 0350, 0352, 0372, 0382, 0390, 0392, 0400, 0410, 0420, 0430, 0450,
* 0500, 0550, 0600, 9950, 9951, 9952, 9999.
* Daher wird im 2. Versuch noch die Sparte hinzugenommen.
*
*
* Das klappt nicht, wenn satzart= 0220.580.01, 0220.580.2, 0220.020.1,
* 0220.020.2, 0220.020.3, 0220.010.13.1, 0220.010.13.6, 0220.010.13.7,
* 0220.010.13.8, 0220.010.13.9, 0220.010.2.1, 0220.010.2.6, 0220.010.2.7,
* 0220.010.2.8, 0220.010.2.9, 0220.010.48.1, 0220.010.48.6,
* 0220.010.48.8, 0220.010.48.9, 0220.010.5.1, 0220.010.5.6, 0220.010.5.8,
* 0220.010.5.9, 0220.010.6.1, 0220.010.6.6, 0220.010.6.8, 0220.010.6.9,
* 0220.010.7.1, 0220.010.7.6, 0220.010.7.8, 0220.010.7.9, 0220.010.9.1,
* 0220.010.9.6, 0220.010.9.7, 0220.010.9.8, 0220.010.9.9 !!
* Diese Satzarten benoetigen weitere Angaben (Wagnisart (Sparte 010),
* Satznummer (Sparte 010), KrankenfolgeNummer (Sparte 020), BausparenArt
* (Sparte 580).
* Fuer diese Satzarten kann diese Methode nicht verwendet werden.
*
*
* ACHTUNG: Um den ganz korrekten Satzaufbau zu liefern, muesste dazu die
* Version der Satzatz bekannt sein! Diese Info steht immer im Vorsatz des
* zugehörigen Datenpaketes. Lt. Auskunft vom GDV werden z.T. noch Saetze
* aus Release 01.11.2009 verarbeitet. Da hier aber die aktuellste Version
* verwendet wird, kann der zurueckgegebene Satz mehr Felder enthalten, als die
* tatsaechliche Version. Diese Unschaerfe wird hier in Kauf genommen, da i.d.R.
* immer nur Felder hinzugefuegt werden. Dies muss beim Zugriff ueber die
* Feld-Nr. beachtet werden.
*
*
* @param content the content
* @return einen gefuellten Satz
* @since 0.2
*/
public static Satz getSatz(final String content) {
return FACTORY.getSatz(content);
}
/**
* Gets the datensatz.
*
* TODO: wird mit v7 entfernt
*
*
* @param satzart den registrierten Datensatz fuer
* @return den registrierten Datensatz fuer 'satzart'
* @since 0.2
* @deprecated durch {@link #getDatensatz(SatzTyp)} abgeloest
*/
@Deprecated
public static Datensatz getDatensatz(final int satzart) {
return (Datensatz) getSatz(satzart);
}
/**
* Liefert den gewuenschten Datensatz. Mit der uebergebenen Satznummer wird
* der Datensatz spezifizert, der folgendes enthaelt:
*
* - Satzart (z.B. 210)
* - Sparte (z.B. 70 fuer Rechtsschutz)
* - Wagnisart (z.B. 1 fuer Kapitallebensversicherung)
* - Teildatensatz-Nummer (6 = Bezugsrechte, 7 = Auszahlungen, 8 =
* zukünftige Summenänderungen, 9 = Wertungssummen)
*
*
* Falls der gewuenschte Datensatz nicht registriert ist, wird der Datensatz
* anhand der von {@link XmlService} bestimmt.
*
*
* @param satzNr z.B. SatzTyp.of("0210.070.1.6")
* @return den passenden Datensatz
*/
public static Datensatz getDatensatz(final SatzTyp satzNr) {
return FACTORY.getDatensatz(satzNr);
}
/**
* Liefert ein Datenpaket mit allen unterstuetzten Satzarten.
*
* Satzarten, die mit {@link #register(Class, int)} registriert wurden,
* werden nicht aufgefuehrt!
*
* Grund: Ein Objekt vom Typ <code>Satz</code> kann
* nicht auf <code>Datensatz</code> gecastet werden.
*
*
* @return Datenpaket mit allen unterstuetzten Satzarten
* @since 0.6
*/
public static Datenpaket getAllSupportedSaetze() {
return FACTORY.getAllSupportedSaetze();
}
/**
* Liefert den passenden Vorsatz.
*
* @return Vorsatz
* @since 5.0
*/
public static Vorsatz getVorsatz() {
return FACTORY.getVorsatz();
}
/**
* Liefert den passenden Nachsatz.
*
* @return Nachsatz
* @since 5.0
*/
public static Nachsatz getNachsatz() {
return FACTORY.getNachsatz();
}
/**
* Liefert das Release der jeweiligen XML-Beschreibung, aus der die GDV-Datensaetze erzeugt
* wurden.
*
* @return das Release der erzeugten XmlSaetze
*/
public static String getGdvRelease() {
return FACTORY.getGdvRelease();
}
}