/* * 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 com.intellij.openapi.roots.ui.configuration.actions; import com.intellij.ide.util.newProjectWizard.AddModuleWizard; import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.roots.ui.configuration.DefaultModulesProvider; import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator; import com.intellij.openapi.vfs.VirtualFile; import consulo.annotations.RequiredDispatchThread; import consulo.ide.newProject.NewProjectDialog; import consulo.ide.newProject.actions.NewProjectAction; import consulo.moduleImport.ModuleImportContext; import consulo.moduleImport.ModuleImportProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; /** * @author Eugene Zhuravlev * Date: Jan 5, 2004 */ public class NewModuleAction extends AnAction implements DumbAware { public NewModuleAction() { super(ProjectBundle.message("module.new.action"), ProjectBundle.message("module.new.action.description"), null); } @Override @RequiredDispatchThread public void actionPerformed(@NotNull AnActionEvent e) { final Project project = getEventProject(e); if (project == null) { return; } final VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE); VirtualFile moduleDir = selectModuleDirectory(project, virtualFile); if(moduleDir == null) { return; } NewProjectDialog dialog = new NewProjectDialog(project, moduleDir); if (dialog.showAndGet()) { NewProjectAction.doCreate(dialog.getProjectPanel(), project, moduleDir); } } private static VirtualFile selectModuleDirectory(Project project, VirtualFile virtualFile) { final ModuleManager moduleManager = ModuleManager.getInstance(project); FileChooserDescriptor fileChooserDescriptor = new FileChooserDescriptor(false, true, false, false, false, false) { @Override @RequiredDispatchThread public boolean isFileSelectable(VirtualFile file) { if (!super.isFileSelectable(file)) { return false; } for (Module module : moduleManager.getModules()) { VirtualFile moduleDir = module.getModuleDir(); if (moduleDir != null && moduleDir.equals(file)) { return false; } } return true; } }; fileChooserDescriptor.setTitle(ProjectBundle.message("choose.module.home")); return FileChooser.chooseFile(fileChooserDescriptor, project, virtualFile != null && virtualFile.isDirectory() ? virtualFile : null); } @Nullable @SuppressWarnings("unchecked") public static Module createModuleFromWizard(Project project, @Nullable Object dataFromContext, AddModuleWizard wizard) { final ModuleImportProvider importProvider = wizard.getImportProvider(); if (importProvider instanceof ModuleBuilder) { final ModuleBuilder moduleBuilder = (ModuleBuilder)importProvider; if (moduleBuilder.getName() == null) { moduleBuilder.setName(wizard.getProjectName()); } if (moduleBuilder.getModuleDirPath() == null) { moduleBuilder.setModuleDirPath(wizard.getModuleDirPath()); } } if (!importProvider.validate(project, project)) { return null; } Module module; if (importProvider instanceof ModuleBuilder) { module = ((ModuleBuilder)importProvider).commitModule(project, null); return module; } else { ModuleImportContext context = wizard.getWizardContext().getModuleImportContext(importProvider); List<Module> modules = importProvider.commit(context, project, null, DefaultModulesProvider.createForProject(project), null); if (context.isOpenProjectSettingsAfter()) { ModulesConfigurator.showDialog(project, null, null); } module = modules.isEmpty() ? null : modules.get(0); } project.save(); return module; } @RequiredDispatchThread @Override public void update(@NotNull AnActionEvent e) { super.update(e); e.getPresentation().setEnabled(e.getProject() != null); } }