Java tutorial
/* * Copyright 2000-2009 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.community.intellij.plugins.communitycase.actions; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsDirectoryMapping; import com.intellij.openapi.vfs.VirtualFile; import org.community.intellij.plugins.communitycase.Util; import org.community.intellij.plugins.communitycase.Vcs; import org.community.intellij.plugins.communitycase.commands.Command; import org.community.intellij.plugins.communitycase.commands.HandlerUtil; import org.community.intellij.plugins.communitycase.commands.LineHandler; import org.community.intellij.plugins.communitycase.i18n.Bundle; import org.community.intellij.plugins.communitycase.ui.UiUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Initialize repository action */ public class Init extends DumbAwareAction { /** * {@inheritDoc} */ public void actionPerformed(final AnActionEvent e) { final Project project = e.getData(PlatformDataKeys.PROJECT); if (project == null) { return; } FileChooserDescriptor fcd = new FileChooserDescriptor(false, true, false, false, false, false); fcd.setShowFileSystemRoots(true); fcd.setTitle(Bundle.getString("init.destination.directory.title")); fcd.setDescription(Bundle.getString("init.destination.directory.description")); fcd.setHideIgnored(false); final VirtualFile baseDir = project.getBaseDir(); final VirtualFile[] files = FileChooser.chooseFiles(project, fcd, baseDir); if (files.length == 0) { return; } final VirtualFile root = files[0]; if (Util.isUnder(root)) { final int v = Messages.showYesNoDialog(project, Bundle.message("init.warning.already.under.git", StringUtil.escapeXml(root.getPresentableUrl())), Bundle.getString("init.warning.title"), Messages.getWarningIcon()); if (v != 0) { return; } } LineHandler h = new LineHandler(project, root, Command.INIT); h.setRemote(true); HandlerUtil.doSynchronously(h, Bundle.getString("initializing.title"), h.printableCommandLine()); if (!h.errors().isEmpty()) { UiUtil.showOperationErrors(project, h.errors(), " init"); return; } int rc = Messages.showYesNoDialog(project, Bundle.getString("init.add.root.message"), Bundle.getString("init.add.root.title"), Messages.getQuestionIcon()); if (rc != 0) { return; } final String path = root.equals(baseDir) ? "" : root.getPath(); Vcs.getInstance(project) .runInBackground(new Task.Backgroundable(project, Bundle.getString("common.refreshing")) { public void run(@NotNull ProgressIndicator indicator) { refreshAndConfigureVcsMappings(project, root, path); } }); } public static void refreshAndConfigureVcsMappings(final Project project, final VirtualFile root, final String path) { root.refresh(false, false); ProjectLevelVcsManager vcs = ProjectLevelVcsManager.getInstance(project); final List<VcsDirectoryMapping> vcsDirectoryMappings = new ArrayList<VcsDirectoryMapping>( vcs.getDirectoryMappings()); VcsDirectoryMapping mapping = new VcsDirectoryMapping(path, Vcs.getInstance(project).getName()); for (int i = 0; i < vcsDirectoryMappings.size(); i++) { final VcsDirectoryMapping m = vcsDirectoryMappings.get(i); if (m.getDirectory().equals(path)) { if (m.getVcs().length() == 0) { vcsDirectoryMappings.set(i, mapping); mapping = null; break; } else if (m.getVcs().equals(mapping.getVcs())) { mapping = null; break; } } } if (mapping != null) { vcsDirectoryMappings.add(mapping); } vcs.setDirectoryMappings(vcsDirectoryMappings); vcs.updateActiveVcss(); Util.refreshFiles(project, Collections.singleton(root)); } /** * {@inheritDoc} */ @Override public void update(AnActionEvent e) { final Project project = e.getData(PlatformDataKeys.PROJECT); Presentation presentation = e.getPresentation(); if (project == null) { presentation.setEnabled(false); presentation.setVisible(false); return; } presentation.setEnabled(true); presentation.setVisible(true); } }