From 39903e58b4be88a2bfb9aa6739aa9222aea0272b Mon Sep 17 00:00:00 2001 From: Attila Kelemen Date: Sat, 22 Sep 2012 13:04:05 +0200 Subject: [PATCH] It is now possible to wait for properties to be loaded from the file. --- .../netbeans/gradle/project/NbGradleProject.java | 11 ++++++++++- .../properties/ProjectPropertiesManager.java | 14 +++++++++++++- .../project/properties/ProjectPropertiesProxy.java | 12 ++++++++++-- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/org/netbeans/gradle/project/NbGradleProject.java b/src/org/netbeans/gradle/project/NbGradleProject.java index 5791027d..8c695e77 100644 --- a/src/org/netbeans/gradle/project/NbGradleProject.java +++ b/src/org/netbeans/gradle/project/NbGradleProject.java @@ -57,7 +57,7 @@ public final class NbGradleProject implements Project { private final ChangeSupport modelChanges; private final AtomicBoolean hasModelBeenLoaded; private final AtomicReference currentModelRef; - private final ProjectProperties properties; + private final ProjectPropertiesProxy properties; private final ProjectInfoManager projectInfoManager; private final AtomicReference loadErrorRef; @@ -148,6 +148,15 @@ public ProjectProperties getProperties() { return properties; } + public ProjectProperties tryGetLoadedProperties() { + if (properties.tryWaitForLoaded()) { + return properties; + } + else { + return null; + } + } + public String getName() { return getProjectDirectory().getNameExt(); } diff --git a/src/org/netbeans/gradle/project/properties/ProjectPropertiesManager.java b/src/org/netbeans/gradle/project/properties/ProjectPropertiesManager.java index f61d5584..32732319 100644 --- a/src/org/netbeans/gradle/project/properties/ProjectPropertiesManager.java +++ b/src/org/netbeans/gradle/project/properties/ProjectPropertiesManager.java @@ -8,6 +8,7 @@ import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import org.netbeans.gradle.project.WaitableSignal; import org.netbeans.gradle.project.persistent.PropertiesPersister; import org.netbeans.gradle.project.persistent.XmlPropertiesPersister; @@ -50,7 +51,10 @@ public void stateChanged(ChangeEvent e) { } } - public static ProjectProperties getProperties(File propertiesFile) { + public static ProjectProperties getProperties( + File propertiesFile, + final WaitableSignal loadedSignal) { + if (propertiesFile == null) throw new NullPointerException("propertiesFile"); ProjectProperties result; @@ -72,6 +76,9 @@ public void run() { persister.load(newProperties, new Runnable() { @Override public void run() { + if (loadedSignal != null) { + loadedSignal.signal(); + } setSaveOnChange(newProperties, persister); } }); @@ -89,6 +96,11 @@ public void run() { MAIN_LOCK.unlock(); } } + else { + if (loadedSignal != null) { + loadedSignal.signal(); + } + } return result; } diff --git a/src/org/netbeans/gradle/project/properties/ProjectPropertiesProxy.java b/src/org/netbeans/gradle/project/properties/ProjectPropertiesProxy.java index 01b0e98f..a503af47 100644 --- a/src/org/netbeans/gradle/project/properties/ProjectPropertiesProxy.java +++ b/src/org/netbeans/gradle/project/properties/ProjectPropertiesProxy.java @@ -14,6 +14,7 @@ import javax.swing.event.ChangeListener; import org.netbeans.api.java.platform.JavaPlatform; import org.netbeans.gradle.project.NbGradleProject; +import org.netbeans.gradle.project.WaitableSignal; import org.netbeans.gradle.project.persistent.XmlPropertiesPersister; import org.openide.util.ChangeSupport; @@ -28,12 +29,14 @@ public final class ProjectPropertiesProxy extends AbstractProjectProperties { private final MutablePropertyProxy platformProxy; private final MutablePropertyProxy sourceEncodingProxy; private final MutablePropertyProxy> commonTasksProxy; + private final WaitableSignal loadedSignal; public ProjectPropertiesProxy(NbGradleProject project) { if (project == null) throw new NullPointerException("project"); this.project = project; this.propertiesRef = new AtomicReference(null); this.changes = new ChangeSupport(this); + this.loadedSignal = new WaitableSignal(); this.sourceLevelProxy = new MutablePropertyProxy(new ProjectMutablePropertyRef(this) { @Override @@ -61,17 +64,22 @@ public MutableProperty> getProperty() { }); } + public boolean tryWaitForLoaded() { + getProperties(); + return loadedSignal.tryWaitForSignal(); + } + private ProjectProperties getProperties() { ProjectProperties properties = propertiesRef.get(); if (properties == null) { File propertiesFile = XmlPropertiesPersister.getFileForProject(project); - properties = ProjectPropertiesManager.getProperties(propertiesFile); + properties = ProjectPropertiesManager.getProperties(propertiesFile, loadedSignal); if (propertiesRef.compareAndSet(null, properties)) { project.addModelChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { File propertiesFile = XmlPropertiesPersister.getFileForProject(project); - propertiesRef.set(ProjectPropertiesManager.getProperties(propertiesFile)); + propertiesRef.set(ProjectPropertiesManager.getProperties(propertiesFile, loadedSignal)); changes.fireChange(); } });