Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
gdv.xport.satz.model.Satz220 Maven / Gradle / Ivy
/*
* Copyright (c) 2011-2021 by aosd.de
*
* 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 08.04.2011 by Oli B. ([email protected] )
*/
package gdv.xport.satz.model;
import gdv.xport.annotation.FeldInfo;
import gdv.xport.feld.Bezeichner;
import gdv.xport.satz.feld.sparte10.Feld220Wagnis0;
import gdv.xport.satz.feld.sparte10.wagnisart13.*;
import gdv.xport.satz.feld.sparte10.wagnisart2.*;
import gdv.xport.satz.feld.sparte10.wagnisart48.Feld220Wagnis48;
import gdv.xport.satz.feld.sparte10.wagnisart48.Feld220Wagnis48Bezugsrechte;
import gdv.xport.satz.feld.sparte10.wagnisart48.Feld220Wagnis48Wertungssummen;
import gdv.xport.satz.feld.sparte10.wagnisart48.Feld220Wagnis48ZukSummenaenderungen;
import gdv.xport.satz.feld.sparte10.wagnisart5.Feld220Wagnis5;
import gdv.xport.satz.feld.sparte10.wagnisart5.Feld220Wagnis5Bezugsrechte;
import gdv.xport.satz.feld.sparte10.wagnisart5.Feld220Wagnis5Wertungssummen;
import gdv.xport.satz.feld.sparte10.wagnisart5.Feld220Wagnis5ZukSummenaenderungen;
import gdv.xport.satz.feld.sparte10.wagnisart6.Feld220Wagnis6;
import gdv.xport.satz.feld.sparte10.wagnisart6.Feld220Wagnis6Bezugsrechte;
import gdv.xport.satz.feld.sparte10.wagnisart6.Feld220Wagnis6Wertungssummen;
import gdv.xport.satz.feld.sparte10.wagnisart6.Feld220Wagnis6ZukSummenaenderungen;
import gdv.xport.satz.feld.sparte10.wagnisart7.Feld220Wagnis7;
import gdv.xport.satz.feld.sparte10.wagnisart7.Feld220Wagnis7Bezugsrechte;
import gdv.xport.satz.feld.sparte10.wagnisart7.Feld220Wagnis7Wertungssummen;
import gdv.xport.satz.feld.sparte10.wagnisart7.Feld220Wagnis7ZukSummenaenderungen;
import gdv.xport.satz.feld.sparte10.wagnisart9.*;
import gdv.xport.satz.feld.sparte130.Feld220;
import gdv.xport.util.SatzTyp;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.lang.reflect.Field;
import java.util.*;
/**
* Diese Klasse repraesentiert die Satzart 220. Es handelt es sich dabei um eine
* alternative Implementierung der SpartenspezifischerTeil-Klasse, die nach dem
* Soplet- Ansatz (s. soplets.org )
* implementiert wurde.
*
* @author oliver ([email protected] )
* @since 0.6 (08.04.2011)
* @deprecated besser {@link gdv.xport.util.SatzFactory#getSatz(SatzTyp)} verwenden
*/
@Deprecated
public class Satz220 extends SpartensatzX {
private static final Logger LOG = LogManager.getLogger(Satz220.class);
/** Mapping table for sparte to Feldxxx enumeration. */
private static final Map MAPPING = new HashMap<>();
private static final List[] MAPPING_SPARTE10 = new List[10];
static {
initMappingSparte10();
initMapping();
}
private static void initMappingSparte10() {
MAPPING_SPARTE10[0] = Collections.singletonList(Feld220Wagnis0.values());
MAPPING_SPARTE10[1] = Arrays.asList(Feld220Wagnis13.values(), Feld220Wagnis13Bezugsrechte.values(),
Feld220Wagnis13Auszahlungen.values(), Feld220Wagnis13ZukSummenaenderungen.values(),
Feld220Wagnis13Wertungssummen.values());
MAPPING_SPARTE10[2] = Arrays.asList(Feld220Wagnis2.values(), Feld220Wagnis2Bezugsrechte.values(),
Feld220Wagnis2Auszahlungen.values(), Feld220Wagnis2ZukSummenaenderungen.values(),
Feld220Wagnis2Wertungssummen.values());
MAPPING_SPARTE10[3] = MAPPING_SPARTE10[1];
MAPPING_SPARTE10[4] = Arrays.asList(Feld220Wagnis48.values(), Feld220Wagnis48Bezugsrechte.values(),
Feld220Wagnis48ZukSummenaenderungen.values(), Feld220Wagnis48Wertungssummen.values());
MAPPING_SPARTE10[5] = Arrays.asList(Feld220Wagnis5.values(), Feld220Wagnis5Bezugsrechte.values(),
Feld220Wagnis5ZukSummenaenderungen.values(), Feld220Wagnis5Wertungssummen.values());
MAPPING_SPARTE10[6] = Arrays.asList(Feld220Wagnis6.values(), Feld220Wagnis6Bezugsrechte.values(),
Feld220Wagnis6ZukSummenaenderungen.values(), Feld220Wagnis6Wertungssummen.values());
MAPPING_SPARTE10[7] = Arrays.asList(Feld220Wagnis7.values(), Feld220Wagnis7Bezugsrechte.values(),
Feld220Wagnis7ZukSummenaenderungen.values(), Feld220Wagnis7Wertungssummen.values());
MAPPING_SPARTE10[8] = MAPPING_SPARTE10[4];
MAPPING_SPARTE10[9] = Arrays.asList(Feld220Wagnis9.values(), Feld220Wagnis9Bezugsrechte.values(),
Feld220Wagnis9Auszahlungen.values(), Feld220Wagnis9ZukSummenaenderungen.values(),
Feld220Wagnis9Wertungssummen.values());
}
private static void initMapping() {
MAPPING.put(30, gdv.xport.satz.feld.sparte30.Feld220.values());
MAPPING.put(40, gdv.xport.satz.feld.sparte40.Feld220.values());
MAPPING.put(51, gdv.xport.satz.feld.sparte51.Feld220.values());
MAPPING.put(52, gdv.xport.satz.feld.sparte52.Feld220.values());
MAPPING.put(53, gdv.xport.satz.feld.sparte53.Feld220.values());
MAPPING.put(55, gdv.xport.satz.feld.sparte55.Feld220.values());
MAPPING.put(59, gdv.xport.satz.feld.sparte59.Feld220.values());
MAPPING.put(70, gdv.xport.satz.feld.sparte70.Feld220.values());
MAPPING.put(110, gdv.xport.satz.feld.sparte110.Feld220.values());
MAPPING.put(140, Feld220.values());
MAPPING.put(510, gdv.xport.satz.feld.sparte510.Feld220.values());
}
/**
* Default-Konstruktor.
*/
public Satz220() {
this(UNKNOWN_SPARTE);
}
/**
* Legt ein neues Satz220-Objekt fuer die uebergebene Sparte an.
*
* @param sparte Sparte (z.B. 10)
*/
public Satz220(final int sparte) {
super(220, sparte);
if (sparte == 10) {
LOG.warn("Wagnisart fehlt - fuer Sparte 10 bitte anderen Konstruktor verwenden.");
}
}
/**
* Dieser Konstruktor ist fuer Sparte 10 gedacht, wo es verschiedene
* Auspraegungen durch die Wagnisart gibt.
*
* @param sparte sollte immer 10 sein
* @param wagnisart Zahl von 0 bis 9
*/
public Satz220(final int sparte, final int wagnisart) {
this(MAPPING_SPARTE10[wagnisart].get(0));
if (sparte != 10) {
throw new IllegalArgumentException(
"falsche Sparte " + sparte + ": Wagnisart " + wagnisart + " gibt es nur bei Sparte 10");
}
this.getFeld(Bezeichner.WAGNISART).setInhalt(wagnisart);
}
/**
* Dies ist der Konstruktor fuer Sparte 10. Hier gibt es verschiedene
* Belegung der Wagnisart, die ueber die Felder vorbelegt werden.
*
* @param felder z.B. Feld220Wagnis9.values()
*/
public Satz220(final Enum[] felder) {
super(220, 10, felder);
this.getFeld(Bezeichner.WAGNISART).setInhalt(getWagnisartFrom(MAPPING_SPARTE10, felder));
}
protected static int getWagnisartFrom(List[] mapping10, Enum[] felder) {
for (int art = 0; art < mapping10.length; art++) {
for (Enum[] enumValues : mapping10[art]) {
if (Arrays.equals(felder, enumValues)) {
return art;
}
}
}
return 0;
}
@Override
public void set(Bezeichner name, String value) {
if ((this.getSparte() == 10) && !hasFeld(name)) {
setUpTeildatensatzeOf(this, name, MAPPING_SPARTE10);
}
super.set(name, value);
}
protected static void setUpTeildatensatzeOf(SatzX satz, Bezeichner name, List[] mappings) {
for (int art = 0; art < mappings.length; art++) {
if (hasIn(mappings[art], name)) {
LOG.info("{} wird fuer Wagnisart {} aufgesetzt.", satz.toShortString(), art);
setUpTeildatensatzeOf(satz, name, mappings[art]);
break;
}
}
}
private static void setUpTeildatensatzeOf(SatzX satz, Bezeichner name, List valuesList) {
for (Enum[] sparte10Values : valuesList) {
if (hasInSparte10(name, sparte10Values)) {
satz.setUpTeildatensaetze(sparte10Values);
return;
}
}
LOG.warn("{} mit {} konnte nicht aufgesetzt werden.", satz.toShortString(), name);
}
private static boolean hasIn(List mappingList, Bezeichner name) {
for (Enum[] sparte10Values : mappingList) {
if (hasInSparte10(name, sparte10Values)) {
return true;
}
}
return false;
}
private static boolean hasInSparte10(Bezeichner name, Enum[] sparte10Values) {
for (Enum e : sparte10Values) {
if (name.equals(bezeichnerOf(e))) {
return true;
}
}
return false;
}
private static Bezeichner bezeichnerOf(final Enum enumFeld) {
FeldInfo feldInfo = getFeldInfo(enumFeld);
String bezeichnung = feldInfo != null && StringUtils.isNotBlank(feldInfo.bezeichnung())
? feldInfo.bezeichnung()
: null;
String name = enumFeld.name();
String shortened = name.substring(0, name.length() - 1);
Field[] fields = Bezeichner.class.getFields();
try {
for (Field field : fields) {
String fieldName = field.getName();
// Vergleiche Enum-Bezeichnung mit Name des Bezeichners
if (bezeichnung != null && Bezeichner.class.isAssignableFrom(field.getType())) {
Bezeichner bezeichner = (Bezeichner) field.get(Bezeichner.class);
if (bezeichnung.equals(bezeichner.getName())) {
return bezeichner;
}
}
// Vergleiche Enum-Konstante mit Name der Bezeichnerkonstante
if (name.equalsIgnoreCase(fieldName) || shortened.equalsIgnoreCase(fieldName)) {
return (Bezeichner) field.get(null);
}
}
return Bezeichner.of(name.replaceAll("_", " "));
} catch (IllegalAccessException iae) {
throw new IllegalArgumentException("cannot get Bezeichner for " + enumFeld);
}
}
private static FeldInfo getFeldInfo(final Enum feldX) {
try {
Field field = feldX.getClass().getField(feldX.name());
return field.getAnnotation(FeldInfo.class);
} catch (NoSuchFieldException nsfe) {
throw new InternalError("no field " + feldX + " (" + nsfe + ")");
}
}
/**
* Liefert die Mapping-Tabelle zu Sparte - Feldxxx zurueck.
*
* @return Mapping-Tabelle
* @see gdv.xport.satz.model.SpartensatzX#getMapping()
*/
@Override
protected Map getMapping() {
return MAPPING;
}
}