--- /dev/null
+/*
+ * 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();
+
+}
--- /dev/null
+/*
+ * 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;
+
+}
--- /dev/null
+/*
+ * 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;
+ }
+
+}
--- /dev/null
+/*
+ * 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;
+ }
+
+}
--- /dev/null
+org.hedgecode.chess.scanner.json.JSONSettingsBuilder
\ No newline at end of file