package org.hedgecode.chess.scanner.regex;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+import static org.hedgecode.chess.scanner.ScannerConstants.*;
+
/**
* RegexBuilder
*
*/
public class RegexBuilder {
- public static String build(RegexType type, String target, RegexParams params) {
+ public static String build(Type type, String target, RegexParams params) {
return type.format(
target,
params
);
}
+ public enum Type {
+
+ TOURNAMENT {
+ @Override
+ public String format(String target, RegexParams params) {
+ if (params.getPageId() != null) {
+ target = target.replace(
+ RegexParams.PAGE_ID,
+ params.getPageId()
+ );
+ }
+ return target.replace(
+ RegexParams.TOURNAMENT_ID,
+ params.getTournamentId()
+ );
+ }
+ },
+
+ GAME {
+ @Override
+ public String format(String target, RegexParams params) {
+ if (params.getTournamentId() != null) {
+ target = target.replace(
+ RegexParams.TOURNAMENT_ID,
+ params.getTournamentId()
+ );
+ }
+ return target.replace(
+ RegexParams.GAME_ID,
+ params.getGameId()
+ );
+ }
+ },
+
+ QUERY {
+ @Override
+ public String format(String target, RegexParams params) {
+ return target.replace(
+ RegexParams.QUERY,
+ params.isUrlEncode()
+ ? urlEncode(params.getQuery())
+ : params.getQuery()
+ );
+ }
+ };
+
+ public abstract String format(String target, RegexParams params);
+
+ private static String urlEncode(String query) throws RuntimeException {
+ String encodeQuery;
+ try {
+ encodeQuery = URLEncoder.encode(
+ query, CHARSET.name()
+ );
+ } catch (UnsupportedEncodingException cause) {
+ throw new RuntimeException(
+ String.format("Unsupported encoding: %s", CHARSET.name()),
+ cause
+ );
+ }
+ return encodeQuery;
+ }
+
+ }
+
}