From 649230c5ec3f87ed9ce9ef92ce1cb0eb0d4a9795 Mon Sep 17 00:00:00 2001 From: gotty Date: Sun, 12 Jan 2020 03:15:30 +0300 Subject: [PATCH] [LIB-13] Add classes to work with settings --- .../java/org/hedgecode/chess/scanner/Settings.java | 40 ++++++++++ .../hedgecode/chess/scanner/SettingsBuilder.java | 28 +++++++ .../hedgecode/chess/scanner/json/JSONSettings.java | 86 ++++++++++++++++++++++ .../chess/scanner/json/JSONSettingsBuilder.java | 63 ++++++++++++++++ .../org.hedgecode.chess.scanner.SettingsBuilder | 1 + 5 files changed, 218 insertions(+) create mode 100644 src/main/java/org/hedgecode/chess/scanner/Settings.java create mode 100644 src/main/java/org/hedgecode/chess/scanner/SettingsBuilder.java create mode 100644 src/main/java/org/hedgecode/chess/scanner/json/JSONSettings.java create mode 100644 src/main/java/org/hedgecode/chess/scanner/json/JSONSettingsBuilder.java create mode 100644 src/main/resources/META-INF/services/org.hedgecode.chess.scanner.SettingsBuilder diff --git a/src/main/java/org/hedgecode/chess/scanner/Settings.java b/src/main/java/org/hedgecode/chess/scanner/Settings.java new file mode 100644 index 0000000..28bd2c9 --- /dev/null +++ b/src/main/java/org/hedgecode/chess/scanner/Settings.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2019-2020. Developed by Hedgecode. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hedgecode.chess.scanner; + +/** + * Settings + * + * @author Dmitry Samoshin aka gotty + */ +public interface Settings { + + String getTournamentUrl(); + + boolean isTournamentMultiPage(); + + String getTournamentGamesUrlRegex(); + + String getTournamentQuery(); + + String getTournamentQueryUrlRegex(); + + String getGameUrl(); + + String getGamePgnUrl(); + +} diff --git a/src/main/java/org/hedgecode/chess/scanner/SettingsBuilder.java b/src/main/java/org/hedgecode/chess/scanner/SettingsBuilder.java new file mode 100644 index 0000000..f71899f --- /dev/null +++ b/src/main/java/org/hedgecode/chess/scanner/SettingsBuilder.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2019-2020. Developed by Hedgecode. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hedgecode.chess.scanner; + +/** + * SettingsBuilder + * + * @author Dmitry Samoshin aka gotty + */ +public interface SettingsBuilder { + + Settings build(String name) throws ChessHogScannerException; + +} diff --git a/src/main/java/org/hedgecode/chess/scanner/json/JSONSettings.java b/src/main/java/org/hedgecode/chess/scanner/json/JSONSettings.java new file mode 100644 index 0000000..ba7b4c0 --- /dev/null +++ b/src/main/java/org/hedgecode/chess/scanner/json/JSONSettings.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2019-2020. Developed by Hedgecode. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hedgecode.chess.scanner.json; + +import com.google.gson.annotations.SerializedName; + +import org.hedgecode.chess.scanner.Settings; + +/** + * JSONSettings + * + * @author Dmitry Samoshin aka gotty + */ +public class JSONSettings implements Settings { + + @SerializedName("tournamentUrl") + private String tournamentUrl; + + @SerializedName("tournamentIsMultiPage") + private boolean tournamentIsMultiPage; + + @SerializedName("tournamentGamesUrlRegex") + private String tournamentGamesUrlRegex; + + @SerializedName("tournamentQuery") + private String tournamentQuery; + + @SerializedName("tournamentQueryUrlRegex") + private String tournamentQueryUrlRegex; + + @SerializedName("gameUrl") + private String gameUrl; + + @SerializedName("gamePgnUrl") + private String gamePgnUrl; + + @Override + public String getTournamentUrl() { + return tournamentUrl; + } + + @Override + public boolean isTournamentMultiPage() { + return tournamentIsMultiPage; + } + + @Override + public String getTournamentGamesUrlRegex() { + return tournamentGamesUrlRegex; + } + + @Override + public String getTournamentQuery() { + return tournamentQuery; + } + + @Override + public String getTournamentQueryUrlRegex() { + return tournamentQueryUrlRegex; + } + + @Override + public String getGameUrl() { + return gameUrl; + } + + @Override + public String getGamePgnUrl() { + return gamePgnUrl; + } + +} diff --git a/src/main/java/org/hedgecode/chess/scanner/json/JSONSettingsBuilder.java b/src/main/java/org/hedgecode/chess/scanner/json/JSONSettingsBuilder.java new file mode 100644 index 0000000..0fb7eda --- /dev/null +++ b/src/main/java/org/hedgecode/chess/scanner/json/JSONSettingsBuilder.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2019-2020. Developed by Hedgecode. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hedgecode.chess.scanner.json; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import org.hedgecode.chess.scanner.ChessHogScannerException; +import org.hedgecode.chess.scanner.Settings; +import org.hedgecode.chess.scanner.SettingsBuilder; + +/** + * JSONSettingsBuilder + * + * @author Dmitry Samoshin aka gotty + */ +public class JSONSettingsBuilder implements SettingsBuilder { + + private static final String SETTINGS_RESOURCE_DIR = "/settings/"; + + private static final Gson GSON = new GsonBuilder().create(); + + @Override + public Settings build(String jsonFileName) throws ChessHogScannerException { + Settings settings; + try (BufferedReader jsonReader = new BufferedReader( + new InputStreamReader( + getClass().getResourceAsStream( + SETTINGS_RESOURCE_DIR.concat(jsonFileName) + ) + ) + )) { + settings = GSON.fromJson( + jsonReader, + JSONSettings.class + ); + } catch (IOException cause) { + throw new ChessHogScannerException( + String.format("Failed to get settings from resource file: %s", jsonFileName), cause + ); + } + return settings; + } + +} diff --git a/src/main/resources/META-INF/services/org.hedgecode.chess.scanner.SettingsBuilder b/src/main/resources/META-INF/services/org.hedgecode.chess.scanner.SettingsBuilder new file mode 100644 index 0000000..450a5b2 --- /dev/null +++ b/src/main/resources/META-INF/services/org.hedgecode.chess.scanner.SettingsBuilder @@ -0,0 +1 @@ +org.hedgecode.chess.scanner.json.JSONSettingsBuilder \ No newline at end of file -- 2.10.0