Merge pull request #24 from ThomasRubini/search_future

This commit is contained in:
Thomas Rubini 2022-12-13 22:45:46 +01:00 committed by GitHub
commit 2dfd83ba6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 52 deletions

View File

@ -71,44 +71,46 @@ public CompletableFuture<Pair<Package, Set<String>>> getPackageFromAPI(String pa
} }
/** /**
* Search for a package and return a list of packages * Search for a package and return a list of packages
* @param packageName the package name to search * @param packageName the package name to search
* @return * @return
*/ */
public List<SearchedPackage> searchPackage(String packageName){ public CompletableFuture<List<SearchedPackage>> searchPackage(String packageName){
HttpClient client = HttpClient.newHttpClient(); HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder() HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://archlinux.org/packages/search/json/?q="+packageName)) .uri(URI.create("https://archlinux.org/packages/search/json/?q="+packageName))
.build(); .build();
HttpResponse<String> response; CompletableFuture<List<SearchedPackage>> futureSearchedPackages = new CompletableFuture<>();
try{
response = client.send(request, HttpResponse.BodyHandlers.ofString()); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenAccept(result->{
}catch(IOException|InterruptedException e){
e.printStackTrace(); List<SearchedPackage> searchedPackagesList = new ArrayList<>();
JSONObject json = new JSONObject(result.body());
// iterate for every package in the list
for (Object searchResultObj : json.getJSONArray("results")) {
// convert object into String
JSONObject searchResultJson = (JSONObject) searchResultObj;
// add package into to list
searchedPackagesList.add(new SearchedPackage(
searchResultJson.getString("pkgname"),
searchResultJson.getString("pkgver"),
searchResultJson.getString("repo"),
searchResultJson.getString("pkgdesc")
));
}
futureSearchedPackages.complete(searchedPackagesList);
}).exceptionally(error->{
error.printStackTrace();
futureSearchedPackages.complete(Collections.emptyList());
return null; return null;
} });
JSONObject json = new JSONObject(response.body());
List<SearchedPackage> searchedPackagesList = new ArrayList<>();
// iterate for every package in the list return futureSearchedPackages;
for (Object searchResultObj : json.getJSONArray("results")) {
// convert object into String
JSONObject searchResultJson = (JSONObject) searchResultObj;
// add package into to list
searchedPackagesList.add(new SearchedPackage(
searchResultJson.getString("pkgname"),
searchResultJson.getString("pkgver"),
searchResultJson.getString("repo"),
searchResultJson.getString("pkgdesc")
));
}
return searchedPackagesList;
} }
} }

View File

@ -7,6 +7,6 @@ import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public interface Distribution { public interface Distribution {
List<SearchedPackage> searchPackage(String packageName); CompletableFuture<List<SearchedPackage>> searchPackage(String packageName);
CompletableFuture<Package> getPackageTree(String packageName, int depth); CompletableFuture<Package> getPackageTree(String packageName, int depth);
} }

View File

@ -75,7 +75,7 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut
} }
@Override @Override
public List<SearchedPackage> searchPackage(String packageName) { public CompletableFuture<List<SearchedPackage>> searchPackage(String packageName) {
HttpClient client = HttpClient.newHttpClient(); HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder() HttpRequest request = HttpRequest.newBuilder()
@ -84,29 +84,31 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut
+ packageName + "*")) + packageName + "*"))
.build(); .build();
HttpResponse<String> response; CompletableFuture<List<SearchedPackage>> futureSearchedPackages = new CompletableFuture<>();
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString()); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenAccept(result->{
} catch (IOException | InterruptedException e) { JSONObject json = new JSONObject(result.body());
e.printStackTrace();
List<SearchedPackage> searchedPackagesList = new ArrayList<>();
// iterate for every package in the list
for (Object searchResultObj : json.getJSONArray("projects")) {
// convert object into String
JSONObject searchResultJson = (JSONObject) searchResultObj;
// add package into to list
searchedPackagesList.add(new SearchedPackage(
searchResultJson.getString("neofetch"),
null,
searchResultJson.getString("fullname"),
searchResultJson.getString("description")));
}
futureSearchedPackages.complete(searchedPackagesList);
}).exceptionally(error->{
error.printStackTrace();
futureSearchedPackages.complete(Collections.emptyList());
return null; return null;
} });
JSONObject json = new JSONObject(response.body()); return futureSearchedPackages;
List<SearchedPackage> searchedPackagesList = new ArrayList<>();
// iterate for every package in the list
for (Object searchResultObj : json.getJSONArray("projects")) {
// convert object into String
JSONObject searchResultJson = (JSONObject) searchResultObj;
// add package into to list
searchedPackagesList.add(new SearchedPackage(
searchResultJson.getString("neofetch"),
null,
searchResultJson.getString("fullname"),
searchResultJson.getString("description")));
}
return searchedPackagesList;
} }
} }

View File

@ -67,14 +67,14 @@ public class ArchTest {
} }
@Test @Test
public void testThatBashSearchReturnsResults() { public void testThatBashSearchReturnsResults() throws ExecutionException, InterruptedException {
Distribution arch = new ArchDistribution(); Distribution arch = new ArchDistribution();
Assertions.assertNotEquals(arch.searchPackage("bash").size(), 0); Assertions.assertNotEquals(arch.searchPackage("bash").get().size(), 0);
} }
@Test @Test
public void testThatBashSearchContainsBash() { public void testThatBashSearchContainsBash() throws ExecutionException, InterruptedException {
Distribution arch = new ArchDistribution(); Distribution arch = new ArchDistribution();
for(SearchedPackage pack : arch.searchPackage("bash")){ for(SearchedPackage pack : arch.searchPackage("bash").get()){
if(pack.getName().equals("bash")){ if(pack.getName().equals("bash")){
Assertions.assertTrue(true); Assertions.assertTrue(true);
return; return;