project configuration: improve 'Convert to Repository Library' action

Add button 'Change Coordinates...' to 'Replace Library' dialog which allow user to try again with different coordinates.
This commit is contained in:
nik
2017-11-23 16:56:37 +03:00
parent c8e4b7af19
commit 7669d445b8
2 changed files with 33 additions and 8 deletions
@@ -38,6 +38,7 @@ import com.intellij.openapi.roots.libraries.NewLibraryConfiguration
import com.intellij.openapi.roots.libraries.ui.OrderRoot
import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor
import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditorBase
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.openapi.ui.Messages
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.*
@@ -91,10 +92,7 @@ abstract class ConvertToRepositoryLibraryActionBase(protected val context: Struc
null) != Messages.YES) {
return
}
val coordinates = specifyMavenCoordinates(listOf(mavenCoordinates)) ?: return
ApplicationManager.getApplication().invokeLater {
downloadLibraryAndReplace(library, coordinates)
}
changeCoordinatesAndRetry(mavenCoordinates, library)
return
}
@@ -104,11 +102,16 @@ abstract class ConvertToRepositoryLibraryActionBase(protected val context: Struc
if (task.cancelled) return
if (!task.filesAreTheSame) {
val ok = LibraryJarsDiffDialog(task.libraryFileToCompare, task.downloadedFileToCompare, mavenCoordinates,
LibraryUtil.getPresentableName(library), project).showAndGet()
val dialog = LibraryJarsDiffDialog(task.libraryFileToCompare, task.downloadedFileToCompare, mavenCoordinates,
LibraryUtil.getPresentableName(library), project)
dialog.show()
task.deleteTemporaryFiles()
if (!ok) {
return
when (dialog.exitCode) {
DialogWrapper.CANCEL_EXIT_CODE -> return
LibraryJarsDiffDialog.CHANGE_COORDINATES_CODE -> {
changeCoordinatesAndRetry(mavenCoordinates, library)
return
}
}
}
ApplicationManager.getApplication().invokeLater {
@@ -121,6 +124,13 @@ abstract class ConvertToRepositoryLibraryActionBase(protected val context: Struc
}
}
private fun changeCoordinatesAndRetry(mavenCoordinates: JpsMavenRepositoryLibraryDescriptor, library: LibraryEx) {
val coordinates = specifyMavenCoordinates(listOf(mavenCoordinates)) ?: return
ApplicationManager.getApplication().invokeLater {
downloadLibraryAndReplace(library, coordinates)
}
}
private fun detectOrSpecifyMavenCoordinates(library: Library): JpsMavenRepositoryLibraryDescriptor? {
val detectedCoordinates = detectMavenCoordinates(library.getFiles(OrderRootType.CLASSES))
LOG.debug("Maven coordinates for ${LibraryUtil.getPresentableName(library)} JARs: $detectedCoordinates")
@@ -26,6 +26,8 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.ui.components.JBLabel
import com.intellij.xml.util.XmlStringUtil
import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor
import java.awt.event.ActionEvent
import javax.swing.Action
/**
* @author nik
@@ -35,6 +37,9 @@ class LibraryJarsDiffDialog(libraryFile: VirtualFile,
private val mavenCoordinates: JpsMavenRepositoryLibraryDescriptor,
private val libraryName: String,
project: Project) : DialogWrapper(project) {
companion object {
val CHANGE_COORDINATES_CODE = 2;
}
private val panel: DiffRequestPanel
@@ -53,4 +58,14 @@ class LibraryJarsDiffDialog(libraryFile: VirtualFile,
override fun createCenterPanel() = panel.component
override fun getPreferredFocusedComponent() = panel.preferredFocusedComponent
override fun createActions(): Array<Action> {
return arrayOf(okAction, ChangeCoordinatesAction(), cancelAction)
}
private inner class ChangeCoordinatesAction : DialogWrapperAction("Change Coordinates...") {
override fun doAction(e: ActionEvent?) {
close(CHANGE_COORDINATES_CODE)
}
}
}