public static void importConfigsTo(@NotNull String newConfigPath) { ConfigImportSettings settings = getConfigImportSettings(); File newConfigDir = new File(newConfigPath); File oldConfigDir = findOldConfigDir(newConfigDir, settings.getCustomPathsSelector()); do { ImportOldConfigsPanel dialog = new ImportOldConfigsPanel(oldConfigDir, settings); dialog.setModalityType(Dialog.ModalityType.TOOLKIT_MODAL); AppUIUtil.updateWindowIcon(dialog); dialog.setVisible(true); if (dialog.isImportEnabled()) { File installationHome = dialog.getSelectedFile(); oldConfigDir = getOldConfigDir(installationHome, settings); if (!validateOldConfigDir(installationHome, oldConfigDir, settings)) { continue; } assert oldConfigDir != null; doImport(newConfigDir, oldConfigDir, settings, installationHome); settings.importFinished(newConfigPath); System.setProperty(CONFIG_IMPORTED_IN_CURRENT_SESSION_KEY, Boolean.TRUE.toString()); } break; } while (true); }
@SuppressWarnings({"HardCodedStringLiteral"}) private static File[] getLaunchFilesCandidates( @NotNull final File instHome, @NotNull final ConfigImportSettings settings) { final File bin = new File(instHome, BIN_FOLDER); final List<File> files = new ArrayList<File>(); if (SystemInfo.isMac) { // Info.plist files.add(new File(new File(instHome, "Contents"), "Info.plist")); files.add(new File(new File(new File(bin, "idea.app"), "Contents"), "Info.plist")); files.add(new File(new File(new File(instHome, "idea.app"), "Contents"), "Info.plist")); } // idea.properties files.add(new File(bin, "idea.properties")); // other binary scripts final String executableName = StringUtil.toLowerCase(settings.getExecutableName()); // * defaults: addLaunchExecutableScriptsCandidates(files, executableName, bin); // * customized files: files.addAll(settings.getCustomLaunchFilesCandidates(instHome, bin)); // * legacy support: if (!"idea".equals(executableName)) { // for compatibility with some platform-base IDEs with wrong executable names addLaunchExecutableScriptsCandidates(files, "idea", bin); } return files.toArray(new File[files.size()]); }
public static boolean isInstallationHomeOrConfig( @NotNull final String installationHome, @NotNull final ConfigImportSettings settings) { if (new File(installationHome, OPTIONS_XML).exists()) return true; if (new File(installationHome, CONFIG_RELATED_PATH + OPTIONS_XML).exists()) return true; if (!new File(installationHome, BIN_FOLDER).exists()) { return false; } File libFolder = new File(installationHome, "lib"); boolean quickTest = false; String[] mainJarNames = settings.getMainJarNames(); for (String name : mainJarNames) { String mainJarName = StringUtil.toLowerCase(name) + ".jar"; //noinspection HardCodedStringLiteral if (new File(libFolder, mainJarName).exists()) { quickTest = true; break; } } if (!quickTest) return false; File[] files = getLaunchFilesCandidates(new File(installationHome), settings); for (File file : files) { if (file.exists()) return true; } return false; }
private static boolean validateOldConfigDir( @Nullable File installationHome, @Nullable File oldConfigDir, @NotNull ConfigImportSettings settings) { if (oldConfigDir == null) { if (installationHome != null) { JOptionPane.showMessageDialog( JOptionPane.getRootFrame(), ApplicationBundle.message( "error.invalid.installation.home", installationHome.getAbsolutePath(), settings.getProductName(ThreeState.YES))); } return false; } if (!oldConfigDir.exists()) { JOptionPane.showMessageDialog( JOptionPane.getRootFrame(), ApplicationBundle.message("error.no.settings.path", oldConfigDir.getAbsolutePath()), ApplicationBundle.message("title.settings.import.failed"), JOptionPane.WARNING_MESSAGE); return false; } return true; }