blob: 02e3d688fc6df3fdff35115dfacebd6f2c7e3875 [file] [log] [blame]
/*
* Copyright 2000-2013 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.ide.util.projectWizard;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.highlighter.ModuleFileType;
import com.intellij.ide.highlighter.ProjectFileType;
import com.intellij.openapi.application.ApplicationInfo;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NonNls;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.List;
import static com.intellij.openapi.components.StorageScheme.DIRECTORY_BASED;
/**
* @author Eugene Zhuravlev
* Date: Jan 21, 2004
*/
public class ProjectNameStep extends ModuleWizardStep {
private final NamePathComponent myNamePathComponent;
private final JPanel myPanel;
private final WizardContext myWizardContext;
public ProjectNameStep(WizardContext wizardContext) {
myWizardContext = wizardContext;
myNamePathComponent = new NamePathComponent(IdeBundle.message("label.project.name"), IdeBundle.message("label.component.file.location",
StringUtil.capitalize(myWizardContext.getPresentationName())), 'a', 'l',
IdeBundle.message("title.select.project.file.directory", myWizardContext.getPresentationName()),
IdeBundle.message("description.select.project.file.directory", myWizardContext.getPresentationName()));
myPanel = new JPanel(new GridBagLayout());
myPanel.setBorder(BorderFactory.createEtchedBorder());
ApplicationInfo info = ApplicationManager.getApplication().getComponent(ApplicationInfo.class);
String appName = info.getVersionName();
myPanel.add(new JLabel(IdeBundle.message("label.please.enter.project.name", appName, wizardContext.getPresentationName())),
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(8, 10, 8, 10), 0, 0));
myPanel.add(myNamePathComponent, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(8, 10, 8, 10), 0, 0));
}
public JComponent getPreferredFocusedComponent() {
return myNamePathComponent.getNameComponent();
}
public String getHelpId() {
return "reference.dialogs.new.project.import.name";
}
public JComponent getComponent() {
return myPanel;
}
public void updateStep() {
super.updateStep();
myNamePathComponent.setPath(FileUtil.toSystemDependentName(myWizardContext.getProjectFileDirectory()));
String name = myWizardContext.getProjectName();
if (name == null) {
List<String> components = StringUtil.split(FileUtil.toSystemIndependentName(myWizardContext.getProjectFileDirectory()), "/");
if (!components.isEmpty()) {
name = components.get(components.size()-1);
}
}
myNamePathComponent.setNameValue(name);
if (name != null) {
myNamePathComponent.getNameComponent().setSelectionStart(0);
myNamePathComponent.getNameComponent().setSelectionEnd(name.length());
}
}
public void updateDataModel() {
myWizardContext.setProjectName(getProjectName());
myWizardContext.setProjectFileDirectory(getProjectFileDirectory());
}
public Icon getIcon() {
return myWizardContext.getStepIcon();
}
public boolean validate() throws ConfigurationException {
String name = myNamePathComponent.getNameValue();
if (name.length() == 0) {
final ApplicationInfo info = ApplicationManager.getApplication().getComponent(ApplicationInfo.class);
throw new ConfigurationException(IdeBundle.message("prompt.new.project.file.name", info.getVersionName(), myWizardContext.getPresentationName()));
}
final String projectFileDirectory = getProjectFileDirectory();
if (projectFileDirectory.length() == 0) {
throw new ConfigurationException(IdeBundle.message("prompt.enter.project.file.location", myWizardContext.getPresentationName()));
}
final boolean shouldPromptCreation = myNamePathComponent.isPathChangedByUser();
if (!ProjectWizardUtil.createDirectoryIfNotExists(IdeBundle.message("directory.project.file.directory",myWizardContext.getPresentationName()), projectFileDirectory, shouldPromptCreation)) {
return false;
}
boolean shouldContinue = true;
final String path = myWizardContext.isCreatingNewProject() && myWizardContext.getProjectStorageFormat() == DIRECTORY_BASED
? getProjectFileDirectory() + "/" + Project.DIRECTORY_STORE_FOLDER : getProjectFilePath();
final File projectFile = new File(path);
if (projectFile.exists()) {
final String title = myWizardContext.isCreatingNewProject()
? IdeBundle.message("title.new.project")
: IdeBundle.message("title.add.module");
final String message = myWizardContext.isCreatingNewProject() && myWizardContext.getProjectStorageFormat() == DIRECTORY_BASED
? IdeBundle.message("prompt.overwrite.project.folder",
Project.DIRECTORY_STORE_FOLDER, projectFile.getParentFile().getAbsolutePath())
: IdeBundle.message("prompt.overwrite.project.file",
projectFile.getAbsolutePath(), myWizardContext.getPresentationName());
int answer = Messages.showYesNoDialog(message, title, Messages.getQuestionIcon());
shouldContinue = answer == Messages.YES;
}
return shouldContinue;
}
@NonNls
public String getProjectFilePath() {
return getProjectFileDirectory() + "/" + myNamePathComponent.getNameValue()/*myTfProjectName.getText().trim()*/ +
(myWizardContext.getProject() == null ? ProjectFileType.DOT_DEFAULT_EXTENSION : ModuleFileType.DOT_DEFAULT_EXTENSION);
}
public String getProjectFileDirectory() {
return FileUtil.toSystemIndependentName(myNamePathComponent.getPath());
}
public String getProjectName() {
return myNamePathComponent.getNameValue();
}
@Override
public String getName() {
return "Name";
}
public boolean isStepVisible() {
final ProjectBuilder builder = myWizardContext.getProjectBuilder();
if (builder != null && builder.isUpdate()) return false;
return super.isStepVisible();
}
}