1 package org.kuali.common.util.function;
2
3 import static com.google.common.base.Preconditions.checkArgument;
4 import static com.google.common.base.Preconditions.checkNotNull;
5
6 import org.apache.commons.lang3.StringUtils;
7
8 import com.google.common.base.Function;
9 import com.google.common.base.Optional;
10
11 public final class PrefixFunction implements Function<String, String> {
12
13 private final String prefix;
14 private final Optional<String> separator;
15
16 @Override
17 public String apply(String input) {
18 checkNotNull(input, "'input' cannot be null");
19 StringBuilder sb = new StringBuilder();
20 sb.append(prefix);
21 if (separator.isPresent()) {
22 sb.append(separator.get());
23 }
24 sb.append(input);
25 return sb.toString();
26 }
27
28 private PrefixFunction(Builder builder) {
29 this.prefix = builder.prefix;
30 this.separator = builder.separator;
31 }
32
33 public static PrefixFunction of(String prefix) {
34 return builder(prefix).build();
35 }
36
37 public static PrefixFunction of(String prefix, String separator) {
38 return builder(prefix).separator(separator).build();
39 }
40
41 public static Builder builder(String prefix) {
42 return new Builder(prefix);
43 }
44
45 public static class Builder implements org.apache.commons.lang3.builder.Builder<PrefixFunction> {
46
47
48 private final String prefix;
49
50
51 private Optional<String> separator = Optional.absent();
52
53 public Builder(String prefix) {
54 this.prefix = prefix;
55 }
56
57 public Builder separator(String separator) {
58 this.separator = Optional.of(separator);
59 return this;
60 }
61
62 @Override
63 public PrefixFunction build() {
64 PrefixFunction instance = new PrefixFunction(this);
65 validate(instance);
66 return instance;
67 }
68
69 private static void validate(PrefixFunction instance) {
70 checkArgument(!StringUtils.isBlank(instance.prefix), "'prefix' cannot be blank");
71 checkNotNull(instance.separator, "'separator' cannot be null");
72 if (instance.separator.isPresent()) {
73 checkArgument(!StringUtils.isBlank(instance.separator.get()), "'separator' cannot be blank");
74 }
75 }
76
77 public Optional<String> getSeparator() {
78 return separator;
79 }
80
81 public void setSeparator(Optional<String> separator) {
82 this.separator = separator;
83 }
84
85 public String getPrefix() {
86 return prefix;
87 }
88 }
89
90 }