+ 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) {
+ 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, ChessHogScannerConstants.CHARSET.name()
+ );
+ } catch (UnsupportedEncodingException cause) {
+ throw new RuntimeException(
+ String.format("Unsupported encoding: %s", ChessHogScannerConstants.CHARSET.name()),
+ cause
+ );
+ }
+ return encodeQuery;
+ }
+
+ }
+