Skip to content
This repository was archived by the owner on Apr 23, 2025. It is now read-only.

Commit 5c1b9ff

Browse files
committed
impl'd 'remove repo' action (#673)
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 68272b4 commit 5c1b9ff

File tree

7 files changed

+161
-11
lines changed

7 files changed

+161
-11
lines changed

src/it/java/org/jboss/tools/intellij/openshift/utils/helm/Charts.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static Chart get(String name, Helm helm) throws Exception {
3131
}
3232

3333
public static void addRepository(Pair<String, String> pair, Helm helm) throws IOException {
34-
helm.addRepo(pair.first, pair.second);
34+
helm.addRepo(pair.first, pair.second, null);
3535
}
3636

3737
}

src/it/java/org/jboss/tools/intellij/openshift/utils/helm/HelmCliRepoTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void testListRepos_should_list_repo_that_was_added() throws IOException {
2020
// given openshift repo was added to helm repos
2121
String name = "openshift";
2222
String url = "https://charts.openshift.io/";
23-
helm.addRepo(name, url);
23+
helm.addRepo(name, url, null);
2424
// when
2525
List<HelmRepository> repositories = helm.listRepos();
2626
// then
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2024 Red Hat, Inc.
3+
* Distributed under license by Red Hat, Inc. All rights reserved.
4+
* This program is made available under the terms of the
5+
* Eclipse Public License v2.0 which accompanies this distribution,
6+
* and is available at http://www.eclipse.org/legal/epl-v20.html
7+
*
8+
* Contributors:
9+
* Red Hat, Inc. - initial API and implementation
10+
******************************************************************************/
11+
package org.jboss.tools.intellij.openshift.actions.helm;
12+
13+
import com.intellij.openapi.actionSystem.AnActionEvent;
14+
import com.intellij.openapi.progress.ProgressIndicator;
15+
import com.intellij.openapi.project.Project;
16+
import com.intellij.openapi.ui.Messages;
17+
import com.redhat.devtools.intellij.common.actions.StructureTreeAction;
18+
import com.redhat.devtools.intellij.common.utils.UIHelper;
19+
import java.util.Arrays;
20+
import java.util.List;
21+
import java.util.stream.Collectors;
22+
import javax.swing.tree.TreePath;
23+
import org.jboss.tools.intellij.openshift.actions.HelmAction;
24+
import org.jboss.tools.intellij.openshift.telemetry.TelemetryService;
25+
import org.jboss.tools.intellij.openshift.tree.application.ApplicationsRootNode;
26+
import org.jboss.tools.intellij.openshift.tree.application.HelmRepositoryNode;
27+
import org.jboss.tools.intellij.openshift.tree.application.ProcessingNode;
28+
import org.jboss.tools.intellij.openshift.utils.helm.Helm;
29+
import org.jetbrains.annotations.Nullable;
30+
31+
import static org.jboss.tools.intellij.openshift.actions.ActionUtils.runWithProgress;
32+
import static org.jboss.tools.intellij.openshift.actions.NodeUtils.clearProcessing;
33+
import static org.jboss.tools.intellij.openshift.actions.NodeUtils.setProcessing;
34+
35+
public class RemoveRepositoriesAction extends HelmAction {
36+
37+
@Override
38+
public void actionPerformed(AnActionEvent anActionEvent, TreePath[] path, Object[] selected) {
39+
Helm helm = getHelm(anActionEvent);
40+
if (helm == null) {
41+
return;
42+
}
43+
Project project = getEventProject(anActionEvent);
44+
List<HelmRepositoryNode> repositories = toHelmRepositoryNodes(selected);
45+
if (repositories == null
46+
|| repositories.isEmpty()) {
47+
return;
48+
}
49+
50+
if (cancelRemoval(repositories)) {
51+
sendTelemetryResults(TelemetryService.TelemetryResult.ABORTED);
52+
return;
53+
}
54+
55+
runWithProgress((ProgressIndicator progress) -> {
56+
removeRepositories(repositories, helm);
57+
},
58+
"Remove Helm Repositories...",
59+
project);
60+
}
61+
62+
private void removeRepositories(List<HelmRepositoryNode> repositories, Helm helm) {
63+
ProcessingNode[] processingNodes = repositories.toArray(new ProcessingNode[0]);
64+
ApplicationsRootNode rootNode = repositories.get(0).getRoot();
65+
try {
66+
setProcessing("removing...", rootNode, processingNodes);
67+
helm.removeRepos(
68+
repositories.stream()
69+
.map(HelmRepositoryNode::getName)
70+
.toArray(String[]::new));
71+
clearProcessing(rootNode, processingNodes);
72+
sendTelemetryResults(TelemetryService.TelemetryResult.SUCCESS);
73+
} catch (Exception e) {
74+
clearProcessing(rootNode, processingNodes);
75+
UIHelper.executeInUI(() -> Messages.showErrorDialog("Error: " + e.getLocalizedMessage(), "Remove Helm Repositories"));
76+
sendTelemetryResults(TelemetryService.TelemetryResult.ERROR);
77+
}
78+
}
79+
80+
@Nullable
81+
private static List<HelmRepositoryNode> toHelmRepositoryNodes(Object[] selected) {
82+
if (selected == null
83+
|| selected.length == 0) {
84+
return null;
85+
}
86+
87+
return Arrays.stream(selected)
88+
.map(StructureTreeAction::getElement)
89+
.filter(HelmRepositoryNode.class::isInstance)
90+
.map(HelmRepositoryNode.class::cast)
91+
.collect(Collectors.toList());
92+
}
93+
94+
private boolean cancelRemoval(List<HelmRepositoryNode> releases) {
95+
String repositoriesNames = releases.stream()
96+
.map(HelmRepositoryNode::getName)
97+
.collect(Collectors.joining(", "));
98+
return Messages.NO == Messages.showYesNoDialog(
99+
"Remove Repositories "
100+
+ repositoriesNames
101+
+ ".\n\nAre you sure?",
102+
"Remove Repositories",
103+
Messages.getQuestionIcon());
104+
}
105+
106+
@Override
107+
public String getTelemetryActionName() {
108+
return "helm-remove repositories";
109+
}
110+
111+
@Override
112+
public boolean isVisible(Object[] selected) {
113+
return Arrays.stream(selected).anyMatch(item -> {
114+
Object node = getElement(item);
115+
if (!(node instanceof HelmRepositoryNode)) {
116+
return false;
117+
}
118+
return !((HelmRepositoryNode) node).isProcessing();
119+
});
120+
}
121+
}

src/main/java/org/jboss/tools/intellij/openshift/ui/helm/ChartsDialog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ private CompletableFuture<Void> addDefaultRepo(Helm helm) {
187187
return CompletableFuture
188188
.runAsync(() -> {
189189
try {
190-
helm.addRepo(OPENSHIFT_REPO_NAME, OPENSHIFT_REPO_URL);
190+
helm.addRepo(OPENSHIFT_REPO_NAME, OPENSHIFT_REPO_URL, null);
191191
} catch (IOException e) {
192192
throw new RuntimeException(e.getMessage(), e);
193193
}

src/main/java/org/jboss/tools/intellij/openshift/utils/helm/Helm.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515

1616
public interface Helm {
1717

18-
String addRepo(String name, String url) throws IOException;
18+
String addRepo(String name, String url, String flags) throws IOException;
19+
20+
void removeRepos(String... name) throws IOException;
1921

2022
List<HelmRepository> listRepos() throws IOException;
2123

src/main/java/org/jboss/tools/intellij/openshift/utils/helm/HelmCli.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,20 @@
1313
import com.fasterxml.jackson.core.type.TypeReference;
1414
import com.intellij.openapi.util.text.StringUtil;
1515
import com.redhat.devtools.intellij.common.utils.ExecHelper;
16-
import org.jboss.tools.intellij.openshift.telemetry.TelemetryService;
17-
import org.jboss.tools.intellij.openshift.utils.Serialization;
18-
import org.slf4j.Logger;
19-
import org.slf4j.LoggerFactory;
20-
2116
import java.io.File;
2217
import java.io.IOException;
2318
import java.util.ArrayList;
2419
import java.util.Arrays;
2520
import java.util.Collections;
2621
import java.util.List;
2722
import java.util.Map;
23+
import java.util.Objects;
2824
import java.util.stream.Collectors;
2925
import java.util.stream.Stream;
26+
import org.jboss.tools.intellij.openshift.telemetry.TelemetryService;
27+
import org.jboss.tools.intellij.openshift.utils.Serialization;
28+
import org.slf4j.Logger;
29+
import org.slf4j.LoggerFactory;
3030

3131
import static com.redhat.devtools.intellij.telemetry.core.service.TelemetryMessageBuilder.ActionMessage;
3232
import static org.jboss.tools.intellij.openshift.Constants.HOME_FOLDER;
@@ -43,12 +43,12 @@ public HelmCli(String command) {
4343
}
4444

4545
@Override
46-
public String addRepo(String name, String url) throws IOException {
46+
public String addRepo(String name, String url, String flags) throws IOException {
4747
ActionMessage telemetry = TelemetryService.instance().getBuilder().action(
4848
TelemetryService.NAME_PREFIX_MISC + "helm-add repo");
4949
try {
5050
LOGGER.info("Adding repo {} at {}.", name, url);
51-
String result = execute(command, Collections.emptyMap(), "repo", "add", name, url);
51+
String result = execute(command, Collections.emptyMap(), "repo", "add", name, url, flags);
5252
asyncSend(telemetry.success());
5353
return result;
5454
} catch (IOException e) {
@@ -58,6 +58,32 @@ public String addRepo(String name, String url) throws IOException {
5858
}
5959

6060
@Override
61+
public void removeRepos(String... names) throws IOException {
62+
LOGGER.info("Removing repositories {}.", String.join(", ", names));
63+
List<String> notRemoved = Arrays.stream(names)
64+
.map(this::removeRepo)
65+
.filter(Objects::nonNull)
66+
.toList();
67+
if (!notRemoved.isEmpty()) {
68+
throw new IOException("Could not remove repositories " + String.join(", ", notRemoved));
69+
}
70+
}
71+
72+
private String removeRepo(String name) {
73+
ActionMessage telemetry = TelemetryService.instance().getBuilder().action(
74+
TelemetryService.NAME_PREFIX_MISC + "helm-remove repository");
75+
try {
76+
execute(command, Collections.emptyMap(), "repo", "remove", name);
77+
asyncSend(telemetry.success());
78+
return null;
79+
} catch (IOException e) {
80+
LOGGER.info("Could not remove repository " + name, e);
81+
asyncSend(telemetry.error(e.getMessage()));
82+
return name;
83+
}
84+
}
85+
86+
@Override
6187
public List<HelmRepository> listRepos() throws IOException {
6288
ActionMessage telemetry = TelemetryService.instance().getBuilder().action(
6389
TelemetryService.NAME_PREFIX_MISC + "helm-list repo");

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@
335335
<!-- helm -->
336336
<action class="org.jboss.tools.intellij.openshift.actions.helm.OpenHelmChartsAction" id="org.jboss.tools.intellij.openshift.actions.helm.OpenHelmChartsAction" text="Open Helm Charts"/>
337337
<action class="org.jboss.tools.intellij.openshift.actions.helm.AddHelmRepoAction" id="org.jboss.tools.intellij.openshift.actions.helm.AddHelmRepoAction" text="Add Repository"/>
338+
<action class="org.jboss.tools.intellij.openshift.actions.helm.RemoveRepositoriesAction" id="org.jboss.tools.intellij.openshift.actions.helm.RemoveRepositoriesAction" text="Remove Repositories"/>
338339
<separator/>
339340
<!-- registry management -->
340341
<action class="org.jboss.tools.intellij.openshift.actions.registry.CreateRegistryAction" id="org.jboss.tools.intellij.openshift.actions.registry.CreateRegistryAction" text="New registry"/>

0 commit comments

Comments
 (0)