[LIB-13] Modify RegexMatcher for searching by type
[chesshog-scanner.git] / src / main / java / org / hedgecode / chess / scanner / regex / RegexType.java
index c63af8c..cfe9c5f 100644 (file)
 
 package org.hedgecode.chess.scanner.regex;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-
-import org.hedgecode.chess.scanner.ChessHogScannerConstants;
+import org.hedgecode.chess.scanner.regex.type.RegexBlockFinder;
+import org.hedgecode.chess.scanner.regex.type.RegexFinder;
+import org.hedgecode.chess.scanner.regex.type.RegexSplitter;
 
 /**
  * RegexType
@@ -28,48 +27,45 @@ import org.hedgecode.chess.scanner.ChessHogScannerConstants;
  */
 public enum RegexType {
 
-    TOURNAMENT {
-        @Override
-        public String format(String target, RegexParams params) {
-            if (params.getPageId() != null) {
-                target = target.replace(
-                        RegexParams.PAGE_ID,
-                        params.getPageId()
-                );
+    FIND,
+    SPLIT,
+    BLOCK;
+
+    public static RegexMatcher matcher(RegexType type, String match) {
+        return Factory.create(
+                type,
+                match
+        );
+    }
+
+    public static RegexMatcher matcher(String startMatch, String endMatch) {
+        return Factory.create(
+                startMatch,
+                endMatch
+        );
+    }
+
+    static class Factory {
+
+        static RegexMatcher create(RegexType type, String match) {
+            switch (type) {
+                case FIND:
+                    return new RegexFinder(match);
+                case SPLIT:
+                    return new RegexSplitter(match);
+                case BLOCK:
+                    return new RegexBlockFinder(match, match);
             }
-            return target.replace(
-                    RegexParams.TOURNAMENT_ID,
-                    params.getTournamentId()
-            );
+            return null;
         }
-    },
 
-    GAME {
-        @Override
-        public String format(String target, RegexParams params) {
-            return target.replace(
-                    RegexParams.GAME_ID,
-                    params.getGameId()
-            );
+        static RegexMatcher create(String startMatch, String endMatch) {
+            return new RegexBlockFinder(startMatch, endMatch);
         }
-    },
 
-    QUERY {
-        @Override
-        public String format(String target, RegexParams params) {
-            try {
-                return target.replace(
-                        RegexParams.QUERY,
-                        params.isUrlEncode()
-                                ? URLEncoder.encode(params.getQuery(), ChessHogScannerConstants.CHARSET.name())
-                                : params.getQuery()
-                );
-            } catch (UnsupportedEncodingException e) {
-                return null;
-            }
+        private Factory() {
         }
-    };
 
-    public abstract String format(String target, RegexParams params);
+    }
 
 }