Skip to content

Commit

Permalink
basic validation added to PLZ ctor
Browse files Browse the repository at this point in the history
  • Loading branch information
oboehm committed Apr 12, 2017
1 parent c35091b commit 9488bc1
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 8 deletions.
6 changes: 4 additions & 2 deletions README.md
Expand Up @@ -44,15 +44,17 @@ bescheiden. Dennoch kann man sie bereits einsetzen und profitiert von sprechende
mehr verwechselt werden koennen. Wer Ideen fuer weitere Fachwerte hat, darf gerne mitmachen - sei es durch Code,
sei es durch Dokumentation oder einem schoenen Icon, oder sei es durch Anregungen und konstruktive Kritik.

Die erste Version 0.0.2 mit einer einfache IBAN- und BIC-Klasse liegt bereits vor und ist im
Bereits in Version 0.0.2 gab es einer einfache IBAN- und BIC-Klasse, die im
[Maven-Repository](http://search.maven.org/#search%7Cga%7C1%7Cjfachwert)
unter folgenden Koordinaten zu finden:
unter folgenden Koordinaten zu finden ist:

```xml
<groupId>de.jfachwert</groupId>
<artifactId>jfachwert</artifactId>
```

Mit 0.1.0 kamen dann weitere Bank-Klassen sowie ein Package fuer steuerliche Klassen hinzu.


# Ziele

Expand Down
7 changes: 7 additions & 0 deletions src/changes/changes.xml
Expand Up @@ -17,6 +17,13 @@

<body>

<release version="0.2.0" date="Q3-2017"
description="postalische Klassen hinzugef&#252;gt">
<action dev="oboehm" type="add" date="10-Apr-2017">
post-Package mit PLZ-Klasse angelegt.
</action>
</release>

<release version="0.1.0" date="03-Apr-2017"
description="Unterst&#252;tzung f&#252;r Pr&#252;fziffern">
<action dev="oboehm" type="add" date="2-Apr-2017">
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/de/jfachwert/PruefzifferVerfahren.java
Expand Up @@ -25,11 +25,10 @@

/**
* Viele Fachwerte wie IBAN, ISBN oder Steuernummer besitzen eine Pruefziffer,
* dies sich mithilfe dieses Interfaces ueberpruefen lassen.
* die sich mithilfe dieses Interfaces ueberpruefen lassen.
*
* @param <T> Typ, der vom Fachwert verwendet wird
* @author <a href="ob@aosd.de">oliver</a>
* @version $
* @since 0.1.0
*/
public interface PruefzifferVerfahren<T> extends Serializable {
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/de/jfachwert/package-info.java
Expand Up @@ -19,6 +19,11 @@
/**
* Dies ist das oberste Package von jFachwert. Unterhalb diese Bereichs sind
* die einzelne Fachwerte thematisch aufgeteilt.
* <p>
* Die meisten Implementierung verhindern, dass ungueltige Fachwerte angelegt
* werden koennen, indem die Parameter im Konstruktor validiert werden. Dies
* ist beim Aufruf des Konstruktors zu beachten.
* </p>
*
* @author <a href="ob@aosd.de">oliver</a>
* @since 0.0.1
Expand Down
45 changes: 41 additions & 4 deletions src/main/java/de/jfachwert/post/PLZ.java
Expand Up @@ -41,6 +41,31 @@ public PLZ(String plz) {
super(normalize(plz));
}

private static String validate(String code) {
String plz = normalize(code);
if (hasLandeskennung(plz)) {
plz = validateNumberOf(plz);
}
return plz;
}

private static String validateNumberOf(String plz) {
String kennung = getLandeskennung(plz);
switch (kennung) {
case "D":
if (plz.length() != 6) {
throw new IllegalArgumentException(toLongString(plz) + ": nur 5 Ziffern fuer PLZ sind erlaubt");
}
break;
case "CH":
if (plz.length() != 6) {
throw new IllegalArgumentException(toLongString(plz) + ": nur 4 Ziffern fuer PLZ sind erlaubt");
}
break;
}
return plz;
}

private static String normalize(String plz) {
return StringUtils.replaceChars(plz, " -", "").toUpperCase();
}
Expand All @@ -52,7 +77,11 @@ private static String normalize(String plz) {
* @return true, falls PLZ eine Kennung besitzt
*/
public boolean hasLandeskennung() {
char kennung = this.getCode().charAt(0);
return hasLandeskennung(this.getCode());
}

private static boolean hasLandeskennung(String plz) {
char kennung = plz.charAt(0);
return Character.isLetter(kennung);
}

Expand All @@ -66,7 +95,11 @@ public String getLandeskennung() {
if (!this.hasLandeskennung()) {
throw new IllegalStateException("keine Landeskennung angegeben");
}
return StringUtils.substringBefore(this.toLongString(), "-");
return getLandeskennung(this.getCode());
}

private static String getLandeskennung(String plz) {
return StringUtils.substringBefore(toLongString(plz), "-");
}

/**
Expand Down Expand Up @@ -103,12 +136,16 @@ public String toShortString() {
public String toLongString() {
String plz = this.getCode();
if (this.hasLandeskennung()) {
int i = StringUtils.indexOfAny(plz, "0123456789");
plz = plz.substring(0, i) + "-" + plz.substring(i);
plz = toLongString(plz);
}
return plz;
}

private static String toLongString(String plz) {
int i = StringUtils.indexOfAny(plz, "0123456789");
return plz.substring(0, i) + "-" + plz.substring(i);
}

/**
* Aus Lesbarkeitsgruenden wird zwischen Landeskennung und eigentlicher PLZ
* ein Trennzeichen mit ausgegeben.
Expand Down

0 comments on commit 9488bc1

Please sign in to comment.