X-Git-Url: https://git.hedgecode.org/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fhedgecode%2Fchess%2Fscanner%2Fregex%2FRegexBuilder.java;h=94fd7abe0970aa8baec25e9f7bc330ca62a4bad6;hb=refs%2Fheads%2Fpgn;hp=789882fbe4bd6998b35ca91dc376f47b78a736db;hpb=bbcce416663093fa2513675963f46a95cdf2d013;p=chesshog-scanner.git diff --git a/src/main/java/org/hedgecode/chess/scanner/regex/RegexBuilder.java b/src/main/java/org/hedgecode/chess/scanner/regex/RegexBuilder.java index 789882f..94fd7ab 100644 --- a/src/main/java/org/hedgecode/chess/scanner/regex/RegexBuilder.java +++ b/src/main/java/org/hedgecode/chess/scanner/regex/RegexBuilder.java @@ -16,6 +16,11 @@ package org.hedgecode.chess.scanner.regex; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +import static org.hedgecode.chess.scanner.ScannerConstants.*; + /** * RegexBuilder * @@ -23,11 +28,76 @@ package org.hedgecode.chess.scanner.regex; */ 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; + } + + } + }