From df32a47416a12fab85ac5b67744fbe286669729e Mon Sep 17 00:00:00 2001 From: marcin Date: Wed, 24 Apr 2024 15:18:56 +0200 Subject: [PATCH] another updates --- .../module/PostModuleCreatedActivity.kt | 25 +++++++++++++++ .../plugin/module/VaadinModuleBuilder.kt | 31 +++++++------------ .../com/vaadin/plugin/module/VaadinPanel.kt | 4 +-- .../vaadin/plugin/utils/VaadinProjectUtil.kt | 11 +++++-- src/main/resources/META-INF/plugin.xml | 8 +++-- 5 files changed, 53 insertions(+), 26 deletions(-) create mode 100644 src/main/kotlin/com/vaadin/plugin/module/PostModuleCreatedActivity.kt diff --git a/src/main/kotlin/com/vaadin/plugin/module/PostModuleCreatedActivity.kt b/src/main/kotlin/com/vaadin/plugin/module/PostModuleCreatedActivity.kt new file mode 100644 index 00000000..8aaa3626 --- /dev/null +++ b/src/main/kotlin/com/vaadin/plugin/module/PostModuleCreatedActivity.kt @@ -0,0 +1,25 @@ +package com.vaadin.plugin.module + +import com.intellij.notification.NotificationType +import com.intellij.openapi.fileEditor.FileEditorManager +import com.intellij.openapi.fileEditor.OpenFileDescriptor +import com.intellij.openapi.project.Project +import com.intellij.openapi.startup.ProjectActivity +import com.intellij.openapi.vfs.VfsUtil +import com.vaadin.plugin.utils.VaadinProjectUtil +import java.io.File + +class PostModuleCreatedActivity : ProjectActivity { + + override suspend fun execute(project: Project) { + project.getUserData(VaadinProjectUtil.PROJECT_DOWNLOADED_PROP_KEY)?.afterChange { + VaadinProjectUtil.notify("Vaadin project created", NotificationType.INFORMATION, project) + VfsUtil.findFileByIoFile(File(project.basePath, "README.md"), true)?.let { + val descriptor = OpenFileDescriptor(project, it) + descriptor.setUsePreviewTab(true) + FileEditorManager.getInstance(project).openEditor(descriptor, true) + } + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/com/vaadin/plugin/module/VaadinModuleBuilder.kt b/src/main/kotlin/com/vaadin/plugin/module/VaadinModuleBuilder.kt index 8fed52db..f56b463a 100644 --- a/src/main/kotlin/com/vaadin/plugin/module/VaadinModuleBuilder.kt +++ b/src/main/kotlin/com/vaadin/plugin/module/VaadinModuleBuilder.kt @@ -3,21 +3,21 @@ package com.vaadin.plugin.module import com.intellij.ide.util.projectWizard.ModuleBuilder import com.intellij.ide.util.projectWizard.ModuleWizardStep import com.intellij.ide.util.projectWizard.WizardContext -import com.intellij.notification.NotificationType import com.intellij.openapi.Disposable -import com.intellij.openapi.fileEditor.FileEditorManager -import com.intellij.openapi.fileEditor.OpenFileDescriptor +import com.intellij.openapi.module.ModifiableModuleModel +import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleType +import com.intellij.openapi.observable.properties.PropertyGraph import com.intellij.openapi.project.ProjectType -import com.intellij.openapi.roots.ModifiableRootModel -import com.intellij.openapi.startup.StartupManager -import com.intellij.openapi.vfs.VfsUtil import com.vaadin.plugin.starter.DownloadableModel import com.vaadin.plugin.utils.VaadinProjectUtil -import java.io.File class VaadinModuleBuilder : ModuleBuilder() { + private val propertyGraph = PropertyGraph() + + private val projectDownloadedProperty = propertyGraph.property(false) + private var model: DownloadableModel? = null override fun getBuilderId(): String { @@ -36,18 +36,11 @@ class VaadinModuleBuilder : ModuleBuilder() { this.model = model } - override fun setupRootModel(modifiableRootModel: ModifiableRootModel) { - val project = modifiableRootModel.project - StartupManager.getInstance(project).runAfterOpened { - VaadinProjectUtil.downloadAndExtract(project, this.model!!.getDownloadLink(project)) { - VaadinProjectUtil.notify("Vaadin project created", NotificationType.INFORMATION, project) - VfsUtil.findFileByIoFile(File(project.basePath, "README.md"), true)?.let { - val descriptor = OpenFileDescriptor(project, it) - descriptor.setUsePreviewTab(true) - FileEditorManager.getInstance(project).openEditor(descriptor, true) - } - } - } + override fun createModule(moduleModel: ModifiableModuleModel): Module { + val project = moduleModel.project + project.putUserData(VaadinProjectUtil.PROJECT_DOWNLOADED_PROP_KEY, projectDownloadedProperty) + VaadinProjectUtil.downloadAndExtract(project, this.model!!.getDownloadLink(project)) + return super.createModule(moduleModel) } override fun getProjectType(): ProjectType? { diff --git a/src/main/kotlin/com/vaadin/plugin/module/VaadinPanel.kt b/src/main/kotlin/com/vaadin/plugin/module/VaadinPanel.kt index 33310663..93a01105 100644 --- a/src/main/kotlin/com/vaadin/plugin/module/VaadinPanel.kt +++ b/src/main/kotlin/com/vaadin/plugin/module/VaadinPanel.kt @@ -28,13 +28,13 @@ class VaadinPanel { row { text( "Flow framework is the most productive" + - " choice, allowing 100% of the user interface to be coded in server-side Java." + " choice, allowing 100% of the user
interface to be coded in server-side Java." ) } row { text( "Hilla framework, on the other hand, enables" + - " implementation of your user interface with React while automatically connecting it to your" + + " implementation of your user
interface with React while automatically connecting it to your" + " Java backend." ) } diff --git a/src/main/kotlin/com/vaadin/plugin/utils/VaadinProjectUtil.kt b/src/main/kotlin/com/vaadin/plugin/utils/VaadinProjectUtil.kt index 916f8353..c5636d0b 100644 --- a/src/main/kotlin/com/vaadin/plugin/utils/VaadinProjectUtil.kt +++ b/src/main/kotlin/com/vaadin/plugin/utils/VaadinProjectUtil.kt @@ -4,7 +4,9 @@ import com.intellij.notification.Notification import com.intellij.notification.NotificationType import com.intellij.notification.Notifications import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.observable.properties.GraphProperty import com.intellij.openapi.project.Project +import com.intellij.openapi.util.Key import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.util.download.DownloadableFileService @@ -21,9 +23,11 @@ class VaadinProjectUtil { private val LOG: Logger = Logger.getInstance(VaadinProjectUtil::class.java) + val PROJECT_DOWNLOADED_PROP_KEY = Key>("vaadin_project_downloaded") + private const val NOTIFICATION_GROUP = "Vaadin" - fun downloadAndExtract(project: Project, url: String, callback: () -> Unit) { + fun downloadAndExtract(project: Project, url: String) { val filename = "project.zip" LOG.info("Downloading $filename") val basePath: String = project.basePath!! @@ -33,7 +37,7 @@ class VaadinProjectUtil { val downloader = DownloadableFileService.getInstance().createDownloader(listOf(description), "Vaadin Starter Project") - downloader.downloadWithBackgroundProgress(basePath, project).thenAccept { + downloader.downloadWithBackgroundProgress(basePath, project).thenApply { LOG.info("Extracting $downloadedFile") ZipUtil.extract(downloadedFile.toPath(), Path.of(basePath), null) // move contents from single zip directory @@ -44,7 +48,8 @@ class VaadinProjectUtil { } FileUtil.delete(downloadedFile) LOG.info("$downloadedFile deleted") - VirtualFileManager.getInstance().asyncRefresh(callback) + VirtualFileManager.getInstance().syncRefresh() + (project.getUserData(PROJECT_DOWNLOADED_PROP_KEY) as GraphProperty).set(true) } } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 7486a7c9..943a1109 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -34,15 +34,19 @@ + - - + + + + +