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

gdv.xport.util.SatzTyp2 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) 2013 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 26.01.2013 by Oli B. ([email protected])
 */

package gdv.xport.util;

import org.apache.commons.lang3.StringUtils;

/**
 * Der SatzTyp2 fuehrt Satzart, Sparte, Wagnisart und laufende Nummer eines
 * Teildatensatz zusammen. Sie wird von der {@link SatzFactory} fuer die
 * Registrierung verwendet.
 * 

* Vorher hiess diese Klasse "SatzNummer", wurde aber mit 1.1 in SatzTyp2e * umbenannt, da "Satznummer" als Klassenname etwas irritierend ist, da es ein * Feld "Satznummer" innerhalb eines Satzes bereits gibt. *

* * @author oliver * @since 0.9 (26.01.2013) */ public class SatzTyp2 { /** The satzart. */ private final int satzart; /** The sparte. */ private final int sparte; /** The wagnisart. */ private final int wagnisart; /** Kranken, Folgenummer */ private final int krankenFolgeNr; /** The lfd nummer. */ private final int teildatensatzNummer; /** Bausparen, bausparenArt */ private final int bausparenArt; /** * Damit laesst sich ein SatzTyp2 anhand der entsprechenden String- * Repraesentation erzeugen. * * @param nr z.B. "0210.050" * @return der entsprechende SatzTyp2 * @since 4.3 */ public static SatzTyp2 of(String nr) { int[] numbers = { -1, -1, -1, -1 }; try { String[] parts = StringUtils.split(nr, '.'); for (int i = 0; i < parts.length; i++) { numbers[i] = Integer.parseInt(parts[i]); } if (numbers[1] == 20) { // bei Kranken muss krankenFolgeNr belegt werden return new SatzTyp2(numbers[0], numbers[1], -1, numbers[2], -1, -1); } else if (numbers[1] == 580) { // bei Bausparen muss bausparenArt belegt werden return new SatzTyp2(numbers[0], numbers[1], -1, -1, -1, numbers[2]); } else { return new SatzTyp2(numbers[0], numbers[1], numbers[2], -1, numbers[3], -1); } } catch (NumberFormatException ex) { throw new IllegalArgumentException("kein Satz-Typ: '" + nr + "'", ex); } } /** * Anhand der �bergebenen Zahlen wird der entsprechende SatzTyp2 aufgebaut. * * @param args the args * @return the satz typ * @since 5.0 */ public static SatzTyp2 of(int... args) { switch (args.length) { case 1: return of(String.format("%04d", args[0])); case 2: return of(String.format("%04d.%03d", args[0], args[1])); case 3: return of(String.format("%04d.%03d.%d", args[0], args[1], args[2])); case 4: return of(String.format("%04d.%03d.%d.%d", args[0], args[1], args[2], args[3])); default: throw new IllegalArgumentException("1 - 4 arguments expected, not " + args.length); } } /** * Instantiates a new satz nummer. * * @param satzart the satzart * @deprecated wurde ersetzt durch {@link #of(String)} */ @Deprecated public SatzTyp2(final int satzart) { this(satzart, ((satzart == 210) || (satzart == 211) || (satzart == 220)) ? 0 : -1); } /** * Instantiates a new satz nummer. * * @param satzart Satzart * @param sparte Sparte * @deprecated wurde ersetzt durch {@link #of(String)} */ @Deprecated public SatzTyp2(final int satzart, final int sparte) { this(satzart, ((satzart == 210) || (satzart == 211) || (satzart == 220)) && (sparte < 0) ? 0 : sparte, -1); } /** * Instantiates a new satz nummer. * * @param satzart the satzart * @param sparte the sparte * @param artFolgeNr Wagnisart (Sparte 10) bzw. krankenFolgeNr (Sparte 20) * bzw. bausparenArt (Sparte 580, Satzart 220 (Wert 1 - 2)) * @deprecated wurde ersetzt durch {@link #of(String)} */ @Deprecated public SatzTyp2(final int satzart, final int sparte, final int artFolgeNr) { this(satzart, sparte, artFolgeNr, -1); } /** * Legt eine neue SatzNummer an. * * @param satzart die Satzart (vierstellig) * @param sparte die Sparte (dreistellig) * @param wagnisart die Wagnisart (ein- bis zweisstellig) * @param lfdNummer die laufende Nummer (Teildatensatz-Nummer) * @deprecated wurde ersetzt durch {@link #of(String)} */ @Deprecated public SatzTyp2(final int satzart, final int sparte, final int wagnisart, final int lfdNummer) { this(satzart, sparte, wagnisart, -1, lfdNummer); } /** * Legt eine neue SatzNummer an. * * @param satzart die Satzart (vierstellig) * @param sparte die Sparte (dreistellig) * @param wagnisart die Wagnisart (ein- bis zweisstellig) * @param krankenFolgeNr Folge-Nr. aus Sparte 20, Satzart 220 (Wert 1-3) * @param lfdNummer die laufende Nummer (Teildatensatz-Nummer) * @deprecated wurde ersetzt durch {@link #of(String)} */ @Deprecated public SatzTyp2(final int satzart, final int sparte, final int wagnisart, final int krankenFolgeNr, final int lfdNummer) { this(satzart, sparte, wagnisart, krankenFolgeNr, lfdNummer, -1); } /** * Legt eine neue SatzNummer an. * * @param satzart die Satzart (vierstellig) * @param sparte die Sparte (dreistellig) * @param wagnisart die Wagnisart (ein- bis zweisstellig) * @param krankenFolgeNr Folge-Nr. aus Sparte 20, Satzart 220 (Wert 1-3) * @param lfdNummer die laufende Nummer (Teildatensatz-Nummer) * @param bausparenArt die Art bei Sparte 580, Satzart 220 (Wert 1 - 2) * @since 4.X */ private SatzTyp2(final int satzart, final int sparte, final int wagnisart, final int krankenFolgeNr, final int lfdNummer, final int bausparenArt) { assert (0 <= satzart) && (satzart <= 9999) : "Satzart " + satzart + " muss zwischen 0 und 9999 liegen"; assert (sparte == -1) || ((0 <= sparte) && (sparte <= 999)) : "Sparte " + sparte + " muss zwischen 0 und 999 liegen"; assert (wagnisart == -1) || ((0 <= wagnisart) && (wagnisart <= 9)) || (wagnisart == 13) || (wagnisart == 48) : "Wagnisart " + wagnisart + " muss zwischen 0 und 9 liegen"; assert (krankenFolgeNr == -1) || ((1 <= krankenFolgeNr) && (krankenFolgeNr <= 3)) : "Kranken Folge-Nr. " + krankenFolgeNr + " muss zwischen 1 und 3 liegen"; assert (lfdNummer == -1) || ((0 <= lfdNummer) && (lfdNummer <= 9)) : "teildatensatzNummer " + lfdNummer + " muss zwischen 0 und 9 liegen"; assert (bausparenArt == -1) || ((0 <= bausparenArt) && (bausparenArt <= 9)) : "bausparenArt " + bausparenArt + " muss zwischen 0 und 9 liegen"; this.satzart = satzart; this.sparte = sparte; this.wagnisart = wagnisart; this.krankenFolgeNr = krankenFolgeNr; this.teildatensatzNummer = ((wagnisart > 0) && (lfdNummer < 0) && (sparte == 10)) ? 1 : lfdNummer; this.bausparenArt = bausparenArt; } /** * Gets the satzart. * * @return the satzart */ public int getSatzart() { return this.satzart; } /** * Gets the sparte. * * @return the sparte */ public int getSparte() { return this.sparte; } /** * Liefert die Sparte als String. * * @return z.B. "030" * @since 4.3 */ public String getSparteAsString() { return Integer.toString(this.getSparte()); } /** * Gets the wagnisart. * * @return the wagnisart */ public int getWagnisart() { return this.wagnisart; } /** * Liefert die Wagnisart als String. * * @return z.B. "9" * @since 4.3 */ public String getWagnisartAsString() { return Integer.toString(this.getWagnisart()); } /** * Liefert die BausparenArt zurueck. Dies ist bei SatzTyp2 "0220.580.01" der * letzte Teil ("01"). Diese Methode macht nur bei den Satz-Typen * "0220.580.01" und "0220.580.2" Sinn. * * @return z.B. 1 bei SatzTyp2 "0220.580.01" * @since 4.3 */ public int getBausparenArt() { return this.bausparenArt; } /** * Liefert die BausparenArt zurueck. Dies ist bei SatzTyp2 "0220.580.01" der * letzte Teil ("01"). Diese Methode macht nur bei den Satz-Typen * "0220.580.01" und "0220.580.2" Sinn. * * @return z.B. "01" bei SatzTyp2 "0220.580.01" * @since 4.3 */ public String getBausparenArtAsString() { if (this.getBausparenArt() < 0) { return ""; } if (this.getBausparenArt() == 1) { return "01"; } else { return Integer.toString(this.getBausparenArt()); } } /** * Liefert die Wagnisart, BausparenArt oder KrankenFolgeNr zurueck. Dies ist * der dritte Teil nach der Sparte, als z.B. die 0 bei * SatzTyp2.of("0220.010.0"). * * @return z.B. 1 bei SatzTyp2 "0220.580.01" * @since 4.3 */ public int getArt() { if (this.getSparte() == 10) { switch (this.getWagnisart()) { case 1: case 3: return 13; case 4: case 8: return 48; default: return this.getWagnisart(); } } else if (this.getSparte() == 20) { return this.getKrankenFolgeNr(); } else if (this.getSparte() == 580) { return this.getBausparenArt(); } return -1; } /** * Liefert die Wagnisart, BausparenArt oder KrankenFolgeNr als String zurueck. * Dies ist der dritte Teil nach der Sparte, als z.B. die "0" bei * SatzTyp2.of("0220.010.0"). * * @return z.B. "01" bei SatzTyp2 "0220.580.01" * @since 4.3 */ public String getArtAsString() { if (this.getBausparenArt() == 1) { return "01"; } else { return Integer.toString(this.getArt()); } } /** * Liefert true oder false zurueck, je nachdem, ob der SatzTyp2 eine Art hat. * Dies ist z.B. bei den Satz-Typen 0220.580.01" und "0220.580.2" der Fall. * * @return true oder false * @since 4.3 */ public boolean hasArt() { return (this.getWagnisart() >= 0) || (this.getBausparenArt() >= 0) || (this .getKrankenFolgeNr() >= 0); } /** * Gets the krankenFolgeNr. * * @return the krankenFolgeNr */ public int getKrankenFolgeNr() { return this.krankenFolgeNr; } /** * Dies ist die laufende Nummer bei der Wagnisart. * * @return the lfd nummer */ public int getTeildatensatzNummer() { return this.teildatensatzNummer; } /** * Liefert true zurueck, wenn die Sparte gesetzt ist. * * @return true, if successful */ public boolean hasSparte() { return this.getSparte() >= 0; } public boolean hasParent() { return StringUtils.countMatches(this.toString(), '.') > 0; } public SatzTyp2 getParent() { String parent = StringUtils.substringBeforeLast(this.toString(), "."); return SatzTyp2.of(parent); } /** * Liefert true zurueck, wenn die Wagnisart gesetzt ist. * * @return true, if successful */ public boolean hasWagnisart() { return this.getWagnisart() >= 0; } /** * Liefert true zurueck, wenn die Folge-Nr in Sparte 20, Satzart 220 gesetzt * ist. * * @return true, if successful */ public boolean hasKrankenFolgeNr() { return this.getKrankenFolgeNr() >= 0; } /** * Liefert true zurueck, wenn die Bausparen-Artin Sparte 580, Satzart 220 * gesetzt ist. * * @return true, if successful */ public boolean hasBausparenArt() { return this.getBausparenArt() >= 0; } /** * Liefert true zurueck, wenn die laufende Nummer (fuer Wagnisart) gesetzt * ist. * * @return true, if successful */ public boolean hasTeildatensatzNummer() { return this.getTeildatensatzNummer() >= 0; } /* * (non-Javadoc) * * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return getSatzart() * 10000000 + getSparte() * 10000 + getArt() * 100 + getTeildatensatzNummer(); } /* * (non-Javadoc) * * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (!(obj instanceof SatzTyp2)) { return false; } return this.toString() .equals(obj.toString()); } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ @Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append(String.format("%04d", this.getSatzart())); /** * * So kann auch ein fehlbesetzter Inhalt zurück gegeben werden: z.B.: * "0200..1" nach Aufruf von "new SatzTyp2(200, -1, -1, 1)" * */ if (this.hasSparte() || this.hasArt() || this.hasTeildatensatzNummer()) { if (this.getSparte() >= 0) { buf.append(String.format(".%03d", this.getSparte())); if (this.hasArt()) { buf.append("."); buf.append(this.getArtAsString()); if (this.getTeildatensatzNummer() >= 0) { buf.append("."); buf.append(this.getTeildatensatzNummer()); } } else { if (this.getTeildatensatzNummer() >= 0) { buf.append(".."); buf.append(this.getTeildatensatzNummer()); } } } else { if (hasArt()) { buf.append(".."); buf.append(this.getArtAsString()); if (this.getTeildatensatzNummer() >= 0) { buf.append("."); buf.append(this.getTeildatensatzNummer()); } } else { if (this.getTeildatensatzNummer() >= 0) { buf.append("..."); buf.append(this.getTeildatensatzNummer()); } } } } return buf.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy