From 945571adf0b47a46f1ac9c9e8b74c20c092112e4 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Mon, 12 Dec 2022 23:41:47 +0100 Subject: [PATCH 01/17] added package name in parser --- src/main/java/fr/packageviewer/ArgParse.java | 14 +++++++++++++- .../java/fr/packageviewer/CommandLineParams.java | 8 ++++++++ src/main/java/fr/packageviewer/Main.java | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/packageviewer/ArgParse.java b/src/main/java/fr/packageviewer/ArgParse.java index b037ad1..8650a87 100644 --- a/src/main/java/fr/packageviewer/ArgParse.java +++ b/src/main/java/fr/packageviewer/ArgParse.java @@ -11,6 +11,7 @@ public class ArgParse { /* distribution the user want */ private static String distribution; + private static String packet; /** * Get the command line argument given by the user, parse it with the parser and store it in the corresponding variable @@ -29,9 +30,11 @@ public class ArgParse { jCommander.parse(args); // store the argument parsed in the variable distribution = params.distribution; + packet = params.packet; + } catch (Exception e) { // if the parsing failed, print the error message and exit the program - System.out.println("You forgot the distribution name."); + System.out.println("You forgot something, please enter the package name and the distribution name if you want to search in a specific one"); System.exit(0); } } @@ -44,4 +47,13 @@ public class ArgParse { public static String getDistribution() { return distribution; } + + /** + * Get the packet name, this one isn't optional + * @author Capelier-Marla + * @return String: the packet name + */ + public static String getPacket() { + return packet; + } } diff --git a/src/main/java/fr/packageviewer/CommandLineParams.java b/src/main/java/fr/packageviewer/CommandLineParams.java index 25418b3..be87210 100644 --- a/src/main/java/fr/packageviewer/CommandLineParams.java +++ b/src/main/java/fr/packageviewer/CommandLineParams.java @@ -23,4 +23,12 @@ public class CommandLineParams { description = "Linux distribution to search in", required = false) public String distribution; + + /** + * Packet the user want to search + */ + @Parameter(names = {"--packet", "-p"}, + description = "Packet to search", + required = true) + public String packet; } diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index b74f7d2..82d35a2 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -6,5 +6,6 @@ public class Main { // send the command line arguments to the parser ArgParse.parseArguments(args); System.out.println(ArgParse.getDistribution()); + System.out.println(ArgParse.getPacket()); } } From 1fa25c47f561c78dd340dc1933551bcba6b22e99 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 11:10:40 +0100 Subject: [PATCH 02/17] we don't need --name anymore to pick the package name --- src/main/java/fr/packageviewer/ArgParse.java | 13 +++++++++--- .../fr/packageviewer/CommandLineParams.java | 21 +++++++++---------- src/main/java/fr/packageviewer/Main.java | 2 +- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/java/fr/packageviewer/ArgParse.java b/src/main/java/fr/packageviewer/ArgParse.java index 8650a87..0873d04 100644 --- a/src/main/java/fr/packageviewer/ArgParse.java +++ b/src/main/java/fr/packageviewer/ArgParse.java @@ -28,13 +28,20 @@ public class ArgParse { try { // parse the argument from list of String jCommander.parse(args); - // store the argument parsed in the variable - distribution = params.distribution; - packet = params.packet; + if(params.help) { + jCommander.setProgramName("PackageViewer"); + jCommander.usage(); + } else { + // store the argument parsed in the variable + packet = params.packet; + distribution = params.distribution; + } } catch (Exception e) { // if the parsing failed, print the error message and exit the program System.out.println("You forgot something, please enter the package name and the distribution name if you want to search in a specific one"); + jCommander.setProgramName("PackageViewer"); + jCommander.usage(); System.exit(0); } } diff --git a/src/main/java/fr/packageviewer/CommandLineParams.java b/src/main/java/fr/packageviewer/CommandLineParams.java index be87210..a4238fa 100644 --- a/src/main/java/fr/packageviewer/CommandLineParams.java +++ b/src/main/java/fr/packageviewer/CommandLineParams.java @@ -1,8 +1,5 @@ package fr.packageviewer; -import java.util.ArrayList; -import java.util.List; - import com.beust.jcommander.Parameter; /** @@ -10,11 +7,13 @@ import com.beust.jcommander.Parameter; * @author Capelier-Marla */ public class CommandLineParams { + /** - * List of parameters given by the user + * Packet the user want to search, only parameter without names */ - @Parameter - public List parameters = new ArrayList<>(); + @Parameter(description = "Packet to search", + required = true) + public String packet; /** * Distribution the user want to search packages in @@ -25,10 +24,10 @@ public class CommandLineParams { public String distribution; /** - * Packet the user want to search + * Displays the help */ - @Parameter(names = {"--packet", "-p"}, - description = "Packet to search", - required = true) - public String packet; + @Parameter(names = {"--help", "-h"}, + help = true, + required = false) + public boolean help = false; } diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index 82d35a2..b66a048 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -5,7 +5,7 @@ public class Main { public static void main(String[] args) { // send the command line arguments to the parser ArgParse.parseArguments(args); - System.out.println(ArgParse.getDistribution()); System.out.println(ArgParse.getPacket()); + System.out.println(ArgParse.getDistribution()); } } From 228b0f5750ec4f441104568266e071e6a1d0e344 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 11:17:00 +0100 Subject: [PATCH 03/17] typo --- src/main/java/fr/packageviewer/CommandLineParams.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/packageviewer/CommandLineParams.java b/src/main/java/fr/packageviewer/CommandLineParams.java index a4238fa..ad6ce9b 100644 --- a/src/main/java/fr/packageviewer/CommandLineParams.java +++ b/src/main/java/fr/packageviewer/CommandLineParams.java @@ -11,7 +11,7 @@ public class CommandLineParams { /** * Packet the user want to search, only parameter without names */ - @Parameter(description = "Packet to search", + @Parameter(description = "Package to search", required = true) public String packet; @@ -27,6 +27,7 @@ public class CommandLineParams { * Displays the help */ @Parameter(names = {"--help", "-h"}, + description = "Display this help", help = true, required = false) public boolean help = false; From 5c2675115c26e5e70a00452919082c7e4f1f5d89 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 11:42:29 +0100 Subject: [PATCH 04/17] process distribution name --- src/main/java/fr/packageviewer/ArgParse.java | 1 + src/main/java/fr/packageviewer/Main.java | 46 +++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/packageviewer/ArgParse.java b/src/main/java/fr/packageviewer/ArgParse.java index 0873d04..e477c3f 100644 --- a/src/main/java/fr/packageviewer/ArgParse.java +++ b/src/main/java/fr/packageviewer/ArgParse.java @@ -31,6 +31,7 @@ public class ArgParse { if(params.help) { jCommander.setProgramName("PackageViewer"); jCommander.usage(); + System.exit(0); } else { // store the argument parsed in the variable packet = params.packet; diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index b66a048..d04ec45 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -1,11 +1,53 @@ package fr.packageviewer; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; + +import fr.packageviewer.distribution.ArchDistribution; +import fr.packageviewer.pack.Package; + public class Main { + /** + * Check if the given distribution is supported + * @param distribution distribution name + * @return the distribution wanted if found, or null if there is none, or stop the program if it is not supported + * @author Capelier-Marla + */ + private static String processDistribution(String distribution) { + // check if the user asked a distribution + if(distribution == null || distribution.length() == 0) { + return null; + } + // create a map with the distribution names + Map distributionMap = new HashMap(); + distributionMap.put("ARCH", "archlinux"); + distributionMap.put("ARCHLINUX", "archlinux"); + distributionMap.put("FEDORA", "fedora"); + distribution = distribution.toUpperCase(); + + // check if we support the distribtion + if(distributionMap.containsKey(distribution)) { + // give the distribution name + return distributionMap.get(distribution); + } else { + // stop the program as the user want a non-supported distribution + System.out.println("Cette ditribution n'a pas été trouvée"); + System.exit(0); + return null; + } + } + public static void main(String[] args) { // send the command line arguments to the parser ArgParse.parseArguments(args); - System.out.println(ArgParse.getPacket()); - System.out.println(ArgParse.getDistribution()); + String packet = ArgParse.getPacket(); + String distribution = ArgParse.getDistribution(); + + System.out.println(packet); + distribution = processDistribution(distribution); + System.out.println(distribution); } } From 32ae539a0d870641f81227432f57614bac8f7a71 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 11:59:43 +0100 Subject: [PATCH 05/17] switch case for each distribution --- src/main/java/fr/packageviewer/Main.java | 33 +++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index d04ec45..e26ceb1 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -2,11 +2,6 @@ package fr.packageviewer; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Future; - -import fr.packageviewer.distribution.ArchDistribution; -import fr.packageviewer.pack.Package; public class Main { @@ -40,14 +35,40 @@ public class Main { } } + private static void searchForAll(String packet) { + } + + private static void searchForArch(String packet) { + } + + private static void searchForFedora(String packet) { + } + public static void main(String[] args) { // send the command line arguments to the parser ArgParse.parseArguments(args); String packet = ArgParse.getPacket(); String distribution = ArgParse.getDistribution(); + distribution = processDistribution(distribution); System.out.println(packet); - distribution = processDistribution(distribution); System.out.println(distribution); + + // distribution is null when no distribution is specified + if(distribution == null) { + searchForAll(packet); + } else { + switch (distribution) { + case "archlinux": + searchForArch(packet); + break; + case "fedora": + searchForFedora(packet); + break; + default: + System.out.println("Error: Unknown"); + break; + } + } } } From e1d40829b40b799d74ba024411908f52e78e49e3 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 14:32:26 +0100 Subject: [PATCH 06/17] get list of searched packages from distrib wanted --- src/main/java/fr/packageviewer/Main.java | 80 ++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 6 deletions(-) diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index e26ceb1..8e1b5d3 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -1,7 +1,14 @@ package fr.packageviewer; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.concurrent.Future; + +import fr.packageviewer.distribution.ArchDistribution; +import fr.packageviewer.distribution.Distribution; +import fr.packageviewer.pack.SearchedPackage; public class Main { @@ -35,13 +42,70 @@ public class Main { } } - private static void searchForAll(String packet) { + + private static List searchForAll(String packet) { + // init distribution to search in it + Distribution arch = new ArchDistribution(); + Distribution fedora = new ArchDistribution(); + // search for the package in the distribution + Future> archPackages = arch.searchPackage(packet); + Future> fedoraPackages = fedora.searchPackage(packet); + // init the list of packages that will be returned + List archResult = new ArrayList<>(); + List fedoraResult = new ArrayList<>(); + // try to get the searched packages to return it after + try { + archResult = archPackages.get(); + fedoraResult = fedoraPackages.get(); + } catch (Exception e) { + /* TODO: handle exception */ + } + archResult.addAll(fedoraResult); + return archResult; } - private static void searchForArch(String packet) { + /** + * Search for the specified package in Arch repositories + * @param packet the package to search + * @return The list of packages that match the name + * @author Capelier-Marla + */ + private static List searchForArch(String packet) { + // init distribution to search in it + Distribution arch = new ArchDistribution(); + // search for the package in the distribution + Future> packages = arch.searchPackage(packet); + // init the list of packages that will be returned + List result = new ArrayList<>(); + // try to get the searched packages to return it after + try { + result = packages.get(); + } catch (Exception e) { + /* TODO: handle exception */ + } + return result; } - private static void searchForFedora(String packet) { + /** + * Search for the specified package in Fedora repositories + * @param packet the package to search + * @return The list of packages that match the name + * @author Capelier-Marla + */ + private static List searchForFedora(String packet) { + // init distribution to search in it + Distribution fedora = new ArchDistribution(); + // search for the package in the distribution + Future> packages = fedora.searchPackage(packet); + // init the list of packages that will be returned + List result = new ArrayList<>(); + // try to get the searched packages to return it after + try { + result = packages.get(); + } catch (Exception e) { + /* TODO: handle exception */ + } + return result; } public static void main(String[] args) { @@ -54,19 +118,23 @@ public class Main { System.out.println(packet); System.out.println(distribution); + // the list of packages we will show later + List packets = new ArrayList<>(); + // distribution is null when no distribution is specified if(distribution == null) { - searchForAll(packet); + packets = searchForAll(packet); } else { switch (distribution) { case "archlinux": - searchForArch(packet); + packets = searchForArch(packet); break; case "fedora": - searchForFedora(packet); + packets = searchForFedora(packet); break; default: System.out.println("Error: Unknown"); + System.exit(0); break; } } From 2834168b14eaa077e9ed3e41796f7db553044d73 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 14:38:30 +0100 Subject: [PATCH 07/17] refactored searchers into a class --- src/main/java/fr/packageviewer/Main.java | 75 ++----------------- src/main/java/fr/packageviewer/Searcher.java | 76 ++++++++++++++++++++ 2 files changed, 80 insertions(+), 71 deletions(-) create mode 100644 src/main/java/fr/packageviewer/Searcher.java diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index 8e1b5d3..f870f4a 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -4,10 +4,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.Future; -import fr.packageviewer.distribution.ArchDistribution; -import fr.packageviewer.distribution.Distribution; import fr.packageviewer.pack.SearchedPackage; public class Main { @@ -43,71 +40,6 @@ public class Main { } - private static List searchForAll(String packet) { - // init distribution to search in it - Distribution arch = new ArchDistribution(); - Distribution fedora = new ArchDistribution(); - // search for the package in the distribution - Future> archPackages = arch.searchPackage(packet); - Future> fedoraPackages = fedora.searchPackage(packet); - // init the list of packages that will be returned - List archResult = new ArrayList<>(); - List fedoraResult = new ArrayList<>(); - // try to get the searched packages to return it after - try { - archResult = archPackages.get(); - fedoraResult = fedoraPackages.get(); - } catch (Exception e) { - /* TODO: handle exception */ - } - archResult.addAll(fedoraResult); - return archResult; - } - - /** - * Search for the specified package in Arch repositories - * @param packet the package to search - * @return The list of packages that match the name - * @author Capelier-Marla - */ - private static List searchForArch(String packet) { - // init distribution to search in it - Distribution arch = new ArchDistribution(); - // search for the package in the distribution - Future> packages = arch.searchPackage(packet); - // init the list of packages that will be returned - List result = new ArrayList<>(); - // try to get the searched packages to return it after - try { - result = packages.get(); - } catch (Exception e) { - /* TODO: handle exception */ - } - return result; - } - - /** - * Search for the specified package in Fedora repositories - * @param packet the package to search - * @return The list of packages that match the name - * @author Capelier-Marla - */ - private static List searchForFedora(String packet) { - // init distribution to search in it - Distribution fedora = new ArchDistribution(); - // search for the package in the distribution - Future> packages = fedora.searchPackage(packet); - // init the list of packages that will be returned - List result = new ArrayList<>(); - // try to get the searched packages to return it after - try { - result = packages.get(); - } catch (Exception e) { - /* TODO: handle exception */ - } - return result; - } - public static void main(String[] args) { // send the command line arguments to the parser ArgParse.parseArguments(args); @@ -122,15 +54,16 @@ public class Main { List packets = new ArrayList<>(); // distribution is null when no distribution is specified + // else we get the list of packages from the distribution if(distribution == null) { - packets = searchForAll(packet); + packets = Searcher.searchForAll(packet); } else { switch (distribution) { case "archlinux": - packets = searchForArch(packet); + packets = Searcher.searchForArch(packet); break; case "fedora": - packets = searchForFedora(packet); + packets = Searcher.searchForFedora(packet); break; default: System.out.println("Error: Unknown"); diff --git a/src/main/java/fr/packageviewer/Searcher.java b/src/main/java/fr/packageviewer/Searcher.java new file mode 100644 index 0000000..f28b3ae --- /dev/null +++ b/src/main/java/fr/packageviewer/Searcher.java @@ -0,0 +1,76 @@ +package fr.packageviewer; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Future; + +import fr.packageviewer.distribution.ArchDistribution; +import fr.packageviewer.distribution.Distribution; +import fr.packageviewer.pack.SearchedPackage; + +public class Searcher { + public static List searchForAll(String packet) { + // init distribution to search in it + Distribution arch = new ArchDistribution(); + Distribution fedora = new ArchDistribution(); + // search for the package in the distribution + Future> archPackages = arch.searchPackage(packet); + Future> fedoraPackages = fedora.searchPackage(packet); + // init the list of packages that will be returned + List archResult = new ArrayList<>(); + List fedoraResult = new ArrayList<>(); + // try to get the searched packages to return it after + try { + archResult = archPackages.get(); + fedoraResult = fedoraPackages.get(); + } catch (Exception e) { + /* TODO: handle exception */ + } + archResult.addAll(fedoraResult); + return archResult; + } + + /** + * Search for the specified package in Arch repositories + * @param packet the package to search + * @return The list of packages that match the name + * @author Capelier-Marla + */ + public static List searchForArch(String packet) { + // init distribution to search in it + Distribution arch = new ArchDistribution(); + // search for the package in the distribution + Future> packages = arch.searchPackage(packet); + // init the list of packages that will be returned + List result = new ArrayList<>(); + // try to get the searched packages to return it after + try { + result = packages.get(); + } catch (Exception e) { + /* TODO: handle exception */ + } + return result; + } + + /** + * Search for the specified package in Fedora repositories + * @param packet the package to search + * @return The list of packages that match the name + * @author Capelier-Marla + */ + public static List searchForFedora(String packet) { + // init distribution to search in it + Distribution fedora = new ArchDistribution(); + // search for the package in the distribution + Future> packages = fedora.searchPackage(packet); + // init the list of packages that will be returned + List result = new ArrayList<>(); + // try to get the searched packages to return it after + try { + result = packages.get(); + } catch (Exception e) { + /* TODO: handle exception */ + } + return result; + } +} From b1bdc05ae5c831d0e67f520bafcd7f1c4de91f36 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 14:56:27 +0100 Subject: [PATCH 08/17] display results --- src/main/java/fr/packageviewer/Main.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index f870f4a..4643ec5 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -71,5 +71,14 @@ public class Main { break; } } + + for (int i = packets.size(); i-- > 0; ) { + System.out.printf("%s - %s/%s %s%n\t%s%n", + i, + packets.get(i).getRepo(), + packets.get(i).getName(), + packets.get(i).getVersion(), + packets.get(i).getDescription()); + } } } From 954e0d65ddff3fe4f547a099d5f4d108c677a680 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 15:08:22 +0100 Subject: [PATCH 09/17] fixed fedora requests and removed debug print --- src/main/java/fr/packageviewer/Main.java | 6 ++---- src/main/java/fr/packageviewer/Searcher.java | 3 ++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index 4643ec5..915797d 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -47,9 +47,6 @@ public class Main { String distribution = ArgParse.getDistribution(); distribution = processDistribution(distribution); - System.out.println(packet); - System.out.println(distribution); - // the list of packages we will show later List packets = new ArrayList<>(); @@ -73,8 +70,9 @@ public class Main { } for (int i = packets.size(); i-- > 0; ) { - System.out.printf("%s - %s/%s %s%n\t%s%n", + System.out.printf("%s - %s/%s/%s %s%n\t%s%n", i, + packets.get(i).getDistribution(), packets.get(i).getRepo(), packets.get(i).getName(), packets.get(i).getVersion(), diff --git a/src/main/java/fr/packageviewer/Searcher.java b/src/main/java/fr/packageviewer/Searcher.java index f28b3ae..8f47ac9 100644 --- a/src/main/java/fr/packageviewer/Searcher.java +++ b/src/main/java/fr/packageviewer/Searcher.java @@ -6,6 +6,7 @@ import java.util.concurrent.Future; import fr.packageviewer.distribution.ArchDistribution; import fr.packageviewer.distribution.Distribution; +import fr.packageviewer.distribution.FedoraDistribution; import fr.packageviewer.pack.SearchedPackage; public class Searcher { @@ -60,7 +61,7 @@ public class Searcher { */ public static List searchForFedora(String packet) { // init distribution to search in it - Distribution fedora = new ArchDistribution(); + Distribution fedora = new FedoraDistribution(); // search for the package in the distribution Future> packages = fedora.searchPackage(packet); // init the list of packages that will be returned From a7d68d5c590c81ac9163707855a644fb32231cea Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 15:12:10 +0100 Subject: [PATCH 10/17] don't display version if null --- src/main/java/fr/packageviewer/Main.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index 915797d..c2a83ea 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -70,13 +70,14 @@ public class Main { } for (int i = packets.size(); i-- > 0; ) { + SearchedPackage searchedPacket = packets.get(i); System.out.printf("%s - %s/%s/%s %s%n\t%s%n", i, - packets.get(i).getDistribution(), - packets.get(i).getRepo(), - packets.get(i).getName(), - packets.get(i).getVersion(), - packets.get(i).getDescription()); + searchedPacket.getDistribution(), + searchedPacket.getRepo(), + searchedPacket.getName(), + searchedPacket.getVersion()==null?"":searchedPacket.getVersion(), + searchedPacket.getDescription()); } } } From 8a80ac9f26b9a63251547beb3c6bb5dcc5222642 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Wed, 14 Dec 2022 15:17:30 +0100 Subject: [PATCH 11/17] refixed fedora searches --- src/main/java/fr/packageviewer/Searcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/packageviewer/Searcher.java b/src/main/java/fr/packageviewer/Searcher.java index 8f47ac9..9222015 100644 --- a/src/main/java/fr/packageviewer/Searcher.java +++ b/src/main/java/fr/packageviewer/Searcher.java @@ -13,7 +13,7 @@ public class Searcher { public static List searchForAll(String packet) { // init distribution to search in it Distribution arch = new ArchDistribution(); - Distribution fedora = new ArchDistribution(); + Distribution fedora = new FedoraDistribution(); // search for the package in the distribution Future> archPackages = arch.searchPackage(packet); Future> fedoraPackages = fedora.searchPackage(packet); From c9aed83465aa0ca89ee2eaf9a764f541ba40c6c5 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Thu, 15 Dec 2022 12:11:59 +0100 Subject: [PATCH 12/17] getting user input and checking if it's valid --- src/main/java/fr/packageviewer/Main.java | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index c2a83ea..b328b9d 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Scanner; import fr.packageviewer.pack.SearchedPackage; @@ -69,6 +70,7 @@ public class Main { } } + // list all packages in reverse order for (int i = packets.size(); i-- > 0; ) { SearchedPackage searchedPacket = packets.get(i); System.out.printf("%s - %s/%s/%s %s%n\t%s%n", @@ -79,5 +81,51 @@ public class Main { searchedPacket.getVersion()==null?"":searchedPacket.getVersion(), searchedPacket.getDescription()); } + + System.out.printf("Pick a package to see in details (0-%s) : %n", packets.size()-1); + Scanner input = new Scanner(System.in); + + // we create vars for the loop + String packetNumberString; + int packetNumber; + boolean notValid; + // we ask input and check if the user input is correct + do { + packetNumberString = input.nextLine(); + // reset notValid to false, we set it in true only if something is wrong + notValid = false; + if(isNumeric(packetNumberString)) { + packetNumber = Integer.parseInt(packetNumberString); + if(packetNumber < 0 || packetNumber >= packets.size()) { + // this number is too big or too small + System.out.println("Enter a valid number"); + notValid = true; + } + } else { + // this is not a number + System.out.println("Enter a valid number"); + notValid = true; + } + } while(notValid); + + input.close(); + + + } + + + /** + * Check if the String given is a number + * @param i the String given + * @return true if the String is a number + * @author Capelier-Marla + */ + private static boolean isNumeric(String i) { + try { + Integer.parseInt(i); + return true; + } catch (Exception e) { + return false; + } } } From 19517d5b6c075def9cc0ad88235a771db1716edc Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Thu, 15 Dec 2022 14:07:49 +0100 Subject: [PATCH 13/17] new function to get a package and its dependencies --- src/main/java/fr/packageviewer/Searcher.java | 37 ++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/main/java/fr/packageviewer/Searcher.java b/src/main/java/fr/packageviewer/Searcher.java index 9222015..6264163 100644 --- a/src/main/java/fr/packageviewer/Searcher.java +++ b/src/main/java/fr/packageviewer/Searcher.java @@ -8,6 +8,7 @@ import fr.packageviewer.distribution.ArchDistribution; import fr.packageviewer.distribution.Distribution; import fr.packageviewer.distribution.FedoraDistribution; import fr.packageviewer.pack.SearchedPackage; +import fr.packageviewer.pack.Package; public class Searcher { public static List searchForAll(String packet) { @@ -74,4 +75,40 @@ public class Searcher { } return result; } + + /** + * Search for the specific package in the specific distribution, we need the searchedPackage to get informations about it like it name and distribution + * @param pSearchedPackage the package to search for + * @return a complete package with its dependencies + * @author Capelier-Marla + */ + public static Package getPackage(SearchedPackage pSearchedPackage) { + // we get the name of the distribution of the package + String distName = pSearchedPackage.getDistribution(); + // we create a distribution object + Distribution distribution; + switch (distName) { + case "archlinux": + distribution = new ArchDistribution(); + break; + case "fedora": + distribution = new FedoraDistribution(); + break; + default: + System.out.println("Error: Unknown"); + System.exit(1); + return null; + } + // create the futue package we'll get from searching + Future packet = distribution.getPackageTree(pSearchedPackage.getName(), 4); + // object containing the package we're looking for + Package result; + try { + result = packet.get(); + } catch (Exception e) { + return null; + } + // return the package + return result; + } } From 134d5554abcc5ac47ba1927385faff66b3f25ffa Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Thu, 15 Dec 2022 16:29:27 +0100 Subject: [PATCH 14/17] big refactor to use enum and be upgradable --- .../fr/packageviewer/DistributionEnum.java | 63 ++++++++ src/main/java/fr/packageviewer/Main.java | 61 +------- src/main/java/fr/packageviewer/Searcher.java | 136 ++++++------------ 3 files changed, 114 insertions(+), 146 deletions(-) create mode 100644 src/main/java/fr/packageviewer/DistributionEnum.java diff --git a/src/main/java/fr/packageviewer/DistributionEnum.java b/src/main/java/fr/packageviewer/DistributionEnum.java new file mode 100644 index 0000000..6e4ac7b --- /dev/null +++ b/src/main/java/fr/packageviewer/DistributionEnum.java @@ -0,0 +1,63 @@ +package fr.packageviewer; + +import java.util.ArrayList; +import java.util.List; + +import fr.packageviewer.distribution.ArchDistribution; +import fr.packageviewer.distribution.Distribution; +import fr.packageviewer.distribution.FedoraDistribution; + +/** + * Enum containing contructors for each distribution to get them by their name + * @author Capelier-Marla + */ +public enum DistributionEnum { + ARCH("arch", new ArchDistribution()), + FEDORA("fedora", new FedoraDistribution()), + ; + + private String name; + private Distribution distributionConstructor; + + /** + * Contructor for enums + * @param name + * @param distributionConstructor + * @author Capelier-Marla + */ + DistributionEnum(String name, Distribution distributionConstructor) { + this.name = name; + this.distributionConstructor = distributionConstructor; + } + + /** + * Get the distribution instance for the distribution requested in String + * @param name name of the distribution requested + * @return the instance of the distribution requested + * @author Capelier-Marla + */ + public static Distribution getDistributionContructorByName(String name) { + // loop for all ditributions stored in enum + for(var distrib : values()) { + // return the instance if it's the same as enum name + if(distrib.name.equals(name)) { + return distrib.distributionConstructor; + } + } + return null; + } + + /** + * Get all distribution instances available in this enum + * @return the set of distribution instances + */ + public static List getAllDistributionsInstances() { + // create the set that will be returned + List result = new ArrayList<>(); + // add all the distribution instances in the set + for(var ditrib : values()) { + result.add(ditrib.distributionConstructor); + } + return result; + } +} diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index b328b9d..954d017 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -1,75 +1,28 @@ package fr.packageviewer; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Scanner; import fr.packageviewer.pack.SearchedPackage; public class Main { - - /** - * Check if the given distribution is supported - * @param distribution distribution name - * @return the distribution wanted if found, or null if there is none, or stop the program if it is not supported - * @author Capelier-Marla - */ - private static String processDistribution(String distribution) { - // check if the user asked a distribution - if(distribution == null || distribution.length() == 0) { - return null; - } - // create a map with the distribution names - Map distributionMap = new HashMap(); - distributionMap.put("ARCH", "archlinux"); - distributionMap.put("ARCHLINUX", "archlinux"); - distributionMap.put("FEDORA", "fedora"); - distribution = distribution.toUpperCase(); - - // check if we support the distribtion - if(distributionMap.containsKey(distribution)) { - // give the distribution name - return distributionMap.get(distribution); - } else { - // stop the program as the user want a non-supported distribution - System.out.println("Cette ditribution n'a pas été trouvée"); - System.exit(0); - return null; - } - } - - public static void main(String[] args) { // send the command line arguments to the parser ArgParse.parseArguments(args); String packet = ArgParse.getPacket(); String distribution = ArgParse.getDistribution(); - distribution = processDistribution(distribution); - // the list of packages we will show later - List packets = new ArrayList<>(); - - // distribution is null when no distribution is specified - // else we get the list of packages from the distribution + // we create an object to search the packages in the distribution + Searcher searcher; if(distribution == null) { - packets = Searcher.searchForAll(packet); + searcher = new Searcher(); } else { - switch (distribution) { - case "archlinux": - packets = Searcher.searchForArch(packet); - break; - case "fedora": - packets = Searcher.searchForFedora(packet); - break; - default: - System.out.println("Error: Unknown"); - System.exit(0); - break; - } + searcher = new Searcher(distribution); } + // we get the packages list + List packets = searcher.searchPackages(packet); + // list all packages in reverse order for (int i = packets.size(); i-- > 0; ) { SearchedPackage searchedPacket = packets.get(i); diff --git a/src/main/java/fr/packageviewer/Searcher.java b/src/main/java/fr/packageviewer/Searcher.java index 6264163..08bcd41 100644 --- a/src/main/java/fr/packageviewer/Searcher.java +++ b/src/main/java/fr/packageviewer/Searcher.java @@ -1,114 +1,66 @@ package fr.packageviewer; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; -import fr.packageviewer.distribution.ArchDistribution; import fr.packageviewer.distribution.Distribution; -import fr.packageviewer.distribution.FedoraDistribution; import fr.packageviewer.pack.SearchedPackage; -import fr.packageviewer.pack.Package; public class Searcher { - public static List searchForAll(String packet) { - // init distribution to search in it - Distribution arch = new ArchDistribution(); - Distribution fedora = new FedoraDistribution(); - // search for the package in the distribution - Future> archPackages = arch.searchPackage(packet); - Future> fedoraPackages = fedora.searchPackage(packet); - // init the list of packages that will be returned - List archResult = new ArrayList<>(); - List fedoraResult = new ArrayList<>(); - // try to get the searched packages to return it after - try { - archResult = archPackages.get(); - fedoraResult = fedoraPackages.get(); - } catch (Exception e) { - /* TODO: handle exception */ - } - archResult.addAll(fedoraResult); - return archResult; + + private String distributionName = null; + + public Searcher() {} + + public Searcher(String distributionName) { + this.distributionName = distributionName; + } + + public void setDistribution(String distribution) { + this.distributionName = distribution; } /** - * Search for the specified package in Arch repositories - * @param packet the package to search - * @return The list of packages that match the name + * Get the list of all packages in the distribution setted before + * @param packageName the name of the package wanted + * @return the list of all packages found * @author Capelier-Marla */ - public static List searchForArch(String packet) { - // init distribution to search in it - Distribution arch = new ArchDistribution(); - // search for the package in the distribution - Future> packages = arch.searchPackage(packet); - // init the list of packages that will be returned - List result = new ArrayList<>(); - // try to get the searched packages to return it after - try { - result = packages.get(); - } catch (Exception e) { - /* TODO: handle exception */ - } - return result; - } + public List searchPackages(String packageName) { - /** - * Search for the specified package in Fedora repositories - * @param packet the package to search - * @return The list of packages that match the name - * @author Capelier-Marla - */ - public static List searchForFedora(String packet) { - // init distribution to search in it - Distribution fedora = new FedoraDistribution(); - // search for the package in the distribution - Future> packages = fedora.searchPackage(packet); - // init the list of packages that will be returned - List result = new ArrayList<>(); - // try to get the searched packages to return it after - try { - result = packages.get(); - } catch (Exception e) { - /* TODO: handle exception */ + // we add all instanced constructors in a list, only one if defined at creation of the object + List distributions; + if(distributionName == null) { + distributions = DistributionEnum.getAllDistributionsInstances(); + } else { + distributions = Collections.singletonList(DistributionEnum.getDistributionContructorByName(distributionName)); + if(distributions.get(0) == null) { + System.out.println("Distribution non trouvée"); + System.exit(0); + } } - return result; - } + // this is the list we will return containing all packages + List allPackages = new ArrayList<>(); + // this contains all future list of packages to get them after + List>> listFuturePackagesList = new ArrayList<>(); - /** - * Search for the specific package in the specific distribution, we need the searchedPackage to get informations about it like it name and distribution - * @param pSearchedPackage the package to search for - * @return a complete package with its dependencies - * @author Capelier-Marla - */ - public static Package getPackage(SearchedPackage pSearchedPackage) { - // we get the name of the distribution of the package - String distName = pSearchedPackage.getDistribution(); - // we create a distribution object - Distribution distribution; - switch (distName) { - case "archlinux": - distribution = new ArchDistribution(); - break; - case "fedora": - distribution = new FedoraDistribution(); - break; - default: - System.out.println("Error: Unknown"); - System.exit(1); - return null; + // we add all future packages in a list + for (Distribution distribution : distributions) { + listFuturePackagesList.add(distribution.searchPackage(packageName)); } - // create the futue package we'll get from searching - Future packet = distribution.getPackageTree(pSearchedPackage.getName(), 4); - // object containing the package we're looking for - Package result; - try { - result = packet.get(); - } catch (Exception e) { - return null; + + // we get all packages waiting for them to be received + for(Future> futurePackageList : listFuturePackagesList ) { + try { + List tempList = futurePackageList.get(); + allPackages.addAll(tempList); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } } - // return the package - return result; + return allPackages; } } From cdc4a98b736a4fd2b88962b3b0de50f0b3e75fc4 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Thu, 15 Dec 2022 16:56:03 +0100 Subject: [PATCH 15/17] added fronted class to display ui --- src/main/java/fr/packageviewer/Main.java | 71 +++-------------- src/main/java/fr/packageviewer/Searcher.java | 6 -- .../fr/packageviewer/frontend/Frontend.java | 11 +++ .../frontend/FrontendFactory.java | 16 ++++ .../frontend/FrontendTerminal.java | 76 +++++++++++++++++++ 5 files changed, 112 insertions(+), 68 deletions(-) create mode 100644 src/main/java/fr/packageviewer/frontend/Frontend.java create mode 100644 src/main/java/fr/packageviewer/frontend/FrontendFactory.java create mode 100644 src/main/java/fr/packageviewer/frontend/FrontendTerminal.java diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index 954d017..b1f6b00 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -1,84 +1,31 @@ package fr.packageviewer; import java.util.List; -import java.util.Scanner; +import fr.packageviewer.frontend.Frontend; +import fr.packageviewer.frontend.FrontendFactory; import fr.packageviewer.pack.SearchedPackage; public class Main { public static void main(String[] args) { + + // create the frontend : what the user will see in its terminal + Frontend frontend = FrontendFactory.get("terminal"); + // send the command line arguments to the parser ArgParse.parseArguments(args); String packet = ArgParse.getPacket(); String distribution = ArgParse.getDistribution(); // we create an object to search the packages in the distribution - Searcher searcher; - if(distribution == null) { - searcher = new Searcher(); - } else { - searcher = new Searcher(distribution); - } + Searcher searcher = new Searcher(distribution); // we get the packages list List packets = searcher.searchPackages(packet); - // list all packages in reverse order - for (int i = packets.size(); i-- > 0; ) { - SearchedPackage searchedPacket = packets.get(i); - System.out.printf("%s - %s/%s/%s %s%n\t%s%n", - i, - searchedPacket.getDistribution(), - searchedPacket.getRepo(), - searchedPacket.getName(), - searchedPacket.getVersion()==null?"":searchedPacket.getVersion(), - searchedPacket.getDescription()); - } - - System.out.printf("Pick a package to see in details (0-%s) : %n", packets.size()-1); - Scanner input = new Scanner(System.in); - - // we create vars for the loop - String packetNumberString; - int packetNumber; - boolean notValid; - // we ask input and check if the user input is correct - do { - packetNumberString = input.nextLine(); - // reset notValid to false, we set it in true only if something is wrong - notValid = false; - if(isNumeric(packetNumberString)) { - packetNumber = Integer.parseInt(packetNumberString); - if(packetNumber < 0 || packetNumber >= packets.size()) { - // this number is too big or too small - System.out.println("Enter a valid number"); - notValid = true; - } - } else { - // this is not a number - System.out.println("Enter a valid number"); - notValid = true; - } - } while(notValid); - - input.close(); + // ask the user to select the package to see in details + SearchedPackage searchedPacket = frontend.askUserToChoosePackage(packets); } - - - /** - * Check if the String given is a number - * @param i the String given - * @return true if the String is a number - * @author Capelier-Marla - */ - private static boolean isNumeric(String i) { - try { - Integer.parseInt(i); - return true; - } catch (Exception e) { - return false; - } - } } diff --git a/src/main/java/fr/packageviewer/Searcher.java b/src/main/java/fr/packageviewer/Searcher.java index 08bcd41..b71fa3f 100644 --- a/src/main/java/fr/packageviewer/Searcher.java +++ b/src/main/java/fr/packageviewer/Searcher.java @@ -13,16 +13,10 @@ public class Searcher { private String distributionName = null; - public Searcher() {} - public Searcher(String distributionName) { this.distributionName = distributionName; } - public void setDistribution(String distribution) { - this.distributionName = distribution; - } - /** * Get the list of all packages in the distribution setted before * @param packageName the name of the package wanted diff --git a/src/main/java/fr/packageviewer/frontend/Frontend.java b/src/main/java/fr/packageviewer/frontend/Frontend.java new file mode 100644 index 0000000..400f61c --- /dev/null +++ b/src/main/java/fr/packageviewer/frontend/Frontend.java @@ -0,0 +1,11 @@ +package fr.packageviewer.frontend; + +import java.util.List; + +import fr.packageviewer.pack.Package; +import fr.packageviewer.pack.SearchedPackage; + +public interface Frontend { + SearchedPackage askUserToChoosePackage(List packets); + void showPackageTree(Package packet); +} diff --git a/src/main/java/fr/packageviewer/frontend/FrontendFactory.java b/src/main/java/fr/packageviewer/frontend/FrontendFactory.java new file mode 100644 index 0000000..6a5d4a1 --- /dev/null +++ b/src/main/java/fr/packageviewer/frontend/FrontendFactory.java @@ -0,0 +1,16 @@ +package fr.packageviewer.frontend; + +public class FrontendFactory { + + public static Frontend get(String name){ + switch(name){ + case "terminal":{ + return new FrontendTerminal(); + } + default:{ + throw new IllegalArgumentException("Invalid frontend"); + } + } + } + +} diff --git a/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java b/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java new file mode 100644 index 0000000..583c3d5 --- /dev/null +++ b/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java @@ -0,0 +1,76 @@ +package fr.packageviewer.frontend; + +import java.util.List; +import java.util.Scanner; + +import fr.packageviewer.pack.Package; +import fr.packageviewer.pack.SearchedPackage; + +public class FrontendTerminal implements Frontend{ + + /** + * Check if the String given is a number + * @param i the String given + * @return true if the String is a number + * @author Capelier-Marla + */ + private static boolean isNumeric(String i) { + try { + Integer.parseInt(i); + return true; + } catch (Exception e) { + return false; + } + } + + @Override + public SearchedPackage askUserToChoosePackage(List packets) { + // list all packages in reverse order + for (int i = packets.size(); i-- > 0; ) { + SearchedPackage searchedPacket = packets.get(i); + System.out.printf("%s - %s/%s/%s %s%n\t%s%n", + i, + searchedPacket.getDistribution(), + searchedPacket.getRepo(), + searchedPacket.getName(), + searchedPacket.getVersion()==null?"":searchedPacket.getVersion(), + searchedPacket.getDescription()); + } + + System.out.printf("Pick a package to see in details (0-%s) : %n", packets.size()-1); + Scanner input = new Scanner(System.in); + + // we create vars for the loop + String packetNumberString; + int packetNumber = -1; + boolean notValid; + // we ask input and check if the user input is correct + do { + packetNumberString = input.nextLine(); + // reset notValid to false, we set it in true only if something is wrong + notValid = false; + if(isNumeric(packetNumberString)) { + packetNumber = Integer.parseInt(packetNumberString); + if(packetNumber < 0 || packetNumber >= packets.size()) { + // this number is too big or too small + System.out.println("Enter a valid number"); + notValid = true; + } + } else { + // this is not a number + System.out.println("Enter a valid number"); + notValid = true; + } + } while(notValid); + + input.close(); + return packets.get(packetNumber); + } + + @Override + public void showPackageTree(Package packet) { + // TODO Auto-generated method stub + + } + +} From 4e59b17b7cc6a3d6b1248e885c8deb80816c1825 Mon Sep 17 00:00:00 2001 From: Capelier-Marla Date: Thu, 15 Dec 2022 18:05:46 +0100 Subject: [PATCH 16/17] finished tree view of package and slight modification in the FedoraDistribution class --- src/main/java/fr/packageviewer/Main.java | 13 +++++++++---- src/main/java/fr/packageviewer/Searcher.java | 18 ++++++++++++++++++ .../distribution/FedoraDistribution.java | 10 +++++----- .../fr/packageviewer/frontend/Frontend.java | 2 +- .../frontend/FrontendTerminal.java | 12 +++++++++--- 5 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/main/java/fr/packageviewer/Main.java b/src/main/java/fr/packageviewer/Main.java index b1f6b00..f6a0002 100644 --- a/src/main/java/fr/packageviewer/Main.java +++ b/src/main/java/fr/packageviewer/Main.java @@ -4,6 +4,7 @@ import java.util.List; import fr.packageviewer.frontend.Frontend; import fr.packageviewer.frontend.FrontendFactory; +import fr.packageviewer.pack.Package; import fr.packageviewer.pack.SearchedPackage; public class Main { @@ -14,18 +15,22 @@ public class Main { // send the command line arguments to the parser ArgParse.parseArguments(args); - String packet = ArgParse.getPacket(); + String packetName = ArgParse.getPacket(); String distribution = ArgParse.getDistribution(); // we create an object to search the packages in the distribution Searcher searcher = new Searcher(distribution); // we get the packages list - List packets = searcher.searchPackages(packet); + List packets = searcher.searchPackages(packetName); - // ask the user to select the package to see in details - SearchedPackage searchedPacket = frontend.askUserToChoosePackage(packets); + // ask the user to select the package to see in details and store its name + SearchedPackage searchedPacketName = frontend.askUserToChoosePackage(packets); + // get all informations about the package by searching it in details + Package packet = searcher.getPackage(searchedPacketName); + // show all informations about a packet + frontend.showPackageTree(packet, 0); } } diff --git a/src/main/java/fr/packageviewer/Searcher.java b/src/main/java/fr/packageviewer/Searcher.java index b71fa3f..27f68ac 100644 --- a/src/main/java/fr/packageviewer/Searcher.java +++ b/src/main/java/fr/packageviewer/Searcher.java @@ -8,6 +8,7 @@ import java.util.concurrent.Future; import fr.packageviewer.distribution.Distribution; import fr.packageviewer.pack.SearchedPackage; +import fr.packageviewer.pack.Package; public class Searcher { @@ -57,4 +58,21 @@ public class Searcher { } return allPackages; } + + + public Package getPackage(SearchedPackage packetInput) { + if(distributionName == null) { + distributionName = packetInput.getDistribution(); + } + String packageName = packetInput.getName(); + Distribution distribution = DistributionEnum.getDistributionContructorByName(distributionName); + Future futurePacket = distribution.getPackageTree(packageName, 4); + Package packet = null; + try { + packet = futurePacket.get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + return packet; + } } diff --git a/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java index 9c3249d..c989908 100644 --- a/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/FedoraDistribution.java @@ -17,7 +17,7 @@ import fr.packageviewer.LoggerManager; /** * This class handles package requests for Fedora. All return objects in * this class are wrapped by a CompletableFuture to ensure async workload. - * + * * @author S.Djalim, R.Thomas * @version 1.0 */ @@ -32,7 +32,7 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut * This function return a package from Fedora metadata api in the form of a * Pair Composed of a Package object, and a set of string containing the * names of the dependecies of the package. - * + * * @param packageName String, The package's exact name * @return Pair of Package and Set of String */ @@ -75,7 +75,7 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut json.getString("basename"), json.getString("version"), "rawhide", - json.getString("description"), + json.getString("summary"), "fedora" ), dependenciesNames @@ -93,7 +93,7 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut /** * Search for a package matching a pattern and return a list of packages and * return a list of string matching this pattern. - * + * * @param packageName String, the pattern to search in the repositories * @return List of SearchedPackage objects */ @@ -111,7 +111,7 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut // send the request and when there's a response client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenAccept(result -> { - //parse the json response + //parse the json response JSONObject json = new JSONObject(result.body()); List searchedPackagesList = new ArrayList<>(); diff --git a/src/main/java/fr/packageviewer/frontend/Frontend.java b/src/main/java/fr/packageviewer/frontend/Frontend.java index 400f61c..644fde0 100644 --- a/src/main/java/fr/packageviewer/frontend/Frontend.java +++ b/src/main/java/fr/packageviewer/frontend/Frontend.java @@ -7,5 +7,5 @@ import fr.packageviewer.pack.SearchedPackage; public interface Frontend { SearchedPackage askUserToChoosePackage(List packets); - void showPackageTree(Package packet); + void showPackageTree(Package packet, int depth); } diff --git a/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java b/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java index 583c3d5..7bfb021 100644 --- a/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java +++ b/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java @@ -68,9 +68,15 @@ public class FrontendTerminal implements Frontend{ } @Override - public void showPackageTree(Package packet) { - // TODO Auto-generated method stub - + public void showPackageTree(Package packet, int depth) { + System.out.printf("%s%s / %s : %s%n", + " ".repeat(depth), + packet.getName(), + packet.getVersion(), + packet.getDescription()); + for (Package dep : packet.getDeps()) { + showPackageTree(dep, depth+1); + } } } From a936d618db8cbd5bd3706032e3192bd8bd985cb0 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Thu, 15 Dec 2022 19:43:46 +0100 Subject: [PATCH 17/17] remove new line when prompting user about package --- src/main/java/fr/packageviewer/frontend/FrontendTerminal.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java b/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java index 7bfb021..f9a4a84 100644 --- a/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java +++ b/src/main/java/fr/packageviewer/frontend/FrontendTerminal.java @@ -37,7 +37,7 @@ public class FrontendTerminal implements Frontend{ searchedPacket.getDescription()); } - System.out.printf("Pick a package to see in details (0-%s) : %n", packets.size()-1); + System.out.printf("Pick a package to see in details (0-%s) : ", packets.size()-1); Scanner input = new Scanner(System.in); // we create vars for the loop