Skip to content

Commit

Permalink
Bezeichner.getVariants() hinzugefügt
Browse files Browse the repository at this point in the history
  • Loading branch information
Oli B committed Dec 15, 2020
1 parent bb2d960 commit 5db8ba4
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 4 deletions.
24 changes: 24 additions & 0 deletions lib/src/main/java/gdv/xport/feld/Bezeichner.java
Expand Up @@ -18,6 +18,7 @@

package gdv.xport.feld;

import com.fasterxml.jackson.annotation.JsonIgnore;
import gdv.xport.annotation.FeldInfo;
import gdv.xport.feld.internal.UmlautMapper;
import org.apache.commons.lang.WordUtils;
Expand Down Expand Up @@ -1558,6 +1559,29 @@ public boolean equals(final Object obj) {
return this.getTechnischerName().equalsIgnoreCase(other.getTechnischerName());
}

/**
* Manche Bezeichner wie "HaftungswertungssummeInWE" koennen eventuell
* auch als Variante wie "HaftungswertungssummeInWE1" (also mit
* angehaengter "1") auftreten. Mit dieser Methode kann man sich die
* verschiedenen Varianten eines Bezeichners geben lassen.
*
* @return Liste von Varianten
* @since 4.3
*/
@JsonIgnore
public Set<Bezeichner> getVariants() {
Set<Bezeichner> variants = new HashSet<>();
variants.add(this);
char lastchar = name.charAt(name.length()-1);
if (lastchar == '1') {
String shorten = technischerName.substring(0, technischerName.length()-1).trim();
variants.add(Bezeichner.of(shorten));
} else if (Character.isAlphabetic(lastchar)) {
variants.add(Bezeichner.of(name + "1"));
}
return variants;
}

/**
* Der Hash-Code wird aus dem technischen Namen abgeleitet.
* <p>
Expand Down
10 changes: 6 additions & 4 deletions lib/src/main/java/gdv/xport/satz/Satz.java
Expand Up @@ -528,10 +528,12 @@ public boolean hasFeld(final Bezeichner bezeichner) {
*/
public Feld getFeld(final Bezeichner bezeichner) throws IllegalArgumentException {
for (Teildatensatz tds : teildatensatz) {
Feld x = tds.getFeldSafe(bezeichner);
if (x != Feld.NULL_FELD) {
return x;
}
for (Bezeichner b : bezeichner.getVariants()) {
Feld x = tds.getFeldSafe(b);
if (x != Feld.NULL_FELD) {
return x;
}
}
}
throw new IllegalArgumentException("Feld \"" + bezeichner + "\" nicht in " + this.toShortString()
+ " vorhanden!");
Expand Down
11 changes: 11 additions & 0 deletions lib/src/test/java/gdv/xport/feld/BezeichnerTest.java
Expand Up @@ -25,6 +25,11 @@
import patterntesting.runtime.junit.ObjectTester;
import patterntesting.runtime.junit.SmokeRunner;

import java.util.Set;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.greaterThan;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

Expand Down Expand Up @@ -296,4 +301,10 @@ public void testOfSatznummer() {
assertEquals(Bezeichner.SATZNUMMER, satznummer);
}

@Test
public void testGetVariants() {
Set<Bezeichner> variants = Bezeichner.HAFTUNGSWERTUNGSSUMME_IN_WAEHRUNGSEINHEITEN.getVariants();
assertThat(variants.size(), greaterThan(1));
}

}
16 changes: 16 additions & 0 deletions lib/src/test/java/gdv/xport/satz/SatzTest.java
Expand Up @@ -29,6 +29,7 @@
import gdv.xport.satz.feld.common.Feld1bis7;
import gdv.xport.satz.feld.sparte10.Feld220Wagnis0;
import gdv.xport.satz.feld.sparte10.wagnisart13.Feld221Wagnis13ZukSummenaenderungen;
import gdv.xport.satz.feld.sparte10.wagnisart2.Feld220Wagnis2Wertungssummen;
import gdv.xport.satz.feld.sparte53.Feld220;
import gdv.xport.satz.model.SatzX;
import gdv.xport.util.SatzFactory;
Expand Down Expand Up @@ -494,4 +495,19 @@ public void testWagnisartSparte40() {
assertEquals("SatzTyp von SatzFactory.getDatensatz(220, 40) sollte new SatzTyp(220, 40) entsprechen", expectedSatzTyp, satzTyp);
}

/**
* Fuer die Abwaertskompatibilitaet mit der korrigierten VUVM2018-XML-Datei
* ist es wichtig, dass auch die alten Namen (ohne "1" am Ende) weiterhin
* funktionieren.
*/
@Test
public void testGetFeldWithSameNames() {
Satz wertungssummen = new SatzX(SatzTyp.of("0220.010.2.9"), Feld220Wagnis2Wertungssummen.class);
Feld f1 = wertungssummen.getFeld(Bezeichner.HAFTUNGSWERTUNGSSUMME_IN_WAEHRUNGSEINHEITEN);
Feld f2 = wertungssummen.getFeld(Bezeichner.HAFTUNGSWERTUNGSSUMME_IN_WAEHRUNGSEINHEITEN2);
assertNotEquals(f1, f2);
Feld summe = wertungssummen.getFeld(Bezeichner.of("Haftungswertungssumme in W\u00e4hrungseinheiten 1"));
assertEquals(f1, summe);
}

}

0 comments on commit 5db8ba4

Please sign in to comment.