From 80b30ebcbe4ace01932941b2a32a6a4888a78bfe Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 24 Nov 2011 10:47:54 +0400 Subject: [PATCH] introduced new library type for libraries downloaded from Maven repository, 'Attach from repository' button in library editor is removed --- .../ui/libraries/LibraryOptionsPanel.java | 2 +- .../library/DownloadableLibraryType.java | 11 + ... DownloadableLibraryPropertiesEditor.java} | 62 ++--- .../impl/DownloadableLibraryServiceImpl.java | 2 +- .../actions/CreateLibraryFromFilesDialog.java | 4 +- .../actions/MarkLibraryRootAction.java | 2 +- .../CustomLibraryDescriptionBase.java | 2 +- .../roots/ui/configuration/PathUIUtils.java | 2 +- .../classpath/CreateModuleLibraryChooser.java | 2 +- .../classpath/NewLibraryChooser.java | 19 +- .../libraries/CustomLibraryDescription.java | 1 + .../libraries/LibraryEditingUtil.java | 14 -- .../libraryEditor/CreateNewLibraryAction.java | 62 ++--- .../LibraryPropertiesEditorBase.form} | 6 +- .../LibraryPropertiesEditorBase.java | 87 +++++++ .../libraryEditor/LibraryRootsComponent.java | 7 + .../roots/impl/libraries/LibraryImpl.java | 2 +- .../libraries/LibraryTypeRegistryImpl.java | 37 --- .../libraries/LibraryTypeServiceImpl.java | 97 +++++++ .../openapi/roots/libraries/LibraryType.java | 11 +- ...eRegistry.java => LibraryTypeService.java} | 18 +- .../libraries/NewLibraryConfiguration.java | 4 +- .../libraries/ui/LibraryEditorComponent.java | 4 + .../ui/impl}/DetectedRootsChooserDialog.java | 2 +- .../libraries/ui/impl}/RootDetectionUtil.java | 2 +- .../ui/impl}/SuggestedChildRootInfo.java | 2 +- .../src/META-INF/LangExtensions.xml | 4 +- .../config/GroovyLibraryDescription.java | 2 +- .../MavenRepositoriesConfigurable.java | 2 +- .../maven/utils/RepositoryAttachDialog.java | 11 +- .../RepositoryAttachHandler.java | 237 ++++++++---------- .../library/RepositoryLibraryEditor.java | 52 ++++ .../library/RepositoryLibraryProperties.java | 63 +++++ .../utils/library/RepositoryLibraryType.java | 78 ++++++ .../src/main/resources/META-INF/plugin.xml | 2 +- 35 files changed, 604 insertions(+), 311 deletions(-) rename java/idea-ui/src/com/intellij/framework/library/impl/{DownloadableLibraryEditor.java => DownloadableLibraryPropertiesEditor.java} (71%) rename java/idea-ui/src/com/intellij/{framework/library/impl/DownloadableLibraryEditor.form => openapi/roots/ui/configuration/libraryEditor/LibraryPropertiesEditorBase.form} (90%) create mode 100644 java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryPropertiesEditorBase.java delete mode 100644 platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTypeRegistryImpl.java create mode 100644 platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTypeServiceImpl.java rename platform/lang-impl/src/com/intellij/openapi/roots/libraries/{LibraryTypeRegistry.java => LibraryTypeService.java} (50%) rename {java/idea-ui/src/com/intellij/openapi/roots/ui/configuration => platform/lang-impl/src/com/intellij/openapi/roots}/libraries/NewLibraryConfiguration.java (90%) rename {java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor => platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl}/DetectedRootsChooserDialog.java (98%) rename {java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor => platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl}/RootDetectionUtil.java (98%) rename {java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor => platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl}/SuggestedChildRootInfo.java (95%) rename plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/{ => library}/RepositoryAttachHandler.java (66%) create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryEditor.java create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryProperties.java create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryType.java diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java index 75b7103796eb..ae24d651141b 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java @@ -30,10 +30,10 @@ import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.ui.OrderEntryAppearanceService; import com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription; import com.intellij.openapi.roots.ui.configuration.libraries.LibraryPresentationManager; -import com.intellij.openapi.roots.ui.configuration.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.ui.configuration.libraryEditor.ExistingLibraryEditor; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor; import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor; diff --git a/java/idea-ui/src/com/intellij/framework/library/DownloadableLibraryType.java b/java/idea-ui/src/com/intellij/framework/library/DownloadableLibraryType.java index b540286802d6..278afda9fd13 100644 --- a/java/idea-ui/src/com/intellij/framework/library/DownloadableLibraryType.java +++ b/java/idea-ui/src/com/intellij/framework/library/DownloadableLibraryType.java @@ -15,12 +15,16 @@ */ package com.intellij.framework.library; +import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.libraries.LibraryKind; import com.intellij.openapi.roots.libraries.LibraryType; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent; import com.intellij.openapi.roots.libraries.ui.LibraryPropertiesEditor; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -43,6 +47,13 @@ public class DownloadableLibraryType extends LibraryType { private final DownloadableLibraryDescription myDescription; - private final LibraryEditorComponent myEditorComponent; private final DownloadableLibraryType myLibraryType; private String myCurrentVersionString; - public DownloadableLibraryEditor(final DownloadableLibraryDescription description, - final LibraryEditorComponent editorComponent, - DownloadableLibraryType libraryType) { + public DownloadableLibraryPropertiesEditor(DownloadableLibraryDescription description, + LibraryEditorComponent editorComponent, + DownloadableLibraryType libraryType) { + super(editorComponent, libraryType, "Change &Version..."); myDescription = description; - myEditorComponent = editorComponent; myLibraryType = libraryType; - updateDescription(); myCurrentVersionString = myEditorComponent.getProperties().getVersionString(); - myChangeVersionButton.setVisible(!myEditorComponent.isNewLibrary()); - myChangeVersionButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - changeVersion(); - } - }); } - private void updateDescription() { - myDescriptionLabel.setText(myLibraryType.getDescription(myEditorComponent.getProperties())); - } - - private void changeVersion() { + protected void edit() { final ModalityState current = ModalityState.current(); myDescription.fetchVersions(new DownloadableFileSetVersions.FileSetVersionsCallback() { @Override @@ -90,9 +73,9 @@ public class DownloadableLibraryEditor extends LibraryPropertiesEditor { final LibraryDownloadSettings initialSettings = new LibraryDownloadSettings(getCurrentVersion(versions), myLibraryType, LibrariesContainer.LibraryLevel.PROJECT, pathForDownloaded); - final LibraryDownloadSettings settings = DownloadingOptionsDialog.showDialog(myMainPanel, initialSettings, versions, false); + final LibraryDownloadSettings settings = DownloadingOptionsDialog.showDialog(getMainPanel(), initialSettings, versions, false); if (settings != null) { - final NewLibraryEditor editor = settings.download(myMainPanel); + final NewLibraryEditor editor = settings.download(getMainPanel()); if (editor != null) { final LibraryEditorBase target = (LibraryEditorBase)myEditorComponent.getLibraryEditor(); target.removeAllRoots(); @@ -101,8 +84,7 @@ public class DownloadableLibraryEditor extends LibraryPropertiesEditor { editor.applyTo(target); myEditorComponent.updateRootsTree(); myCurrentVersionString = settings.getVersion().getVersionString(); - updateDescription(); - myModified = true; + setModified(); } } } @@ -120,24 +102,8 @@ public class DownloadableLibraryEditor extends LibraryPropertiesEditor { return versions.get(0); } - @NotNull - @Override - public JComponent createComponent() { - return myMainPanel; - } - @Override public void apply() { myEditorComponent.getProperties().setVersionString(myCurrentVersionString); } - - @Override - public boolean isModified() { - return myModified; - } - - @Override - public void reset() { - updateDescription(); - } } diff --git a/java/idea-ui/src/com/intellij/framework/library/impl/DownloadableLibraryServiceImpl.java b/java/idea-ui/src/com/intellij/framework/library/impl/DownloadableLibraryServiceImpl.java index ccfb59e0b422..f5e3304a1d56 100644 --- a/java/idea-ui/src/com/intellij/framework/library/impl/DownloadableLibraryServiceImpl.java +++ b/java/idea-ui/src/com/intellij/framework/library/impl/DownloadableLibraryServiceImpl.java @@ -54,6 +54,6 @@ public class DownloadableLibraryServiceImpl extends DownloadableLibraryService { public LibraryPropertiesEditor createDownloadableLibraryEditor(@NotNull DownloadableLibraryDescription description, @NotNull LibraryEditorComponent editorComponent, @NotNull DownloadableLibraryType libraryType) { - return new DownloadableLibraryEditor(description, editorComponent, libraryType); + return new DownloadableLibraryPropertiesEditor(description, editorComponent, libraryType); } } diff --git a/java/idea-ui/src/com/intellij/ide/projectView/actions/CreateLibraryFromFilesDialog.java b/java/idea-ui/src/com/intellij/ide/projectView/actions/CreateLibraryFromFilesDialog.java index baabc334ff03..5737389099ce 100644 --- a/java/idea-ui/src/com/intellij/ide/projectView/actions/CreateLibraryFromFilesDialog.java +++ b/java/idea-ui/src/com/intellij/ide/projectView/actions/CreateLibraryFromFilesDialog.java @@ -22,10 +22,10 @@ import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.impl.libraries.LibraryTypeServiceImpl; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.ui.OrderRoot; import com.intellij.openapi.roots.ui.configuration.ModulesCombobox; -import com.intellij.openapi.roots.ui.configuration.libraries.LibraryEditingUtil; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryNameAndLevelPanel; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory; @@ -61,7 +61,7 @@ public class CreateLibraryFromFilesDialog extends DialogWrapper { myProject = project; myRoots = roots; final FormBuilder builder = LibraryNameAndLevelPanel.createFormBuilder(); - myDefaultName = LibrariesContainerFactory.createContainer(project).suggestUniqueLibraryName(LibraryEditingUtil.suggestLibraryName(roots)); + myDefaultName = LibrariesContainerFactory.createContainer(project).suggestUniqueLibraryName(LibraryTypeServiceImpl.suggestLibraryName(roots)); myNameAndLevelPanel = new LibraryNameAndLevelPanel(builder, myDefaultName, Arrays.asList(LibrariesContainer.LibraryLevel.values()), LibrariesContainer.LibraryLevel.PROJECT); myNameAndLevelPanel.setDefaultName(myDefaultName); myModulesCombobox = new ModulesCombobox(); diff --git a/java/idea-ui/src/com/intellij/ide/projectView/actions/MarkLibraryRootAction.java b/java/idea-ui/src/com/intellij/ide/projectView/actions/MarkLibraryRootAction.java index e4af24824359..3a78f17d56ed 100644 --- a/java/idea-ui/src/com/intellij/ide/projectView/actions/MarkLibraryRootAction.java +++ b/java/idea-ui/src/com/intellij/ide/projectView/actions/MarkLibraryRootAction.java @@ -23,8 +23,8 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.libraries.ui.OrderRoot; +import com.intellij.openapi.roots.libraries.ui.impl.RootDetectionUtil; import com.intellij.openapi.roots.ui.configuration.libraryEditor.DefaultLibraryRootsComponentDescriptor; -import com.intellij.openapi.roots.ui.configuration.libraryEditor.RootDetectionUtil; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; diff --git a/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/CustomLibraryDescriptionBase.java b/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/CustomLibraryDescriptionBase.java index 4024abf5586a..11f3bc7fcbd5 100644 --- a/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/CustomLibraryDescriptionBase.java +++ b/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/CustomLibraryDescriptionBase.java @@ -20,8 +20,8 @@ import com.intellij.ide.IdeBundle; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.roots.OrderRootType; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription; -import com.intellij.openapi.roots.ui.configuration.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java index baa5afaf9912..7792405a0cfc 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java @@ -19,7 +19,7 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.ui.OrderRoot; import com.intellij.openapi.roots.libraries.ui.RootDetector; -import com.intellij.openapi.roots.ui.configuration.libraryEditor.RootDetectionUtil; +import com.intellij.openapi.roots.libraries.ui.impl.RootDetectionUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/CreateModuleLibraryChooser.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/CreateModuleLibraryChooser.java index 5e654e64c9e3..6af4271da6a6 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/CreateModuleLibraryChooser.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/CreateModuleLibraryChooser.java @@ -26,9 +26,9 @@ import com.intellij.openapi.roots.libraries.LibraryTable; import com.intellij.openapi.roots.libraries.LibraryType; import com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor; import com.intellij.openapi.roots.libraries.ui.OrderRoot; +import com.intellij.openapi.roots.libraries.ui.impl.RootDetectionUtil; import com.intellij.openapi.roots.ui.configuration.libraries.LibraryEditingUtil; import com.intellij.openapi.roots.ui.configuration.libraryEditor.DefaultLibraryRootsComponentDescriptor; -import com.intellij.openapi.roots.ui.configuration.libraryEditor.RootDetectionUtil; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/NewLibraryChooser.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/NewLibraryChooser.java index bf03699a3bf5..3580a70b280d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/NewLibraryChooser.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/NewLibraryChooser.java @@ -20,10 +20,8 @@ import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModifiableRootModel; -import com.intellij.openapi.roots.libraries.Library; -import com.intellij.openapi.roots.libraries.LibraryTable; -import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; -import com.intellij.openapi.roots.libraries.LibraryType; +import com.intellij.openapi.roots.libraries.*; +import com.intellij.openapi.roots.ui.configuration.libraryEditor.CreateNewLibraryAction; import com.intellij.openapi.roots.ui.configuration.libraryEditor.CreateNewLibraryDialog; import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor; import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; @@ -62,13 +60,12 @@ class NewLibraryChooser implements ClasspathElementChooser { @Nullable public Library createLibrary() { - final NewLibraryEditor libraryEditor; - if (myLibraryType == null) { - libraryEditor = new NewLibraryEditor(); - } - else { - libraryEditor = new NewLibraryEditor(myLibraryType, myLibraryType.createDefaultProperties()); - } + final NewLibraryConfiguration configuration = CreateNewLibraryAction.createNewLibraryConfiguration(myLibraryType, myParentComponent, myProject); + if (configuration == null) return null; + + final NewLibraryEditor libraryEditor = new NewLibraryEditor(configuration.getLibraryType(), configuration.getProperties()); + libraryEditor.setName(configuration.getDefaultLibraryName()); + configuration.addRoots(libraryEditor); final LibraryTablesRegistrar registrar = LibraryTablesRegistrar.getInstance(); List tables = Arrays.asList(myRootModel.getModuleLibraryTable(), diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/CustomLibraryDescription.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/CustomLibraryDescription.java index 3f88642522da..963cae23444d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/CustomLibraryDescription.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/CustomLibraryDescription.java @@ -17,6 +17,7 @@ package com.intellij.openapi.roots.ui.configuration.libraries; import com.intellij.framework.library.DownloadableLibraryType; import com.intellij.openapi.roots.libraries.LibraryKind; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/LibraryEditingUtil.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/LibraryEditingUtil.java index 235ea67ba899..0d4d90f32d4a 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/LibraryEditingUtil.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/LibraryEditingUtil.java @@ -30,18 +30,15 @@ import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.impl.libraries.LibraryImpl; import com.intellij.openapi.roots.impl.libraries.LibraryTableImplUtil; import com.intellij.openapi.roots.libraries.*; -import com.intellij.openapi.roots.libraries.ui.OrderRoot; import com.intellij.openapi.roots.ui.configuration.ChooseModulesDialog; import com.intellij.openapi.roots.ui.configuration.classpath.ClasspathPanel; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesModifiableModel; import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable; import com.intellij.openapi.ui.popup.PopupStep; import com.intellij.openapi.ui.popup.util.BaseListPopupStep; -import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.ParameterizedRunnable; -import com.intellij.util.PathUtil; import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -75,10 +72,6 @@ public class LibraryEditingUtil { return false; } - public static String suggestNewLibraryName(LibraryTable.ModifiableModel table, List roots) { - return suggestNewLibraryName(table, suggestLibraryName(roots)); - } - public static String suggestNewLibraryName(LibraryTable.ModifiableModel table, final String baseName) { String candidateName = baseName; @@ -89,13 +82,6 @@ public class LibraryEditingUtil { return candidateName; } - public static String suggestLibraryName(@NotNull List roots) { - if (roots.size() >= 1) { - return FileUtil.getNameWithoutExtension(PathUtil.getFileName(roots.get(0).getFile().getPath())); - } - return "Unnamed"; - } - public static Predicate getNotAddedLibrariesCondition(final ModuleRootModel rootModel) { final OrderEntry[] orderEntries = rootModel.getOrderEntries(); final Set result = new HashSet(orderEntries.length); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/CreateNewLibraryAction.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/CreateNewLibraryAction.java index c2008e880e29..7234d5d64aa4 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/CreateNewLibraryAction.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/CreateNewLibraryAction.java @@ -20,16 +20,13 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.WriteAction; -import com.intellij.openapi.fileChooser.FileChooser; -import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryType; -import com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor; -import com.intellij.openapi.roots.libraries.ui.OrderRoot; -import com.intellij.openapi.roots.libraries.ui.RootDetector; +import com.intellij.openapi.roots.libraries.LibraryTypeService; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable; import com.intellij.openapi.roots.ui.configuration.libraries.LibraryEditingUtil; import com.intellij.openapi.roots.ui.configuration.projectRoot.BaseLibrariesConfigurable; @@ -45,9 +42,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; -import java.awt.*; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -81,38 +76,14 @@ public class CreateNewLibraryAction extends DumbAwareAction { @Nullable - public static Library createLibrary(@Nullable final LibraryType type, @NotNull final Component parentComponent, - @NotNull final Project project, @NotNull final LibrariesModifiableModel modifiableModel) { - LibraryRootsComponentDescriptor componentDescriptor = null; - if (type != null) { - componentDescriptor = type.createLibraryRootsComponentDescriptor(); - } - if (componentDescriptor == null) { - componentDescriptor = new DefaultLibraryRootsComponentDescriptor(); - } - final List rootDetectors = componentDescriptor.getRootDetectors(); - final List roots; - if (!rootDetectors.isEmpty()) { - final FileChooserDescriptor chooserDescriptor = componentDescriptor.createAttachFilesChooserDescriptor(); - chooserDescriptor.setTitle("Select Library Files"); - final VirtualFile[] rootCandidates = FileChooser.chooseFiles(parentComponent, chooserDescriptor, project.getBaseDir()); - if (rootCandidates.length == 0) { - return null; - } + public static Library createLibrary(@Nullable final LibraryType type, @NotNull final JComponent parentComponent, + @NotNull final Project project, @NotNull final LibrariesModifiableModel modifiableModel) { + final NewLibraryConfiguration configuration = createNewLibraryConfiguration(type, parentComponent, project); + if (configuration == null) return null; + final Library library = modifiableModel.createLibrary(LibraryEditingUtil.suggestNewLibraryName(modifiableModel, configuration.getDefaultLibraryName()), configuration.getLibraryType()); - roots = RootDetectionUtil - .detectRoots(Arrays.asList(rootCandidates), parentComponent, project, rootDetectors, - true); - if (roots.isEmpty()) return null; - } - else { - roots = Collections.emptyList(); - } - - final Library library = modifiableModel.createLibrary(LibraryEditingUtil.suggestNewLibraryName(modifiableModel, roots), type); - - final NewLibraryEditor editor = new NewLibraryEditor(((LibraryEx)library).getType(), ((LibraryEx)library).getProperties()); - editor.addRoots(roots); + final NewLibraryEditor editor = new NewLibraryEditor(configuration.getLibraryType(), configuration.getProperties()); + configuration.addRoots(editor); final Library.ModifiableModel model = library.getModifiableModel(); editor.applyTo((LibraryEx.ModifiableModelEx)model); AccessToken token = WriteAction.start(); @@ -125,6 +96,21 @@ public class CreateNewLibraryAction extends DumbAwareAction { return library; } + @Nullable + public static NewLibraryConfiguration createNewLibraryConfiguration(@Nullable LibraryType type, @NotNull JComponent parentComponent, @NotNull Project project) { + final NewLibraryConfiguration configuration; + final VirtualFile baseDir = project.getBaseDir(); + if (type != null) { + configuration = type.createNewLibrary(parentComponent, baseDir, project); + } + else { + configuration = LibraryTypeService + .getInstance().createLibraryFromFiles(new DefaultLibraryRootsComponentDescriptor(), parentComponent, baseDir, null, project); + } + if (configuration == null) return null; + return configuration; + } + public static AnAction[] createActionOrGroup(@NotNull String text, @NotNull BaseLibrariesConfigurable librariesConfigurable, final @NotNull Project project) { final LibraryType[] extensions = LibraryType.EP_NAME.getExtensions(); List> suitableTypes = new ArrayList>(); diff --git a/java/idea-ui/src/com/intellij/framework/library/impl/DownloadableLibraryEditor.form b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryPropertiesEditorBase.form similarity index 90% rename from java/idea-ui/src/com/intellij/framework/library/impl/DownloadableLibraryEditor.form rename to java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryPropertiesEditorBase.form index 1c3a3643006b..342f8c15c8d5 100644 --- a/java/idea-ui/src/com/intellij/framework/library/impl/DownloadableLibraryEditor.form +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryPropertiesEditorBase.form @@ -1,5 +1,5 @@ -
+ @@ -21,12 +21,12 @@ - + - + diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryPropertiesEditorBase.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryPropertiesEditorBase.java new file mode 100644 index 000000000000..a00e5f783cdb --- /dev/null +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryPropertiesEditorBase.java @@ -0,0 +1,87 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.roots.ui.configuration.libraryEditor; + +import com.intellij.openapi.roots.libraries.LibraryProperties; +import com.intellij.openapi.roots.libraries.LibraryType; +import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent; +import com.intellij.openapi.roots.libraries.ui.LibraryPropertiesEditor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * @author nik + */ +public abstract class LibraryPropertiesEditorBase

> extends LibraryPropertiesEditor { + private JPanel myMainPanel; + private JLabel myDescriptionLabel; + private JButton myEditButton; + private boolean myModified; + protected final LibraryEditorComponent

myEditorComponent; + protected final T myLibraryType; + + protected LibraryPropertiesEditorBase(final LibraryEditorComponent

editorComponent, + T libraryType, @Nullable String editButtonText) { + myEditorComponent = editorComponent; + myLibraryType = libraryType; + updateDescription(); + if (editButtonText != null) { + myEditButton.setText(editButtonText); + } + myEditButton.setVisible(!myEditorComponent.isNewLibrary()); + myEditButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + edit(); + } + }); + } + + protected JPanel getMainPanel() { + return myMainPanel; + } + + protected void updateDescription() { + myDescriptionLabel.setText(myLibraryType.getDescription(myEditorComponent.getProperties())); + } + + protected abstract void edit(); + + protected void setModified() { + myModified = true; + updateDescription(); + } + + @NotNull + @Override + public JComponent createComponent() { + return myMainPanel; + } + + @Override + public boolean isModified() { + return myModified; + } + + @Override + public void reset() { + updateDescription(); + } +} diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryRootsComponent.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryRootsComponent.java index c434969765ca..c9f405ea9542 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryRootsComponent.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryRootsComponent.java @@ -29,6 +29,7 @@ import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.impl.libraries.LibraryImpl; import com.intellij.openapi.roots.libraries.*; import com.intellij.openapi.roots.libraries.ui.*; +import com.intellij.openapi.roots.libraries.ui.impl.RootDetectionUtil; import com.intellij.openapi.roots.ui.configuration.ModuleEditor; import com.intellij.openapi.roots.ui.configuration.libraries.LibraryPresentationManager; import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable; @@ -186,6 +187,12 @@ public class LibraryRootsComponent implements Disposable, LibraryEditorComponent return myPanel; } + @Override + @Nullable + public Project getProject() { + return myProject; + } + public void setContextModule(Module module) { myContextModule = module; } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java index 73fcb03bd1eb..fb009e39ab73 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java @@ -257,7 +257,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx { final String typeId = element.getAttributeValue(LIBRARY_TYPE_ATTR); if (typeId == null) return; - myType = LibraryTypeRegistry.getInstance().findTypeById(typeId); + myType = LibraryTypeService.getInstance().findTypeById(typeId); if (myType == null) return; myProperties = myType.createDefaultProperties(); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTypeRegistryImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTypeRegistryImpl.java deleted file mode 100644 index 4ebe3f56f39e..000000000000 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTypeRegistryImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2000-2010 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.openapi.roots.impl.libraries; - -import com.intellij.openapi.roots.libraries.LibraryType; -import com.intellij.openapi.roots.libraries.LibraryTypeRegistry; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @author nik - */ -public class LibraryTypeRegistryImpl extends LibraryTypeRegistry { - - @Nullable - public LibraryType findTypeById(@NotNull String typeId) { - for (LibraryType type : LibraryType.EP_NAME.getExtensions()) { - if (type.getKind().getKindId().equals(typeId)) { - return type; - } - } - return null; - } -} diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTypeServiceImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTypeServiceImpl.java new file mode 100644 index 000000000000..0f2ace8e4a5f --- /dev/null +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTypeServiceImpl.java @@ -0,0 +1,97 @@ +/* + * Copyright 2000-2010 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.roots.impl.libraries; + +import com.intellij.openapi.fileChooser.FileChooser; +import com.intellij.openapi.fileChooser.FileChooserDescriptor; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.libraries.LibraryProperties; +import com.intellij.openapi.roots.libraries.LibraryType; +import com.intellij.openapi.roots.libraries.LibraryTypeService; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; +import com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor; +import com.intellij.openapi.roots.libraries.ui.OrderRoot; +import com.intellij.openapi.roots.libraries.ui.RootDetector; +import com.intellij.openapi.roots.libraries.ui.impl.RootDetectionUtil; +import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.PathUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * @author nik + */ +public class LibraryTypeServiceImpl extends LibraryTypeService { + + @Nullable + public LibraryType findTypeById(@NotNull String typeId) { + for (LibraryType type : LibraryType.EP_NAME.getExtensions()) { + if (type.getKind().getKindId().equals(typeId)) { + return type; + } + } + return null; + } + + @Override + public NewLibraryConfiguration createLibraryFromFiles(@NotNull LibraryRootsComponentDescriptor descriptor, + @NotNull JComponent parentComponent, + @Nullable VirtualFile contextDirectory, + LibraryType type, + final Project project) { + final List rootDetectors = descriptor.getRootDetectors(); + final List roots; + if (!rootDetectors.isEmpty()) { + final FileChooserDescriptor chooserDescriptor = descriptor.createAttachFilesChooserDescriptor(); + chooserDescriptor.setTitle("Select Library Files"); + final VirtualFile[] rootCandidates = FileChooser.chooseFiles(parentComponent, chooserDescriptor, contextDirectory); + if (rootCandidates.length == 0) { + return null; + } + + roots = RootDetectionUtil.detectRoots(Arrays.asList(rootCandidates), parentComponent, project, rootDetectors, true); + if (roots.isEmpty()) return null; + } + else { + roots = Collections.emptyList(); + } + String name = suggestLibraryName(roots); + return doCreate(type, name, roots); + } + + private static

> NewLibraryConfiguration doCreate(final LibraryType

type, final String name, final List roots) { + return new NewLibraryConfiguration(name, type, type != null ? type.createDefaultProperties() : null) { + @Override + public void addRoots(@NotNull LibraryEditor editor) { + editor.addRoots(roots); + } + }; + } + + public static String suggestLibraryName(@NotNull List roots) { + if (roots.size() >= 1) { + return FileUtil.getNameWithoutExtension(PathUtil.getFileName(roots.get(0).getFile().getPath())); + } + return "Unnamed"; + } +} diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryType.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryType.java index cbc79fa216fc..2e521e3cde57 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryType.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryType.java @@ -17,6 +17,7 @@ package com.intellij.openapi.roots.libraries; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent; import com.intellij.openapi.roots.libraries.ui.LibraryPropertiesEditor; @@ -26,6 +27,7 @@ import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.util.List; /** @@ -47,11 +49,18 @@ public abstract class LibraryType

extends LibraryPr } /** - * @return text to show in 'New Library' popup + * @return text to show in 'New Library' popup. Return {@code null} if the type should not be shown in the 'New Library' popup */ @Nullable public abstract String getCreateActionName(); + /** + * Called when a new library of this type is created in Project Structure dialog + */ + @Nullable + public abstract NewLibraryConfiguration createNewLibrary(@NotNull JComponent parentComponent, @Nullable VirtualFile contextDirectory, + @NotNull Project project); + @NotNull public abstract P createDefaultProperties(); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryTypeRegistry.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryTypeService.java similarity index 50% rename from platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryTypeRegistry.java rename to platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryTypeService.java index 70074a9895aa..50c07766b4bc 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryTypeRegistry.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryTypeService.java @@ -16,17 +16,29 @@ package com.intellij.openapi.roots.libraries; import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; + /** * @author nik */ -public abstract class LibraryTypeRegistry { - public static LibraryTypeRegistry getInstance() { - return ServiceManager.getService(LibraryTypeRegistry.class); +public abstract class LibraryTypeService { + public static LibraryTypeService getInstance() { + return ServiceManager.getService(LibraryTypeService.class); } @Nullable public abstract LibraryType findTypeById(@NotNull String typeId); + + @Nullable + public abstract NewLibraryConfiguration createLibraryFromFiles(@NotNull LibraryRootsComponentDescriptor descriptor, + @NotNull JComponent parentComponent, + @Nullable VirtualFile contextDirectory, + @Nullable LibraryType type, + final @Nullable Project project); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/NewLibraryConfiguration.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/NewLibraryConfiguration.java similarity index 90% rename from java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/NewLibraryConfiguration.java rename to platform/lang-impl/src/com/intellij/openapi/roots/libraries/NewLibraryConfiguration.java index 1aa57a1ec1d2..28e82c65db38 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraries/NewLibraryConfiguration.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/NewLibraryConfiguration.java @@ -13,10 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.openapi.roots.ui.configuration.libraries; +package com.intellij.openapi.roots.libraries; -import com.intellij.openapi.roots.libraries.LibraryProperties; -import com.intellij.openapi.roots.libraries.LibraryType; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/LibraryEditorComponent.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/LibraryEditorComponent.java index 1d816d2514cc..5c859167169d 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/LibraryEditorComponent.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/LibraryEditorComponent.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.roots.libraries.ui; +import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.libraries.LibraryProperties; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor; import com.intellij.openapi.vfs.VirtualFile; @@ -39,4 +40,7 @@ public interface LibraryEditorComponent

{ VirtualFile getExistingRootDirectory(); void updateRootsTree(); + + @Nullable + Project getProject(); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DetectedRootsChooserDialog.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/DetectedRootsChooserDialog.java similarity index 98% rename from java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DetectedRootsChooserDialog.java rename to platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/DetectedRootsChooserDialog.java index 0c983483b5e7..499510008784 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DetectedRootsChooserDialog.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/DetectedRootsChooserDialog.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.openapi.roots.ui.configuration.libraryEditor; +package com.intellij.openapi.roots.libraries.ui.impl; import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.project.Project; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/RootDetectionUtil.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/RootDetectionUtil.java similarity index 98% rename from java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/RootDetectionUtil.java rename to platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/RootDetectionUtil.java index 7e363408b9b2..a293df3f8f13 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/RootDetectionUtil.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/RootDetectionUtil.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.openapi.roots.ui.configuration.libraryEditor; +package com.intellij.openapi.roots.libraries.ui.impl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SuggestedChildRootInfo.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/SuggestedChildRootInfo.java similarity index 95% rename from java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SuggestedChildRootInfo.java rename to platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/SuggestedChildRootInfo.java index cb14cdb4a916..826fc8df7dc5 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SuggestedChildRootInfo.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/SuggestedChildRootInfo.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.openapi.roots.ui.configuration.libraryEditor; +package com.intellij.openapi.roots.libraries.ui.impl; import com.intellij.openapi.roots.libraries.ui.RootDetector; import com.intellij.openapi.vfs.VirtualFile; diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index 903cfba08491..a6995568c0f2 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -114,8 +114,8 @@ - + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/config/GroovyLibraryDescription.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/config/GroovyLibraryDescription.java index 3de0fed469e6..b4d9f5e671a2 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/config/GroovyLibraryDescription.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/config/GroovyLibraryDescription.java @@ -19,8 +19,8 @@ import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.roots.libraries.LibraryKind; import com.intellij.openapi.roots.libraries.LibraryPresentationProvider; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription; -import com.intellij.openapi.roots.ui.configuration.libraries.NewLibraryConfiguration; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; import com.intellij.openapi.util.SystemInfo; diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenRepositoriesConfigurable.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenRepositoriesConfigurable.java index ec86bbd334cc..df5c80012a48 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenRepositoriesConfigurable.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenRepositoriesConfigurable.java @@ -36,7 +36,7 @@ import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.model.MavenRepositoryInfo; import org.jetbrains.idea.maven.services.MavenRepositoryServicesManager; -import org.jetbrains.idea.maven.utils.RepositoryAttachHandler; +import org.jetbrains.idea.maven.utils.library.RepositoryAttachHandler; import javax.swing.*; import javax.swing.event.ListSelectionEvent; diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java index 817b3862ba6f..41e783c55237 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java @@ -19,7 +19,7 @@ import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; -import com.intellij.openapi.fileChooser.ex.FileChooserDialogImpl; +import com.intellij.openapi.fileChooser.FileChooserDialog; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.ui.DialogWrapper; @@ -43,8 +43,10 @@ import com.intellij.util.ui.AsyncProcessIcon; import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.model.MavenArtifactInfo; import org.jetbrains.idea.maven.model.MavenRepositoryInfo; +import org.jetbrains.idea.maven.utils.library.RepositoryAttachHandler; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -81,7 +83,7 @@ public class RepositoryAttachDialog extends DialogWrapper { private TextFieldWithBrowseButton myDirectoryField; private String myFilterString; - public RepositoryAttachDialog(Project project, boolean managed) { + public RepositoryAttachDialog(Project project, boolean managed, final @Nullable String initialFilter) { super(project, true); myProject = project; myManaged = managed; @@ -107,6 +109,9 @@ public class RepositoryAttachDialog extends DialogWrapper { myCombobox.setEditable(true); final JTextField textField = (JTextField)myCombobox.getEditor().getEditorComponent(); textField.setColumns(50); + if (initialFilter != null) { + textField.setText(initialFilter); + } textField.getDocument().addDocumentListener(new DocumentAdapter() { @Override protected void textChanged(DocumentEvent e) { @@ -153,7 +158,7 @@ public class RepositoryAttachDialog extends DialogWrapper { } } final FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor(); - descriptor.putUserData(FileChooserDialogImpl.PREFER_LAST_OVER_TO_SELECT, Boolean.TRUE); + descriptor.putUserData(FileChooserDialog.PREFER_LAST_OVER_TO_SELECT, Boolean.TRUE); myDirectoryField.addBrowseFolderListener(ProjectBundle.message("file.chooser.directory.for.downloaded.libraries.title"), ProjectBundle.message("file.chooser.directory.for.downloaded.libraries.description"), null, descriptor); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachHandler.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java similarity index 66% rename from plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachHandler.java rename to plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java index 15aaba8a0399..960c9925eeba 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachHandler.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java @@ -13,33 +13,33 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.idea.maven.utils; +package org.jetbrains.idea.maven.utils.library; import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; import com.intellij.notification.Notifications; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.progress.PerformInBackgroundOption; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.JavadocOrderRootType; import com.intellij.openapi.roots.OrderRootType; -import com.intellij.openapi.roots.libraries.Library; +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.LibraryTableAttachHandler; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.*; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.PairProcessor; import com.intellij.util.Processor; import com.intellij.util.SmartList; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.execution.SoutMavenConsole; @@ -49,8 +49,11 @@ import org.jetbrains.idea.maven.project.MavenEmbeddersManager; import org.jetbrains.idea.maven.project.MavenProjectsManager; import org.jetbrains.idea.maven.server.MavenEmbedderWrapper; import org.jetbrains.idea.maven.services.MavenRepositoryServicesManager; +import org.jetbrains.idea.maven.utils.MavenLog; +import org.jetbrains.idea.maven.utils.MavenProcessCanceledException; +import org.jetbrains.idea.maven.utils.MavenProgressIndicator; +import org.jetbrains.idea.maven.utils.RepositoryAttachDialog; -import javax.swing.*; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; @@ -59,93 +62,78 @@ import java.util.*; /** * @author Gregory.Shrago */ -public class RepositoryAttachHandler implements LibraryTableAttachHandler { - public String getLongName() { - return "Attach Classes from Repository..."; - } +public class RepositoryAttachHandler { - public String getShortName() { - return "Classes from Repository..."; - } - - public Icon getIcon() { - return MavenIcons.MAVEN_ICON; - } - - public ActionCallback performAttach(final Project project, - final LibraryEditor libraryEditor, - final @Nullable NullableComputable modelProvider) { - - final RepositoryAttachDialog dialog = new RepositoryAttachDialog(project, false); - dialog.setTitle(getLongName()); + @Nullable + public static NewLibraryConfiguration chooseLibraryAndDownload(final @NotNull Project project, final @Nullable String initialFilter) { + final RepositoryAttachDialog dialog = new RepositoryAttachDialog(project, false, initialFilter); + dialog.setTitle("Attach Classes from Repository..."); dialog.show(); - if (dialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) { - final ActionCallback callback = new ActionCallback(); - final String copyTo = dialog.getDirectoryPath(); - final String coord = dialog.getCoordinateText(); - final boolean attachJavaDoc = dialog.getAttachJavaDoc(); - final boolean attachSources = dialog.getAttachSources(); - final SmartList extraTypes = new SmartList(); - if (attachSources) extraTypes.add(MavenExtraArtifactType.SOURCES); - if (attachJavaDoc) extraTypes.add(MavenExtraArtifactType.DOCS); - resolveLibrary(project, coord, extraTypes, dialog.getRepositories(), true, new Processor>() { - public boolean process(final List artifacts) { + if (dialog.getExitCode() != DialogWrapper.OK_EXIT_CODE) { + return null; + } + + final String copyTo = dialog.getDirectoryPath(); + final String coord = dialog.getCoordinateText(); + final boolean attachJavaDoc = dialog.getAttachJavaDoc(); + final boolean attachSources = dialog.getAttachSources(); + final SmartList extraTypes = new SmartList(); + if (attachSources) extraTypes.add(MavenExtraArtifactType.SOURCES); + if (attachJavaDoc) extraTypes.add(MavenExtraArtifactType.DOCS); + final Ref result = Ref.create(null); + resolveLibrary(project, coord, extraTypes, dialog.getRepositories(), new Processor>() { + public boolean process(final List artifacts) { + final boolean nothingRetrieved = artifacts.isEmpty(); + if (!nothingRetrieved) { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { - replaceLibraryData(project, libraryEditor, artifacts, copyTo); - callback.setDone(); + final List roots = createRoots(artifacts, copyTo); + result.set(new NewLibraryConfiguration(coord, RepositoryLibraryType.getInstance(), new RepositoryLibraryProperties(coord)) { + @Override + public void addRoots(@NotNull LibraryEditor editor) { + editor.addRoots(roots); + } + }); } }); - final boolean nothingRetrieved = artifacts.isEmpty(); - final StringBuilder sb = new StringBuilder(); - final String title; - if (nothingRetrieved) { - title = "No files were downloaded"; - sb.append("for ").append(coord); - } - else { - title = "The following files were downloaded:"; - sb.append("

    "); - for (MavenArtifact each : artifacts) { - sb.append("
  1. "); - sb.append(each.getFile().getName()); - final String scope = each.getScope(); - if (scope != null) { - sb.append(" ("); - sb.append(scope); - sb.append(")"); - } - sb.append("
  2. "); - } - sb.append("
"); - } - if (nothingRetrieved && ModalityState.current().dominates(ModalityState.NON_MODAL)) { - Messages.showErrorDialog(project, sb.toString(), title); - } - else { - Notifications.Bus.notify(new Notification("Repository", title, sb.toString(), - nothingRetrieved ? NotificationType.WARNING : NotificationType.INFORMATION), project); - } - return true; } - }); - return callback; - } - return new ActionCallback.Rejected(); + final StringBuilder sb = new StringBuilder(); + final String title; + if (nothingRetrieved) { + title = "No files were downloaded"; + sb.append("for ").append(coord); + } + else { + title = "The following files were downloaded:"; + sb.append("
    "); + for (MavenArtifact each : artifacts) { + sb.append("
  1. "); + sb.append(each.getFile().getName()); + final String scope = each.getScope(); + if (scope != null) { + sb.append(" ("); + sb.append(scope); + sb.append(")"); + } + sb.append("
  2. "); + } + sb.append("
"); + } + if (nothingRetrieved && ModalityState.current().dominates(ModalityState.NON_MODAL)) { + Messages.showErrorDialog(project, sb.toString(), title); + } + else { + Notifications.Bus.notify(new Notification("Repository", title, sb.toString(), + nothingRetrieved ? NotificationType.WARNING : NotificationType.INFORMATION), project); + } + return true; + } + }); + return result.get(); } - private static void replaceLibraryData(Project project, - LibraryEditor libraryEditor, - Collection artifacts, - String copyTo) { - final String repoUrl = getLocalRepositoryUrl(project); - for (OrderRootType type : OrderRootType.getAllTypes()) { - for (String url : libraryEditor.getUrls(type)) { - if (url.startsWith(repoUrl)) { - libraryEditor.removeRoot(url, type); - } - } - } + private static List createRoots(Collection artifacts, String copyTo) { + final List result = new ArrayList(); final VirtualFileManager manager = VirtualFileManager.getInstance(); for (MavenArtifact each : artifacts) { try { @@ -158,15 +146,19 @@ public class RepositoryAttachHandler implements LibraryTableAttachHandler { } } final String url = VfsUtil.getUrlForLibraryRoot(toFile); - manager.refreshAndFindFileByUrl(url); - if (MavenExtraArtifactType.DOCS.getDefaultClassifier().equals(each.getClassifier())) { - libraryEditor.addRoot(url, JavadocOrderRootType.getInstance()); - } - else if (MavenExtraArtifactType.SOURCES.getDefaultClassifier().equals(each.getClassifier())) { - libraryEditor.addRoot(url, OrderRootType.SOURCES); - } - else { - libraryEditor.addRoot(url, OrderRootType.CLASSES); + final VirtualFile file = manager.refreshAndFindFileByUrl(url); + if (file != null) { + OrderRootType rootType; + if (MavenExtraArtifactType.DOCS.getDefaultClassifier().equals(each.getClassifier())) { + rootType = JavadocOrderRootType.getInstance(); + } + else if (MavenExtraArtifactType.SOURCES.getDefaultClassifier().equals(each.getClassifier())) { + rootType = OrderRootType.SOURCES; + } + else { + rootType = OrderRootType.CLASSES; + } + result.add(new OrderRoot(file, rootType)); } } catch (MalformedURLException e) { @@ -176,11 +168,7 @@ public class RepositoryAttachHandler implements LibraryTableAttachHandler { MavenLog.LOG.warn(e); } } - } - - private static String getLocalRepositoryUrl(Project project) { - File file = MavenProjectsManager.getInstance(project).getGeneralSettings().getEffectiveLocalRepository(); - return VfsUtil.pathToUrl(FileUtil.toSystemIndependentName(file.getPath())); + return result; } public static void searchArtifacts(final Project project, String coord, @@ -273,41 +261,17 @@ public class RepositoryAttachHandler implements LibraryTableAttachHandler { }); } - private static MavenId getMavenId(final String coord) { - final String[] parts = coord.split(":"); - return new MavenId(parts.length > 0 ? parts[0] : null, - parts.length > 1 ? parts[1] : null, - parts.length > 2 ? parts[2] : null); - } - - public static void resolveLibrary(final Project project, - final String coord, - final List extraTypes, - final Collection repositories, - boolean modal, - final Processor> resultProcessor) { + private static void resolveLibrary(final Project project, + final String coord, + final List extraTypes, + final Collection repositories, + final Processor> resultProcessor) { final MavenId mavenId = getMavenId(coord); - final Task task; - if (modal) { - task = new Task.Modal(project, "Maven", false) { - public void run(@NotNull ProgressIndicator indicator) { - doResolveInner(project, mavenId, extraTypes, repositories, resultProcessor, indicator); - } - }; - } - else { - task = new Task.Backgroundable(project, "Maven", false, PerformInBackgroundOption.DEAF) { - public void run(@NotNull ProgressIndicator indicator) { - doResolveInner(project, mavenId, extraTypes, repositories, resultProcessor, indicator); - } - - @Override - public boolean shouldStartInBackground() { - return false; - } - }; - } - + final Task task = new Task.Modal(project, "Maven", false) { + public void run(@NotNull ProgressIndicator indicator) { + doResolveInner(project, mavenId, extraTypes, repositories, resultProcessor, indicator); + } + }; ProgressManager.getInstance().run(task); } @@ -374,4 +338,11 @@ public class RepositoryAttachHandler implements LibraryTableAttachHandler { } return result; } + + public static MavenId getMavenId(final String coord) { + final String[] parts = coord.split(":"); + return new MavenId(parts.length > 0 ? parts[0] : null, + parts.length > 1 ? parts[1] : null, + parts.length > 2 ? parts[2] : null); + } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryEditor.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryEditor.java new file mode 100644 index 000000000000..2cb454c27ba1 --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryEditor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.idea.maven.utils.library; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; +import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent; +import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditorBase; +import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryPropertiesEditorBase; + +/** + * @author nik + */ +public class RepositoryLibraryEditor extends LibraryPropertiesEditorBase { + public RepositoryLibraryEditor(LibraryEditorComponent component, RepositoryLibraryType libraryType) { + super(component, libraryType, null); + } + + @Override + protected void edit() { + final Project project = myEditorComponent.getProject(); + final NewLibraryConfiguration configuration = RepositoryAttachHandler.chooseLibraryAndDownload(project, + myEditorComponent.getProperties().getMavenId()); + if (configuration == null) return; + + final LibraryEditorBase target = (LibraryEditorBase)myEditorComponent.getLibraryEditor(); + target.removeAllRoots(); + target.setName(configuration.getDefaultLibraryName()); + target.setType(myLibraryType); + target.setProperties(configuration.getProperties()); + configuration.addRoots(target); + myEditorComponent.updateRootsTree(); + setModified(); + } + + @Override + public void apply() { + } +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryProperties.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryProperties.java new file mode 100644 index 000000000000..a94149f123c9 --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryProperties.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.idea.maven.utils.library; + +import com.intellij.openapi.roots.libraries.LibraryProperties; +import com.intellij.openapi.util.Comparing; +import com.intellij.util.xmlb.annotations.Attribute; + +/** + * @author nik + */ +public class RepositoryLibraryProperties extends LibraryProperties { + private String myMavenId; + + public RepositoryLibraryProperties() { + } + + public RepositoryLibraryProperties(String mavenId) { + myMavenId = mavenId; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof RepositoryLibraryProperties && Comparing.equal(myMavenId, ((RepositoryLibraryProperties)obj).myMavenId); + } + + @Override + public int hashCode() { + return Comparing.hashcode(myMavenId); + } + + @Override + public RepositoryLibraryProperties getState() { + return this; + } + + @Override + public void loadState(RepositoryLibraryProperties state) { + myMavenId = state.myMavenId; + } + + @Attribute("maven-id") + public String getMavenId() { + return myMavenId; + } + + public void setMavenId(String mavenId) { + myMavenId = mavenId; + } +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryType.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryType.java new file mode 100644 index 000000000000..a53817dde091 --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryLibraryType.java @@ -0,0 +1,78 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.idea.maven.utils.library; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.libraries.LibraryKind; +import com.intellij.openapi.roots.libraries.LibraryType; +import com.intellij.openapi.roots.libraries.NewLibraryConfiguration; +import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent; +import com.intellij.openapi.roots.libraries.ui.LibraryPropertiesEditor; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.idea.maven.utils.MavenIcons; + +import javax.swing.*; + +/** + * @author nik + */ +public class RepositoryLibraryType extends LibraryType { + private static final LibraryKind LIBRARY_KIND = LibraryKind.create("repository"); + + public static RepositoryLibraryType getInstance() { + return EP_NAME.findExtension(RepositoryLibraryType.class); + } + + public RepositoryLibraryType() { + super(LIBRARY_KIND); + } + + @Override + public String getCreateActionName() { + return "From Maven..."; + } + + @Override + public NewLibraryConfiguration createNewLibrary(@NotNull JComponent parentComponent, + @Nullable VirtualFile contextDirectory, + @NotNull Project project) { + return RepositoryAttachHandler.chooseLibraryAndDownload(project, null); + } + + @NotNull + @Override + public RepositoryLibraryProperties createDefaultProperties() { + return new RepositoryLibraryProperties(); + } + + @Override + public LibraryPropertiesEditor createPropertiesEditor(@NotNull LibraryEditorComponent component) { + return new RepositoryLibraryEditor(component, this); + } + + @Override + public String getDescription(@NotNull RepositoryLibraryProperties properties) { + final String mavenIdKey = properties.getMavenId(); + return "Library " + (mavenIdKey != null ? mavenIdKey + " " : "") + "from Maven repository"; + } + + @Override + public Icon getIcon() { + return MavenIcons.MAVEN_ICON; + } +} diff --git a/plugins/maven/src/main/resources/META-INF/plugin.xml b/plugins/maven/src/main/resources/META-INF/plugin.xml index 0f4a23ad65b5..f5c740113dfd 100644 --- a/plugins/maven/src/main/resources/META-INF/plugin.xml +++ b/plugins/maven/src/main/resources/META-INF/plugin.xml @@ -92,7 +92,7 @@ - +