/* * Copyright 2000-2014 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.projectWizard.NewProjectWizard; import com.intellij.ide.util.newProjectWizard.AbstractProjectWizard; import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.ide.util.projectWizard.ProjectBuilder; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.module.Module; 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 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 public void actionPerformed(AnActionEvent e) { final Project project = getEventProject(e); if (project == null) { return; } Object dataFromContext = prepareDataFromContext(e); String defaultPath = null; final VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE); if (virtualFile != null && virtualFile.isDirectory()) { defaultPath = virtualFile.getPath(); } NewProjectWizard wizard = new NewProjectWizard(project, new DefaultModulesProvider(project), defaultPath); if (wizard.showAndGet()) { createModuleFromWizard(project, dataFromContext, wizard); } } @Nullable public Module createModuleFromWizard(Project project, @Nullable Object dataFromContext, AbstractProjectWizard wizard) { final ProjectBuilder builder = wizard.getProjectBuilder(); if (builder instanceof ModuleBuilder) { final ModuleBuilder moduleBuilder = (ModuleBuilder)builder; if (moduleBuilder.getName() == null) { moduleBuilder.setName(wizard.getProjectName()); } if (moduleBuilder.getModuleFilePath() == null) { moduleBuilder.setModuleFilePath(wizard.getModuleFilePath()); } } if (!builder.validate(project, project)) { return null; } Module module; if (builder instanceof ModuleBuilder) { module = ((ModuleBuilder) builder).commitModule(project, null); if (module != null) { processCreatedModule(module, dataFromContext); } return module; } else { List<Module> modules = builder.commit(project, null, new DefaultModulesProvider(project)); if (builder.isOpenProjectSettingsAfter()) { ModulesConfigurator.showDialog(project, null, null); } module = modules == null || modules.isEmpty() ? null : modules.get(0); } project.save(); return module; } @Nullable protected Object prepareDataFromContext(final AnActionEvent e) { return null; } protected void processCreatedModule(final Module module, @Nullable final Object dataFromContext) { } @Override public void update(AnActionEvent e) { super.update(e); e.getPresentation().setEnabled(getEventProject(e) != null); } }