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

Commit bd24b44

Browse files
committed
feat: ctx menu & dialog shows "namespace"/"project" depending on cluster type (#237, #701)
Signed-off-by: Andre Dietisheim <[email protected]> Signed-off-by: Stephane Bouchet <[email protected]>
1 parent 65e7cf2 commit bd24b44

File tree

6 files changed

+105
-46
lines changed

6 files changed

+105
-46
lines changed

src/main/java/org/jboss/tools/intellij/openshift/actions/OdoAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void actionPerformed(AnActionEvent anActionEvent, TreePath path, Object s
4545
this.actionPerformedOnSelectedObject(anActionEvent, getElement(selected), odo);
4646
}
4747

48-
private Odo getOdo(AnActionEvent anActionEvent) {
48+
protected Odo getOdo(AnActionEvent anActionEvent) {
4949
try {
5050
return ActionUtils.getApplicationRootNode(anActionEvent).getOdo().getNow(null);
5151
} catch(Exception e) {

src/main/java/org/jboss/tools/intellij/openshift/actions/project/CreateProjectAction.java

Lines changed: 66 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import org.jboss.tools.intellij.openshift.ui.project.CreateNewProjectDialog;
2626
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
2727
import org.jetbrains.annotations.NotNull;
28+
import org.slf4j.Logger;
29+
import org.slf4j.LoggerFactory;
2830

2931
import java.awt.Point;
3032
import java.io.IOException;
@@ -33,12 +35,30 @@
3335
import java.util.concurrent.CompletionException;
3436

3537
import static org.jboss.tools.intellij.openshift.actions.ActionUtils.runWithProgress;
38+
import static org.jboss.tools.intellij.openshift.actions.NodeUtils.getRoot;
3639
import static org.jboss.tools.intellij.openshift.telemetry.TelemetryService.TelemetryResult;
3740

3841
public class CreateProjectAction extends LoggedInClusterAction {
3942

43+
private static final Logger LOGGER = LoggerFactory.getLogger(CreateProjectAction.class);
44+
45+
@Override
46+
public void update(AnActionEvent e) {
47+
super.update(e);
48+
if (e.getPresentation().isVisible()) {
49+
Odo odo = getOdo(e);
50+
if (odo == null) {
51+
return;
52+
}
53+
// overrides label given in plugin.xml
54+
e.getPresentation().setText("New " + getKind(odo));
55+
}
56+
}
57+
4058
@Override
41-
public String getTelemetryActionName() { return "create project"; }
59+
public String getTelemetryActionName() {
60+
return "create project";
61+
}
4262

4363
public static void execute(ApplicationsRootNode rootNode) {
4464
Odo odo = rootNode.getOdo().getNow(null);
@@ -55,14 +75,15 @@ public void actionPerformedOnSelectedObject(AnActionEvent anActionEvent, Object
5575
doActionPerformed(location, odo, getEventProject(anActionEvent));
5676
}
5777

58-
private void doActionPerformed(final Point location, final Odo odo, Project project) {
78+
private void doActionPerformed(final Point location, @NotNull final Odo odo, Project project) {
79+
String kind = getKind(odo);
5980
runWithProgress((ProgressIndicator progress) ->
6081
CompletableFuture
6182
.supplyAsync(() -> {
6283
try {
6384
return odo.getNamespaces();
6485
} catch (IOException e) {
65-
NotificationUtils.notifyError("Create New Project", "Could not get projects: " + e.getMessage());
86+
NotificationUtils.notifyError("Create New " + kind, "Could not get " + kind.toLowerCase() + "s: " + e.getMessage());
6687
sendTelemetryError(e.getMessage());
6788
throw new CompletionException(e);
6889
}
@@ -71,7 +92,7 @@ private void doActionPerformed(final Point location, final Odo odo, Project proj
7192
if (error != null) {
7293
return null;
7394
}
74-
CreateNewProjectDialog dialog = openCreateProjectDialog(allProjects, location, project);
95+
CreateNewProjectDialog dialog = openCreateProjectDialog(allProjects, kind, location, project);
7596
if (dialog.isOK()) {
7697
return dialog.getNewProject();
7798
} else {
@@ -87,28 +108,54 @@ private void doActionPerformed(final Point location, final Odo odo, Project proj
87108
}
88109
createProject(newProject, odo);
89110
}, SwingUtils.EXECUTOR_BACKGROUND),
90-
"Create Active Project...",
91-
project);
111+
"Create Active " + kind + "...",
112+
project);
92113
}
93114

94-
private void createProject(String newProject, Odo odo) {
95-
Notification notification = NotificationUtils.notifyInformation("Create Project", "Creating project " + newProject);
115+
private void createProject(String newProject, @NotNull Odo odo) {
116+
String kind = getKind(odo);
117+
Notification notification = NotificationUtils.notifyInformation("Create " + kind, "Creating " + kind.toLowerCase() + " newProject");
96118
try {
97-
odo.createProject(newProject);
98-
notification.expire();
99-
NotificationUtils.notifyInformation("Create Project", "Project " + newProject + " successfully created");
100-
sendTelemetryResults(TelemetryResult.SUCCESS);
101-
} catch (IOException | CompletionException e) {
102-
notification.expire();
103-
sendTelemetryError(e);
104-
UIHelper.executeInUI(() -> Messages.showErrorDialog("Error: " + e.getLocalizedMessage(), "Create Project"));
105-
}
119+
odo.createProject(newProject);
120+
notification.expire();
121+
NotificationUtils.notifyInformation("Create " + kind, kind + newProject + " successfully created");
122+
sendTelemetryResults(TelemetryResult.SUCCESS);
123+
} catch (IOException | CompletionException e) {
124+
notification.expire();
125+
sendTelemetryError(e);
126+
UIHelper.executeInUI(() -> Messages.showErrorDialog("Error: " + e.getLocalizedMessage(), "Create " + kind));
127+
}
106128
}
107129

108-
private CreateNewProjectDialog openCreateProjectDialog(List<String> allProjects, Point location, Project project) {
109-
CreateNewProjectDialog dialog = new CreateNewProjectDialog(project, allProjects, location);
130+
protected CreateNewProjectDialog openCreateProjectDialog(List<String> allProjects, String kind, Point location, Project project) {
131+
CreateNewProjectDialog dialog = new CreateNewProjectDialog(project, allProjects, kind, location);
110132
dialog.show();
111133
return dialog;
112134
}
113135

136+
@Override
137+
public boolean isVisible(Object selected) {
138+
return isRoot(selected)
139+
&& isLoggedIn(selected);
140+
}
141+
142+
private boolean isLoggedIn(Object node) {
143+
ApplicationsRootNode root = getRoot(node);
144+
if (root == null) {
145+
return false;
146+
}
147+
return root.isLogged();
148+
}
149+
150+
private boolean isRoot(Object node) {
151+
return node instanceof ApplicationsRootNode;
152+
}
153+
154+
private String getKind(Odo odo) {
155+
if (odo.isOpenShift()) {
156+
return "Project";
157+
} else {
158+
return "Namespace";
159+
}
160+
}
114161
}

src/main/java/org/jboss/tools/intellij/openshift/ui/BaseDialog.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@ public abstract class BaseDialog extends DialogWrapper {
3434
protected BaseDialog(@Nullable Project project, Point location) {
3535
super(project, false);
3636
this.location = location;
37-
init();
3837
}
3938

39+
/**
40+
* Set the borders, location etc.
41+
* Has to be called from the extending subclass.
42+
*/
4043
@Override
4144
protected void init() {
4245
super.init();

src/main/java/org/jboss/tools/intellij/openshift/ui/project/CreateNewProjectDialog.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,16 @@
3333

3434
public class CreateNewProjectDialog extends BaseDialog {
3535

36-
private static final int WIDTH = 300;
36+
private static final int WIDTH = 200;
37+
private final String kind;
3738
private final Collection<String> allProjects;
3839
private JBTextField newProjectTextField;
3940

4041
private String newProject;
4142

42-
public CreateNewProjectDialog(@Nullable Project project, Collection<String> allProjects, Point location) {
43+
public CreateNewProjectDialog(@Nullable Project project, Collection<String> allProjects, String kind, Point location) {
4344
super(project, location);
45+
this.kind = kind;
4446
this.allProjects = allProjects;
4547
init();
4648
}
@@ -49,15 +51,15 @@ public CreateNewProjectDialog(@Nullable Project project, Collection<String> allP
4951
protected void init() {
5052
super.init();
5153
setOKButtonText("Create");
52-
setTitle("Create New Project");
54+
setTitle("Create New " + kind);
5355
}
5456

5557
@Override
5658
protected @Nullable JComponent createCenterPanel() {
5759
JComponent panel = new JPanel(new MigLayout(
5860
"flowx, ins 0, gap 0, fillx, filly, hidemode 3",
5961
"[left]10[" + WIDTH +",fill]"));
60-
JLabel newActiveProjectLabel = new JBLabel("New project:", SwingConstants.LEFT);
62+
JLabel newActiveProjectLabel = new JBLabel("New " + kind.toLowerCase() + ":", SwingConstants.LEFT);
6163
newActiveProjectLabel.setBorder(JBUI.Borders.empty(10, 0));
6264
panel.add(newActiveProjectLabel, "left, bottom");
6365
this.newProjectTextField = new JBTextField();

src/test/java/org/jboss/tools/intellij/openshift/actions/ActionTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@
2828
import org.jboss.tools.intellij.openshift.utils.odo.ComponentFeature;
2929
import org.jboss.tools.intellij.openshift.utils.odo.ComponentFeatures;
3030
import org.jboss.tools.intellij.openshift.utils.odo.ComponentInfo;
31+
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
3132
import org.jboss.tools.intellij.openshift.utils.odo.Service;
3233
import org.jboss.tools.intellij.openshift.utils.odo.URL;
34+
import org.jetbrains.annotations.NotNull;
3335

3436
import javax.swing.tree.TreePath;
3537
import javax.swing.tree.TreeSelectionModel;
38+
import java.util.concurrent.CompletableFuture;
3639

40+
import static org.mockito.ArgumentMatchers.any;
3741
import static org.mockito.Mockito.mock;
3842
import static org.mockito.Mockito.when;
3943

@@ -56,8 +60,8 @@ public AnActionEvent createEvent(Object selected) {
5660
public abstract AnAction getAction();
5761

5862
public void testActionOnLoggedInCluster() {
59-
ApplicationsRootNode applicationsRootNode = mock(ApplicationsRootNode.class);
60-
when(applicationsRootNode.isLogged()).thenReturn(true);
63+
CompletableFuture<Odo> odoFuture = createOdoFuture(true);
64+
ApplicationsRootNode applicationsRootNode = createApplicationRootNode(true, odoFuture);
6165
AnActionEvent event = createEvent(applicationsRootNode);
6266
AnAction action = getAction();
6367
action.update(event);
@@ -81,6 +85,24 @@ protected void verifyLoggedOutCluster(boolean visible) {
8185
assertFalse(visible);
8286
}
8387

88+
@NotNull
89+
protected static ApplicationsRootNode createApplicationRootNode(boolean loggedIn, CompletableFuture<Odo> odoFuture) {
90+
ApplicationsRootNode applicationsRootNode = mock(ApplicationsRootNode.class);
91+
when(applicationsRootNode.isLogged()).thenReturn(loggedIn);
92+
when(applicationsRootNode.getRoot()).thenReturn(applicationsRootNode);
93+
when(applicationsRootNode.getOdo()).thenReturn(odoFuture);
94+
return applicationsRootNode;
95+
}
96+
97+
@NotNull
98+
protected static CompletableFuture<Odo> createOdoFuture(boolean isOpenShift) {
99+
Odo odo = mock(Odo.class);
100+
when(odo.isOpenShift()).thenReturn(isOpenShift);
101+
CompletableFuture<Odo> odoFuture = mock(CompletableFuture.class);
102+
when(odoFuture.getNow(any())).thenReturn(odo);
103+
return odoFuture;
104+
}
105+
84106
public void testActionOnProject() {
85107
NamespaceNode projectNode = mock(NamespaceNode.class);
86108
AnActionEvent event = createEvent(projectNode);

src/test/java/org/jboss/tools/intellij/openshift/actions/project/CreateProjectActionTest.java

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,37 +12,22 @@
1212

1313
import com.intellij.openapi.actionSystem.AnAction;
1414
import com.intellij.openapi.actionSystem.AnActionEvent;
15-
import org.jboss.tools.intellij.openshift.tree.application.ApplicationsRootNode;
15+
import org.jboss.tools.intellij.openshift.actions.ActionTest;
1616
import org.jboss.tools.intellij.openshift.tree.application.ComponentNode;
1717
import org.jboss.tools.intellij.openshift.tree.application.NamespaceNode;
1818
import org.jboss.tools.intellij.openshift.tree.application.ServiceNode;
19-
import org.jboss.tools.intellij.openshift.actions.ActionTest;
2019

2120
import static org.mockito.Mockito.mock;
22-
import static org.mockito.Mockito.when;
2321

2422
public class CreateProjectActionTest extends ActionTest {
2523
@Override
2624
public AnAction getAction() {
2725
return new CreateProjectAction();
2826
}
2927

30-
public void testActionOnLoggedInCluster() {
31-
ApplicationsRootNode applicationsRootNode = mock(ApplicationsRootNode.class);
32-
when(applicationsRootNode.isLogged()).thenReturn(true);
33-
AnActionEvent event = createEvent(applicationsRootNode);
34-
AnAction action = getAction();
35-
action.update(event);
36-
assertTrue(event.getPresentation().isVisible());
37-
}
38-
39-
public void testThatActionOnLoggedOutCluster() {
40-
ApplicationsRootNode applicationsRootNode = mock(ApplicationsRootNode.class);
41-
when(applicationsRootNode.isLogged()).thenReturn(false);
42-
AnActionEvent event = createEvent(applicationsRootNode);
43-
AnAction action = getAction();
44-
action.update(event);
45-
assertFalse(event.getPresentation().isVisible());
28+
@Override
29+
protected void verifyLoggedInCluster(boolean visible) {
30+
assertTrue(visible);
4631
}
4732

4833
public void testActionOnProject() {

0 commit comments

Comments
 (0)