mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
introduced new library type for libraries downloaded from Maven repository, 'Attach from repository' button in library editor is removed
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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<LibraryVersionPropertie
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NewLibraryConfiguration createNewLibrary(@NotNull JComponent parentComponent,
|
||||
@Nullable VirtualFile contextDirectory,
|
||||
@NotNull Project project) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public DownloadableLibraryDescription getLibraryDescription() {
|
||||
return myLibraryDescription;
|
||||
|
||||
+14
-48
@@ -17,11 +17,14 @@ package com.intellij.framework.library.impl;
|
||||
|
||||
import com.intellij.facet.impl.ui.libraries.DownloadingOptionsDialog;
|
||||
import com.intellij.facet.impl.ui.libraries.LibraryDownloadSettings;
|
||||
import com.intellij.framework.library.*;
|
||||
import com.intellij.framework.library.DownloadableLibraryDescription;
|
||||
import com.intellij.framework.library.DownloadableLibraryType;
|
||||
import com.intellij.framework.library.FrameworkLibraryVersion;
|
||||
import com.intellij.framework.library.LibraryVersionProperties;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent;
|
||||
import com.intellij.openapi.roots.libraries.ui.LibraryPropertiesEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryPropertiesEditorBase;
|
||||
import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditorBase;
|
||||
import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
|
||||
@@ -29,46 +32,26 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.download.DownloadableFileSetVersions;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class DownloadableLibraryEditor extends LibraryPropertiesEditor {
|
||||
private JPanel myMainPanel;
|
||||
private JLabel myDescriptionLabel;
|
||||
private JButton myChangeVersionButton;
|
||||
private boolean myModified;
|
||||
public class DownloadableLibraryPropertiesEditor extends LibraryPropertiesEditorBase<LibraryVersionProperties, DownloadableLibraryType> {
|
||||
private final DownloadableLibraryDescription myDescription;
|
||||
private final LibraryEditorComponent<LibraryVersionProperties> myEditorComponent;
|
||||
private final DownloadableLibraryType myLibraryType;
|
||||
private String myCurrentVersionString;
|
||||
|
||||
public DownloadableLibraryEditor(final DownloadableLibraryDescription description,
|
||||
final LibraryEditorComponent<LibraryVersionProperties> editorComponent,
|
||||
DownloadableLibraryType libraryType) {
|
||||
public DownloadableLibraryPropertiesEditor(DownloadableLibraryDescription description,
|
||||
LibraryEditorComponent<LibraryVersionProperties> 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<FrameworkLibraryVersion>() {
|
||||
@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();
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -54,6 +54,6 @@ public class DownloadableLibraryServiceImpl extends DownloadableLibraryService {
|
||||
public LibraryPropertiesEditor createDownloadableLibraryEditor(@NotNull DownloadableLibraryDescription description,
|
||||
@NotNull LibraryEditorComponent<LibraryVersionProperties> editorComponent,
|
||||
@NotNull DownloadableLibraryType libraryType) {
|
||||
return new DownloadableLibraryEditor(description, editorComponent, libraryType);
|
||||
return new DownloadableLibraryPropertiesEditor(description, editorComponent, libraryType);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+8
-11
@@ -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<Library> {
|
||||
|
||||
@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<LibraryTable> tables = Arrays.asList(myRootModel.getModuleLibraryTable(),
|
||||
|
||||
+1
@@ -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;
|
||||
|
||||
-14
@@ -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<OrderRoot> 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<OrderRoot> roots) {
|
||||
if (roots.size() >= 1) {
|
||||
return FileUtil.getNameWithoutExtension(PathUtil.getFileName(roots.get(0).getFile().getPath()));
|
||||
}
|
||||
return "Unnamed";
|
||||
}
|
||||
|
||||
public static Predicate<Library> getNotAddedLibrariesCondition(final ModuleRootModel rootModel) {
|
||||
final OrderEntry[] orderEntries = rootModel.getOrderEntries();
|
||||
final Set<Library> result = new HashSet<Library>(orderEntries.length);
|
||||
|
||||
+24
-38
@@ -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<? extends RootDetector> rootDetectors = componentDescriptor.getRootDetectors();
|
||||
final List<OrderRoot> 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<LibraryType<?>> suitableTypes = new ArrayList<LibraryType<?>>();
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.framework.library.impl.DownloadableLibraryEditor">
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryPropertiesEditorBase">
|
||||
<grid id="27dc6" binding="myMainPanel" layout-manager="GridLayoutManager" row-count="1" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
@@ -21,12 +21,12 @@
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
<component id="979f7" class="javax.swing.JButton" binding="myChangeVersionButton">
|
||||
<component id="979f7" class="javax.swing.JButton" binding="myEditButton">
|
||||
<constraints>
|
||||
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Change &Version..."/>
|
||||
<text value="&Edit..."/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
+87
@@ -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<P extends LibraryProperties, T extends LibraryType<P>> extends LibraryPropertiesEditor {
|
||||
private JPanel myMainPanel;
|
||||
private JLabel myDescriptionLabel;
|
||||
private JButton myEditButton;
|
||||
private boolean myModified;
|
||||
protected final LibraryEditorComponent<P> myEditorComponent;
|
||||
protected final T myLibraryType;
|
||||
|
||||
protected LibraryPropertiesEditorBase(final LibraryEditorComponent<P> 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();
|
||||
}
|
||||
}
|
||||
+7
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
-37
@@ -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;
|
||||
}
|
||||
}
|
||||
+97
@@ -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<? extends RootDetector> rootDetectors = descriptor.getRootDetectors();
|
||||
final List<OrderRoot> 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 <P extends LibraryProperties<?>> NewLibraryConfiguration doCreate(final LibraryType<P> type, final String name, final List<OrderRoot> 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<OrderRoot> roots) {
|
||||
if (roots.size() >= 1) {
|
||||
return FileUtil.getNameWithoutExtension(PathUtil.getFileName(roots.get(0).getFile().getPath()));
|
||||
}
|
||||
return "Unnamed";
|
||||
}
|
||||
}
|
||||
@@ -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<P extends LibraryProperties> 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();
|
||||
|
||||
|
||||
+15
-3
@@ -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);
|
||||
}
|
||||
+1
-3
@@ -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;
|
||||
+4
@@ -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<P extends LibraryProperties> {
|
||||
VirtualFile getExistingRootDirectory();
|
||||
|
||||
void updateRootsTree();
|
||||
|
||||
@Nullable
|
||||
Project getProject();
|
||||
}
|
||||
|
||||
+1
-1
@@ -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;
|
||||
+1
-1
@@ -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;
|
||||
+1
-1
@@ -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;
|
||||
@@ -114,8 +114,8 @@
|
||||
<applicationService serviceInterface="com.intellij.openapi.roots.libraries.LibraryDetectionManager"
|
||||
serviceImplementation="com.intellij.openapi.roots.impl.libraries.LibraryDetectionManagerImpl"/>
|
||||
|
||||
<applicationService serviceInterface="com.intellij.openapi.roots.libraries.LibraryTypeRegistry"
|
||||
serviceImplementation="com.intellij.openapi.roots.impl.libraries.LibraryTypeRegistryImpl"/>
|
||||
<applicationService serviceInterface="com.intellij.openapi.roots.libraries.LibraryTypeService"
|
||||
serviceImplementation="com.intellij.openapi.roots.impl.libraries.LibraryTypeServiceImpl"/>
|
||||
|
||||
<applicationService serviceInterface="com.intellij.usageView.UsageTreeColorsScheme"
|
||||
serviceImplementation="com.intellij.usageView.UsageTreeColorsScheme"/>
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+8
-3
@@ -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);
|
||||
|
||||
+104
-133
@@ -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<Library.ModifiableModel> 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<MavenExtraArtifactType> extraTypes = new SmartList<MavenExtraArtifactType>();
|
||||
if (attachSources) extraTypes.add(MavenExtraArtifactType.SOURCES);
|
||||
if (attachJavaDoc) extraTypes.add(MavenExtraArtifactType.DOCS);
|
||||
resolveLibrary(project, coord, extraTypes, dialog.getRepositories(), true, new Processor<List<MavenArtifact>>() {
|
||||
public boolean process(final List<MavenArtifact> 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<MavenExtraArtifactType> extraTypes = new SmartList<MavenExtraArtifactType>();
|
||||
if (attachSources) extraTypes.add(MavenExtraArtifactType.SOURCES);
|
||||
if (attachJavaDoc) extraTypes.add(MavenExtraArtifactType.DOCS);
|
||||
final Ref<NewLibraryConfiguration> result = Ref.create(null);
|
||||
resolveLibrary(project, coord, extraTypes, dialog.getRepositories(), new Processor<List<MavenArtifact>>() {
|
||||
public boolean process(final List<MavenArtifact> 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<OrderRoot> 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("<ol>");
|
||||
for (MavenArtifact each : artifacts) {
|
||||
sb.append("<li>");
|
||||
sb.append(each.getFile().getName());
|
||||
final String scope = each.getScope();
|
||||
if (scope != null) {
|
||||
sb.append(" (");
|
||||
sb.append(scope);
|
||||
sb.append(")");
|
||||
}
|
||||
sb.append("</li>");
|
||||
}
|
||||
sb.append("</ol>");
|
||||
}
|
||||
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("<ol>");
|
||||
for (MavenArtifact each : artifacts) {
|
||||
sb.append("<li>");
|
||||
sb.append(each.getFile().getName());
|
||||
final String scope = each.getScope();
|
||||
if (scope != null) {
|
||||
sb.append(" (");
|
||||
sb.append(scope);
|
||||
sb.append(")");
|
||||
}
|
||||
sb.append("</li>");
|
||||
}
|
||||
sb.append("</ol>");
|
||||
}
|
||||
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<MavenArtifact> 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<OrderRoot> createRoots(Collection<MavenArtifact> artifacts, String copyTo) {
|
||||
final List<OrderRoot> result = new ArrayList<OrderRoot>();
|
||||
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<MavenExtraArtifactType> extraTypes,
|
||||
final Collection<MavenRepositoryInfo> repositories,
|
||||
boolean modal,
|
||||
final Processor<List<MavenArtifact>> resultProcessor) {
|
||||
private static void resolveLibrary(final Project project,
|
||||
final String coord,
|
||||
final List<MavenExtraArtifactType> extraTypes,
|
||||
final Collection<MavenRepositoryInfo> repositories,
|
||||
final Processor<List<MavenArtifact>> 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);
|
||||
}
|
||||
}
|
||||
+52
@@ -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<RepositoryLibraryProperties, RepositoryLibraryType> {
|
||||
public RepositoryLibraryEditor(LibraryEditorComponent<RepositoryLibraryProperties> 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() {
|
||||
}
|
||||
}
|
||||
+63
@@ -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<RepositoryLibraryProperties> {
|
||||
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;
|
||||
}
|
||||
}
|
||||
+78
@@ -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<RepositoryLibraryProperties> {
|
||||
private static final LibraryKind<RepositoryLibraryProperties> 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<RepositoryLibraryProperties> 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;
|
||||
}
|
||||
}
|
||||
@@ -92,7 +92,7 @@
|
||||
<applicationService serviceImplementation="org.jetbrains.idea.maven.dom.converters.repositories.MavenRepositoriesProvider"/>
|
||||
|
||||
<typedHandler implementation="org.jetbrains.idea.maven.dom.code.MavenTypedHandlerDelegate"/>
|
||||
<libraryTable.attachHandler implementation="org.jetbrains.idea.maven.utils.RepositoryAttachHandler"/>
|
||||
<library.type implementation="org.jetbrains.idea.maven.utils.library.RepositoryLibraryType"/>
|
||||
<backspaceHandlerDelegate implementation="org.jetbrains.idea.maven.dom.code.MavenBackspaceHandlerDelegate"/>
|
||||
|
||||
<intentionAction>
|
||||
|
||||
Reference in New Issue
Block a user