[LIB-13] Modify RegexMatcher for searching by type
[chesshog-scanner.git] / src / main / java / org / hedgecode / chess / scanner / regex / RegexBuilder.java
index 789882f..14b4fba 100644 (file)
 
 package org.hedgecode.chess.scanner.regex;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+import org.hedgecode.chess.scanner.ChessHogScannerConstants;
+
 /**
  * RegexBuilder
  *
@@ -23,11 +28,70 @@ 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) {
+                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;
+        }
+
+    }
+
 }