Skip to content

Commit

Permalink
It is now possible to wait for properties to be loaded from the file.
Browse files Browse the repository at this point in the history
  • Loading branch information
kelemen committed Sep 22, 2012
1 parent 38d6ae5 commit 39903e5
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 4 deletions.
11 changes: 10 additions & 1 deletion src/org/netbeans/gradle/project/NbGradleProject.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public final class NbGradleProject implements Project {
private final ChangeSupport modelChanges;
private final AtomicBoolean hasModelBeenLoaded;
private final AtomicReference<NbGradleModel> currentModelRef;
private final ProjectProperties properties;
private final ProjectPropertiesProxy properties;
private final ProjectInfoManager projectInfoManager;

private final AtomicReference<ProjectInfoRef> loadErrorRef;
Expand Down Expand Up @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand All @@ -72,6 +76,9 @@ public void run() {
persister.load(newProperties, new Runnable() {
@Override
public void run() {
if (loadedSignal != null) {
loadedSignal.signal();
}
setSaveOnChange(newProperties, persister);
}
});
Expand All @@ -89,6 +96,11 @@ public void run() {
MAIN_LOCK.unlock();
}
}
else {
if (loadedSignal != null) {
loadedSignal.signal();
}
}

return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -28,12 +29,14 @@ public final class ProjectPropertiesProxy extends AbstractProjectProperties {
private final MutablePropertyProxy<JavaPlatform> platformProxy;
private final MutablePropertyProxy<Charset> sourceEncodingProxy;
private final MutablePropertyProxy<List<PredefinedTask>> commonTasksProxy;
private final WaitableSignal loadedSignal;

public ProjectPropertiesProxy(NbGradleProject project) {
if (project == null) throw new NullPointerException("project");
this.project = project;
this.propertiesRef = new AtomicReference<ProjectProperties>(null);
this.changes = new ChangeSupport(this);
this.loadedSignal = new WaitableSignal();

this.sourceLevelProxy = new MutablePropertyProxy<String>(new ProjectMutablePropertyRef<String>(this) {
@Override
Expand Down Expand Up @@ -61,17 +64,22 @@ public MutableProperty<List<PredefinedTask>> 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();
}
});
Expand Down

0 comments on commit 39903e5

Please sign in to comment.