Skip to content

Commit

Permalink
Merge pull request #48 from storbukas/master
Browse files Browse the repository at this point in the history
Updated mail-validation, added new features
  • Loading branch information
eivinhb authored Feb 11, 2021
2 parents 71b878c + 6bca620 commit 3e9a189
Show file tree
Hide file tree
Showing 20 changed files with 5,849 additions and 9,953 deletions.
12 changes: 4 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ Maven Site: [http://bekkopen.github.com/NoCommons/](http://bekkopen.github.com/N
* validering
* generering
* Postnummer
* oppslag
* validering
* Kommunenummer / kommunenavn
* oppslag
* validering
* Bank
* Kontonummer validering og generering
Expand All @@ -37,10 +41,6 @@ Maven Site: [http://bekkopen.github.com/NoCommons/](http://bekkopen.github.com/N
* Finn fylkesnummer for fylke
* Finn fylke for fylkesnummer
* Validere fylke og / eller fylkesnummer
* Kommunenummer
* Finn kommunenummer for kommune
* Finn kommune for kommunenummer
* Validere kommune og / eller kommunenummer
* Registreringsnummer
* Validering av regnummer
* Finn trafikkstasjon for bilnummer
Expand All @@ -49,7 +49,3 @@ Maven Site: [http://bekkopen.github.com/NoCommons/](http://bekkopen.github.com/N
* Gyldig nummer (mange er reserverte)
* "Korrekte" skrivemåter
* Diverse logikk rundt nummerserier - finn leverandør, fylke etc
* Postnummer
* Finn poststed basert på postnummer og omvendt
* Finn poststed basert på starten av postnummer og omvendt
* Basere seg på lister fra posten: [http://epab.posten.no/Norsk/Nedlasting/NedlastingMeny.htm](http://epab.posten.no/Norsk/Nedlasting/NedlastingMeny.htm])
16 changes: 16 additions & 0 deletions src/main/java/no/bekk/bekkopen/common/HelperFunctions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package no.bekk.bekkopen.common;

import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;

/**
* Helper functions used in this project
*/
public class HelperFunctions {
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
}
119 changes: 62 additions & 57 deletions src/main/java/no/bekk/bekkopen/mail/MailDataLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,77 +5,82 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import no.bekk.bekkopen.mail.model.Kommunenavn;
import no.bekk.bekkopen.mail.model.Kommunenummer;
import no.bekk.bekkopen.mail.model.PostInfo;
import no.bekk.bekkopen.mail.model.Postnummer;
import no.bekk.bekkopen.mail.model.PostnummerKategori;
import no.bekk.bekkopen.mail.model.Poststed;

/**
* This class loads data about Postnummer and Poststed into memory. The class
* provides a method that loads data from a file included in the jar, and
* another method that loads data from a given InputStream.
*/
public class MailDataLoader {

private MailDataLoader() {
super();
}
private MailDataLoader() {
super();
}

public static void loadFromInputStream(InputStream is) {
if (is == null) {
throw new IllegalArgumentException();
}

Map<Postnummer, PostInfo> postInfo = new HashMap<>();

try (
InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
) {
String line;
while ((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, ",", false);

Postnummer postnummer = MailValidator.getPostnummer(st.nextToken());
Poststed poststed = new Poststed(st.nextToken());
Kommunenummer kommunenummer = MailValidator.getKommunenummer(st.nextToken());
Kommunenavn kommunenavn = new Kommunenavn(st.nextToken());
PostnummerKategori postnummerKategori = MailValidator.getPostnummerKategori(st.nextToken());

public static void loadFromInputStream(InputStream is) throws IOException {
if (is == null) {
throw new IllegalArgumentException();
}
Map<Poststed, List<Postnummer>> poststedMap = new HashMap<>();
Map<Postnummer, Poststed> postnummerMap = new HashMap<>();
InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, "\t", false);
Postnummer pn = MailValidator.getPostnummer(st.nextToken());
Poststed ps = new Poststed(st.nextToken());
// add to postInfo
postInfo.put(
postnummer,
new PostInfo(
postnummer,
poststed,
kommunenummer,
kommunenavn,
postnummerKategori
)
);
}
} catch (IOException e) {
e.printStackTrace();
}

// add to poststedMap
List<Postnummer> postnummerList = new ArrayList<>();
if (poststedMap.containsKey(ps)) {
postnummerList = poststedMap.get(ps);
}
if (!postnummerList.contains(pn)) {
postnummerList.add(pn);
}
poststedMap.put(ps, postnummerList);
MailValidator.setPostInfo(postInfo);
}

// add to postnummerMap
if (!postnummerMap.containsKey(pn)) {
postnummerMap.put(pn, ps);
}
}
br.close();
isr.close();
MailValidator.setPoststedMap(poststedMap);
MailValidator.setPostnummerMap(postnummerMap);
}
public static boolean loadFromClassPath() {
boolean success = false;

public static boolean loadFromClassPath() {
boolean success = false;
InputStream is = null;
try {
is = MailDataLoader.class.getResourceAsStream("/tilbud5.txt");
loadFromInputStream(is);
success = true;
} catch (IOException e) {
// ignore
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
// ignore
}
}
return success;
}
try (InputStream is = MailDataLoader.class.getResourceAsStream("/postnummer.csv")) {
loadFromInputStream(is);
success = true;
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}

return success;
}
}
Loading

0 comments on commit 3e9a189

Please sign in to comment.