Skip to content

Commit 073b22f

Browse files
committed
protocol commands
1 parent ee81604 commit 073b22f

File tree

5 files changed

+99
-17
lines changed

5 files changed

+99
-17
lines changed

ide-common/src/main/kotlin/org/digma/intellij/plugin/protocol/DigmaProtocolApi.kt

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,94 @@ import kotlinx.coroutines.launch
99
import org.digma.intellij.plugin.common.DisposableAdaptor
1010
import org.digma.intellij.plugin.errorreporting.ErrorReporter
1111
import org.digma.intellij.plugin.log.Log
12+
import org.digma.intellij.plugin.scope.ScopeManager
13+
import org.digma.intellij.plugin.scope.SpanScope
1214

13-
const val ACTION_ASSETS = "assets"
15+
const val ACTION_PARAM_NAME = "action"
16+
const val ACTION_SHOW_ASSET_PARAM_NAME = "showAsset"
17+
const val CODE_OBJECT_ID_PARAM_NAME = "codeObjectId"
18+
const val ENVIRONMENT_ID_PARAM_NAME = "environmentId"
19+
const val ACTION_SHOW_ASSETS_TAB_PARAM_NAME = "showAssetsTab"
1420

1521
@Service(Service.Level.PROJECT)
1622
class DigmaProtocolApi(val cs: CoroutineScope) : DisposableAdaptor {
1723

1824
private val logger: Logger = Logger.getInstance(this::class.java)
1925

20-
fun performAction(project: Project, action: String, waitForJcef: Boolean) {
26+
/**
27+
* return null on success.
28+
* error message on failure
29+
*/
30+
fun performAction(project: Project, parameters: Map<String, String>, waitForJcef: Boolean): String? {
2131
try {
2232

33+
34+
val action = getActionFromParameters(parameters) ?: return "DigmaProtocolCommand no action in request"
35+
2336
Log.log(logger::trace, "perform action {}, thread {}", action, Thread.currentThread().name)
2437

25-
cs.launch {
26-
if (waitForJcef) {
27-
delay(5000)
38+
return when (action) {
39+
ACTION_SHOW_ASSET_PARAM_NAME -> {
40+
showAsset(project, parameters, waitForJcef)
41+
}
42+
43+
ACTION_SHOW_ASSETS_TAB_PARAM_NAME -> {
44+
showAssetTab(project, action, waitForJcef)
45+
}
46+
47+
else -> {
48+
"DigmaProtocolCommand unknown action in request $action"
2849
}
29-
project.messageBus.syncPublisher(ProtocolCommandEvent.PROTOCOL_COMMAND_TOPIC).protocolCommand(action)
3050
}
3151

52+
3253
} catch (e: Throwable) {
3354
ErrorReporter.getInstance().reportError("DigmaProtocolApi.performAction", e)
55+
return "DigmaProtocolCommand error $e"
3456
}
3557
}
58+
59+
60+
private fun showAsset(project: Project, parameters: Map<String, String>, waitForJcef: Boolean): String? {
61+
62+
val codeObjectId = getCodeObjectIdFromParameters(parameters)
63+
val environmentId = getEnvironmentIdFromParameters(parameters)
64+
65+
Log.log(
66+
logger::trace,
67+
"showing asset, codeObjectId='{}', environment='{}', thread='{}'",
68+
codeObjectId,
69+
environmentId,
70+
Thread.currentThread().name
71+
)
72+
73+
if (codeObjectId == null) {
74+
return "DigmaProtocolCommand no code object id in request"
75+
}
76+
77+
cs.launch {
78+
if (waitForJcef) {
79+
delay(5000)
80+
}
81+
82+
val scope = SpanScope(codeObjectId)
83+
84+
ScopeManager.getInstance(project).changeScope(scope, null, environmentId)
85+
}
86+
87+
return null
88+
}
89+
90+
91+
private fun showAssetTab(project: Project, action: String, waitForJcef: Boolean): String? {
92+
cs.launch {
93+
if (waitForJcef) {
94+
delay(5000)
95+
}
96+
project.messageBus.syncPublisher(ProtocolCommandEvent.PROTOCOL_COMMAND_TOPIC).protocolCommand(action)
97+
}
98+
return null
99+
}
100+
101+
36102
}

ide-common/src/main/kotlin/org/digma/intellij/plugin/protocol/DigmaProtocolCommand.kt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,15 @@ import com.intellij.openapi.application.ApplicationManager
1212
import com.intellij.openapi.application.JBProtocolCommand
1313
import com.intellij.openapi.components.service
1414
import com.intellij.openapi.diagnostic.Logger
15-
import com.intellij.util.text.nullize
1615
import org.digma.intellij.plugin.common.findActiveProject
1716
import org.digma.intellij.plugin.errorreporting.ErrorReporter
1817
import org.digma.intellij.plugin.log.Log
1918
import org.digma.intellij.plugin.ui.ToolWindowShower
2019
import java.nio.file.Path
21-
import java.util.concurrent.CompletableFuture
22-
import java.util.concurrent.Future
2320

2421
const val DIGMA_COMMAND = "digma"
2522
const val DIGMA_PLUGIN_TARGET = "plugin"
26-
const val ACTION_NAME_KEY = "action"
23+
2724

2825
//jetbrains://idea/digma/plugin?action=assets
2926
//jetbrains://idea/digma/plugin?project=spring-petclinic&action=assets
@@ -41,6 +38,7 @@ class DigmaProtocolCommand : JBProtocolCommand(DIGMA_COMMAND) {
4138
}
4239
}
4340

41+
//returns null on success, message on failure
4442
private suspend fun executeImpl(target: String?, parameters: Map<String, String>, fragment: String?): String? {
4543

4644
if (target != DIGMA_PLUGIN_TARGET) {
@@ -82,7 +80,7 @@ class DigmaProtocolCommand : JBProtocolCommand(DIGMA_COMMAND) {
8280

8381
Log.log(logger::trace, "got project {}", project.name)
8482

85-
val action = parameters[ACTION_NAME_KEY]?.nullize(nullizeSpaces = true)
83+
val action = getActionFromParameters(parameters)
8684
// ?: return CompletableFuture.completedFuture("DigmaProtocolCommand no action in request")
8785
?: return "DigmaProtocolCommand no action in request"
8886

@@ -98,14 +96,14 @@ class DigmaProtocolCommand : JBProtocolCommand(DIGMA_COMMAND) {
9896
}
9997

10098
Log.log(logger::trace, "executing action {}", action)
101-
project.service<DigmaProtocolApi>().performAction(project, action, waitForJcef)
99+
val result = project.service<DigmaProtocolApi>().performAction(project, parameters, waitForJcef)
102100
Log.log(logger::trace, "after execute action {}", action)
103101
// return CompletableFuture.completedFuture(null)
104-
return null
102+
return result
105103
}
106104

107105
// return CompletableFuture.completedFuture("DigmaProtocolCommand can not find project")
108-
return "DigmaProtocolCommand can not find project"
106+
return "DigmaProtocolCommand can not open any project"
109107

110108
}
111109

ide-common/src/main/kotlin/org/digma/intellij/plugin/protocol/ProtocolCommandEvent.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.intellij.util.messages.Topic
77
* this is an application event that should fire when we change the api client,
88
* usually when user changes the api url in settings.
99
*/
10+
//todo: maybe we don't need it
1011
fun interface ProtocolCommandEvent {
1112

1213

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,25 @@
11
package org.digma.intellij.plugin.protocol
22

3+
import com.intellij.util.text.nullize
34
import java.net.URLEncoder
45

56

67
fun Map<String, String>.toUrlQueryString() =
78
this.map {(k,v) -> "${URLEncoder.encode(k, "UTF-8")}=${URLEncoder.encode(v, "UTF-8")}" }
8-
.joinToString("&")
9+
.joinToString("&")
10+
11+
12+
fun getActionFromParameters(parameters: Map<String, String>):String?{
13+
return parameters[ACTION_PARAM_NAME]?.nullize(nullizeSpaces = true)
14+
}
15+
16+
17+
fun getCodeObjectIdFromParameters(parameters: Map<String, String>):String?{
18+
return parameters[CODE_OBJECT_ID_PARAM_NAME]?.nullize(nullizeSpaces = true)
19+
}
20+
21+
fun getEnvironmentIdFromParameters(parameters: Map<String, String>):String?{
22+
return parameters[ENVIRONMENT_ID_PARAM_NAME]?.nullize(nullizeSpaces = true)
23+
}
24+
25+

src/main/kotlin/org/digma/intellij/plugin/ui/mainapp/MainAppService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import kotlinx.datetime.toKotlinInstant
1111
import org.digma.intellij.plugin.engagement.EngagementScoreService
1212
import org.digma.intellij.plugin.log.Log
1313
import org.digma.intellij.plugin.persistence.PersistenceService
14-
import org.digma.intellij.plugin.protocol.ACTION_ASSETS
14+
import org.digma.intellij.plugin.protocol.ACTION_SHOW_ASSETS_TAB_PARAM_NAME
1515
import org.digma.intellij.plugin.protocol.ProtocolCommandEvent
1616
import org.digma.intellij.plugin.scheduling.disposingPeriodicTask
1717
import org.digma.intellij.plugin.ui.jcef.JCefComponent
@@ -36,7 +36,7 @@ class MainAppService(private val project: Project) : Disposable {
3636

3737
jCefComponent?.let { jcefComp ->
3838
when (action) {
39-
ACTION_ASSETS -> {
39+
ACTION_SHOW_ASSETS_TAB_PARAM_NAME -> {
4040
Log.log(logger::trace,"sending generic event to open assets page")
4141
sendGenericPluginEvent(project, jcefComp.jbCefBrowser.cefBrowser, "first asset notification link click")
4242
}

0 commit comments

Comments
 (0)