Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated mail-validation, added new features #48

Merged
merged 2 commits into from
Feb 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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