/******************************************************************************
* Copyright (c) 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.doclet.proxies;
import java.util.ArrayList;
import org.eclipse.gmf.doclet.Doclet;
import org.eclipse.gmf.doclet.ITagDefinitions;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.PackageDoc;
import com.sun.javadoc.RootDoc;
import com.sun.javadoc.SourcePosition;
/**
* Proxy to a RootDoc. Manages the filtering of classes and packages.
*/
public class RootDocProxy extends DocProxy implements RootDoc
{
private ClassDoc[] filteredClasses = null;
private ClassDoc[] filteredSpecifiedClasses = null;
private PackageDoc[] filteredSpecifiedPackages = null;
private String options[][] = null;
public RootDocProxy(RootDoc innerRootDoc)
{
super(innerRootDoc);
setFilteredClasses(filterClasses(getInnerRootDoc().classes()));
setFilteredSpecifiedClasses(filterClasses(getInnerRootDoc().specifiedClasses()));
setFilteredPackages(filterPackages(getInnerRootDoc().specifiedPackages()));
}
private RootDoc getInnerRootDoc()
{
return (RootDoc)getInnerObject();
}
private ClassDoc[] getFilteredClasses()
{
return this.filteredClasses;
}
private void setFilteredClasses(ClassDoc[] filteredClasses)
{
this.filteredClasses = filteredClasses;
}
private ClassDoc[] getFilteredSpecifiedClasses()
{
return this.filteredSpecifiedClasses;
}
private void setFilteredSpecifiedClasses(ClassDoc[] filteredSpecifiedClasses)
{
this.filteredSpecifiedClasses = filteredSpecifiedClasses;
}
private PackageDoc[] getFilteredSpecifiedPackages()
{
return this.filteredSpecifiedPackages;
}
private void setFilteredPackages(PackageDoc[] filteredSpecifiedPackages)
{
this.filteredSpecifiedPackages = filteredSpecifiedPackages;
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.RootDoc#classes()
*/
public ClassDoc[] classes()
{
return getFilteredClasses();
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.RootDoc#specifiedClasses()
*/
public ClassDoc[] specifiedClasses()
{
return getFilteredSpecifiedClasses();
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.RootDoc#specifiedPackages()
*/
public PackageDoc[] specifiedPackages()
{
return getFilteredSpecifiedPackages();
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.RootDoc#options()
*/
public String[][] options()
{
if (this.options == null)
{
this.options = getOptions();
}
return this.options;
}
private String[][] getOptions()
{
String innerOptions[][] = getInnerRootDoc().options();
/* Regenerate a new array of options that includes our default options */
ArrayList augmentedOptions = new ArrayList();
for (int i = 0; i < innerOptions.length; i++)
{
String[] opt = innerOptions[i];
augmentedOptions.add(opt);
}
/* Ensure no warnings on our custom tags */
augmentedOptions.add(new String []{ "-tag", ITagDefinitions.TAG_CAN_BE_SEEN_BY + ":X" }); //$NON-NLS-1$//$NON-NLS-2$
return (String[][])augmentedOptions.toArray(new String [0] [0]);
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.RootDoc#classNamed(java.lang.String)
*/
public ClassDoc classNamed(String arg0)
{
return ProxyFactory.getInstance().createClassDocProxy(getInnerRootDoc().classNamed(arg0));
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.RootDoc#packageNamed(java.lang.String)
*/
public PackageDoc packageNamed(String arg0)
{
return ProxyFactory.getInstance().createPackageDocProxy(getInnerRootDoc().packageNamed(arg0));
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.DocErrorReporter#printError(java.lang.String)
*/
public void printError(String arg0)
{
getInnerRootDoc().printError(arg0);
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.DocErrorReporter#printNotice(java.lang.String)
*/
public void printNotice(String arg0)
{
getInnerRootDoc().printNotice(arg0);
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.DocErrorReporter#printWarning(java.lang.String)
*/
public void printWarning(String arg0)
{
getInnerRootDoc().printWarning(arg0);
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.DocErrorReporter#printError(com.sun.javadoc.SourcePosition,
* java.lang.String)
*/
public void printError(SourcePosition arg0, String arg1)
{
getInnerRootDoc().printError(arg0, arg1);
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.DocErrorReporter#printNotice(com.sun.javadoc.SourcePosition,
* java.lang.String)
*/
public void printNotice(SourcePosition arg0, String arg1)
{
getInnerRootDoc().printNotice(arg0, arg1);
}
/*
* (non-Javadoc)
*
* @see com.sun.javadoc.DocErrorReporter#printWarning(com.sun.javadoc.SourcePosition,
* java.lang.String)
*/
public void printWarning(SourcePosition arg0, String arg1)
{
getInnerRootDoc().printWarning(arg0, arg1);
}
private ClassDoc[] filterClasses(ClassDoc[] classes)
{
ArrayList retClasses = new ArrayList();
for (int i = 0; i < classes.length; i++)
{
ClassDoc classDoc = classes[i];
if (false == isFiltered(classDoc))
{
retClasses.add(ProxyFactory.getInstance().createClassDocProxy(classDoc));
}
}
return (ClassDoc[])retClasses.toArray(new ClassDoc [0]);
}
private boolean isFiltered(ClassDoc classDoc)
{
return (Doclet.getNamespaceChecker().isClientPreventedToSee(classDoc.qualifiedName()));
}
private PackageDoc[] filterPackages(PackageDoc[] packages)
{
ArrayList retPackages = new ArrayList();
for (int i = 0; i < packages.length; i++)
{
PackageDoc packageDoc = packages[i];
if (false == isFiltered(packageDoc))
{
retPackages.add(ProxyFactory.getInstance().createPackageDocProxy(packageDoc));
}
}
return (PackageDoc[])retPackages.toArray(new PackageDoc [0]);
}
private boolean isFiltered(PackageDoc packageDoc)
{
return (Doclet.getNamespaceChecker().isClientPreventedToSee(packageDoc.name()));
}
}