X-Git-Url: https://git.hedgecode.org/?p=chesshog-scanner.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fhedgecode%2Fchess%2Fscanner%2Fportal%2FChessGamesScanner.java;h=56fc032d4c3a1f1c494bb9c953b658a4ee94717e;hp=6346929903e0a3cea794a72fcd4fa13abf930728;hb=6e3a8590a26312b6cea579777db885107cae88df;hpb=6e8190a376e6ff4e4aa689f918a45135f9745c64 diff --git a/src/main/java/org/hedgecode/chess/scanner/portal/ChessGamesScanner.java b/src/main/java/org/hedgecode/chess/scanner/portal/ChessGamesScanner.java index 6346929..56fc032 100644 --- a/src/main/java/org/hedgecode/chess/scanner/portal/ChessGamesScanner.java +++ b/src/main/java/org/hedgecode/chess/scanner/portal/ChessGamesScanner.java @@ -20,7 +20,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.hedgecode.chess.scanner.ChessHogScannerException; +import org.hedgecode.chess.scanner.Scanner; +import org.hedgecode.chess.scanner.ScannerException; +import org.hedgecode.chess.scanner.StringUtils; import org.hedgecode.chess.scanner.entity.PGNGame; import org.hedgecode.chess.scanner.entity.PGNTournament; @@ -29,7 +31,7 @@ import org.hedgecode.chess.scanner.entity.PGNTournament; * * @author Dmitry Samoshin aka gotty */ -public class ChessGamesScanner extends AbstractSettingsScanner { +public class ChessGamesScanner extends AbstractSettingsScanner implements Scanner { private static final String SETTINGS_FILENAME = "chessgames.settings"; @@ -39,14 +41,15 @@ public class ChessGamesScanner extends AbstractSettingsScanner { } @Override - public PGNTournament getTournament(String tournamentId) throws ChessHogScannerException { + public PGNTournament scanTournament(String tournamentId) throws ScannerException { PGNTournament tournament = new PGNTournament(tournamentId); assignTournamentGames(tournament); return tournament; } @Override - public PGNTournament findTournament(String tournamentName) throws ChessHogScannerException { + public PGNTournament findTournament(String tournamentName) throws ScannerException { + PGNTournament tournament = null; Map result = matchMap( assignUrl( tournamentName, true @@ -54,7 +57,6 @@ public class ChessGamesScanner extends AbstractSettingsScanner { getSettings().getTournamentQueryUrlRegex(), true ); - PGNTournament tournament = null; for (Map.Entry entry : result.entrySet()) { if (entry.getValue().contains(tournamentName)) { // todo: contains? tournament = new PGNTournament( @@ -70,21 +72,44 @@ public class ChessGamesScanner extends AbstractSettingsScanner { } @Override - public PGNGame getGame(String gameId) throws ChessHogScannerException { + public PGNGame scanGame(String gameId) throws ScannerException { String pgn = request( assignUrl(gameId) ); + if (!StringUtils.isPgn(pgn)) { + throw new ScannerException( + String.format("Failed to get PGN for requesting game ID: %s", gameId) + ); + } return new PGNGame( gameId, pgn ); } @Override - public PGNGame getGame(String gameId, String tournamentId) throws ChessHogScannerException { - return getGame(gameId); + public PGNGame scanGame(String gameId, String tournamentId) throws ScannerException { + return scanGame(gameId); + } + + @Override + public PGNGame scanUrl(String gameUrl) throws ScannerException { + String gamePage = request(gameUrl); + String pgn = StringUtils.match( + gamePage, + getSettings().getGameUrlRegex() + ); + if (pgn == null || !StringUtils.isPgn(pgn)) { + throw new ScannerException( + String.format("Failed to get PGN for requesting URL: %s", gameUrl) + ); + } + return new PGNGame( + null, + pgn + ); } - private void assignTournamentGames(PGNTournament tournament) throws ChessHogScannerException { + private void assignTournamentGames(PGNTournament tournament) throws ScannerException { tournament.clearGames(); List gamesId = new ArrayList<>(); @@ -106,7 +131,7 @@ public class ChessGamesScanner extends AbstractSettingsScanner { for (String gameId : gamesId) { tournament.addGame( - getGame(gameId) + scanGame(gameId) ); } }