1111import com .intellij .openapi .fileChooser .FileChooserDescriptorFactory ;
1212import com .intellij .openapi .keymap .KeymapUtil ;
1313import com .intellij .openapi .project .Project ;
14- import com .intellij .openapi .util .Condition ;
1514import com .intellij .openapi .vfs .VirtualFile ;
1615import com .intellij .ui .ColoredListCellRenderer ;
1716import com .intellij .ui .SimpleTextAttributes ;
3332import java .util .List ;
3433import java .util .Objects ;
3534import java .util .Optional ;
35+ import java .util .function .Predicate ;
36+ import java .util .stream .Collectors ;
3637
3738public class AzureArtifactComboBox extends AzureComboBox <AzureArtifact > {
3839 private final Project project ;
3940 private final boolean fileArtifactOnly ;
40- private Condition <? super VirtualFile > fileFilter ;
41+ @ Nonnull
42+ private Predicate <? super VirtualFile > fileFilter = artifact -> true ;
43+ @ Nonnull
44+ private Predicate <? super AzureArtifact > artifactFilter = artifact -> true ;
4145 private Subscription subscription ;
4246 private AzureArtifact cachedArtifact ;
4347
@@ -52,10 +56,14 @@ public AzureArtifactComboBox(Project project, boolean fileArtifactOnly) {
5256 this .setRenderer (new ArtifactItemRenderer ());
5357 }
5458
55- public void setFileFilter (final Condition <? super VirtualFile > filter ) {
59+ public void setFileFilter (@ Nonnull final Predicate <? super VirtualFile > filter ) {
5660 this .fileFilter = filter ;
5761 }
5862
63+ public void setArtifactFilter (@ Nonnull final Predicate <? super AzureArtifact > filter ) {
64+ this .artifactFilter = filter ;
65+ }
66+
5967 public void setArtifact (@ Nullable final AzureArtifact azureArtifact ) {
6068 final AzureArtifactManager artifactManager = AzureArtifactManager .getInstance (this .project );
6169 this .cachedArtifact = azureArtifact ;
@@ -75,9 +83,9 @@ public AzureArtifact getValue() {
7583 @ Nonnull
7684 @ Override
7785 @ AzureOperation (name = "internal/common.list_artifacts.project" , params = {"this.project.getName()" })
78- protected List <? extends AzureArtifact > loadItems () throws Exception {
86+ protected List <? extends AzureArtifact > loadItems () {
7987 final List <AzureArtifact > collect = fileArtifactOnly ?
80- new ArrayList <>() : AzureArtifactManager .getInstance (project ).getAllSupportedAzureArtifacts ();
88+ new ArrayList <>() : AzureArtifactManager .getInstance (project ).getAllSupportedAzureArtifacts (). stream (). filter ( this . artifactFilter ). collect (( Collectors . toCollection ( ArrayList :: new ))) ;
8189 Optional .ofNullable (cachedArtifact ).filter (artifact -> artifact .getType () == AzureArtifactType .File ).ifPresent (collect ::add );
8290 return collect ;
8391 }
@@ -111,7 +119,7 @@ protected Icon getItemIcon(Object item) {
111119 public AzureValidationInfo doValidate (AzureArtifact artifact ) {
112120 if (Objects .nonNull (artifact ) && artifact .getType () == AzureArtifactType .File ) {
113121 final VirtualFile referencedObject = (VirtualFile ) artifact .getReferencedObject ();
114- if (Objects . nonNull ( this . fileFilter ) && !this .fileFilter .value (referencedObject )) {
122+ if (!this .fileFilter .test (referencedObject )) {
115123 final AzureValidationInfo .AzureValidationInfoBuilder builder = AzureValidationInfo .builder ();
116124 return builder .input (this ).message (AzureMessageBundle .message ("common.artifact.artifactNotSupport" ).toString ())
117125 .type (Type .ERROR ).build ();
@@ -122,9 +130,7 @@ public AzureValidationInfo doValidate(AzureArtifact artifact) {
122130
123131 private void onSelectFile () {
124132 final FileChooserDescriptor fileDescriptor = FileChooserDescriptorFactory .createSingleFileDescriptor ();
125- if (fileFilter != null ) {
126- fileDescriptor .withFileFilter (fileFilter );
127- }
133+ fileDescriptor .withFileFilter (v -> this .fileFilter .test (v ));
128134 fileDescriptor .withTitle (AzureMessageBundle .message ("common.artifact.selector.title" ).toString ());
129135 final VirtualFile file = FileChooser .chooseFile (fileDescriptor , null , null );
130136 if (file != null && file .exists ()) {
0 commit comments