package de.mprengemann.intellij.plugin.androidicons.widgets;
import com.intellij.openapi.ui.Messages;
import de.mprengemann.intellij.plugin.androidicons.util.TextUtils;
import javax.swing.*;
import javax.swing.text.DefaultFormatter;
import java.text.ParseException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class ExportNameField extends JFormattedTextField {
public ExportNameField() {
super(new RegexFormatter("[a-z0-9_\\.]+"));
setInputVerifier(new InputVerifier() {
public boolean verify(JComponent input) {
return true;
}
public boolean shouldYieldFocus(JComponent input) {
if (input instanceof JFormattedTextField) {
final JFormattedTextField ftf = (JFormattedTextField) input;
final JFormattedTextField.AbstractFormatter formatter = ftf.getFormatter();
if (formatter != null && !TextUtils.isEmpty(ftf.getText())) {
try {
formatter.stringToValue(ftf.getText());
} catch (final ParseException e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Messages.showErrorDialog("Please select a valid name for the drawable. Just \"[a-z0-9_.]\" is allowed.",
"No Valid Name");
}
});
}
}
}
return true;
}
});
}
private static class RegexFormatter extends DefaultFormatter {
private Pattern pattern;
public RegexFormatter(String pattern) throws PatternSyntaxException {
super();
setPattern(Pattern.compile(pattern));
setOverwriteMode(false);
setCommitsOnValidEdit(true);
setAllowsInvalid(false);
}
public void setPattern(Pattern pattern) {
this.pattern = pattern;
}
public Pattern getPattern() {
return pattern;
}
public Object stringToValue(String text) throws ParseException {
Pattern pattern = getPattern();
if (pattern != null && !TextUtils.isEmpty(text)) {
Matcher matcher = pattern.matcher(text);
if (matcher.matches()) {
return super.stringToValue(text);
}
throw new ParseException("Pattern did not match", 0);
}
return text;
}
}
}