From c8eae1fb063e070a27162bcc0401252318b37e3a Mon Sep 17 00:00:00 2001 From: SIMAILA Djalim Date: Tue, 13 Dec 2022 15:59:40 +0100 Subject: [PATCH] refactored for async use --- .../packageviewer/FedoraParser/Package.java | 31 ------------ .../FedoraParser/SearchedPackage.java | 38 --------------- .../FedoraDistribution.java} | 47 ++++++++++++------- 3 files changed, 31 insertions(+), 85 deletions(-) delete mode 100644 src/main/java/fr/packageviewer/FedoraParser/Package.java delete mode 100644 src/main/java/fr/packageviewer/FedoraParser/SearchedPackage.java rename src/main/java/fr/packageviewer/{FedoraParser/FedoraParser.java => distribution/FedoraDistribution.java} (74%) diff --git a/src/main/java/fr/packageviewer/FedoraParser/Package.java b/src/main/java/fr/packageviewer/FedoraParser/Package.java deleted file mode 100644 index 66a53a3..0000000 --- a/src/main/java/fr/packageviewer/FedoraParser/Package.java +++ /dev/null @@ -1,31 +0,0 @@ -package fr.packageviewer.FedoraParser; - -import java.util.List; - -public class Package extends SearchedPackage { - String version; - public List deps; - - public Package(String name, String version, String repo, String description, List deps) { - super(name, repo, description); - this.version = version; - this.deps = deps; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public List getDeps() { - return deps; - } - - public void setDeps(List deps) { - this.deps = deps; - } - -} \ No newline at end of file diff --git a/src/main/java/fr/packageviewer/FedoraParser/SearchedPackage.java b/src/main/java/fr/packageviewer/FedoraParser/SearchedPackage.java deleted file mode 100644 index 809942b..0000000 --- a/src/main/java/fr/packageviewer/FedoraParser/SearchedPackage.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.packageviewer.FedoraParser; - -public class SearchedPackage { - String name; - String repo; - String description; - - public SearchedPackage(String name, String repo, String desciption) { - this.name = name; - this.repo = repo; - this.description = desciption; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getRepo() { - return repo; - } - - public void setRepo(String repo) { - this.repo = repo; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - -} \ No newline at end of file diff --git a/src/main/java/fr/packageviewer/FedoraParser/FedoraParser.java b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java similarity index 74% rename from src/main/java/fr/packageviewer/FedoraParser/FedoraParser.java rename to src/main/java/fr/packageviewer/distribution/FedoraDistribution.java index 0b8e3cc..f4b1bc8 100644 --- a/src/main/java/fr/packageviewer/FedoraParser/FedoraParser.java +++ b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java @@ -1,4 +1,4 @@ -package fr.packageviewer.FedoraParser; +package fr.packageviewer.distribution; import java.io.IOException; import java.net.URI; @@ -10,10 +10,16 @@ import java.util.Map; import java.util.Scanner; import java.net.http.*; import org.json.*; +import java.util.concurrent.CompletableFuture; +import fr.packageviewer.pack.Package; +import fr.packageviewer.pack.SearchedPackage; +import fr.packageviewer.LoggerManager; +import fr.packageviewer.pack.Package; +import fr.packageviewer.pack.SearchedPackage; -public class FedoraParser { +public class FedoraDistribution implements Distribution { - public String getPackageFromAPI(String packageName) { + private String getPackageFromAPI(String packageName) { // create a new http client HttpClient client = HttpClient.newHttpClient(); // and create its url @@ -26,18 +32,20 @@ public class FedoraParser { return response; } catch (IOException|InterruptedException e) { e.printStackTrace(); + } // if there's an error, return an empty string return ""; } - + + @Override public List searchPackage(String packageName) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create( "https://src.fedoraproject.org/api/0/projects?namepace=rpms&per_page=100&short=true&pattern=*" - + packageName+"*")) + + packageName + "*")) .build(); HttpResponse response; @@ -59,45 +67,52 @@ public class FedoraParser { // add package into to list searchedPackagesList.add(new SearchedPackage( searchResultJson.getString("neofetch"), + null, searchResultJson.getString("fullname"), searchResultJson.getString("description"))); } return searchedPackagesList; } - - public Package getPackageTree(String packageName, int depth) { + public Package getPackageTreeInternal(String packageName, int depth) { String name, version, repo, description; List deps = new ArrayList<>(); // parse the json String response = getPackageFromAPI(packageName); - if(response == ""){ - return new Package(packageName+"(not found)", "N/A", "N/A", "N/A", Collections.emptyList()); + if (response == "") { + return new Package(packageName + "(not found)", "N/A", "N/A", "N/A", Collections.emptyList()); } JSONObject json = new JSONObject(response); // get infos except dependencies name = json.getString("basename"); version = json.getString("version"); - repo = "rpms/"+packageName; + repo = "rpms/" + packageName; description = json.getString("description"); // if we're at the maximum depth, return the package without its dependencies - if(depth==0){ + if (depth == 0) { return new Package(name, version, repo, description, Collections.emptyList()); - } - else { + } else { // iterate for every package in the list for (Object depPackageNameObj : json.getJSONArray("requires")) { // convert object into String JSONObject depPackageJSONObj = (JSONObject) depPackageNameObj; // add package into Package List String depName = depPackageJSONObj.getString("name"); - if(depName.contains(".so")) continue; - if(depName.contains("/")) continue; + if (depName.contains(".so")) + continue; + if (depName.contains("/")) + continue; deps.add(getPackageTree(depName, depth - 1)); } return new Package(name, version, repo, description, deps); } } -} \ No newline at end of file + + public CompletableFuture getPackageTree(String packageName, int depth){ + return CompletableFuture.supplyAsync(()->{ + return getPackageTreeInternal(packageName, depth); + }); + } +}