From 1cb1229d881bf2f084307afa2724a60eb827c63b Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Thu, 15 Dec 2022 15:10:07 +0100 Subject: [PATCH] detailed a bit more the commentaries --- src/main/java/fr/packageviewer/LoggerManager.java | 3 +++ .../distribution/ArchDistribution.java | 14 +++++++------- .../distribution/FedoraDistribution.java | 4 +++- .../packageviewer/parser/AsyncRequestsParser.java | 9 ++++++--- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/fr/packageviewer/LoggerManager.java b/src/main/java/fr/packageviewer/LoggerManager.java index 18240a3..4a79e24 100644 --- a/src/main/java/fr/packageviewer/LoggerManager.java +++ b/src/main/java/fr/packageviewer/LoggerManager.java @@ -33,12 +33,15 @@ public class LoggerManager { * @return Logger, a new logger */ public static Logger getLogger(String name, Level level) { + // Create a logger and set its level Logger logger = Logger.getLogger(name); logger.setLevel(level); + // create an hanlder for standard error and add it to the logger Handler handler = new StreamHandler(System.err, new SimpleFormatter()); logger.addHandler(handler); + logger.setUseParentHandlers(false); return logger; } diff --git a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java index 1737f00..734cc38 100644 --- a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java @@ -57,17 +57,18 @@ public class ArchDistribution extends AsyncRequestsParser implements Distributio */ @Override public CompletableFuture>> getPackageFromAPI(String packageName) { - // create a new http client + // create a new http client and he request for arch reseach api HttpClient client = HttpClient.newHttpClient(); - // and create its url HttpRequest request = HttpRequest .newBuilder(URI.create("https://archlinux.org/packages/search/json/?name=" + packageName)).build(); CompletableFuture>> futureResult = new CompletableFuture<>(); + // send the request and when there's a response client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenAccept(result -> { - + //parse the json response JSONObject json = new JSONObject(result.body()); - + + // check if the response contains something JSONArray resultsArrayJson = json.getJSONArray("results"); if (resultsArrayJson.length() == 0) { // unknown package, probably an abstract dependency @@ -75,13 +76,12 @@ public class ArchDistribution extends AsyncRequestsParser implements Distributio return; } JSONObject resultJson = resultsArrayJson.getJSONObject(0); - - // get infos - Set dependenciesNames = new HashSet<>(); + // parse depencies without version requirements (bash >= 3.0) -> (bash) for (Object dependency : resultJson.getJSONArray("depends")) { dependenciesNames.add(trimAfterCharacters((String) dependency, "<>=")); } + //Create the package and store it and its set of deps in a pair futureResult.complete(new Pair<>( new Package( resultJson.getString("pkgname"), diff --git a/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java index b11f86d..9c3249d 100644 --- a/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java @@ -99,7 +99,7 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut */ @Override public CompletableFuture> searchPackage(String packageName) { - + // create an http client and the request for fedora's reseach api HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create( @@ -109,7 +109,9 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut CompletableFuture> futureSearchedPackages = new CompletableFuture<>(); + // send the request and when there's a response client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenAccept(result -> { + //parse the json response JSONObject json = new JSONObject(result.body()); List searchedPackagesList = new ArrayList<>(); diff --git a/src/main/java/fr/packageviewer/parser/AsyncRequestsParser.java b/src/main/java/fr/packageviewer/parser/AsyncRequestsParser.java index de4defe..a877c4b 100644 --- a/src/main/java/fr/packageviewer/parser/AsyncRequestsParser.java +++ b/src/main/java/fr/packageviewer/parser/AsyncRequestsParser.java @@ -48,7 +48,7 @@ public abstract class AsyncRequestsParser { * @return Package, the fully completed package */ public CompletableFuture getPackageTree(String packageName, int depth) { - // parse the json + //Wrapper for the package that we'll return var futurePackage = new CompletableFuture(); logger.fine("Querying package %s from API... (depth=%s)".formatted(packageName, depth)); @@ -57,11 +57,14 @@ public abstract class AsyncRequestsParser { try { futureRequest = getPackageFromAPI(packageName); } catch (IllegalArgumentException e) { + // If we can't get the package from the api return a null object logger.warning("Caught exception for package %s :\n%s".formatted(packageName, e)); return CompletableFuture.completedFuture(null); } + // When we get the response from the request futureRequest.thenAccept(result -> { if (result == null) { + // if there's no response return null object logger.fine("Completing callback INVALID for package %s (depth=%s)".formatted(packageName, depth)); futurePackage.complete(null); return; @@ -83,6 +86,8 @@ public abstract class AsyncRequestsParser { // add package into Package List futureDeps.add(getPackageTree(depPackageName, depth - 1)); } + // for each future in the list, get the actual package and store + // into the deps list of the packaqge for (CompletableFuture future : futureDeps) { Package dep; try { @@ -94,8 +99,6 @@ public abstract class AsyncRequestsParser { pack.addDep(dep); } } - - // TODO this doesn't seem clean logger.fine("Completing callback DEPS for package %s (depth=%s)".formatted(packageName, depth)); futurePackage.complete(pack); }).exceptionally(error -> {