blob: 7fd2fa0624df42c5e3c7bc09fa0407b859ef45fc [file] [log] [blame]
/* gnu.classpath.tools.doclets.htmldoclet.ExternalDocSet
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
package gnu.classpath.tools.doclets.htmldoclet;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import com.sun.javadoc.ClassDoc;
public class ExternalDocSet
{
private String url;
private String packageListDir;
private URL docSetDirectoryURL;
public String getPackageListDir()
{
return packageListDir;
}
public ExternalDocSet(String url,
String packageListDir)
{
this.url = url;
this.packageListDir = packageListDir;
}
private Set packageNames = new HashSet();
private boolean javadocCompatible;
public void load(File targetDirectory)
throws IOException, MalformedURLException
{
if (!url.endsWith("/")) {
url += "/";
}
this.docSetDirectoryURL = new URL(targetDirectory.toURL(),
url);
URL packageListDirURL;
if (null != packageListDir) {
if (!packageListDir.endsWith("/")) {
packageListDir += "/";
}
packageListDirURL = new URL(new File(System.getProperty("user.dir")).toURL(),
packageListDir);
}
else {
packageListDirURL = docSetDirectoryURL;
}
URL packageListURL = new URL(packageListDirURL,
"package-list");
InputStream in = packageListURL.openStream();
if (null != in) {
readPackages(in);
in.close();
}
else {
throw new FileNotFoundException(packageListURL.toString());
}
URL gjdocPropertiesURL = new URL(packageListDirURL,
"gjdoc.properties");
try {
InputStream propertiesIn = gjdocPropertiesURL.openStream();
if (null != in) {
Properties properties = new Properties();
properties.load(propertiesIn);
propertiesIn.close();
String gjdocCompatProperty = properties.getProperty("gjdoc.compat");
if (null != gjdocCompatProperty) {
javadocCompatible = "true".equals(properties.getProperty("gjdoc.compat"));
}
else {
javadocCompatible = true;
}
}
else {
javadocCompatible = true;
}
}
catch (FileNotFoundException e) {
javadocCompatible = true;
}
}
public String getPackageDocURL(String packageName)
{
try {
URL packageURL = new URL(docSetDirectoryURL,
packageName.replace('.', '/'));
return packageURL.toString();
}
catch (MalformedURLException e) {
// This should not happen since we know that packageName is a
// proper Java identifiers, so the resulting URL can't be
// invalid
throw new RuntimeException(e);
}
}
public String getClassDocURL(String packageName, String typeName)
{
try {
URL fileURL = new URL(docSetDirectoryURL,
packageName.replace('.', '/') + "/" + typeName + ".html");
return fileURL.toString();
}
catch (MalformedURLException e) {
// This should not happen since we know that packageName and
// typeName are proper Java identifiers, so the resulting URL
// can't be invalid
throw new RuntimeException(e);
}
}
protected void readPackages(InputStream in)
throws IOException
{
BufferedReader reader
= new BufferedReader(new InputStreamReader(in, "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
line = line.trim();
packageNames.add(line);
}
}
public Set getPackageNames()
{
return packageNames;
}
public boolean isJavadocCompatible()
{
return javadocCompatible;
}
}