package org.fandev.module.wizard.ui; import com.intellij.ide.util.BrowseFilesListener; import com.intellij.ide.util.projectWizard.JdkChooserPanel; import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkType; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.options.ConfigurationException; import com.intellij.projectImport.ProjectImportWizardStep; import com.intellij.ui.FieldPanel; import org.fandev.lang.fan.FanBundle; import org.fandev.lang.fan.FanFileType; import org.fandev.sdk.FanSdkType; import org.fandev.module.wizard.FanProjectBuilder; import org.fandev.utils.TextUtil; import org.fandev.utils.VirtualFileUtil; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; /** * Date: Sep 20, 2009 * Time: 11:06:00 PM * * @author Dror Bereznitsky */ public class FanProjectImportStep extends ProjectImportWizardStep { protected JPanel myMainPanel; private JPanel buildScriptPathPanel; private JTextField buildScriptPathField; private JdkChooserPanel sdkChooserPanel; private static final Logger logger = Logger.getInstance("Project import"); public FanProjectImportStep(final WizardContext wizardContext) { super(wizardContext); } public JComponent getComponent() { final Project project = getWizardContext().getProject(); myMainPanel = new JPanel(new BorderLayout()); buildScriptPathPanel = new JPanel(new GridLayout(1, 1)); // Script path buildScriptPathField = new JTextField(); final FileChooserDescriptor fileChooser = new FileChooserDescriptor(true, false, false, false, false, false) { public boolean isFileSelectable(final VirtualFile file) { return file.getFileType() instanceof FanFileType; } }; if (!getWizardContext().isCreatingNewProject()) { fileChooser.setRoot(project.getBaseDir()); } final BrowseFilesListener scriptBrowseListener = new BrowseFilesListener(buildScriptPathField, FanBundle.message("build.script.path"), FanBundle.message("build.script.path.description"), fileChooser) { @Override public void actionPerformed(final ActionEvent e) { super.actionPerformed(e); } }; final FieldPanel scriptFieldPanel = new FieldPanel(buildScriptPathField, FanBundle.message("build.script.path"), null, scriptBrowseListener, null); buildScriptPathPanel.add(scriptFieldPanel); myMainPanel.add(buildScriptPathPanel, BorderLayout.PAGE_START); final JPanel sdkPanel = new JPanel(new BorderLayout()); final JLabel label = new JLabel(FanBundle.message("module.fan.select.sdk")); sdkChooserPanel = new JdkChooserPanel(project); sdkChooserPanel.setAllowedJdkTypes(new SdkType[]{FanSdkType.getInstance()}); final Sdk selectedJdk = project == null ? null : ProjectRootManager.getInstance(project).getProjectJdk(); sdkChooserPanel.updateList(selectedJdk, FanSdkType.getInstance()); sdkPanel.add(label, BorderLayout.PAGE_START); sdkPanel.add(sdkChooserPanel, BorderLayout.CENTER); myMainPanel.add(sdkPanel, BorderLayout.CENTER); return myMainPanel; } @Override public JComponent getPreferredFocusedComponent() { return buildScriptPathField; } @Override public boolean validate() throws ConfigurationException { if (TextUtil.isEmpty(buildScriptPathField.getText())) { throw new ConfigurationException("Please, specify build script for Fantom project to import"); } if (sdkChooserPanel.getChosenJdk() == null) { throw new ConfigurationException("Please, specify a Fantom SDK for Fantom project to import"); } return true; } public void updateDataModel() { final String buildScriptPath = buildScriptPathField.getText(); final Sdk sdk = sdkChooserPanel.getChosenJdk(); final FanProjectBuilder builder = (FanProjectBuilder)getBuilder(); builder.setBuildScriptPath(buildScriptPath); builder.setSdk(sdk); final VirtualFile buildScriptFile = VirtualFileUtil.findFileByLocalPath(buildScriptPath); if (buildScriptFile != null) { final VirtualFile parent = buildScriptFile.getParent(); suggestProjectNameAndPath(parent.getPath(), parent.getName()); } } }