From 8c8c035030934d0fa29bef4b6d546d4e568a073f Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 10 Feb 2015 17:52:13 +0300 Subject: [PATCH] IDEA-101831 Add opportunity create new project from VCSs. When user create new project and has op... --- java/idea-ui/idea-ui.iml | 4 +- .../vcs/checkout/NewProjectFromVCSGroup.java | 54 +++++++++++++++++++ .../vcs/checkout/ProjectCheckoutListener.java | 4 ++ .../openapi/vcs/checkout/CheckoutAction.java | 9 ++-- .../vcs/checkout/CheckoutActionGroup.java | 8 ++- resources/src/idea/RichPlatformActions.xml | 1 + 6 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 java/idea-ui/src/com/intellij/openapi/vcs/checkout/NewProjectFromVCSGroup.java diff --git a/java/idea-ui/idea-ui.iml b/java/idea-ui/idea-ui.iml index 4a549c503788..2a6932c91115 100644 --- a/java/idea-ui/idea-ui.iml +++ b/java/idea-ui/idea-ui.iml @@ -13,6 +13,6 @@ + - - + \ No newline at end of file diff --git a/java/idea-ui/src/com/intellij/openapi/vcs/checkout/NewProjectFromVCSGroup.java b/java/idea-ui/src/com/intellij/openapi/vcs/checkout/NewProjectFromVCSGroup.java new file mode 100644 index 000000000000..2c8d75704317 --- /dev/null +++ b/java/idea-ui/src/com/intellij/openapi/vcs/checkout/NewProjectFromVCSGroup.java @@ -0,0 +1,54 @@ +/* + * Copyright 2000-2015 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.vcs.checkout; + +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vcs.CheckoutProvider; +import com.intellij.openapi.vcs.VcsKey; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.platform.PlatformProjectOpenProcessor; +import org.jetbrains.annotations.NotNull; + +import java.io.File; + +public class NewProjectFromVCSGroup extends CheckoutActionGroup { + + @NotNull + @Override + protected AnAction createAction(CheckoutProvider provider) { + return new CheckoutAction(provider) { + @Override + protected CheckoutProvider.Listener getListener(Project project) { + return new CheckoutProvider.Listener() { + @Override + public void directoryCheckedOut(File directory, VcsKey vcs) { + final VirtualFile dir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(directory); + if (dir != null) { + PlatformProjectOpenProcessor.getInstance().doOpenProject(dir, null, false); + } + } + + @Override + public void checkoutCompleted() { + + } + }; + } + }; + } +} diff --git a/java/idea-ui/src/com/intellij/openapi/vcs/checkout/ProjectCheckoutListener.java b/java/idea-ui/src/com/intellij/openapi/vcs/checkout/ProjectCheckoutListener.java index f7bc32e0be00..2621e2461659 100644 --- a/java/idea-ui/src/com/intellij/openapi/vcs/checkout/ProjectCheckoutListener.java +++ b/java/idea-ui/src/com/intellij/openapi/vcs/checkout/ProjectCheckoutListener.java @@ -32,6 +32,10 @@ import java.io.FilenameFilter; * @author yole */ public class ProjectCheckoutListener implements CheckoutListener { + + public ProjectCheckoutListener() { + } + @Override public boolean processCheckedOutDirectory(Project project, File directory) { File[] files = directory.listFiles((FilenameFilter) new GlobFilenameFilter("*" + ProjectFileType.DOT_DEFAULT_EXTENSION)); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutAction.java index fbedef497159..ff41a13a19fd 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutAction.java @@ -18,10 +18,9 @@ package com.intellij.openapi.vcs.checkout; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.vcs.CheckoutProvider; import com.intellij.openapi.vcs.ProjectLevelVcsManager; @@ -35,7 +34,11 @@ public class CheckoutAction extends AnAction implements DumbAware { public void actionPerformed(AnActionEvent e) { Project project = e.getData(CommonDataKeys.PROJECT); project = (project == null) ? ProjectManager.getInstance().getDefaultProject() : project; - myProvider.doCheckout(project, ProjectLevelVcsManager.getInstance(project).getCompositeCheckoutListener()); + myProvider.doCheckout(project, getListener(project)); + } + + protected CheckoutProvider.Listener getListener(Project project) { + return ProjectLevelVcsManager.getInstance(project).getCompositeCheckoutListener(); } public void update(AnActionEvent e) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutActionGroup.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutActionGroup.java index 926e5cced906..aef225849eec 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutActionGroup.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutActionGroup.java @@ -35,8 +35,14 @@ public class CheckoutActionGroup extends ComputableActionGroup.Simple { Arrays.sort(providers, new CheckoutProvider.CheckoutProviderComparator()); AnAction[] children = new AnAction[providers.length]; for (int i = 0; i < providers.length; i++) { - children[i] = new CheckoutAction(providers[i]); + CheckoutProvider provider = providers[i]; + children[i] = createAction(provider); } return children; } + + @NotNull + protected AnAction createAction(CheckoutProvider provider) { + return new CheckoutAction(provider); + } } diff --git a/resources/src/idea/RichPlatformActions.xml b/resources/src/idea/RichPlatformActions.xml index adb93ecf9502..3ba8f55e5aaa 100644 --- a/resources/src/idea/RichPlatformActions.xml +++ b/resources/src/idea/RichPlatformActions.xml @@ -56,6 +56,7 @@ +