package org.netbeans.gradle.project.java.query;
import java.util.Objects;
import javax.swing.event.ChangeListener;
import org.jtrim.property.PropertySource;
import org.jtrim.property.swing.SwingPropertySource;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.gradle.project.api.property.GradleProperty;
import org.netbeans.gradle.project.java.JavaExtension;
import org.netbeans.gradle.project.properties.NbProperties;
import org.netbeans.spi.java.queries.SourceLevelQueryImplementation2;
import org.openide.filesystems.FileObject;
public final class GradleSourceLevelQueryImplementation
implements
SourceLevelQueryImplementation2 {
private final FileObject projectDir;
private final Result result;
public GradleSourceLevelQueryImplementation(JavaExtension javaExt) {
ExceptionHelper.checkNotNullArgument(javaExt, "javaExt");
this.projectDir = javaExt.getProjectDirectory();
GradleProperty.SourceLevel sourceLevel = javaExt.getOwnerProjectLookup().lookup(GradleProperty.SourceLevel.class);
this.result = new ResultImpl(sourceLevel);
}
@Override
public Result getSourceLevel(FileObject javaFile) {
Project owner = FileOwnerQuery.getOwner(javaFile);
if (owner == null) {
return null;
}
return Objects.equals(projectDir, owner.getProjectDirectory())
? result
: null;
}
private static final class ResultImpl implements Result {
private final SwingPropertySource<String, ChangeListener> property;
@SuppressWarnings("LeakingThisInConstructor")
public ResultImpl(PropertySource<String> sourceLevel) {
this.property = NbProperties.toOldProperty(sourceLevel, this);
}
@Override
public String getSourceLevel() {
return property.getValue();
}
@Override
public void addChangeListener(ChangeListener l) {
property.addChangeListener(l);
}
@Override
public void removeChangeListener(ChangeListener l) {
property.removeChangeListener(l);
}
}
}