Skip to content

Commit 54c99cd

Browse files
Save Installation Wizard state globally on application level #459
1 parent 602c920 commit 54c99cd

File tree

11 files changed

+61
-64
lines changed

11 files changed

+61
-64
lines changed

ide-common/src/main/java/org/digma/intellij/plugin/analytics/AnalyticsService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ public AnalyticsService(@NotNull Project project) {
8080
//initialize BackendConnectionMonitor when starting, so it is aware early on connection statuses
8181
project.getService(BackendConnectionMonitor.class);
8282
SettingsState settingsState = project.getService(SettingsState.class);
83-
PersistenceService persistenceService = project.getService(PersistenceService.class);
84-
environment = new Environment(project, this, persistenceService.getState(), settingsState);
83+
environment = new Environment(project, this, PersistenceService.getInstance().getState(), settingsState);
8584
this.project = project;
8685
myApiUrl = settingsState.apiUrl;
8786
myApiToken = settingsState.apiToken;

ide-common/src/main/java/org/digma/intellij/plugin/persistence/PersistenceService.java

Lines changed: 0 additions & 38 deletions
This file was deleted.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.digma.intellij.plugin.persistence
2+
3+
import com.intellij.openapi.application.ApplicationManager
4+
import com.intellij.openapi.components.PersistentStateComponent
5+
import com.intellij.openapi.components.State
6+
import com.intellij.openapi.components.Storage
7+
8+
9+
// the @State annotation helps IntelliJ automatically serialize and save our state
10+
@State(
11+
name = "PersistenceService",
12+
storages = [Storage("DigmaPersistence.xml")]
13+
)
14+
open class PersistenceService : PersistentStateComponent<PersistenceData> {
15+
16+
// this is how we're going to call the component from different classes
17+
companion object {
18+
@JvmStatic
19+
fun getInstance() : PersistenceService {
20+
return ApplicationManager.getApplication().getService(PersistenceService::class.java)
21+
}
22+
}
23+
24+
// the component will always keep our state as a variable
25+
private var myPersistenceData: PersistenceData = PersistenceData()
26+
27+
// just an obligatory override from PersistentStateComponent
28+
override fun getState(): PersistenceData {
29+
return myPersistenceData
30+
}
31+
32+
// after automatically loading our save state, we will keep reference to it
33+
override fun loadState(state: PersistenceData) {
34+
myPersistenceData = state
35+
}
36+
}

ide-common/src/main/java/org/digma/intellij/plugin/settings/SettingsState.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ public class SettingsState implements PersistentStateComponent<SettingsState>, D
4141
public boolean firstTimeInsightReceived;
4242
@Nullable
4343
public String posthogToken;
44-
public boolean alreadyPassedTheInstallationWizard;
4544

4645
private final List<SettingsChangeListener> listeners = new ArrayList<>();
4746

ide-common/src/main/kotlin/org/digma/intellij/plugin/ui/service/ErrorsViewService.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ class ErrorsViewService(project: Project) : AbstractViewService(project) {
8989
Log.log(logger::debug, "showDocumentPreviewList for {}. ", uid)
9090

9191
val errorDetails = errorsProvider.getErrorDetails(uid)
92-
errorDetails.flowStacks.isWorkspaceOnly =
93-
project.getService(PersistenceService::class.java).state.isWorkspaceOnly
92+
errorDetails.flowStacks.isWorkspaceOnly = PersistenceService.getInstance().state.isWorkspaceOnly
9493
model.errorDetails = errorDetails
9594
model.card = ErrorsTabCard.ERROR_DETAILS
9695

@@ -169,8 +168,7 @@ class ErrorsViewService(project: Project) : AbstractViewService(project) {
169168

170169
private fun createEmptyErrorDetails(): ErrorDetailsModel {
171170
val emptyErrorDetails = ErrorDetailsModel()
172-
emptyErrorDetails.flowStacks.isWorkspaceOnly =
173-
project.getService(PersistenceService::class.java).state.isWorkspaceOnly
171+
emptyErrorDetails.flowStacks.isWorkspaceOnly = PersistenceService.getInstance().state.isWorkspaceOnly
174172
return emptyErrorDetails
175173
}
176174

java/src/main/kotlin/org/digma/intellij/plugin/idea/runcfg/AutoOtelAgentRunConfigurationExtension.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class AutoOtelAgentRunConfigurationExtension : RunConfigurationExtension() {
2626

2727
private val logger: Logger = Logger.getInstance(AutoOtelAgentRunConfigurationExtension::class.java)
2828

29-
private fun enabled(project: Project): Boolean{
30-
return PersistenceService.getInstance(project).state.isAutoOtel
29+
private fun enabled(): Boolean{
30+
return PersistenceService.getInstance().state.isAutoOtel
3131
}
3232

3333
/*
@@ -68,7 +68,7 @@ class AutoOtelAgentRunConfigurationExtension : RunConfigurationExtension() {
6868
val project = configuration.project
6969

7070
//testing if enabled must be done here just before running.
71-
if (!enabled(project)){
71+
if (!enabled()){
7272
Log.log(logger::debug,"AutoOtelAgentRunConfigurationExtension is not enabled")
7373
return
7474
}
@@ -171,8 +171,7 @@ class AutoOtelAgentRunConfigurationExtension : RunConfigurationExtension() {
171171
configuration: RunConfigurationBase<*>,
172172
executor: Executor
173173
): ConsoleView {
174-
val project = configuration.project
175-
if (enabled(project) &&
174+
if (enabled() &&
176175
(isMavenConfiguration(configuration) || isJavaConfiguration(configuration))){
177176
//that only works for java and maven run configurations.
178177
console.print("This process is enhanced by Digma OTEL agent !\n", ConsoleViewContentType.LOG_WARNING_OUTPUT)
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
package org.digma.intellij.plugin.persistence
22

3-
data class PersistenceData(var currentEnv: String? = null,var isWorkspaceOnly: Boolean = false,var isAutoOtel: Boolean = false)
3+
data class PersistenceData(
4+
var currentEnv: String? = null,
5+
var isWorkspaceOnly: Boolean = false,
6+
var isAutoOtel: Boolean = false,
7+
var alreadyPassedTheInstallationWizard: Boolean = false
8+
)

src/main/java/org/digma/intellij/plugin/toolwindow/sidepane/DigmaSidePaneToolWindowFactory.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import org.digma.intellij.plugin.analytics.BackendConnectionUtil;
2222
import org.digma.intellij.plugin.log.Log;
2323
import org.digma.intellij.plugin.model.rest.installationwizard.OpenInBrowserRequest;
24+
import org.digma.intellij.plugin.persistence.PersistenceService;
2425
import org.digma.intellij.plugin.psi.LanguageService;
2526
import org.digma.intellij.plugin.service.ErrorsActionsService;
26-
import org.digma.intellij.plugin.settings.SettingsState;
2727
import org.digma.intellij.plugin.toolwindow.recentactivity.ConnectionCheckResult;
2828
import org.digma.intellij.plugin.toolwindow.recentactivity.JBCefBrowserUtil;
2929
import org.digma.intellij.plugin.toolwindow.recentactivity.JcefConnectionCheckMessagePayload;
@@ -83,7 +83,7 @@ public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindo
8383
BackendConnectionUtil backendConnectionUtil = project.getService(BackendConnectionUtil.class);
8484
toolWindow.getContentManager().addContentManagerListener(errorsActionsService);
8585

86-
if (SettingsState.getInstance(project).alreadyPassedTheInstallationWizard) {
86+
if (PersistenceService.getInstance().getState().getAlreadyPassedTheInstallationWizard()) {
8787
displayMainSidePaneWindowPanel(project, toolWindow, contentFactory);
8888
} else {
8989
displayInstallationWizard(project, toolWindow, contentFactory, backendConnectionUtil);
@@ -195,10 +195,9 @@ private void changeToolWindowContent(@NotNull Project project, ToolWindow toolWi
195195
toolWindow.getContentManager().removeContent(content, true);
196196
toolWindow.getContentManager().addContent(newContent);
197197

198-
if (!SettingsState.getInstance(project).alreadyPassedTheInstallationWizard) {
199-
// set flag that this use has already passed the installation wizard
200-
SettingsState.getInstance(project).alreadyPassedTheInstallationWizard = true;
201-
SettingsState.getInstance(project).fireChanged();
198+
if (!PersistenceService.getInstance().getState().getAlreadyPassedTheInstallationWizard()) {
199+
// set global flag that this user has already passed the installation wizard
200+
PersistenceService.getInstance().getState().setAlreadyPassedTheInstallationWizard(true);
202201
}
203202
}
204203

src/main/kotlin/org/digma/intellij/plugin/ui/common/SettingsHintPanel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ class SettingsHintPanel(project: Project) : JPanel() {
4848
togglePanel.background = Laf.Colors.EDITOR_BACKGROUND
4949
togglePanel.isOpaque = true
5050
togglePanel.add(JLabel("Observability"))
51-
val toggle = SwitchButton(40, 20, PersistenceService.getInstance(project).state.isAutoOtel)
51+
val toggle = SwitchButton(40, 20, PersistenceService.getInstance().state.isAutoOtel)
5252
toggle.addEventSelected(object : SwitchButton.EventSwitchSelected {
5353
override fun onSelected(selected: Boolean) {
54-
PersistenceService.getInstance(project).state.isAutoOtel = selected
54+
PersistenceService.getInstance().state.isAutoOtel = selected
5555
}
5656
})
5757
togglePanel.add(toggle)

src/main/kotlin/org/digma/intellij/plugin/ui/errors/ErrorDetailsPanel.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,10 @@ fun bottomPanel(project: Project,errorsModel: ErrorsModel, framesList: Scrollabl
225225
isOpaque = false
226226
isContentAreaFilled = false
227227
isBorderPainted = false
228-
isSelected = project.getService(PersistenceService::class.java).state.isWorkspaceOnly
229-
addActionListener(){
228+
isSelected = PersistenceService.getInstance().state.isWorkspaceOnly
229+
addActionListener {
230230
errorsModel.errorDetails.flowStacks.isWorkspaceOnly = isSelected
231-
project.getService(PersistenceService::class.java).state.isWorkspaceOnly = isSelected
231+
PersistenceService.getInstance().state.isWorkspaceOnly = isSelected
232232
framesList.getModel().setListData(errorsModel.errorDetails.flowStacks.getCurrentStack())
233233
ActivityMonitor.getInstance(project).registerInsightButtonClicked("error-frame-workspace-only")
234234
}

0 commit comments

Comments
 (0)