001package org.kuali.common.util.base; 002 003import static com.google.common.base.Preconditions.checkNotNull; 004 005import java.util.Map; 006 007import com.google.common.collect.BiMap; 008import com.google.common.collect.HashBiMap; 009import com.google.common.collect.ImmutableBiMap; 010 011public final class Replacer { 012 013 private final ImmutableBiMap<String, String> tokens; 014 015 public String replace(final String string) { 016 String s = string; 017 for (Map.Entry<String, String> pair : tokens.entrySet()) { 018 s = s.replace(pair.getKey(), pair.getValue()); 019 } 020 return s; 021 } 022 023 public String restore(final String string) { 024 String s = string; 025 for (Map.Entry<String, String> pair : tokens.entrySet()) { 026 s = s.replace(pair.getValue(), pair.getKey()); 027 } 028 return s; 029 } 030 031 private Replacer(Builder builder) { 032 this.tokens = ImmutableBiMap.copyOf(builder.tokens); 033 } 034 035 public static Replacer create(String oldToken, String newToken) { 036 return builder().add(oldToken, newToken).build(); 037 } 038 039 public static Builder builder() { 040 return new Builder(); 041 } 042 043 public static class Builder { 044 045 private BiMap<String, String> tokens = HashBiMap.create(); 046 047 public Builder add(String oldToken, String newToken) { 048 this.tokens.put(oldToken, newToken); 049 return this; 050 } 051 052 public Builder tokens(BiMap<String, String> tokens) { 053 this.tokens = tokens; 054 return this; 055 } 056 057 public Replacer build() { 058 Replacer instance = new Replacer(this); 059 validate(instance); 060 return instance; 061 } 062 063 private static void validate(Replacer instance) { 064 checkNotNull(instance.tokens); 065 } 066 067 public BiMap<String, String> getTokens() { 068 return tokens; 069 } 070 071 public void setTokens(BiMap<String, String> tokens) { 072 this.tokens = tokens; 073 } 074 } 075 076 public BiMap<String, String> getTokens() { 077 return tokens; 078 } 079 080}