diff --git a/.github/workflows/work-jar.yml b/.github/workflows/work-jar.yml index 83623fb..bdb8441 100644 --- a/.github/workflows/work-jar.yml +++ b/.github/workflows/work-jar.yml @@ -92,4 +92,4 @@ jobs: git tag -a "${{ steps.extract_version.outputs.version }}" -m "Release version ${{ steps.extract_version.outputs.version }}" git push origin "${{ steps.extract_version.outputs.version }}" env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d031183..9f48f22 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index e8e5db5..b009377 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,8 +5,10 @@ plugins { id("maven-publish") // Plugin pour la publication } + group = "fr.sandro642.github" -version = "0.1.2" +version = "0.1.3.17.1-SNAPSHOT" // Version de votre projet + // Ajoutez cette tâche à votre build.gradle.kts tasks.register("printVersion") { @@ -17,6 +19,9 @@ tasks.register("printVersion") { repositories { mavenCentral() + + maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") + maven("https://oss.sonatype.org/content/repositories/snapshots/") } dependencies { @@ -28,6 +33,8 @@ dependencies { implementation("org.openjfx:javafx-controls:21") implementation("org.openjfx:javafx-fxml:21") + + compileOnly("org.spigotmc:spigot-api:1.8-R0.1-SNAPSHOT") } javafx { diff --git a/readme.md b/readme.md index 4550c4b..bb19f2c 100644 --- a/readme.md +++ b/readme.md @@ -21,6 +21,14 @@ Hook -----------------------| ``` --- +Changelog : + +```java + - [0.1.3.9-SNAPSHOT] : Ajout de la sérialisation des données pour une compatibilisation parfaite des données avec les HOOK. +``` + +--- + ## 🌟 Pourquoi ConnectorAPI ? Imaginez une API qui ne se contente pas de relier des services, mais qui devient le chef d’orchestre de vos intégrations. ConnectorAPI est conçu pour : diff --git a/src/main/java/fr/sandro642/github/ConnectorAPI.java b/src/main/java/fr/sandro642/github/ConnectorAPI.java index fc59de8..fc3fc48 100644 --- a/src/main/java/fr/sandro642/github/ConnectorAPI.java +++ b/src/main/java/fr/sandro642/github/ConnectorAPI.java @@ -1,9 +1,8 @@ package fr.sandro642.github; +import fr.sandro642.github.hook.MCSupport; import fr.sandro642.github.jobs.JobGetInfos; -import fr.sandro642.github.jobs.misc.MethodType; import fr.sandro642.github.jobs.misc.ResourceType; -import fr.sandro642.github.jobs.misc.VersionType; import fr.sandro642.github.utils.Logger; import fr.sandro642.github.utils.StoreAndRetrieve; import fr.sandro642.github.utils.YamlUtils; @@ -37,7 +36,11 @@ public static void initialize(ResourceType resourceType) { // Génère le template si nécessaire yamlUtils.generateTemplateIfNotExists(resourceType); - storeAndRetrieve.store.put(storeAndRetrieve.FILE_LOCATION_KEY, resourceType.getPath()); + if (resourceType == ResourceType.MC_RESOURCES) { + storeAndRetrieve.store.put(storeAndRetrieve.FILE_LOCATION_KEY, MCSupport().getPluginPath()); + } else { + storeAndRetrieve.store.put(storeAndRetrieve.FILE_LOCATION_KEY, resourceType.getPath()); + } // Charge l'URL depuis le fichier YAML String baseUrl = yamlUtils.getURL(); @@ -82,4 +85,12 @@ public static YamlUtils YamlUtils() { } return yamlUtils; } + + /** + * Retourne une instance de MCSupport si le projet est un projet Minecraft + * @return MCSupport ou null si ce n'est pas un projet Minecraft + */ + public static MCSupport MCSupport() { + return MCSupport.getInstance(); + } } diff --git a/src/main/java/fr/sandro642/github/api/ApiClient.java b/src/main/java/fr/sandro642/github/api/ApiClient.java index 5547421..0bef9dc 100644 --- a/src/main/java/fr/sandro642/github/api/ApiClient.java +++ b/src/main/java/fr/sandro642/github/api/ApiClient.java @@ -1,7 +1,6 @@ package fr.sandro642.github.api; import fr.sandro642.github.ConnectorAPI; -import fr.sandro642.github.jobs.misc.ResourceType; import fr.sandro642.github.utils.Logger; import org.springframework.core.ParameterizedTypeReference; import org.springframework.web.reactive.function.client.WebClient; @@ -29,12 +28,12 @@ public class ApiClient { /** * Constructeur de ApiClient qui initialise WebClient avec l'URL de base. - * @param resourceType Type de ressource (peut être utilisé pour des configurations spécifiques). */ - public ApiClient(ResourceType resourceType) { + public ApiClient() { String baseUrl = (String) ConnectorAPI.StoreAndRetrieve().store.get(ConnectorAPI.StoreAndRetrieve().URL_KEY); + if (baseUrl == null) { - throw new RuntimeException("URL de base non trouvée. Assurez-vous d'avoir initialisé ConnectorAPI."); + throw new RuntimeException("URL de base non trouvée. Assurez-vous d'avoir initialisé ConnectorAPI. "); } this.webClient = WebClient.builder() diff --git a/src/main/java/fr/sandro642/github/api/ApiResponse.java b/src/main/java/fr/sandro642/github/api/ApiResponse.java index 9141f05..a04642a 100644 --- a/src/main/java/fr/sandro642/github/api/ApiResponse.java +++ b/src/main/java/fr/sandro642/github/api/ApiResponse.java @@ -250,7 +250,6 @@ public String display() { ", msg='" + msg + '\'' + ", code=" + code + ", data=" + data + - ", extra=" + extra + '}'; } } \ No newline at end of file diff --git a/src/main/java/fr/sandro642/github/example/ExampleUsage.java b/src/main/java/fr/sandro642/github/example/ExampleUsage.java index 66716fa..fa52f58 100644 --- a/src/main/java/fr/sandro642/github/example/ExampleUsage.java +++ b/src/main/java/fr/sandro642/github/example/ExampleUsage.java @@ -6,7 +6,9 @@ import fr.sandro642.github.jobs.misc.ResourceType; import fr.sandro642.github.jobs.misc.VersionType; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -132,7 +134,7 @@ public static void main(String[] args) { complexBody.put("nestedObject", subObject); // Array - java.util.List arrayValue = java.util.Arrays.asList("item1", "item2", "item3"); + List arrayValue = Arrays.asList("item1", "item2", "item3"); complexBody.put("arrayValue", arrayValue); ApiResponse complexResponse = ConnectorAPI.JobGetInfos() diff --git a/src/main/java/fr/sandro642/github/hook/MCSupport.java b/src/main/java/fr/sandro642/github/hook/MCSupport.java new file mode 100644 index 0000000..45c8850 --- /dev/null +++ b/src/main/java/fr/sandro642/github/hook/MCSupport.java @@ -0,0 +1,122 @@ +package fr.sandro642.github.hook; + +import org.bukkit.plugin.Plugin; + +/** + * MCSupport est une classe utilitaire pour gérer les hooks liés à Minecraft. + * Elle permet de vérifier si le projet est un projet Minecraft et de gérer les ressources associées. + * @author Sandro642 + * @version 1.0 + */ +public class MCSupport { + + /** + * Création de l'instance unique de MCSupport. + */ + private static MCSupport instance; + + /** + * Instance unique du plugin Minecraft. + * Utilisée pour stocker la variable du plugin Minecraft. + */ + private Plugin pluginSingleton; + + /** + * Constructeur privé pour empêcher l'instanciation directe. + */ + private MCSupport() { + // Constructeur privé pour le pattern Singleton + } + + /** + * Méthode permettant de vérifier si le projet est un projet Minecraft. + * Elle vérifie si le chemin du fichier de configuration contient le chemin des ressources Minecraft. + * + * @return true si c'est un projet Minecraft, false sinon. + */ + public boolean isMCProject() { + try { + + String fileLocation = (String) fr.sandro642.github.ConnectorAPI.StoreAndRetrieve().store.get(fr.sandro642.github.ConnectorAPI.StoreAndRetrieve().FILE_LOCATION_KEY); + return fileLocation != null && fileLocation.contains(fr.sandro642.github.jobs.misc.ResourceType.MC_RESOURCES.getPath()); + } catch (Exception e) { + // En cas d'erreur, considérer que ce n'est pas un projet MC + return false; + } + } + + /** + * Méthode permettant de définir la variable du plugin Minecraft. + * Elle doit être appelée dans un projet Minecraft pour initialiser le plugin. + * + * @param plugin Le plugin Minecraft à définir. + * @return L'instance du plugin définie. + * @throws IllegalStateException Si la méthode n'est pas appelée dans un projet Minecraft. + * @throws IllegalArgumentException Si le plugin fourni est null. + */ + public Plugin setPluginVariable(Plugin plugin) { + if (plugin == null) { + throw new IllegalArgumentException("Plugin cannot be null."); + } + this.pluginSingleton = plugin; + return this.pluginSingleton; + } + + /** + * Méthode permettant d'obtenir le chemin du path du plugin Minecraft. + * Elle doit être appelée dans un projet Minecraft pour récupérer le chemin du dossier de données du plugin. + * + * @return Le chemin du dossier de données du plugin. + * @throws IllegalStateException Si la méthode n'est pas appelée dans un projet Minecraft ou si le plugin n'est pas initialisé. + */ + public String getPluginPath() { + + if (pluginSingleton == null) { + throw new IllegalStateException("Plugin variable is not set. Please call setPluginVariable first."); + } + + return pluginSingleton.getDataFolder().getAbsolutePath(); + } + + /** + * Méthode permettant de vérifier si le plugin est initialisé. + * + * @return true si le plugin est initialisé, false sinon. + */ + public boolean isPluginInitialized() { + return pluginSingleton != null; + } + + /** + * Méthode permettant d'obtenir l'instance du plugin (si initialisé). + * + * @return L'instance du plugin ou null si non initialisé. + */ + public Plugin getPlugin() { + return pluginSingleton; + } + + /** + * Méthode permettant de réinitialiser l'instance du plugin. + * Utile pour les tests ou le rechargement. + */ + public void resetPlugin() { + this.pluginSingleton = null; + } + + /** + * Méthode permettant d'obtenir l'instance unique de MCSupport. + * + * @return L'instance unique de MCSupport. + */ + public static MCSupport getInstance() { + if (instance == null) { + synchronized (MCSupport.class) { + if (instance == null) { + instance = new MCSupport(); + } + } + } + return instance; + } +} \ No newline at end of file diff --git a/src/main/java/fr/sandro642/github/jobs/JobGetInfos.java b/src/main/java/fr/sandro642/github/jobs/JobGetInfos.java index f9d430c..181fd2e 100644 --- a/src/main/java/fr/sandro642/github/jobs/JobGetInfos.java +++ b/src/main/java/fr/sandro642/github/jobs/JobGetInfos.java @@ -4,7 +4,6 @@ import fr.sandro642.github.api.ApiClient; import fr.sandro642.github.api.ApiResponse; import fr.sandro642.github.jobs.misc.MethodType; -import fr.sandro642.github.jobs.misc.ResourceType; import fr.sandro642.github.jobs.misc.VersionType; import fr.sandro642.github.utils.YamlUtils; @@ -25,15 +24,14 @@ public class JobGetInfos { * ApiClient est utilisé pour effectuer les requêtes HTTP vers l'API. * YamlUtils est utilisé pour lire les routes depuis le fichier YAML. */ - private ApiClient apiClient; - private YamlUtils yamlUtils; + private final ApiClient apiClient; + private final YamlUtils yamlUtils; /** * Constructeur de JobGetInfos qui initialise ApiClient et YamlUtils. - * Utilise ResourceType.MAIN_RESOURCES pour le type de ressource par défaut. */ public JobGetInfos() { - this.apiClient = new ApiClient(ResourceType.MAIN_RESOURCES); + this.apiClient = new ApiClient(); this.yamlUtils = ConnectorAPI.YamlUtils(); } @@ -135,7 +133,7 @@ public JobGetInfos getRoutes(VersionType versionType, MethodType methodType, Str String paramKey = "{" + entry.getKey() + "}"; String paramValue = entry.getValue().toString(); - // Remplace tous les occurrences du paramètre dans la route + // Remplace toutes les occurrences du paramètre dans la route fullRoute = fullRoute.replace(paramKey, paramValue); } } @@ -169,6 +167,7 @@ public JobGetInfos getRoutes(VersionType versionType, MethodType methodType, Str */ public ApiResponse getResponse() { try { + String route = (String) ConnectorAPI.StoreAndRetrieve().store.get("currentRoute"); MethodType method = (MethodType) ConnectorAPI.StoreAndRetrieve().store.get("currentMethod"); Map body = (Map) ConnectorAPI.StoreAndRetrieve().store.get("currentBody"); diff --git a/src/main/java/fr/sandro642/github/jobs/misc/ResourceType.java b/src/main/java/fr/sandro642/github/jobs/misc/ResourceType.java index 40bc106..b7998de 100644 --- a/src/main/java/fr/sandro642/github/jobs/misc/ResourceType.java +++ b/src/main/java/fr/sandro642/github/jobs/misc/ResourceType.java @@ -14,7 +14,7 @@ public enum ResourceType { */ MAIN_RESOURCES("src/main/resources"), TEST_RESOURCES("src/test/resources"), - MC_RESOURCES("Arrive prochainement"); + MC_RESOURCES(""); /** diff --git a/src/main/java/fr/sandro642/github/utils/StoreAndRetrieve.java b/src/main/java/fr/sandro642/github/utils/StoreAndRetrieve.java index e8adbae..c182776 100644 --- a/src/main/java/fr/sandro642/github/utils/StoreAndRetrieve.java +++ b/src/main/java/fr/sandro642/github/utils/StoreAndRetrieve.java @@ -1,7 +1,6 @@ package fr.sandro642.github.utils; -import java.util.concurrent.ConcurrentHashMap; -import java.util.Map; +import java.util.HashMap; /** * StoreAndRetrieve est une classe utilitaire pour stocker et récupérer des valeurs associées à des clés. @@ -22,7 +21,7 @@ public class StoreAndRetrieve { */ public final String URL_KEY = "baseUrl"; public final String FILE_LOCATION_KEY = "fileLocation"; - public final Map store = new ConcurrentHashMap<>(); + public final HashMap store = new HashMap<>(); /** * Ajoute une valeur à la map avec la clé spécifiée. diff --git a/src/main/java/fr/sandro642/github/utils/YamlUtils.java b/src/main/java/fr/sandro642/github/utils/YamlUtils.java index 00b85fd..750163f 100644 --- a/src/main/java/fr/sandro642/github/utils/YamlUtils.java +++ b/src/main/java/fr/sandro642/github/utils/YamlUtils.java @@ -1,6 +1,7 @@ package fr.sandro642.github.utils; import fr.sandro642.github.ConnectorAPI; +import fr.sandro642.github.hook.MCSupport; import fr.sandro642.github.jobs.misc.ResourceType; import org.yaml.snakeyaml.Yaml; @@ -26,6 +27,8 @@ public class YamlUtils { * @return l'URL de base définie dans le fichier YAML, ou null si une erreur se produit */ public String getURL() { + //HashMap storeLoad = ConnectorAPI.HookManager().loadData("store_and_retrieve.yml"); + String yamlFilePath = ConnectorAPI.StoreAndRetrieve().store.get(ConnectorAPI.StoreAndRetrieve().FILE_LOCATION_KEY) + "/infos.yml"; try (InputStream inputStream = Files.newInputStream(Paths.get(yamlFilePath))) { @@ -43,6 +46,8 @@ public String getURL() { * @return */ public String getRoute(String routeName) { + //HashMap storeLoad = ConnectorAPI.HookManager().loadData("store_and_retrieve.yml"); + String yamlFilePath = ConnectorAPI.StoreAndRetrieve().store.get(ConnectorAPI.StoreAndRetrieve().FILE_LOCATION_KEY) + "/infos.yml"; try (InputStream inputStream = Files.newInputStream(Paths.get(yamlFilePath))) { @@ -65,7 +70,14 @@ public String getRoute(String routeName) { * @param type */ public void generateTemplateIfNotExists(ResourceType type) { - String basePath = type.getPath(); + String basePath; + + if (type == ResourceType.MC_RESOURCES) { + basePath = MCSupport.getInstance().getPluginPath(); + } else { + basePath = type.getPath(); + } + File directory = new File(basePath); if (!directory.exists()) { directory.mkdirs(); diff --git a/src/test/java/fr/sandro642/github/test/Main.java b/src/test/java/fr/sandro642/github/test/Main.java index 70ad428..2f76a31 100644 --- a/src/test/java/fr/sandro642/github/test/Main.java +++ b/src/test/java/fr/sandro642/github/test/Main.java @@ -8,6 +8,8 @@ import fr.sandro642.github.jobs.misc.VersionType; import org.junit.jupiter.api.Test; +import java.util.HashMap; + /** * Main est une classe de test pour vérifier la création du fichier YML et pleins d'autres fonctionnalités de la librairie. * @author Sandro642 @@ -24,15 +26,7 @@ public void getUrl() { System.out.println(ConnectorAPI.YamlUtils().getURL()); } - @Test - public void getRoute() { - ConnectorAPI.initialize(ResourceType.TEST_RESOURCES); - - System.out.println(ConnectorAPI.JobGetInfos().getRoutes(VersionType.V1_BRANCH, MethodType.GET, "info")); - } - public static void main(String[] args) { - // Initialisation du ConnectorAPI ConnectorAPI.initialize(ResourceType.TEST_RESOURCES); try { @@ -46,6 +40,8 @@ public static void main(String[] args) { System.out.println("Code: " + response.getCode()); System.out.println("Erreur: " + response.isErr()); + System.out.println(response.display()); + // Exemple avec des données spécifiques (si elles existent) try { System.out.println("Valeur spécifique: " + response.getSpecData("version")); @@ -59,15 +55,4 @@ public static void main(String[] args) { } } - @Test - public void testHorsData() { - ConnectorAPI.initialize(ResourceType.TEST_RESOURCES); - - ApiResponse response = ConnectorAPI.JobGetInfos() - .getRoutes(VersionType.V1_BRANCH, MethodType.GET, "example1") - .getResponse(); - - System.out.println(response.display()); - } - } diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..caf4b54 --- /dev/null +++ b/todo.md @@ -0,0 +1,8 @@ +Carnet des charges : + +### Objectif +Création de la classe SerialMap.java : ```Fait``` + +Implémentation des méthodes de la classe SerialMap.java : ```A faire```. + +Sur la question de la branche ```feature/serializer```, pour l'instant juste commit et pousser sur la branche distante avant de l'intégrer dans le [work-jar.yml](.github/workflows/work-jar.yml) En prod. Essai en interne pour l'instant : ```Ajout de la branche en prod.``` \ No newline at end of file