|
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