[LIB-13] Add classes to work with settings
authorgotty <gotty@hedgecode.org>
Sun, 12 Jan 2020 00:15:30 +0000 (03:15 +0300)
committergotty <gotty@hedgecode.org>
Sun, 12 Jan 2020 00:15:30 +0000 (03:15 +0300)
src/main/java/org/hedgecode/chess/scanner/Settings.java [new file with mode: 0644]
src/main/java/org/hedgecode/chess/scanner/SettingsBuilder.java [new file with mode: 0644]
src/main/java/org/hedgecode/chess/scanner/json/JSONSettings.java [new file with mode: 0644]
src/main/java/org/hedgecode/chess/scanner/json/JSONSettingsBuilder.java [new file with mode: 0644]
src/main/resources/META-INF/services/org.hedgecode.chess.scanner.SettingsBuilder [new file with mode: 0644]

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 (file)
index 0000000..28bd2c9
--- /dev/null
@@ -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 (file)
index 0000000..f71899f
--- /dev/null
@@ -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 (file)
index 0000000..ba7b4c0
--- /dev/null
@@ -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 (file)
index 0000000..0fb7eda
--- /dev/null
@@ -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 (file)
index 0000000..450a5b2
--- /dev/null
@@ -0,0 +1 @@
+org.hedgecode.chess.scanner.json.JSONSettingsBuilder
\ No newline at end of file