[LIB-13] Locale resource settings
[chesshog-scanner.git] / src / main / java / org / hedgecode / chess / scanner / portal / ChessBombScanner.java
index d8b6ed0..96e90e8 100644 (file)
@@ -18,20 +18,23 @@ 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.ScannerException;
 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;
+
+import static org.hedgecode.chess.scanner.ScannerConstants.*;
 
 /**
  * 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 +44,10 @@ public class ChessBombScanner extends AbstractSettingsScanner {
     }
 
     @Override
-    public PGNTournament getTournament(String tournamentId) throws ChessHogScannerException {
+    public PGNTournament scanTournament(String tournamentId) throws ScannerException {
         String decodeTournament = decodeUrlByRegex(
                 assignUrl(tournamentId, null),
-                getSettings().getTournamentGamesUrlRegex()
+                getSettings().getTournamentJsonUrlRegex()
         );
 
         TournamentFormat tournamentFormat = Format.formatTournament(decodeTournament);
@@ -55,7 +58,7 @@ public class ChessBombScanner extends AbstractSettingsScanner {
 
         for (String gameId : tournamentFormat.gameUrls()) {
             tournament.addGame(
-                    getGame(gameId, tournamentId)
+                    scanGame(gameId, tournamentId)
             );
         }
 
@@ -63,7 +66,7 @@ public class ChessBombScanner extends AbstractSettingsScanner {
     }
 
     @Override
-    public PGNTournament findTournament(String tournamentName) throws ChessHogScannerException {
+    public PGNTournament findTournament(String tournamentName) throws ScannerException {
         String decodeArena = decodeUrlByRegex(
                 assignUrl(tournamentName, false),
                 getSettings().getTournamentQueryUrlRegex()
@@ -74,22 +77,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 {
-        throw new ChessHogScannerException(
-                "ChessBomb does not support searching game without a tournament name!"
+    public PGNGame scanGame(String gameId) throws ScannerException {
+        throw new ScannerException(
+                "scanner.portal.search.without.tournament.name", DOMAIN_CHESSBOMB
         );
     }
 
     @Override
-    public PGNGame getGame(String gameId, String tournamentId) throws ChessHogScannerException {
-        String decodeGame = decodeUrlByRegex(
+    public PGNGame scanGame(String gameId, String tournamentId) throws ScannerException {
+        return scanGameByRegex(
                 assignUrl(gameId, tournamentId, true),
-                getSettings().getGameUrlRegex()
+                getSettings().getGameJsonUrlRegex()
+        );
+    }
+
+    @Override
+    public PGNGame scanUrl(String gameUrl) throws ScannerException {
+        return scanGameByRegex(
+                gameUrl,
+                getSettings().getGameJsonUrlRegex()
+        );
+    }
+
+    private PGNGame scanGameByRegex(String gameUrl, String regex) throws ScannerException {
+        String decodeGame = decodeUrlByRegex(
+                gameUrl,
+                regex
         );
 
         GameFormat gameFormat = Format.formatGame(decodeGame);
@@ -100,13 +118,21 @@ public class ChessBombScanner extends AbstractSettingsScanner {
         );
     }
 
-    private String decodeUrlByRegex(String url, String regex) throws ChessHogScannerException {
+
+    private String decodeUrlByRegex(String url, String regex) throws ScannerException {
         String encodeString = match(
                 url,
                 regex
         );
+        if (encodeString == null) {
+            throw new ScannerException(
+                    "scanner.failed.decode.url", url
+            );
+        }
         return new String(
-                Base64.getDecoder().decode(encodeString)
+                Base64.getDecoder().decode(
+                        encodeString
+                )
         );
     }