[LIB-13] Stub scanners for some portals
[chesshog-scanner.git] / src / main / java / org / hedgecode / chess / scanner / portal / ChessBombScanner.java
index d8b6ed0..6139ed4 100644 (file)
@@ -19,19 +19,20 @@ package org.hedgecode.chess.scanner.portal;
 import java.util.Base64;
 
 import org.hedgecode.chess.scanner.ChessHogScannerException;
+import org.hedgecode.chess.scanner.Scanner;
 import org.hedgecode.chess.scanner.entity.PGNGame;
 import org.hedgecode.chess.scanner.entity.PGNTournament;
-import org.hedgecode.chess.scanner.format.ArenaFormat;
-import org.hedgecode.chess.scanner.format.Format;
-import org.hedgecode.chess.scanner.format.GameFormat;
-import org.hedgecode.chess.scanner.format.TournamentFormat;
+import org.hedgecode.chess.scanner.format.chessbomb.ArenaFormat;
+import org.hedgecode.chess.scanner.format.chessbomb.Format;
+import org.hedgecode.chess.scanner.format.chessbomb.GameFormat;
+import org.hedgecode.chess.scanner.format.chessbomb.TournamentFormat;
 
 /**
  * ChessBombScanner
  *
  * @author Dmitry Samoshin aka gotty
  */
-public class ChessBombScanner extends AbstractSettingsScanner {
+public class ChessBombScanner extends AbstractSettingsScanner implements Scanner {
 
     private static final String SETTINGS_FILENAME = "chessbomb.settings";
 
@@ -41,10 +42,10 @@ public class ChessBombScanner extends AbstractSettingsScanner {
     }
 
     @Override
-    public PGNTournament getTournament(String tournamentId) throws ChessHogScannerException {
+    public PGNTournament scanTournament(String tournamentId) throws ChessHogScannerException {
         String decodeTournament = decodeUrlByRegex(
                 assignUrl(tournamentId, null),
-                getSettings().getTournamentGamesUrlRegex()
+                getSettings().getTournamentJsonUrlRegex()
         );
 
         TournamentFormat tournamentFormat = Format.formatTournament(decodeTournament);
@@ -55,7 +56,7 @@ public class ChessBombScanner extends AbstractSettingsScanner {
 
         for (String gameId : tournamentFormat.gameUrls()) {
             tournament.addGame(
-                    getGame(gameId, tournamentId)
+                    scanGame(gameId, tournamentId)
             );
         }
 
@@ -74,22 +75,37 @@ public class ChessBombScanner extends AbstractSettingsScanner {
         String tournamentId = arenaFormat.findTournament(tournamentName);
 
         return tournamentId != null
-                ? getTournament(tournamentId)
+                ? scanTournament(tournamentId)
                 : null;
     }
 
     @Override
-    public PGNGame getGame(String gameId) throws ChessHogScannerException {
+    public PGNGame scanGame(String gameId) throws ChessHogScannerException {
         throw new ChessHogScannerException(
                 "ChessBomb does not support searching game without a tournament name!"
         );
     }
 
     @Override
-    public PGNGame getGame(String gameId, String tournamentId) throws ChessHogScannerException {
-        String decodeGame = decodeUrlByRegex(
+    public PGNGame scanGame(String gameId, String tournamentId) throws ChessHogScannerException {
+        return scanGameByRegex(
                 assignUrl(gameId, tournamentId, true),
-                getSettings().getGameUrlRegex()
+                getSettings().getGameJsonUrlRegex()
+        );
+    }
+
+    @Override
+    public PGNGame scanUrl(String gameUrl) throws ChessHogScannerException {
+        return scanGameByRegex(
+                gameUrl,
+                getSettings().getGameJsonUrlRegex()
+        );
+    }
+
+    private PGNGame scanGameByRegex(String gameUrl, String regex) throws ChessHogScannerException {
+        String decodeGame = decodeUrlByRegex(
+                gameUrl,
+                regex
         );
 
         GameFormat gameFormat = Format.formatGame(decodeGame);
@@ -100,13 +116,21 @@ public class ChessBombScanner extends AbstractSettingsScanner {
         );
     }
 
+
     private String decodeUrlByRegex(String url, String regex) throws ChessHogScannerException {
         String encodeString = match(
                 url,
                 regex
         );
+        if (encodeString == null) {
+            throw new ChessHogScannerException(
+                    String.format("Failed to decode source data for requesting URL: %s", url)
+            );
+        }
         return new String(
-                Base64.getDecoder().decode(encodeString)
+                Base64.getDecoder().decode(
+                        encodeString
+                )
         );
     }