@@ -19,7 +19,6 @@ import software.aws.toolkits.core.utils.info
19
19
import software.aws.toolkits.core.utils.warn
20
20
import software.aws.toolkits.jetbrains.core.explorer.refreshCwQTree
21
21
import software.aws.toolkits.jetbrains.services.codemodernizer.client.GumbyClient
22
- import software.aws.toolkits.jetbrains.services.codemodernizer.model.AwaitModernizationPlanResult
23
22
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerException
24
23
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerJobCompletedResult
25
24
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerSessionContext
@@ -31,8 +30,6 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.plan.CodeModerniz
31
30
import software.aws.toolkits.jetbrains.services.codemodernizer.state.CodeModernizerSessionState
32
31
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_AFTER_INITIAL_BUILD
33
32
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_AFTER_STARTED
34
- import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_WHERE_JOB_STOPPED_PRE_PLAN_READY
35
- import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_WHERE_PLAN_EXIST
36
33
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.getModuleOrProjectNameForFile
37
34
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.pollTransformationStatusAndPlan
38
35
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.toTransformationLanguage
@@ -169,51 +166,6 @@ class CodeModernizerSession(
169
166
}
170
167
}
171
168
172
- private suspend fun awaitModernizationPlan (
173
- jobId : JobId ,
174
- jobTransitionHandler : (currentStatus: TransformationStatus , migrationPlan: TransformationPlan ? ) -> Unit ,
175
- ): AwaitModernizationPlanResult {
176
- var passedBuild = false
177
- var passedStart = false
178
- val result = jobId.pollTransformationStatusAndPlan(
179
- succeedOn = STATES_WHERE_PLAN_EXIST ,
180
- failOn = STATES_WHERE_JOB_STOPPED_PRE_PLAN_READY ,
181
- clientAdaptor,
182
- initialPollingSleepDurationMillis,
183
- totalPollingSleepDurationMillis,
184
- isDisposed,
185
- sessionContext.project,
186
- ) { old, new, plan ->
187
- LOG .info { " Waiting for Transformation Plan for Modernization Job [$jobId ]. State changed: $old -> $new " }
188
- state.currentJobStatus = new
189
- sessionContext.project.refreshCwQTree()
190
- val instant = Instant .now()
191
- state.updateJobHistory(sessionContext, new, instant)
192
- setCurrentJobStopTime(new, instant)
193
- setCurrentJobSummary(new)
194
- jobTransitionHandler(new, plan)
195
- if (! passedStart && new in STATES_AFTER_STARTED ) {
196
- passedStart = true
197
- }
198
- if (! passedBuild && new in STATES_AFTER_INITIAL_BUILD ) {
199
- passedBuild = true
200
- }
201
- }
202
- return when {
203
- result.succeeded && result.transformationPlan != null -> AwaitModernizationPlanResult .Success (result.transformationPlan)
204
- result.state == TransformationStatus .UNKNOWN_TO_SDK_VERSION -> AwaitModernizationPlanResult .UnknownStatusWhenPolling
205
- ! passedStart && result.state == TransformationStatus .FAILED -> AwaitModernizationPlanResult .Failure (
206
- result.jobDetails?.reason() ? : message(" codemodernizer.notification.warn.unknown_start_failure" )
207
- )
208
-
209
- ! passedBuild && result.state == TransformationStatus .FAILED -> AwaitModernizationPlanResult .BuildFailed (
210
- result.jobDetails?.reason() ? : message(" codemodernizer.notification.warn.unknown_build_failure" )
211
- )
212
- result.state == TransformationStatus .STOPPED -> AwaitModernizationPlanResult .Stopped
213
- else -> AwaitModernizationPlanResult .Failure (message(" codemodernizer.notification.warn.unknown_status_response" ))
214
- }
215
- }
216
-
217
169
private fun startJob (uploadId : String ): StartTransformationResponse {
218
170
val sourceLanguage = sessionContext.sourceJavaVersion.name.toTransformationLanguage()
219
171
val targetLanguage = sessionContext.targetJavaVersion.name.toTransformationLanguage()
@@ -300,31 +252,14 @@ class CodeModernizerSession(
300
252
301
253
// add delay to avoid the throttling error
302
254
delay(1000 )
303
- val modernizationResult = clientAdaptor.getCodeModernizationJob(jobId.id)
304
- state.currentJobCreationTime = modernizationResult.transformationJob().creationTime()
305
-
306
- val modernizationPlan = when (val result = awaitModernizationPlan(jobId, jobTransitionHandler)) {
307
- is AwaitModernizationPlanResult .Success -> result.plan
308
- is AwaitModernizationPlanResult .BuildFailed -> return CodeModernizerJobCompletedResult .JobFailedInitialBuild (jobId, result.failureReason)
309
- is AwaitModernizationPlanResult .Failure -> return CodeModernizerJobCompletedResult .JobFailed (
310
- jobId,
311
- result.failureReason,
312
- )
313
- is AwaitModernizationPlanResult .Stopped -> return CodeModernizerJobCompletedResult .Stopped
314
- is AwaitModernizationPlanResult .UnknownStatusWhenPolling -> return CodeModernizerJobCompletedResult .JobFailed (
315
- jobId,
316
- message(" codemodernizer.notification.warn.unknown_status_response" ),
317
- )
318
- }
319
255
320
- state.transformationPlan = modernizationPlan
321
- tryOpenTransformationPlanEditor()
256
+ var isTransformationPlanEditorOpened = false
257
+ var passedBuild = false
258
+ var passedStart = false
322
259
323
- var isPartialSuccess = false
324
260
val result = jobId.pollTransformationStatusAndPlan(
325
261
succeedOn = setOf (
326
262
TransformationStatus .COMPLETED ,
327
- TransformationStatus .STOPPING ,
328
263
TransformationStatus .STOPPED ,
329
264
TransformationStatus .PARTIALLY_COMPLETED ,
330
265
),
@@ -342,24 +277,58 @@ class CodeModernizerSession(
342
277
state.currentJobStatus = new
343
278
state.transformationPlan = plan
344
279
sessionContext.project.refreshCwQTree()
345
- if (new == TransformationStatus .PARTIALLY_COMPLETED ) {
346
- isPartialSuccess = true
280
+ // Open the transformation plan detail panel once transformation plan is available
281
+ if (state.transformationPlan != null && ! isTransformationPlanEditorOpened) {
282
+ tryOpenTransformationPlanEditor()
283
+ isTransformationPlanEditorOpened = true
347
284
}
348
285
val instant = Instant .now()
286
+ // Set the job start time
287
+ if (state.currentJobCreationTime == Instant .MIN ) {
288
+ state.currentJobCreationTime = instant
289
+ }
349
290
state.updateJobHistory(sessionContext, new, instant)
350
291
setCurrentJobStopTime(new, instant)
292
+ setCurrentJobSummary(new)
293
+
294
+ if (! passedStart && new in STATES_AFTER_STARTED ) {
295
+ passedStart = true
296
+ }
297
+ if (! passedBuild && new in STATES_AFTER_INITIAL_BUILD ) {
298
+ passedBuild = true
299
+ }
300
+
351
301
jobTransitionHandler(new, plan)
352
302
LOG .info { " Waiting for Modernization Job [$jobId ] to complete. State changed for job: $old -> $new " }
353
303
}
354
304
return when {
355
305
result.state == TransformationStatus .STOPPED -> CodeModernizerJobCompletedResult .Stopped
356
- isPartialSuccess -> CodeModernizerJobCompletedResult .JobPartiallySucceeded (jobId, sessionContext.targetJavaVersion)
357
- result.succeeded -> CodeModernizerJobCompletedResult .JobCompletedSuccessfully (jobId)
358
306
result.state == TransformationStatus .UNKNOWN_TO_SDK_VERSION -> CodeModernizerJobCompletedResult .JobFailed (
359
307
jobId,
360
308
message(" codemodernizer.notification.warn.unknown_status_response" )
361
309
)
362
310
311
+ result.state == TransformationStatus .PARTIALLY_COMPLETED -> CodeModernizerJobCompletedResult .JobPartiallySucceeded (
312
+ jobId,
313
+ sessionContext.targetJavaVersion
314
+ )
315
+
316
+ result.state == TransformationStatus .FAILED -> {
317
+ if (! passedStart) {
318
+ val failureReason = result.jobDetails?.reason() ? : message(" codemodernizer.notification.warn.unknown_start_failure" )
319
+ return CodeModernizerJobCompletedResult .JobFailed (jobId, failureReason)
320
+ } else if (! passedBuild) {
321
+ val failureReason = result.jobDetails?.reason() ? : message(" codemodernizer.notification.warn.unknown_build_failure" )
322
+ return CodeModernizerJobCompletedResult .JobFailedInitialBuild (jobId, failureReason)
323
+ } else {
324
+ val failureReason = result.jobDetails?.reason() ? : message(" codemodernizer.notification.warn.unknown_status_response" )
325
+ return CodeModernizerJobCompletedResult .JobFailed (jobId, failureReason)
326
+ }
327
+ }
328
+
329
+ result.succeeded -> CodeModernizerJobCompletedResult .JobCompletedSuccessfully (jobId)
330
+
331
+ // Should not happen
363
332
else -> CodeModernizerJobCompletedResult .JobFailed (jobId, result.jobDetails?.reason())
364
333
}
365
334
} catch (e: Exception ) {
0 commit comments