package com.atsebak.embeddedlinuxjvm.ui; import com.atsebak.embeddedlinuxjvm.localization.EmbeddedLinuxJVMBundle; import com.atsebak.embeddedlinuxjvm.project.RPiJavaModuleBuilder; import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.lang.java.lexer.JavaLexer; import com.intellij.openapi.Disposable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.java.LanguageLevel; import org.jetbrains.annotations.NotNull; import javax.swing.*; public class EmbeddedJavaModuleStep extends ModuleWizardStep implements Disposable { private RPiJavaModuleBuilder RPiJavaModuleBuilder; private JPanel main; private JTextField packageField; public EmbeddedJavaModuleStep(@NotNull RPiJavaModuleBuilder RPiJavaModuleBuilder) { this.RPiJavaModuleBuilder = RPiJavaModuleBuilder; } private static boolean isValidFullyQualifiedJavaIdentifier(String value) { return isValidJavaPackageName(value) && value.indexOf('.') != -1; } /** * Checks if the given name is a valid general Java package name. * <p/> */ public static boolean isValidJavaPackageName(@NotNull String name) { int index = 0; while (true) { int index1 = name.indexOf('.', index); if (index1 < 0) index1 = name.length(); if (!isIdentifier(name.substring(index, index1))) return false; if (index1 == name.length()) return true; index = index1 + 1; } } /** * Proper Identifier * * @param candidate * @return */ public static boolean isIdentifier(@NotNull String candidate) { return StringUtil.isJavaIdentifier(candidate) && !JavaLexer.isKeyword(candidate, LanguageLevel.JDK_1_6); } @Override public void dispose() { } /** * Validates project configuration for module * @return * @throws ConfigurationException */ @Override public boolean validate() throws ConfigurationException { if (StringUtil.isEmptyOrSpaces(packageField.getText()) || !isValidFullyQualifiedJavaIdentifier(packageField.getText())) { throw new ConfigurationException(EmbeddedLinuxJVMBundle.getString("basepackage.invalid")); } return true; } /** * get component * @return */ @Override public JComponent getComponent() { return main; } /** * Update data */ @Override public void updateDataModel() { RPiJavaModuleBuilder.setPackageName(packageField.getText()); } /** * set package field * * @return */ public void setPackageName(String packageName) { if (packageField == null) { packageField = new JTextField(); } packageField.setText(packageName); } }