This is an automated email from the ASF dual-hosted git repository. jtulach pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push: new 0237feb [NETBEANS-3918] defer creation of target folder until/if needed new 6d97666 Merge pull request #1991 from errael/SpuriousDirectoryCreation 0237feb is described below commit 0237febf42ceceee360d0a93fd477373fee206e9 Author: Ernie Rael <err...@raelity.com> AuthorDate: Sat Feb 29 21:41:39 2020 +0000 [NETBEANS-3918] defer creation of target folder until/if needed --- java/maven/nbproject/project.xml | 2 +- .../modules/maven/newproject/BasicPanelVisual.java | 6 ++- platform/openide.loaders/apichanges.xml | 20 +++++++++ platform/openide.loaders/manifest.mf | 2 +- .../openide.loaders/nbproject/project.properties | 2 +- .../src/org/openide/loaders/TemplateWizard.java | 22 ++++++++++ .../org/openide/loaders/TemplateWizardTest.java | 51 ++++++++++++++++++++++ 7 files changed, 100 insertions(+), 5 deletions(-) diff --git a/java/maven/nbproject/project.xml b/java/maven/nbproject/project.xml index 301791c..c63c99f 100644 --- a/java/maven/nbproject/project.xml +++ b/java/maven/nbproject/project.xml @@ -458,7 +458,7 @@ <build-prerequisite/> <compile-dependency/> <run-dependency> - <specification-version>7.61</specification-version> + <specification-version>7.76</specification-version> </run-dependency> </dependency> <dependency> diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/BasicPanelVisual.java b/java/maven/src/org/netbeans/modules/maven/newproject/BasicPanelVisual.java index c423070..16cfec2 100644 --- a/java/maven/src/org/netbeans/modules/maven/newproject/BasicPanelVisual.java +++ b/java/maven/src/org/netbeans/modules/maven/newproject/BasicPanelVisual.java @@ -513,8 +513,10 @@ public class BasicPanelVisual extends JPanel implements DocumentListener, Window d.putProperty(CommonProjectActions.PROJECT_PARENT_FOLDER, parentFolder); if (d instanceof TemplateWizard) { - parentFolder.mkdirs(); - ((TemplateWizard) d).setTargetFolder(DataFolder.findFolder(FileUtil.toFileObject(parentFolder))); + ((TemplateWizard) d).setTargetFolderLazy(() -> { + parentFolder.mkdirs(); + return DataFolder.findFolder(FileUtil.toFileObject(parentFolder)); + }); } d.putProperty("name", name); //NOI18N if (d instanceof TemplateWizard) { diff --git a/platform/openide.loaders/apichanges.xml b/platform/openide.loaders/apichanges.xml index a125085..cefd40a 100644 --- a/platform/openide.loaders/apichanges.xml +++ b/platform/openide.loaders/apichanges.xml @@ -85,6 +85,26 @@ is the proper place. <!-- ACTUAL CHANGES BEGIN HERE: --> <changes> + <change id="org.openide.loaders.TemplateWizard.setTargetFolderLazy"> + <api name="loaders"/> + <summary>Support lazy creation of TargetFolder.</summary> + <version major="7" minor="76"/> + <date day="1" month="3" year="2020"/> + <author login="errael"/> + <compatibility addition="yes" binary="compatible" source="compatible" + semantic="compatible" deprecation="no" deletion="no" + modification="no"/> + <description> + <p> + Creation of TargetFolder can be deferred by using + <a href="@org-openide-loaders@/org/openide/loaders/TemplateWizard.html#setTargetFolderLazy-java.util.function.Supplier-"> + TemplateWizard.setTargetFolderLazy(Supplier<DataFolder>) + </a>. + </p> + </description> + <class package="org.openide.loaders" name="TemplateWizard"/> + <issue number="NETBEANS-3918"/> + </change> <change id="org.openide.awt.Toolbar.toggle"> <api name="awt"/> <summary>Separate template handling</summary> diff --git a/platform/openide.loaders/manifest.mf b/platform/openide.loaders/manifest.mf index 5c8e495..4c71258 100644 --- a/platform/openide.loaders/manifest.mf +++ b/platform/openide.loaders/manifest.mf @@ -1,6 +1,6 @@ Manifest-Version: 1.0 OpenIDE-Module: org.openide.loaders -OpenIDE-Module-Specification-Version: 7.75 +OpenIDE-Module-Specification-Version: 7.76 OpenIDE-Module-Localizing-Bundle: org/openide/loaders/Bundle.properties OpenIDE-Module-Provides: org.netbeans.modules.templates.v1_0 OpenIDE-Module-Layer: org/netbeans/modules/openide/loaders/layer.xml diff --git a/platform/openide.loaders/nbproject/project.properties b/platform/openide.loaders/nbproject/project.properties index 174a9ab..efa4e85 100644 --- a/platform/openide.loaders/nbproject/project.properties +++ b/platform/openide.loaders/nbproject/project.properties @@ -17,7 +17,7 @@ is.autoload=true javac.compilerargs=-Xlint -Xlint:-serial -javac.source=1.6 +javac.source=1.8 javadoc.main.page=org/openide/loaders/doc-files/api.html javadoc.arch=${basedir}/arch.xml javadoc.apichanges=${basedir}/apichanges.xml diff --git a/platform/openide.loaders/src/org/openide/loaders/TemplateWizard.java b/platform/openide.loaders/src/org/openide/loaders/TemplateWizard.java index 949cc3c..adde8ad 100644 --- a/platform/openide.loaders/src/org/openide/loaders/TemplateWizard.java +++ b/platform/openide.loaders/src/org/openide/loaders/TemplateWizard.java @@ -29,6 +29,7 @@ import java.text.MessageFormat; import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; +import java.util.function.Supplier; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; @@ -91,6 +92,8 @@ public class TemplateWizard extends WizardDescriptor { private DataFolder targetDataFolder; /** This is true if we have already set a value to the title format */ private boolean titleFormatSet = false; + /** for deferred directory/DataFolder creation */ + private Supplier<DataFolder> targetDataFolderCreator; /** listens on property (steps, index) changes and updates steps pane */ private PropertyChangeListener pcl; @@ -243,6 +246,10 @@ public class TemplateWizard extends WizardDescriptor { */ public DataFolder getTargetFolder () throws IOException { LOG.log(Level.FINE, "targetFolder={0} for {1}", new Object[] {targetDataFolder, this}); + if (targetDataFolder == null && targetDataFolderCreator != null) { + targetDataFolder = targetDataFolderCreator.get(); + LOG.log(Level.FINE, "lazy targetFolder={0} for {1}", new Object[] {targetDataFolder, this}); + } if (targetDataFolder == null) { throw new IOException(NbBundle.getMessage(TemplateWizard.class, "ERR_NoFilesystem")); } @@ -269,9 +276,24 @@ public class TemplateWizard extends WizardDescriptor { if (LOG.isLoggable(Level.FINE)) { LOG.log(Level.FINE, "set targetFolder=" + f + " for " + this, new Throwable()); } + if(f == null) { + targetDataFolderCreator = null; + } targetDataFolder = f; } + /** Use this method for deferred creation of target folder + * until and <em>if</em> it is needed. + * + * @since 7.76 + * + * @param folderCreator function which, when called, produces TargetFolder + */ + public void setTargetFolderLazy(Supplier<DataFolder> folderCreator) { + // Fix for [NETBEANS-3918] needs dererred creation feature + targetDataFolderCreator = folderCreator; + } + /** Getter for the name of the target template. * @return the name or <code>null</code> if not yet set */ diff --git a/platform/openide.loaders/test/unit/src/org/openide/loaders/TemplateWizardTest.java b/platform/openide.loaders/test/unit/src/org/openide/loaders/TemplateWizardTest.java index 739ff48..cc93daf 100644 --- a/platform/openide.loaders/test/unit/src/org/openide/loaders/TemplateWizardTest.java +++ b/platform/openide.loaders/test/unit/src/org/openide/loaders/TemplateWizardTest.java @@ -42,6 +42,7 @@ import org.openide.WizardDescriptor; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileSystem; import org.openide.filesystems.FileUtil; +import org.openide.util.Exceptions; import org.openide.util.HelpCtx; /** Checks the testable behaviour of TemplateWizard * @author Jaroslav Tulach, Jiri Rechtacek @@ -248,6 +249,56 @@ public class TemplateWizardTest extends NbTestCase { // check that the object is really created on config fs assertTrue(FileUtil.isParentOf(cf, tf)); } + + /** + * Test deferred TargetFolder creation + */ + public void testDeferredTargetFolderCreation() throws Exception { + final TemplateWizard tw = new TemplateWizard(); + final String TARGET = "deferredTarget"; // NOI18N + tw.setTargetFolderLazy(() -> { + FileObject fo = null; + try { + fo = FileUtil.getConfigRoot().createFolder(TARGET); + } catch(IOException ex) { + assertTrue("createFolder(TARGET) exception", false); + } + return DataFolder.findFolder(fo); + }); + assertNull(FileUtil.getConfigRoot().getFileObject(TARGET)); + // should lazily create target + DataFolder targetFolder = tw.getTargetFolder(); + FileObject foNew = FileUtil.getConfigRoot().getFileObject(TARGET); + assertNotNull(foNew); + assertFalse(foNew.isVirtual()); + assertEquals(targetFolder.getName(), TARGET); + } + + /** + * Test *no* deferred TargetFolder creation + */ + public void testNoDeferredTargetFolderCreation() throws Exception { + final TemplateWizard tw = new TemplateWizard(); + final String TARGET1 = "target1"; // NOI18N + final String TARGET2 = "target2"; // NOI18N + + FileObject cf = FileUtil.getConfigRoot().createFolder(TARGET1); + DataFolder target = DataFolder.findFolder(cf); + tw.setTargetFolder(target); + tw.setTargetFolderLazy(() -> { + FileObject fo = null; + try { + fo = FileUtil.getConfigRoot().createFolder(TARGET2); + } catch(IOException ex) { + assertTrue("createFolder(TARGET2) exception", false); + } + return DataFolder.findFolder(fo); + }); + DataFolder targetFolder = tw.getTargetFolder(); + + // TARGET2 should not be created + assertNull(FileUtil.getConfigRoot().getFileObject(TARGET2)); + } private void doNextOnIterImpl (boolean notify) { TemplateWizard wizard = new TemplateWizard (); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists