001/*
002 * JDrupes MDoclet
003 * Copyright 2013 Raffael Herzog
004 * Copyright (C) 2017 Michael N. Lipp
005 * 
006 * This program is free software; you can redistribute it and/or modify it 
007 * under the terms of the GNU General Public License as published by 
008 * the Free Software Foundation; either version 3 of the License, or 
009 * (at your option) any later version.
010 * 
011 * This program is distributed in the hope that it will be useful, but 
012 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
013 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
014 * for more details.
015 * 
016 * You should have received a copy of the GNU General Public License along 
017 * with this program; if not, see <http://www.gnu.org/licenses/>.
018 */
019package org.jdrupes.mdoclet;
020
021import java.util.Arrays;
022
023import com.sun.javadoc.ClassDoc;
024import com.sun.javadoc.PackageDoc;
025import com.sun.javadoc.RootDoc;
026import com.sun.javadoc.SeeTag;
027import com.sun.javadoc.SourcePosition;
028import com.sun.javadoc.Tag;
029
030
031/**
032 * A wrapper for the {@link RootDoc}. It forwards all calls to the original root document
033 * exception {@link #options()}, which may contain a modified array of doclet options.
034 */
035public class RootDocWrapper implements RootDoc {
036
037    private final RootDoc delegate;
038    private String[][] options;
039
040    public RootDocWrapper(RootDoc delegate, String[][] options) {
041        this.delegate = delegate;
042        this.options = options;
043    }
044
045    /**
046     * Looks for the given option and returns it, if it exists.
047     * 
048     * @return the option or `null`
049     */
050    public String[] findOption(String option) {
051        for (String[] o: options) {
052                if (o[0].equals(option)) {
053                        return o;
054                }
055        }
056        return null;
057    }
058    
059    /**
060     * Append an option to the doclet options.
061     *
062     * @param option    The option to append.
063     */
064    public void appendOption(String... option) {
065        options = Arrays.copyOf(options, options.length + 1);
066        options[options.length - 1] = option;
067    }
068
069    /**
070     * Overriden to return a modified array of doclet options.
071     *
072     * @return The modified doclet options.
073     */
074    @Override
075    public String[][] options() {
076        return options;
077    }
078
079    @Override
080    public PackageDoc[] specifiedPackages() {
081        return delegate.specifiedPackages();
082    }
083
084    @Override
085    public ClassDoc[] specifiedClasses() {
086        return delegate.specifiedClasses();
087    }
088
089    @Override
090    public ClassDoc[] classes() {
091        return delegate.classes();
092    }
093
094    @Override
095    public PackageDoc packageNamed(String name) {
096        return delegate.packageNamed(name);
097    }
098
099    @Override
100    public ClassDoc classNamed(String qualifiedName) {
101        return delegate.classNamed(qualifiedName);
102    }
103
104    @Override
105    public String commentText() {
106        return delegate.commentText();
107    }
108
109    @Override
110    public Tag[] tags() {
111        return delegate.tags();
112    }
113
114    @Override
115    public Tag[] tags(String tagname) {
116        return delegate.tags(tagname);
117    }
118
119    @Override
120    public SeeTag[] seeTags() {
121        return delegate.seeTags();
122    }
123
124    @Override
125    public Tag[] inlineTags() {
126        return delegate.inlineTags();
127    }
128
129    @Override
130    public Tag[] firstSentenceTags() {
131        return delegate.firstSentenceTags();
132    }
133
134    @Override
135    public String getRawCommentText() {
136        return delegate.getRawCommentText();
137    }
138
139    @Override
140    public void setRawCommentText(String rawDocumentation) {
141        delegate.setRawCommentText(rawDocumentation);
142    }
143
144    @Override
145    public String name() {
146        return delegate.name();
147    }
148
149    @Override
150    public int compareTo(Object obj) {
151        return delegate.compareTo(obj);
152    }
153
154    @Override
155    public boolean isField() {
156        return delegate.isField();
157    }
158
159    @Override
160    public boolean isEnumConstant() {
161        return delegate.isEnumConstant();
162    }
163
164    @Override
165    public boolean isConstructor() {
166        return delegate.isConstructor();
167    }
168
169    @Override
170    public boolean isMethod() {
171        return delegate.isMethod();
172    }
173
174    @Override
175    public boolean isAnnotationTypeElement() {
176        return delegate.isAnnotationTypeElement();
177    }
178
179    @Override
180    public boolean isInterface() {
181        return delegate.isInterface();
182    }
183
184    @Override
185    public boolean isException() {
186        return delegate.isException();
187    }
188
189    @Override
190    public boolean isError() {
191        return delegate.isError();
192    }
193
194    @Override
195    public boolean isEnum() {
196        return delegate.isEnum();
197    }
198
199    @Override
200    public boolean isAnnotationType() {
201        return delegate.isAnnotationType();
202    }
203
204    @Override
205    public boolean isOrdinaryClass() {
206        return delegate.isOrdinaryClass();
207    }
208
209    @Override
210    public boolean isClass() {
211        return delegate.isClass();
212    }
213
214    @Override
215    public boolean isIncluded() {
216        return delegate.isIncluded();
217    }
218
219    @Override
220    public SourcePosition position() {
221        return delegate.position();
222    }
223
224    @Override
225    public void printError(String msg) {
226        delegate.printError(msg);
227    }
228
229    @Override
230    public void printError(SourcePosition pos, String msg) {
231        delegate.printError(pos, msg);
232    }
233
234    @Override
235    public void printWarning(String msg) {
236        delegate.printWarning(msg);
237    }
238
239    @Override
240    public void printWarning(SourcePosition pos, String msg) {
241        delegate.printWarning(pos, msg);
242    }
243
244    @Override
245    public void printNotice(String msg) {
246        delegate.printNotice(msg);
247    }
248
249    @Override
250    public void printNotice(SourcePosition pos, String msg) {
251        delegate.printNotice(pos, msg);
252    }
253}