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,29 +71,23 @@ 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());
}catch(IOException|InterruptedException e){
e.printStackTrace();
return null;
}
JSONObject json = new JSONObject(response.body()); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenAccept(result->{
List<SearchedPackage> searchedPackagesList = new ArrayList<>(); List<SearchedPackage> searchedPackagesList = new ArrayList<>();
JSONObject json = new JSONObject(result.body());
// iterate for every package in the list // iterate for every package in the list
for (Object searchResultObj : json.getJSONArray("results")) { for (Object searchResultObj : json.getJSONArray("results")) {
@ -107,8 +101,16 @@ public CompletableFuture<Pair<Package, Set<String>>> getPackageFromAPI(String pa
searchResultJson.getString("pkgdesc") searchResultJson.getString("pkgdesc")
)); ));
} }
futureSearchedPackages.complete(searchedPackagesList);
}).exceptionally(error->{
error.printStackTrace();
futureSearchedPackages.complete(Collections.emptyList());
return null;
});
return searchedPackagesList;
return futureSearchedPackages;
} }
} }

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,15 +84,10 @@ 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());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
return null;
}
JSONObject json = new JSONObject(response.body()); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenAccept(result->{
JSONObject json = new JSONObject(result.body());
List<SearchedPackage> searchedPackagesList = new ArrayList<>(); List<SearchedPackage> searchedPackagesList = new ArrayList<>();
@ -107,6 +102,13 @@ public class FedoraDistribution extends AsyncRequestsParser implements Distribut
searchResultJson.getString("fullname"), searchResultJson.getString("fullname"),
searchResultJson.getString("description"))); searchResultJson.getString("description")));
} }
return searchedPackagesList; futureSearchedPackages.complete(searchedPackagesList);
}).exceptionally(error->{
error.printStackTrace();
futureSearchedPackages.complete(Collections.emptyList());
return null;
});
return futureSearchedPackages;
} }
} }

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;