|
30 | 30 | import com.spectralogic.dsbrowser.gui.services.Workers;
|
31 | 31 | import com.spectralogic.dsbrowser.gui.services.sessionStore.Session;
|
32 | 32 | import com.spectralogic.dsbrowser.gui.util.*;
|
| 33 | +import com.spectralogic.dsbrowser.util.GuavaCollectors; |
33 | 34 | import javafx.scene.layout.HBox;
|
34 | 35 | import org.slf4j.Logger;
|
35 | 36 | import org.slf4j.LoggerFactory;
|
36 | 37 |
|
37 | 38 | import java.util.ArrayList;
|
38 | 39 | import java.util.List;
|
39 | 40 | import java.util.Optional;
|
| 41 | +import java.util.stream.Stream; |
40 | 42 |
|
41 | 43 | public class SearchJobTask extends Ds3Task<List<Ds3TreeTableItem>> {
|
42 | 44 | private final static Logger LOG = LoggerFactory.getLogger(SearchJobTask.class);
|
@@ -67,26 +69,27 @@ public SearchJobTask(final List<Bucket> searchableBuckets,
|
67 | 69 | @Override
|
68 | 70 | protected List<Ds3TreeTableItem> call() throws Exception {
|
69 | 71 | try {
|
70 |
| - final List<Ds3TreeTableItem> list = new ArrayList<>(); |
71 |
| - searchableBuckets.forEach(bucket -> { |
72 |
| - if (bucket.getName().contains(searchText)) { |
73 |
| - loggingService.logMessage(StringBuilderUtil.bucketFoundMessage("'" + searchText + "'", bucket.getName()).toString(), LogType.SUCCESS); |
74 |
| - final Ds3TreeTableValue value = new Ds3TreeTableValue(bucket.getName(), bucket.getName(), Ds3TreeTableValue.Type.Bucket, |
75 |
| - 0, StringConstants.TWO_DASH, StringConstants.TWO_DASH, false, null); |
76 |
| - list.add(new Ds3TreeTableItem(value.getName(), session, value, workers, ds3Common, dateTimeUtils, loggingService)); |
77 |
| - } else { |
78 |
| - final List<DetailedS3Object> detailedDs3Objects = getDetailedDs3Objects(bucket.getName()); |
79 |
| - if (Guard.isNotNullAndNotEmpty(detailedDs3Objects)) { |
80 |
| - final List<Ds3TreeTableItem> treeTableItems = buildTreeItems(detailedDs3Objects, bucket.getName(), dateTimeUtils); |
81 |
| - if (Guard.isNotNullAndNotEmpty(treeTableItems)) { |
82 |
| - list.addAll(treeTableItems); |
83 |
| - loggingService.logMessage(StringBuilderUtil.searchInBucketMessage(bucket.getName(), list.size()).toString(), |
84 |
| - LogType.SUCCESS); |
| 72 | + return searchableBuckets.parallelStream().map(Bucket::getName) |
| 73 | + .flatMap(bucketName -> { |
| 74 | + if (bucketName.contains(searchText)) { |
| 75 | + loggingService.logMessage(StringBuilderUtil.bucketFoundMessage("'" + searchText + "'", bucketName).toString(), LogType.SUCCESS); |
| 76 | + final Ds3TreeTableValue value = new Ds3TreeTableValue(bucketName, bucketName, Ds3TreeTableValue.Type.Bucket, |
| 77 | + 0, StringConstants.TWO_DASH, StringConstants.TWO_DASH, false, null); |
| 78 | + return Stream.of(new Ds3TreeTableItem(value.getName(), session, value, workers, ds3Common, dateTimeUtils, loggingService)); |
| 79 | + } else { |
| 80 | + final List<DetailedS3Object> detailedDs3Objects = getDetailedDs3Objects(bucketName); |
| 81 | + if (Guard.isNotNullAndNotEmpty(detailedDs3Objects)) { |
| 82 | + final List<Ds3TreeTableItem> treeTableItems = buildTreeItems(detailedDs3Objects, bucketName, dateTimeUtils); |
| 83 | + if (Guard.isNotNullAndNotEmpty(treeTableItems)) { |
| 84 | + loggingService.logMessage(StringBuilderUtil.searchInBucketMessage(bucketName, treeTableItems.size()).toString(), |
| 85 | + LogType.SUCCESS); |
| 86 | + return treeTableItems.stream(); |
| 87 | + } |
| 88 | + } |
| 89 | + return Stream.empty(); |
85 | 90 | }
|
86 |
| - } |
87 |
| - } |
88 |
| - }); |
89 |
| - return list; |
| 91 | + }) |
| 92 | + .collect(GuavaCollectors.immutableList()); |
90 | 93 | } catch (final Exception e) {
|
91 | 94 | LOG.error("Search failed", e);
|
92 | 95 | loggingService.logMessage(StringBuilderUtil.searchFailedMessage().append(e).toString(), LogType.ERROR);
|
|
0 commit comments