blob: f80d310dcc03ec4f0efc2691045091010734de73 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package no.eliashaugsbakk.clams.server.service;
import java.text.Normalizer;
import java.util.Locale;
import java.util.regex.Pattern;
import no.eliashaugsbakk.clams.server.repository.PostsRepo;
public class SlugService {
private final PostsRepo postsRepo;
private static final Pattern NON_LATIN = Pattern.compile("[^\\w-]");
private static final Pattern WHITESPACE = Pattern.compile("[\\s]");
public SlugService(PostsRepo postsRepo) {
this.postsRepo = postsRepo;
}
public String toSlug(String input) {
if (input == null) {
return "";
}
String slug = input.toLowerCase(Locale.ENGLISH);
slug = slug.replace("æ", "ae")
.replace("ø", "oe")
.replace("å", "aa");
slug = WHITESPACE.matcher(slug).replaceAll("-");
slug = Normalizer.normalize(slug, Normalizer.Form.NFD);
slug = NON_LATIN.matcher(slug).replaceAll("");
String finalSlug = slug;
int counter = 2;
while (true) {
if (postsRepo.existsPostBySlug(finalSlug)) {
finalSlug = slug + "-" + counter;
counter++;
} else {
return finalSlug;
}
}
}
}
|