99import com .intellij .openapi .ui .ComboBox ;
1010import com .intellij .psi .PsiDirectory ;
1111import com .intellij .psi .PsiFile ;
12+ import com .intellij .ui .DocumentAdapter ;
1213import com .intellij .util .indexing .FileBasedIndex ;
1314import com .magento .idea .magento2plugin .actions .context .php .NewObserverAction ;
1415import com .magento .idea .magento2plugin .actions .generation .ModuleObserverData ;
2829import com .magento .idea .magento2plugin .magento .packages .Package ;
2930import com .magento .idea .magento2plugin .stubs .indexes .EventNameIndex ;
3031import com .magento .idea .magento2plugin .ui .FilteredComboBox ;
32+ import com .magento .idea .magento2plugin .util .CamelCaseToSnakeCase ;
3133import java .awt .event .ActionEvent ;
3234import java .awt .event .KeyEvent ;
3335import java .awt .event .WindowAdapter ;
3436import java .awt .event .WindowEvent ;
3537import java .util .ArrayList ;
3638import java .util .Collection ;
39+ import java .util .Locale ;
3740import javax .swing .JButton ;
3841import javax .swing .JComboBox ;
3942import javax .swing .JComponent ;
4043import javax .swing .JLabel ;
4144import javax .swing .JPanel ;
4245import javax .swing .JTextField ;
4346import javax .swing .KeyStroke ;
47+ import javax .swing .event .DocumentEvent ;
48+ import org .jetbrains .annotations .NotNull ;
4449
4550@ SuppressWarnings ({
4651 "PMD.TooManyFields" ,
4752 "PMD.ExcessiveImports" ,
48- "PMD.UnusedPrivateMethod" ,
4953 "PMD.AvoidInstantiatingObjectsInLoops" ,
5054 "PMD.ReturnEmptyCollectionRatherThanNull"
5155})
5256public class NewObserverDialog extends AbstractDialog {
57+
5358 private static final String OBSERVER_NAME = "Observer Name" ;
5459 private static final String CLASS_NAME = "Class Name" ;
5560 private final Project project ;
@@ -127,6 +132,14 @@ public void windowClosing(final WindowEvent event) {
127132 JComponent .WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
128133 );
129134
135+ className .getDocument ().addDocumentListener (new DocumentAdapter () {
136+ @ SuppressWarnings ("PMD.AccessorMethodGeneration" )
137+ @ Override
138+ public void textChanged (final @ NotNull DocumentEvent event ) {
139+ autoCompleteObserverName ();
140+ }
141+ });
142+
130143 addComponentListener (
131144 new FocusOnAFieldListener (() -> className .requestFocusInWindow ())
132145 );
@@ -155,6 +168,10 @@ public static void open(
155168 dialog .setVisible (true );
156169 }
157170
171+ private String getModuleName () {
172+ return modulePackage .concat (Package .fqnSeparator ).concat (moduleName );
173+ }
174+
158175 public String getObserverName () {
159176 return observerName .getText ().trim ();
160177 }
@@ -181,7 +198,8 @@ protected void onOK() {
181198
182199 if (!getDirectoryStructure ().isEmpty ()) {
183200 observerDirectory = DirectoryGenerator .getInstance ().findOrCreateSubdirectories (
184- baseDir , getDirectoryStructure ()
201+ baseDir ,
202+ getDirectoryStructure ()
185203 );
186204 }
187205 new ModuleObserverGenerator (
@@ -192,38 +210,29 @@ baseDir, getDirectoryStructure()
192210 getEvenName (),
193211 observerDirectory ,
194212 ModuleObserverFile .resolveClassNameFromInput (getClassName ())
195- ), project ).generate (NewObserverAction .ACTION_NAME , true );
196-
197- new ObserverEventsXmlGenerator (new ObserverEventsXmlData (
198- getObserverArea (),
199- getModuleName ().replace (
200- Package .fqnSeparator ,
201- Package .vendorModuleNameSeparator
202213 ),
203- getEvenName (),
204- getObserverName (),
205- getObserverClassFqn ().concat (Package .fqnSeparator ).concat (
206- ModuleObserverFile .resolveClassNameFromInput (getClassName ())
207- )
208- ), project ).generate (NewObserverAction .ACTION_NAME );
214+ project
215+ ).generate (NewObserverAction .ACTION_NAME , true );
216+
217+ new ObserverEventsXmlGenerator (
218+ new ObserverEventsXmlData (
219+ getObserverArea (),
220+ getModuleName ().replace (
221+ Package .fqnSeparator ,
222+ Package .vendorModuleNameSeparator
223+ ),
224+ getEvenName (),
225+ getObserverName (),
226+ getObserverClassFqn ().concat (Package .fqnSeparator ).concat (
227+ ModuleObserverFile .resolveClassNameFromInput (getClassName ())
228+ )
229+ ),
230+ project
231+ ).generate (NewObserverAction .ACTION_NAME );
209232 exit ();
210233 }
211234 }
212235
213- private void createUIComponents () {
214- observerArea = new ComboBox <>();
215-
216- for (final Areas areaEntry : Areas .values ()) {
217- observerArea .addItem (new ComboBoxItemData (areaEntry .toString (), areaEntry .toString ()));
218- }
219-
220- final Collection <String > events = FileBasedIndex .getInstance ().getAllKeys (
221- EventNameIndex .KEY , project
222- );
223-
224- this .eventName = new FilteredComboBox (new ArrayList <>(events ));
225- }
226-
227236 private boolean validateFields () {
228237 final PsiFile [] directoryFiles = getDirectoryFiles (baseDir );
229238
@@ -276,10 +285,6 @@ private PsiFile[] getDirectoryFiles(final PsiDirectory targetDirectory) {
276285 return directory .getFiles ();
277286 }
278287
279- private String getModuleName () {
280- return modulePackage .concat (Package .fqnSeparator ).concat (moduleName );
281- }
282-
283288 private String getObserverClassFqn () {
284289 final String folderStructureFqn = getDirectoryStructure ().replace (
285290 Package .V_FILE_SEPARATOR , Package .fqnSeparator
@@ -292,4 +297,37 @@ private String getObserverClassFqn() {
292297
293298 return getModuleName ().concat (Package .fqnSeparator ).concat (folderFqn );
294299 }
300+
301+ private void autoCompleteObserverName () {
302+ final String className = getClassName ();
303+
304+ if (className .isEmpty ()) {
305+ return ;
306+ }
307+ final String modifiedClassName = ModuleObserverFile .resolveClassNameFromInput (className );
308+ final String classNameInSnakeCase = CamelCaseToSnakeCase .getInstance ()
309+ .convert (modifiedClassName );
310+
311+ final String modulePackageModified = modulePackage .substring (0 , 1 )
312+ .toLowerCase (Locale .getDefault ()) + modulePackage .substring (1 );
313+ final String moduleNameModified = moduleName .substring (0 , 1 )
314+ .toLowerCase (Locale .getDefault ()) + moduleName .substring (1 );
315+
316+ observerName .setText (
317+ modulePackageModified + "_" + moduleNameModified + "_" + classNameInSnakeCase
318+ );
319+ }
320+
321+ @ SuppressWarnings ({"PMD.UnusedPrivateMethod" })
322+ private void createUIComponents () {
323+ observerArea = new ComboBox <>();
324+
325+ for (final Areas areaEntry : Areas .values ()) {
326+ observerArea .addItem (new ComboBoxItemData (areaEntry .toString (), areaEntry .toString ()));
327+ }
328+ final Collection <String > events = FileBasedIndex .getInstance ().getAllKeys (
329+ EventNameIndex .KEY , project
330+ );
331+ this .eventName = new FilteredComboBox (new ArrayList <>(events ));
332+ }
295333}
0 commit comments