1010import com .magento .idea .magento2plugin .actions .generation .NewCronjobAction ;
1111import com .magento .idea .magento2plugin .actions .generation .data .CronjobClassData ;
1212import com .magento .idea .magento2plugin .actions .generation .data .CrontabXmlData ;
13- import com .magento .idea .magento2plugin .actions .generation .dialog .validator .NewCronjobValidator ;
13+ import com .magento .idea .magento2plugin .actions .generation .dialog .validator .annotation .FieldValidation ;
14+ import com .magento .idea .magento2plugin .actions .generation .dialog .validator .annotation .RuleRegistry ;
15+ import com .magento .idea .magento2plugin .actions .generation .dialog .validator .rule .ConfigPathRule ;
16+ import com .magento .idea .magento2plugin .actions .generation .dialog .validator .rule .CronScheduleRule ;
17+ import com .magento .idea .magento2plugin .actions .generation .dialog .validator .rule .DirectoryRule ;
18+ import com .magento .idea .magento2plugin .actions .generation .dialog .validator .rule .IdentifierRule ;
19+ import com .magento .idea .magento2plugin .actions .generation .dialog .validator .rule .NotEmptyRule ;
20+ import com .magento .idea .magento2plugin .actions .generation .dialog .validator .rule .PhpClassRule ;
1421import com .magento .idea .magento2plugin .actions .generation .generator .CronjobClassGenerator ;
1522import com .magento .idea .magento2plugin .actions .generation .generator .CrontabXmlGenerator ;
1623import com .magento .idea .magento2plugin .actions .generation .generator .util .NamespaceBuilder ;
1926import com .magento .idea .magento2plugin .util .CamelCaseToSnakeCase ;
2027import com .magento .idea .magento2plugin .util .magento .GetModuleNameByDirectoryUtil ;
2128import java .awt .event .ActionEvent ;
22- import java .awt .event .ActionListener ;
2329import java .awt .event .FocusEvent ;
2430import java .awt .event .FocusListener ;
2531import java .awt .event .KeyEvent ;
4450 "PMD.AvoidCatchingGenericException" ,
4551 "PMD.ImmutableField" ,
4652 "PMD.AccessorMethodGeneration" ,
53+ "PMD.ExcessiveImports" ,
4754})
4855public class NewCronjobDialog extends AbstractDialog {
4956 private JPanel contentPane ;
5057 private JButton buttonOK ;
5158 private JButton buttonCancel ;
52- private JTextField cronjobClassNameField ;
53- private JTextField cronjobDirectoryField ;
5459 private JRadioButton fixedScheduleRadioButton ;
5560 private JRadioButton configurableScheduleRadioButton ;
5661 private JRadioButton everyMinuteRadioButton ;
5762 private JRadioButton customScheduleRadioButton ;
58- private JTextField cronjobScheduleField ;
5963 private JRadioButton atMidnightRadioButton ;
6064 private JPanel fixedSchedulePanel ;
61- private JTextField configPathField ;
6265 private JPanel configurableSchedulePanel ;
63- private FilteredComboBox cronGroupComboBox ;
66+ private static final String CLASS_NAME = "class name" ;
67+ private static final String DIRECTORY = "directory" ;
68+ private static final String CRON_NAME = "name" ;
69+ private static final String SCHEDULE = "schedule" ;
70+ private static final String CONFIG_PATH = "config path" ;
71+ private static final String CRON_GROUP = "cron group" ;
72+
73+ @ FieldValidation (rule = RuleRegistry .NOT_EMPTY ,
74+ message = {NotEmptyRule .MESSAGE , CLASS_NAME })
75+ @ FieldValidation (rule = RuleRegistry .PHP_CLASS ,
76+ message = {PhpClassRule .MESSAGE , CLASS_NAME })
77+ private JTextField cronjobClassNameField ;
78+
79+ @ FieldValidation (rule = RuleRegistry .NOT_EMPTY ,
80+ message = {NotEmptyRule .MESSAGE , DIRECTORY })
81+ @ FieldValidation (rule = RuleRegistry .DIRECTORY ,
82+ message = {DirectoryRule .MESSAGE , DIRECTORY })
83+ private JTextField cronjobDirectoryField ;
84+
85+ @ FieldValidation (rule = RuleRegistry .NOT_EMPTY ,
86+ message = {NotEmptyRule .MESSAGE , CRON_NAME })
87+ @ FieldValidation (rule = RuleRegistry .IDENTIFIER ,
88+ message = {IdentifierRule .MESSAGE , CRON_NAME })
6489 private JTextField cronjobNameField ;
6590
91+ @ FieldValidation (rule = RuleRegistry .NOT_EMPTY ,
92+ message = {NotEmptyRule .MESSAGE , SCHEDULE })
93+ @ FieldValidation (rule = RuleRegistry .CRON_SCHEDULE ,
94+ message = {CronScheduleRule .MESSAGE , SCHEDULE })
95+ private JTextField cronjobScheduleField ;
96+
97+ @ FieldValidation (rule = RuleRegistry .NOT_EMPTY ,
98+ message = {NotEmptyRule .MESSAGE , CONFIG_PATH })
99+ @ FieldValidation (rule = RuleRegistry .CONFIG_PATH ,
100+ message = {ConfigPathRule .MESSAGE , CONFIG_PATH })
101+ private JTextField configPathField ;
102+
103+ @ FieldValidation (rule = RuleRegistry .NOT_EMPTY ,
104+ message = {NotEmptyRule .MESSAGE , CRON_GROUP })
105+ private FilteredComboBox cronGroupComboBox ;
106+
66107 private Project project ;
67108 private String moduleName ;
68- private NewCronjobValidator validator ;
69109 private CamelCaseToSnakeCase camelCaseToSnakeCase ;
70110
71111 /**
@@ -78,26 +118,29 @@ public NewCronjobDialog(final Project project, final PsiDirectory directory) {
78118 super ();
79119 this .project = project ;
80120 this .moduleName = GetModuleNameByDirectoryUtil .execute (directory , project );
81- this .validator = NewCronjobValidator .getInstance ();
82121 this .camelCaseToSnakeCase = CamelCaseToSnakeCase .getInstance ();
83122
84123 setContentPane (contentPane );
85124 setModal (true );
86125 getRootPane ().setDefaultButton (buttonOK );
87126 setTitle ("Create a new Magento 2 cronjob.." );
127+ configPathField .setEditable (false );
88128
89129 buttonOK .addActionListener (e -> onOK ());
90130 buttonCancel .addActionListener (e -> onCancel ());
91131
92132 fixedScheduleRadioButton .addActionListener (e -> {
93133 configurableSchedulePanel .setVisible (false );
94134 fixedSchedulePanel .setVisible (true );
135+ configPathField .setEditable (false );
95136 });
96137
97138 configurableScheduleRadioButton .addActionListener (e -> {
98139 fixedSchedulePanel .setVisible (false );
99140 configurableSchedulePanel .setVisible (true );
141+ configPathField .setEditable (true );
100142 configPathField .grabFocus ();
143+ everyMinuteRadioButton .doClick ();
101144 });
102145
103146 everyMinuteRadioButton .addActionListener (e -> {
@@ -139,16 +182,9 @@ public void windowClosing(final WindowEvent event) {
139182 }
140183 });
141184
142- final ActionListener actionListener = new ActionListener () {
143- @ Override
144- public void actionPerformed (final ActionEvent event ) {
145- onCancel ();
146- }
147- };
148-
149185 // call onCancel() on ESCAPE
150186 contentPane .registerKeyboardAction (
151- actionListener ,
187+ ( final ActionEvent event ) -> onCancel () ,
152188 KeyStroke .getKeyStroke (KeyEvent .VK_ESCAPE , 0 ),
153189 JComponent .WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
154190 );
@@ -237,7 +273,7 @@ private String suggestCronjobName(final String cronjobClassname) {
237273 * When new cronjob dialog is filled, validate the input data and generate a new cronjob.
238274 */
239275 private void onOK () {
240- if (!validator . validate ( this . project , this )) {
276+ if (!validateFormFields ( )) {
241277 return ;
242278 }
243279
0 commit comments