package org.netbeans.gradle.project.java.query;
import java.io.File;
import java.net.URL;
import javax.swing.event.ChangeListener;
import org.netbeans.api.java.queries.JavadocForBinaryQuery;
import org.netbeans.gradle.project.query.AbstractJavadocForBinaryQuery;
import org.netbeans.spi.java.queries.JavadocForBinaryQueryImplementation;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.lookup.ServiceProvider;
import org.openide.util.lookup.ServiceProviders;
@ServiceProviders({@ServiceProvider(service = JavadocForBinaryQueryImplementation.class)})
public final class AutoJavaJavadocForBinaryQuery extends AbstractJavadocForBinaryQuery {
private static final URL[] NO_ROOTS = new URL[0];
private static final String JAVADOC_SUFFIX = "-javadoc.zip";
public static FileObject javadocForJar(FileObject binaryRoot) {
String srcFileName = binaryRoot.getName() + JAVADOC_SUFFIX;
FileObject dir = binaryRoot.getParent();
if (dir == null) {
return null;
}
FileObject result = dir.getFileObject(srcFileName);
return result != null
? FileUtil.getArchiveRoot(result)
: null;
}
@Override
protected JavadocForBinaryQuery.Result tryFindJavadoc(File binaryRoot) {
final FileObject binaryRootObj = FileUtil.toFileObject(binaryRoot);
if (binaryRootObj == null) {
return null;
}
// TODO: Adjust global settings to allow prefer javadoc over sources.
if (AutoJavaSourceForBinaryQuery.sourceForJar(binaryRootObj) != null) {
return null;
}
if (javadocForJar(binaryRootObj) == null) {
return null;
}
return new JavadocForBinaryQuery.Result() {
@Override
public URL[] getRoots() {
FileObject javadoc = javadocForJar(binaryRootObj);
if (javadoc == null) {
return NO_ROOTS;
}
return new URL[]{javadoc.toURL()};
}
@Override
public void addChangeListener(ChangeListener l) {
}
@Override
public void removeChangeListener(ChangeListener l) {
}
};
}
}