added fronted class to display ui

This commit is contained in:
Capelier-Marla 2022-12-15 16:56:03 +01:00
parent 134d5554ab
commit cdc4a98b73
5 changed files with 112 additions and 68 deletions

View File

@ -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<SearchedPackage> 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;
}
}
}

View File

@ -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

View File

@ -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<SearchedPackage> packets);
void showPackageTree(Package packet);
}

View File

@ -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");
}
}
}
}

View File

@ -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<SearchedPackage> 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
}
}