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&lt;DataFolder&gt;)
+                  </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

Reply via email to