[LIB-13] Add query params to settings
[chesshog-scanner.git] / src / main / java / org / hedgecode / chess / scanner / portal / AbstractRequestScanner.java
index fd72e6e..a82422e 100644 (file)
@@ -19,8 +19,6 @@ package org.hedgecode.chess.scanner.portal;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.util.List;
 import java.util.Map;
 
@@ -33,8 +31,9 @@ import org.hedgecode.chess.scanner.ChessHogScannerConstants;
 import org.hedgecode.chess.scanner.ChessHogScannerException;
 import org.hedgecode.chess.scanner.Scanner;
 import org.hedgecode.chess.scanner.regex.RegexMatcher;
-import org.hedgecode.chess.scanner.regex.RegexMatcherResult;
 import org.hedgecode.chess.scanner.regex.RegexResult;
+import org.hedgecode.chess.scanner.regex.RegexType;
+import org.hedgecode.chess.scanner.regex.RegexTypeMatcher;
 
 /**
  * AbstractRequestScanner
@@ -78,157 +77,98 @@ public abstract class AbstractRequestScanner implements Scanner {
         return sb.toString();
     }
 
-    protected String matchRequest(String url, String match)
+    protected List<String> split(String url, String splitMatch) throws ChessHogScannerException {
+        RegexResult result = splitRequest(url, splitMatch);
+        return result.resultList();
+    }
+
+    protected Map<String, String> splitMap(String url, String splitMatch) throws ChessHogScannerException {
+        RegexResult result = splitRequest(url, splitMatch);
+        return result.resultMap();
+    }
+
+    protected RegexResult splitRequest(String url, String splitMatch) throws ChessHogScannerException {
+        RegexMatcher matcher = new RegexTypeMatcher(
+                RegexType.SPLIT, splitMatch
+        );
+        return matchRequest(url, matcher, false);
+    }
+
+    protected String match(String url, String match)
             throws ChessHogScannerException
     {
-        List<String> result = matchRequest(url, match, true);
+        List<String> result = match(url, match, true);
         return result.isEmpty() ? null : result.get(0);
     }
 
-    protected List<String> matchRequest(String url, String match, boolean isFirst)
+    protected List<String> match(String url, String match, boolean isFirst)
             throws ChessHogScannerException
     {
+        RegexMatcher matcher = new RegexTypeMatcher(
+                RegexType.FIND, match
+        );
         RegexResult result = matchRequest(
                 url,
-                new RegexMatcherResult(
-                        match,
-                        isFirst,
-                        false
-                )
+                matcher,
+                isFirst
         );
         return result.resultList();
     }
 
-    protected String matchRequest(String url, String startMatch, String endMatch)
-            throws ChessHogScannerException
-    {
-        return matchRequest(url, startMatch, endMatch, true);
-    }
-
-    protected String matchRequest(String url, String startMatch, String endMatch, boolean isFirst)
+    protected Map<String, String> matchMap(String url, String match, boolean isFirst)
             throws ChessHogScannerException
     {
+        RegexMatcher matcher = new RegexTypeMatcher(
+                RegexType.FIND, match
+        );
         RegexResult result = matchRequest(
                 url,
-                new RegexMatcherResult(
-                        startMatch,
-                        endMatch,
-                        isFirst,
-                        false
-                )
+                matcher,
+                isFirst
         );
-        return result.isEmpty() ? null : result.resultList().get(0);
+        return result.resultMap();
     }
 
-/*
-    protected String matchRequest(String url, String match)
+    protected String match(String url, String startMatch, String endMatch)
             throws ChessHogScannerException
     {
-        List<String> result = matchRequest(url, match, true);
+        List<String> result = match(url, startMatch, endMatch, true);
         return result.isEmpty() ? null : result.get(0);
     }
 
-    protected List<String> matchRequest(String url, String match, boolean isFirst)
+    protected List<String> match(String url, String startMatch, String endMatch, boolean isFirst)
             throws ChessHogScannerException
     {
-        HttpGet request = new HttpGet(url);
-        CloseableHttpResponse response = null;
-        List<String> result = new ArrayList<>();
-        try {
-            response = getClient().execute(request);
-            Pattern pattern = Pattern.compile(match);
-            try (BufferedReader br = new BufferedReader(
-                    new InputStreamReader(
-                            response.getEntity().getContent(),
-                            ChessHogScannerConstants.CHARSET
-                    )
-            )) {
-                String line;
-                while ((line = br.readLine()) != null) {
-                    Matcher matcher = pattern.matcher(line);
-                    if (matcher.find()) {
-                        result.add(
-                                matcher.group(1)
-                        );
-                        if (isFirst) {
-                            break;
-                        }
-                    }
-                }
-            }
-        } catch (IOException cause) {
-            throw new ChessHogScannerException(
-                    String.format("Error occurred for requesting URL: %s", url), cause
-            );
-        } finally {
-            if (response != null) {
-                try {
-                    response.close();
-                } catch (IOException ignored) {}
-            }
-        }
-        return result;
+        RegexMatcher matcher = new RegexTypeMatcher(
+                startMatch, endMatch
+        );
+        RegexResult result = matchRequest(
+                url,
+                matcher,
+                isFirst
+        );
+        return result.resultList();
     }
 
-    protected String matchRequest(String url, String startMatch, String endMatch)
+    protected Map<String, String> matchMap(String url, String startMatch, String endMatch, boolean isFirst)
             throws ChessHogScannerException
     {
-        return matchRequest(url, startMatch, endMatch, true);
+        RegexMatcher matcher = new RegexTypeMatcher(
+                startMatch, endMatch
+        );
+        RegexResult result = matchRequest(
+                url,
+                matcher,
+                isFirst
+        );
+        return result.resultMap();
     }
 
-    protected String matchRequest(String url, String startMatch, String endMatch, boolean isFirst)
+    protected RegexResult matchRequest(String url, RegexMatcher matcher, boolean isFirst)
             throws ChessHogScannerException
     {
         HttpGet request = new HttpGet(url);
         CloseableHttpResponse response = null;
-        StringBuilder sb = new StringBuilder();
-        try {
-            response = getClient().execute(request);
-            Pattern startPattern = Pattern.compile(startMatch);
-            Pattern endPattern = Pattern.compile(endMatch);
-            try (BufferedReader br = new BufferedReader(
-                    new InputStreamReader(
-                            response.getEntity().getContent(),
-                            ChessHogScannerConstants.CHARSET
-                    )
-            )) {
-                String line;
-                boolean isMatch = false;
-                while ((line = br.readLine()) != null) {
-                    Matcher matcher = isMatch
-                            ? endPattern.matcher(line)
-                            : startPattern.matcher(line);
-                    if (matcher.find()) {
-                        sb.append(line);
-                        if (isMatch && isFirst) {
-                            break;
-                        }
-                        isMatch = !isMatch;
-                    } else {
-                        if (isMatch) {
-                            sb.append(line);
-                        }
-                    }
-                }
-            }
-        } catch (IOException cause) {
-            throw new ChessHogScannerException(
-                    String.format("Error occurred for requesting URL: %s", url), cause
-            );
-        } finally {
-            if (response != null) {
-                try {
-                    response.close();
-                } catch (IOException ignored) {}
-            }
-        }
-        return sb.length() > 0 ? sb.toString() : null;
-    }
-*/
-
-    protected RegexResult matchRequest(String url, RegexMatcher matcher) throws ChessHogScannerException {
-        HttpGet request = new HttpGet(url);
-        CloseableHttpResponse response = null;
         try {
             response = getClient().execute(request);
             try (BufferedReader br = new BufferedReader(
@@ -240,7 +180,7 @@ public abstract class AbstractRequestScanner implements Scanner {
                 String line;
                 while ((line = br.readLine()) != null) {
                     matcher.match(line);
-                    if (matcher.isBreak()) {
+                    if (isFirst && !matcher.result().isEmpty()) {
                         break;
                     }
                 }
@@ -259,23 +199,6 @@ public abstract class AbstractRequestScanner implements Scanner {
         return matcher.result();
     }
 
-/*
-    protected String urlEncode(String query) throws ChessHogScannerException {
-        String encodeQuery;
-        try {
-            encodeQuery = URLEncoder.encode(
-                    query, ChessHogScannerConstants.CHARSET.name()
-            );
-        } catch (UnsupportedEncodingException cause) {
-            throw new ChessHogScannerException(
-                    String.format("Unsupported encoding: %s", ChessHogScannerConstants.CHARSET.name()),
-                    cause
-            );
-        }
-        return encodeQuery;
-    }
-*/
-
     private CloseableHttpClient getClient() {
         return HttpClients.createMinimal();
     }