gdv.xport.util.SatzTyp2 Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gdv-xport-lib Show documentation
Show all versions of gdv-xport-lib Show documentation
gdv-xport-lib ist die Java-Bibliothek fuer den Umgang mit dem GDV-Format.
Sie erleichtert den Export und Export dieses Datenformats.
/*
* 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();
}
}