Java tutorial
/* * Copyright 2014-2015. Adaptive.me. * * 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 me.adaptive.ide.codewok.project.generator; import com.intellij.ide.impl.ProjectUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.platform.LocationNameFieldsBinding; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.ListCellRendererWrapper; import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.DocumentEvent; import java.util.ArrayList; import java.util.List; /** * Created by panthro on 14/04/15. */ public class CodeWokGenerateProjectDialog extends DialogWrapper { private JPanel myRootPane; private JTextField projectNameTextField; private TextFieldWithBrowseButton locaTionTextField; private JComboBox adaptiveVersionComboBox; private JComboBox boilerPlateTemplateComboBox; private JCheckBox typescriptCheckbox; private JCheckBox launchEmulatorCheckbox; private JCheckBox iosCheckBox; private JCheckBox androidCheckBox; private JCheckBox windowsCheckbox; public CodeWokGenerateProjectDialog(@Nullable Project project) { super(project, true); setTitle("Create New CodeWok Project"); init(); /** * Location Field handling */ new LocationNameFieldsBinding(project, locaTionTextField, projectNameTextField, ProjectUtil.getBaseDir(), "Project Location"); /** * Adaptive version Combo */ DefaultComboBoxModel adaptiveVersionModel = new DefaultComboBoxModel(); for (GeneratorRunner.AdaptiveVersion version : GeneratorRunner.AdaptiveVersion.values()) { adaptiveVersionModel.addElement(version); } adaptiveVersionComboBox.setModel(adaptiveVersionModel); adaptiveVersionComboBox.setRenderer(createNamedEnumListCellRenderer()); /** * Boilerplace Combo Box */ DefaultComboBoxModel boilerplateModel = new DefaultComboBoxModel(); for (GeneratorRunner.Boilerplate boilerplate : GeneratorRunner.Boilerplate.values()) { boilerplateModel.addElement(boilerplate); } boilerPlateTemplateComboBox.setModel(boilerplateModel); boilerPlateTemplateComboBox.setRenderer(createNamedEnumListCellRenderer()); /** * Validation setup */ locaTionTextField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { @Override protected void textChanged(DocumentEvent e) { checkValid(); } }); } protected void checkValid() { String projectName = projectNameTextField.getText(); if (projectName.trim().isEmpty()) { setOKActionEnabled(false); setErrorText("Project name cannot be empty"); return; } if (locaTionTextField.getText().indexOf('$') >= 0) { setOKActionEnabled(false); setErrorText("Prject directory name must not contain $ character"); return; } setOKActionEnabled(true); setErrorText(null); } protected ListCellRenderer createNamedEnumListCellRenderer() { return new ListCellRendererWrapper<Enum>() { @Override public void customize(JList list, Enum value, int index, boolean selected, boolean hasFocus) { if (value != null) { if (value instanceof GeneratorRunner.AdaptiveVersion) { setText(((GeneratorRunner.AdaptiveVersion) value).getName()); } else if (value instanceof GeneratorRunner.Boilerplate) { setText(((GeneratorRunner.Boilerplate) value).getName()); } } } }; } @Nullable @Override protected JComponent createCenterPanel() { return myRootPane; } @Nullable @Override public JComponent getPreferredFocusedComponent() { return projectNameTextField; } public String getProjectName() { return projectNameTextField.getText(); } public String getProjectLocation() { return locaTionTextField.getText(); } public GeneratorRunner.AdaptiveVersion getAdaptiveVersion() { return (GeneratorRunner.AdaptiveVersion) adaptiveVersionComboBox.getModel().getSelectedItem(); } public GeneratorRunner.Boilerplate getBoilerplate() { return (GeneratorRunner.Boilerplate) boilerPlateTemplateComboBox.getModel().getSelectedItem(); } public boolean isTypeScriptEnabled() { return typescriptCheckbox.isSelected(); } public boolean shouldLaunchEmulator() { return launchEmulatorCheckbox.isSelected(); } public GeneratorRunner.Platform[] getSelectedPlatforms() { List<GeneratorRunner.Platform> platforms = new ArrayList<GeneratorRunner.Platform>(); if (androidCheckBox.isSelected()) { platforms.add(GeneratorRunner.Platform.ANDROID); } if (windowsCheckbox.isSelected()) { platforms.add(GeneratorRunner.Platform.WINDOWS); } if (iosCheckBox.isSelected()) { platforms.add(GeneratorRunner.Platform.IOS); } return platforms.toArray(new GeneratorRunner.Platform[platforms.size()]); } }