1cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette/*
2cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * Copyright (C) 2014 The Android Open Source Project
3cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette *
4cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * Licensed under the Apache License, Version 2.0 (the "License");
5cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * you may not use this file except in compliance with the License.
6cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * You may obtain a copy of the License at
7cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette *
8cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette *      http://www.apache.org/licenses/LICENSE-2.0
9cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette *
10cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * Unless required by applicable law or agreed to in writing, software
11cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * distributed under the License is distributed on an "AS IS" BASIS,
12cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * See the License for the specific language governing permissions and
14cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * limitations under the License.
15cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette */
16cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette
17cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverettepackage android.support.doclava;
18cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette
196da15639e2092e1999cf699fedd0dd5167091d77Alan Viveretteimport org.gradle.external.javadoc.internal.AbstractJavadocOptionFileOption;
20cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viveretteimport org.gradle.external.javadoc.internal.JavadocOptionFileWriterContext;
21cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette
22cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viveretteimport java.io.IOException;
236da15639e2092e1999cf699fedd0dd5167091d77Alan Viveretteimport java.util.ArrayList;
24cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viveretteimport java.util.Iterator;
25cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette
26cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette/**
27cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette * This class is used to hold complex argument(s) to doclava
28cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette */
296da15639e2092e1999cf699fedd0dd5167091d77Alan Viverettepublic class DoclavaJavadocOptionFileOption extends
306da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette        AbstractJavadocOptionFileOption<Iterable<String>> {
31cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette
32cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette    public DoclavaJavadocOptionFileOption(String option) {
336da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette        super(option, null);
34cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette    }
35cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette
366da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette    public DoclavaJavadocOptionFileOption(String option, Iterable<String> value) {
376da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette        super(option, value);
38cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette    }
39cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette
406da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette    @Override
41cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette    public void write(JavadocOptionFileWriterContext writerContext) throws IOException {
42cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette        writerContext.writeOptionHeader(getOption());
436da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette
446da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette        final Iterable<String> args = getValue();
45cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette        if (args != null) {
466da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette            final Iterator<String> iter = args.iterator();
47cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette            while (true) {
48cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette                writerContext.writeValue(iter.next());
49cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette                if (!iter.hasNext()) {
50cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette                    break;
51cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette                }
52cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette                writerContext.write(" ");
53cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette            }
54cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette        }
556da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette
56cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette        writerContext.newLine();
57cc5197e1c75195409a5c3289df31b3025d3fb364Alan Viverette    }
586da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette
596da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette    /**
606da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette     * @return a deep copy of the option
616da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette     */
626da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette    public DoclavaJavadocOptionFileOption duplicate() {
636da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette        final Iterable<String> value = getValue();
640ac624b67e5d120912c79453a9ab7b53afd271e9Aurimas Liutikas        final ArrayList<String> valueCopy;
650ac624b67e5d120912c79453a9ab7b53afd271e9Aurimas Liutikas        if (value != null) {
660ac624b67e5d120912c79453a9ab7b53afd271e9Aurimas Liutikas            valueCopy = new ArrayList<>();
670ac624b67e5d120912c79453a9ab7b53afd271e9Aurimas Liutikas            for (String item : value) {
680ac624b67e5d120912c79453a9ab7b53afd271e9Aurimas Liutikas                valueCopy.add(item);
690ac624b67e5d120912c79453a9ab7b53afd271e9Aurimas Liutikas            }
700ac624b67e5d120912c79453a9ab7b53afd271e9Aurimas Liutikas        } else {
710ac624b67e5d120912c79453a9ab7b53afd271e9Aurimas Liutikas            valueCopy = null;
726da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette        }
736da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette        return new DoclavaJavadocOptionFileOption(getOption(), valueCopy);
746da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette    }
756da15639e2092e1999cf699fedd0dd5167091d77Alan Viverette}
76