blob: 12cf48e1c5c1ba3e0dd4083114250e90b433ae81 [file] [log] [blame]
Brian O'Connor3d59f712016-10-05 21:42:36 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Brian O'Connor3d59f712016-10-05 21:42:36 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.onosjar;
17
18import com.facebook.buck.cli.BuckConfig;
19import com.facebook.buck.jvm.java.JavaLibrary;
20import com.facebook.buck.jvm.java.JavadocJar;
21import com.facebook.buck.model.BuildTarget;
22import com.facebook.buck.model.Flavor;
23import com.facebook.buck.model.Flavored;
24import com.facebook.buck.model.Pair;
25import com.facebook.buck.parser.NoSuchBuildTargetException;
26import com.facebook.buck.rules.BuildRule;
27import com.facebook.buck.rules.BuildRuleParams;
28import com.facebook.buck.rules.BuildRuleResolver;
29import com.facebook.buck.rules.BuildRuleType;
30import com.facebook.buck.rules.Description;
31import com.facebook.buck.rules.SourcePath;
32import com.facebook.buck.rules.SourcePathResolver;
33import com.facebook.buck.rules.TargetGraph;
34import com.google.common.base.Optional;
35import com.google.common.base.Suppliers;
36import com.google.common.collect.FluentIterable;
37import com.google.common.collect.ImmutableList;
38import com.google.common.collect.ImmutableSet;
39import com.google.common.collect.ImmutableSortedMap;
40import com.google.common.collect.ImmutableSortedSet;
41import com.google.common.collect.Ordering;
42
43import java.nio.file.Path;
44import java.util.Map;
45
46/**
47 * Description for the onos_jar rules.
48 *
49 * Currently, this only does Swagger generation.
50 */
51public class ProjectJavadocDescription implements Description<ProjectJavadocDescription.Arg>, Flavored {
52 public static final BuildRuleType TYPE = BuildRuleType.of("project_javadoc");
53
54 public ProjectJavadocDescription(BuckConfig config) {
55 //TODO
56 }
57
58 @Override
59 public BuildRuleType getBuildRuleType() {
60 return TYPE;
61 }
62
63 @Override
64 public Arg createUnpopulatedConstructorArg() {
65 return new Arg();
66 }
67
68 @Override
69 public <A extends Arg> BuildRule createBuildRule(TargetGraph targetGraph,
70 BuildRuleParams params,
71 BuildRuleResolver resolver,
72 A args)
73 throws NoSuchBuildTargetException {
74
75 ImmutableSet.Builder<SourcePath> srcs = ImmutableSet.builder();
76 ImmutableSet.Builder<BuildRule> deps = ImmutableSet.builder();
77 ImmutableSortedMap.Builder<SourcePath, Path> docfiles = ImmutableSortedMap.naturalOrder();
78 for(BuildTarget dep : args.deps) {
79 BuildRule rule = resolver.requireRule(dep.withFlavors(JavaLibrary.JAVADOC_JAR));
80 if (rule instanceof JavadocJar) {
81 JavadocJar jarRule = (JavadocJar) rule;
82 srcs.addAll(jarRule.getSources());
83 deps.addAll(jarRule.getDeps());
84 docfiles.putAll(jarRule.getDocFiles());
85 } else {
86 throw new RuntimeException("rule is not a javalib"); //FIXME
87 }
88 }
89
90 BuildRuleParams newParams = params.copyWithDeps(
91 Suppliers.ofInstance(
92 FluentIterable.from(deps.build())
93 .toSortedSet(Ordering.<BuildRule>natural())),
94 Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of()));
95
96 SourcePathResolver sourceResolver = new SourcePathResolver(resolver);
97 ImmutableList.Builder<SourcePath> auxSources = ImmutableList.builder();
98
99 JavadocJar.JavadocArgs.Builder javadocArgs = JavadocJar.JavadocArgs.builder()
100 .addArg("-windowtitle", args.projectTitle)
101 .addArg("-doctitle", args.projectTitle)
102 .addArg("-link", "http://docs.oracle.com/javase/8/docs/api")
103 .addArg("-tag", "onos.rsModel:a:\"onos model\""); //FIXME from buckconfig + rule
104
105 if (args.groups.isPresent()) {
106 for (Pair<String, ImmutableList<String>> pair : args.groups.get()) {
107 javadocArgs.addArg("-group", pair.getFirst(), pair.getSecond());
108 }
109 }
110
111 if (args.excludePackages.isPresent() &&
112 !args.excludePackages.get().isEmpty()) {
113 javadocArgs.addArg("-exclude", args.excludePackages.get());
114 }
115
116 if (args.overview.isPresent()) {
117 javadocArgs.addArg("-overview",
118 sourceResolver.getAbsolutePath(args.overview.get()).toString());
119
120 }
121
122 if (args.javadocFiles.isPresent()) {
123 for (SourcePath path : args.javadocFiles.get()) {
124 docfiles.put(path,
125 JavadocJar.getDocfileWithPath(sourceResolver, path, args.javadocFilesRoot.orNull()));
126 }
127 }
128
129
130 JavadocJar javadocJar = new JavadocJar(newParams,
131 sourceResolver,
132 ImmutableSortedSet.copyOf(srcs.build()),
133 docfiles.build(),
134 javadocArgs.build(),
135 /* mavenCoords */ Optional.absent());
136 return javadocJar;
137
138 }
139
140 @Override
141 public boolean hasFlavors(ImmutableSet<Flavor> flavors) {
142 return false;
143 }
144
145 public static class Arg {
146 public ImmutableSortedSet<BuildTarget> deps;
147 public String projectTitle;
148
149 public Optional<SourcePath> overview;
150 public Optional<ImmutableSortedSet<SourcePath>> javadocFiles;
151 public Optional<Path> javadocFilesRoot;
152
153 public Optional<ImmutableList<String>> excludePackages;
154 public Optional<ImmutableList<Pair<String, ImmutableList<String>>>> groups;
155 }
156}