1
- // Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
1
+ // Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
// SPDX-License-Identifier: Apache-2.0
3
3
4
4
package software.aws.toolkits.jetbrains.services.lambda.dotnet
5
5
6
- import com.intellij.openapi.module.ModuleManager
7
- import com.intellij.openapi.progress.DumbProgressIndicator
8
- import com.intellij.openapi.progress.ProgressManager
9
- import com.intellij.openapi.project.rootManager
10
- import com.intellij.openapi.util.io.FileUtil
11
- import com.intellij.openapi.vfs.LocalFileSystem
12
6
import com.intellij.ui.ColorUtil
13
7
import com.intellij.ui.components.JBScrollPane
14
8
import com.intellij.ui.components.JBTabbedPane
15
9
import com.intellij.util.ui.JBUI
16
10
import com.intellij.util.ui.UIUtil
17
11
import com.intellij.xml.util.XmlUtil
18
- import com.jetbrains.rider.ideaInterop.fileTypes.msbuild.CsprojFileType
19
12
import com.jetbrains.rider.ideaInterop.fileTypes.sln.SolutionFileType
20
- import com.jetbrains.rider.projectView.SolutionManager
21
13
import com.jetbrains.rider.projectView.actions.projectTemplating.backend.ReSharperTemplateGeneratorBase
22
- import com.jetbrains.rider.projectView.actions.projectTemplating.backend.ReSharperTemplatesInteraction
23
14
import com.jetbrains.rider.projectView.actions.projectTemplating.impl.ProjectTemplateDialogContext
24
15
import com.jetbrains.rider.projectView.actions.projectTemplating.impl.ProjectTemplateTransferableModel
25
16
import com.jetbrains.rider.ui.themes.RiderTheme
26
- import kotlinx.coroutines.runBlocking
27
17
import software.aws.toolkits.jetbrains.services.lambda.BuiltInRuntimeGroups
28
18
import software.aws.toolkits.jetbrains.services.lambda.RuntimeGroup
29
19
import software.aws.toolkits.jetbrains.services.lambda.wizard.SamInitSelectionPanel
@@ -36,7 +26,7 @@ import javax.swing.JScrollPane
36
26
import javax.swing.JTabbedPane
37
27
import javax.swing.JTextPane
38
28
39
- class DotNetSamProjectGenerator (
29
+ abstract class DotNetSamProjectGeneratorRoot (
40
30
private val context : ProjectTemplateDialogContext ,
41
31
group : String ,
42
32
categoryName : String ,
@@ -61,6 +51,10 @@ class DotNetSamProjectGenerator(
61
51
wizardUpdateCallback = { validateData() }
62
52
)
63
53
54
+ fun getSamPanel () = samPanel
55
+
56
+ fun getSamGenerator () = generator
57
+
64
58
private val projectStructurePanel: JTabbedPane
65
59
66
60
private val structurePane = JTextPane ().apply {
@@ -154,74 +148,6 @@ class DotNetSamProjectGenerator(
154
148
validateData()
155
149
}
156
150
157
- override fun expand () = Runnable {
158
- val samSettings = samPanel.getNewProjectSettings()
159
-
160
- val solutionDirectory = getSolutionDirectory()
161
- ? : throw Exception (message(" sam.init.error.no.solution.basepath" ))
162
-
163
- val fileSystem = LocalFileSystem .getInstance()
164
- if (! solutionDirectory.exists()) {
165
- FileUtil .createDirectory(solutionDirectory)
166
- }
167
-
168
- val outDirVf = fileSystem.refreshAndFindFileByIoFile(solutionDirectory)
169
- ? : throw Exception (message(" sam.init.error.no.virtual.file" ))
170
-
171
- val progressManager = ProgressManager .getInstance()
172
- val samProjectBuilder = generator.createModuleBuilder()
173
- progressManager.runProcessWithProgressSynchronously(
174
- {
175
- samProjectBuilder.runSamInit(
176
- context.project,
177
- projectNameField.text,
178
- samSettings,
179
- null ,
180
- outDirVf
181
- )
182
- },
183
- message(" sam.init.generating.template" ),
184
- false ,
185
- null
186
- )
187
-
188
- // Create solution file
189
- val projectFiles =
190
- File (solutionDirectory, " src" ).walk().filter { it.extension == CsprojFileType .defaultExtension } +
191
- File (solutionDirectory, " test" ).walk().filter { it.extension == CsprojFileType .defaultExtension }
192
-
193
- // Get the rest of generated files and copy to "SolutionItems" default folder in project structure
194
- val solutionFiles = solutionDirectory.listFiles()?.filter { it.isFile }?.toList() ? : emptyList()
195
-
196
- val solutionFile = ReSharperTemplatesInteraction .createSolution(
197
- name = getSolutionName(),
198
- directory = solutionDirectory,
199
- projectFiles = projectFiles.toList(),
200
- protocolHost = context.protocolHost,
201
- solutionFiles = solutionFiles
202
- ) ? : throw Exception (message(" sam.init.error.solution.create.fail" ))
203
-
204
- val project = runBlocking {
205
- SolutionManager .openExistingSolution(
206
- projectToClose = null ,
207
- forceOpenInNewFrame = false ,
208
- solutionFile = solutionFile,
209
- forceConsiderTrusted = true
210
- )
211
- } ? : return @Runnable
212
-
213
- vcsPanel?.createInitializer()?.execute(project)
214
-
215
- val modifiableModel = ModuleManager .getInstance(project).modules.firstOrNull()?.rootManager?.modifiableModel ? : return @Runnable
216
- try {
217
- val progressIndicator = if (progressManager.hasProgressIndicator()) progressManager.progressIndicator else DumbProgressIndicator ()
218
-
219
- samProjectBuilder.runPostSamInit(project, modifiableModel, progressIndicator, samSettings, outDirVf)
220
- } finally {
221
- modifiableModel.dispose()
222
- }
223
- }
224
-
225
151
override fun refreshUI () {
226
152
super .refreshUI()
227
153
// This restore project name when user change a solution name and switch between templates
0 commit comments