From 5c4bcc42c978d420e6aaa0a4a9a968e3118d3e7f Mon Sep 17 00:00:00 2001 From: Denys Almazov Date: Fri, 16 Apr 2021 14:44:49 +0200 Subject: [PATCH] IEP-403 Fixing NPE in the new component wizard (#249) * Fixing NPE in the new component wizard * update selectedProject value with value from combo button * add newComponentWizard to the new shortcut * Update NewComponentWizardPage.java Co-authored-by: Kondal Kolipaka --- bundles/com.espressif.idf.ui/plugin.xml | 14 ++++++ .../idf/ui/handlers/NewComponentHandler.java | 27 ++++++++++++ .../com/espressif/idf/ui/wizard/Messages.java | 3 ++ .../idf/ui/wizard/NewComponentWizardPage.java | 43 +++++++++++++++++-- .../idf/ui/wizard/messages.properties | 5 ++- 5 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/handlers/NewComponentHandler.java diff --git a/bundles/com.espressif.idf.ui/plugin.xml b/bundles/com.espressif.idf.ui/plugin.xml index e2648ff90..e181a5e63 100644 --- a/bundles/com.espressif.idf.ui/plugin.xml +++ b/bundles/com.espressif.idf.ui/plugin.xml @@ -37,6 +37,9 @@ + + + + @@ -168,6 +176,12 @@ + + arguments, Map env) ProcessBuilderFactory processRunner = new ProcessBuilderFactory(); try { - IProject selectedProject = EclipseUtil.getSelectedProjectInExplorer(); + IProject selectedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectCombo.getText()); IPath newPath = selectedProject.getLocation(); IStatus status = processRunner.runInBackground(arguments, newPath, env); if (status == null) @@ -91,7 +96,7 @@ public void createControl(Composite parent) Label label = new Label(container, SWT.NONE); label.setText(Messages.NewIdfComponentWizard_Component_name); componentName = new Text(container, SWT.BORDER); - componentName.setText(""); // + componentName.setText(""); //$NON-NLS-1$ componentName.addModifyListener(new ModifyListener() { @Override @@ -102,6 +107,26 @@ public void modifyText(ModifyEvent e) }); GridData gd = new GridData(GridData.FILL_HORIZONTAL); componentName.setLayoutData(gd); + + Label projectNameLbl = new Label(container, SWT.NONE); + projectNameLbl.setText(Messages.NewComponentWizardPage_ProjectNameLbl); + projectCombo = new Combo(container, SWT.BORDER | SWT.READ_ONLY); + Optional optProject = Optional.ofNullable(EclipseUtil.getSelectedProjectInExplorer()); + optProject.ifPresent(project -> projectCombo.setText(project.getName())); + IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + for (IProject project : projects) + { + projectCombo.add(project.getName()); + } + projectCombo.addModifyListener(new ModifyListener() + { + @Override + public void modifyText(ModifyEvent e) + { + setPageComplete(validatePage()); + } + }); + projectCombo.setLayoutData(gd); setControl(container); setPageComplete(false); } @@ -109,6 +134,18 @@ public void modifyText(ModifyEvent e) protected boolean validatePage() { + if (StringUtil.isEmpty(projectCombo.getText())) + { + setErrorMessage(Messages.NewComponentWizardPage_CantCreateCompErr); + return false; + } + + if (!ResourcesPlugin.getWorkspace().getRoot().getProject(projectCombo.getText()).exists()) + { + setErrorMessage(Messages.NewComponentWizardPage_ProjectDoesntExistErr); + return false; + } + if (componentName.getText().isEmpty()) // $NON-NLS-1$ { setErrorMessage(Messages.NewIdfComponentWizard_NameCantBeEmptyErr); @@ -131,7 +168,7 @@ protected boolean validatePage() private boolean checkIfComponentExists() { - IProject selectedProject = EclipseUtil.getSelectedProjectInExplorer(); + IProject selectedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectCombo.getText()); IPath newPath = selectedProject.getLocation().append("/components"); //$NON-NLS-1$ Path absPath = Paths.get(newPath.toString() + "\\" + componentName.getText()); //$NON-NLS-1$ if (Files.exists(absPath)) diff --git a/bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/messages.properties b/bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/messages.properties index 3dc2e7ef7..e95fc4b26 100644 --- a/bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/messages.properties +++ b/bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/messages.properties @@ -23,4 +23,7 @@ NewIdfComponentWizard_Component_name=Component Name: NewIdfComponentWizard_Page = New IDF component page NewIdfComponentWizard_NameCantIncludeSpaceErr=A component name can't include space NewIdfComponentWizard_NameCantBeEmptyErr=A component name can't be empty -NewIdfComponentWizard_NameAlreadyExistsErr=A component with such a name is already exists \ No newline at end of file +NewIdfComponentWizard_NameAlreadyExistsErr=A component with such a name is already exists +NewComponentWizardPage_CantCreateCompErr=Can not create a component without a project selection +NewComponentWizardPage_ProjectDoesntExistErr=Project doesn't exist +NewComponentWizardPage_ProjectNameLbl=Project name: \ No newline at end of file