Skip to content

Commit e044553

Browse files
show 'Show Azure node' action only when the node is not shown.
1 parent bd0a8c0 commit e044553

File tree

1 file changed

+38
-6
lines changed
  • PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-resource-connector-lib/src/main/java/com/microsoft/azure/toolkit/intellij/facet

1 file changed

+38
-6
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-resource-connector-lib/src/main/java/com/microsoft/azure/toolkit/intellij/facet/ToggleAzureFacetNodeAction.java

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,18 @@
1212
import com.intellij.openapi.actionSystem.AnActionEvent;
1313
import com.intellij.openapi.actionSystem.LangDataKeys;
1414
import com.intellij.openapi.actionSystem.PlatformDataKeys;
15+
import com.intellij.openapi.actionSystem.Presentation;
1516
import com.intellij.openapi.module.Module;
17+
import com.intellij.openapi.module.ModuleUtil;
1618
import com.intellij.openapi.project.Project;
19+
import com.microsoft.azure.toolkit.intellij.connector.dotazure.AzureModule;
1720
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
1821
import com.microsoft.azure.toolkit.lib.common.operation.OperationContext;
22+
import org.apache.commons.lang3.BooleanUtils;
1923
import org.apache.commons.lang3.StringUtils;
20-
import org.jetbrains.annotations.NotNull;
2124

2225
import javax.annotation.Nonnull;
26+
import javax.annotation.Nullable;
2327
import java.util.Objects;
2428

2529
import static com.microsoft.azure.toolkit.lib.common.action.Action.EMPTY_PLACE;
@@ -30,20 +34,48 @@ public class ToggleAzureFacetNodeAction extends AnAction {
3034
@AzureOperation(name = "user/connector.show_azure_node")
3135
public void actionPerformed(@Nonnull AnActionEvent event) {
3236
OperationContext.current().setTelemetryProperty(PLACE, StringUtils.firstNonBlank(event.getPlace(), EMPTY_PLACE));
33-
final Module module = LangDataKeys.MODULE.getData(event.getDataContext());
37+
final Module module = getModule(event);
3438
if (Objects.nonNull(module) && !module.getProject().isDisposed()) {
3539
final Project project = Objects.requireNonNull(event.getProject());
3640
final PropertiesComponent properties = PropertiesComponent.getInstance(project);
37-
properties.setValue(module.getName() + ".azure", "show");
41+
properties.setValue(module.getName() + ".azure", isAzureNodeShown(module) ? "hide" : "show");
3842
ProjectView.getInstance(module.getProject()).getCurrentProjectViewPane().updateFromRoot(true);
3943
}
4044
}
4145

4246
@Override
43-
public void update(@NotNull AnActionEvent e) {
44-
final Module module = LangDataKeys.MODULE.getData(e.getDataContext());
47+
public void update(@Nonnull AnActionEvent e) {
48+
final Module module = getModule(e);
49+
final Presentation presentation = e.getPresentation();
50+
if (Objects.isNull(module)) {
51+
presentation.setEnabledAndVisible(false);
52+
return;
53+
}
54+
presentation.setEnabledAndVisible(true);
55+
if (isAzureNodeShown(module)) {
56+
presentation.setText("Hide 'Azure' Node");
57+
} else {
58+
presentation.setText("Show 'Azure' Node");
59+
}
60+
}
61+
62+
private static boolean isAzureNodeShown(final Module module) {
63+
final AzureModule azureModule = AzureModule.from(module);
64+
final Boolean state = azureModule.getAzureFacetState();
65+
final boolean forceShow = BooleanUtils.isTrue(state);
66+
final boolean forceHide = BooleanUtils.isFalse(state);
67+
final boolean defaultShow = state == null && (azureModule.hasAzureFacet() || azureModule.isInitialized() || azureModule.hasAzureDependencies());
68+
return forceShow || defaultShow;
69+
}
70+
71+
@Nullable
72+
private static Module getModule(final @Nonnull AnActionEvent e) {
73+
Module module = LangDataKeys.MODULE.getData(e.getDataContext());
4574
final Object[] selected = PlatformDataKeys.SELECTED_ITEMS.getData(e.getDataContext());
4675
final boolean onDotAzure = Objects.nonNull(selected) && selected.length == 1 && (selected[0] instanceof PsiDirectoryNode node) && ".azure".equalsIgnoreCase(node.getValue().getName());
47-
e.getPresentation().setEnabledAndVisible(Objects.nonNull(module) || onDotAzure);
76+
if (Objects.isNull(module) && onDotAzure && Objects.nonNull(e.getProject())) {
77+
module = ModuleUtil.findModuleForFile(((PsiDirectoryNode) selected[0]).getValue().getVirtualFile(), e.getProject());
78+
}
79+
return module;
4880
}
4981
}

0 commit comments

Comments
 (0)