blob: 12cf48e1c5c1ba3e0dd4083114250e90b433ae81 [file] [log] [blame]
/*
* Copyright 2016-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.onosjar;
import com.facebook.buck.cli.BuckConfig;
import com.facebook.buck.jvm.java.JavaLibrary;
import com.facebook.buck.jvm.java.JavadocJar;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.model.Flavor;
import com.facebook.buck.model.Flavored;
import com.facebook.buck.model.Pair;
import com.facebook.buck.parser.NoSuchBuildTargetException;
import com.facebook.buck.rules.BuildRule;
import com.facebook.buck.rules.BuildRuleParams;
import com.facebook.buck.rules.BuildRuleResolver;
import com.facebook.buck.rules.BuildRuleType;
import com.facebook.buck.rules.Description;
import com.facebook.buck.rules.SourcePath;
import com.facebook.buck.rules.SourcePathResolver;
import com.facebook.buck.rules.TargetGraph;
import com.google.common.base.Optional;
import com.google.common.base.Suppliers;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedMap;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Ordering;
import java.nio.file.Path;
import java.util.Map;
/**
* Description for the onos_jar rules.
*
* Currently, this only does Swagger generation.
*/
public class ProjectJavadocDescription implements Description<ProjectJavadocDescription.Arg>, Flavored {
public static final BuildRuleType TYPE = BuildRuleType.of("project_javadoc");
public ProjectJavadocDescription(BuckConfig config) {
//TODO
}
@Override
public BuildRuleType getBuildRuleType() {
return TYPE;
}
@Override
public Arg createUnpopulatedConstructorArg() {
return new Arg();
}
@Override
public <A extends Arg> BuildRule createBuildRule(TargetGraph targetGraph,
BuildRuleParams params,
BuildRuleResolver resolver,
A args)
throws NoSuchBuildTargetException {
ImmutableSet.Builder<SourcePath> srcs = ImmutableSet.builder();
ImmutableSet.Builder<BuildRule> deps = ImmutableSet.builder();
ImmutableSortedMap.Builder<SourcePath, Path> docfiles = ImmutableSortedMap.naturalOrder();
for(BuildTarget dep : args.deps) {
BuildRule rule = resolver.requireRule(dep.withFlavors(JavaLibrary.JAVADOC_JAR));
if (rule instanceof JavadocJar) {
JavadocJar jarRule = (JavadocJar) rule;
srcs.addAll(jarRule.getSources());
deps.addAll(jarRule.getDeps());
docfiles.putAll(jarRule.getDocFiles());
} else {
throw new RuntimeException("rule is not a javalib"); //FIXME
}
}
BuildRuleParams newParams = params.copyWithDeps(
Suppliers.ofInstance(
FluentIterable.from(deps.build())
.toSortedSet(Ordering.<BuildRule>natural())),
Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of()));
SourcePathResolver sourceResolver = new SourcePathResolver(resolver);
ImmutableList.Builder<SourcePath> auxSources = ImmutableList.builder();
JavadocJar.JavadocArgs.Builder javadocArgs = JavadocJar.JavadocArgs.builder()
.addArg("-windowtitle", args.projectTitle)
.addArg("-doctitle", args.projectTitle)
.addArg("-link", "http://docs.oracle.com/javase/8/docs/api")
.addArg("-tag", "onos.rsModel:a:\"onos model\""); //FIXME from buckconfig + rule
if (args.groups.isPresent()) {
for (Pair<String, ImmutableList<String>> pair : args.groups.get()) {
javadocArgs.addArg("-group", pair.getFirst(), pair.getSecond());
}
}
if (args.excludePackages.isPresent() &&
!args.excludePackages.get().isEmpty()) {
javadocArgs.addArg("-exclude", args.excludePackages.get());
}
if (args.overview.isPresent()) {
javadocArgs.addArg("-overview",
sourceResolver.getAbsolutePath(args.overview.get()).toString());
}
if (args.javadocFiles.isPresent()) {
for (SourcePath path : args.javadocFiles.get()) {
docfiles.put(path,
JavadocJar.getDocfileWithPath(sourceResolver, path, args.javadocFilesRoot.orNull()));
}
}
JavadocJar javadocJar = new JavadocJar(newParams,
sourceResolver,
ImmutableSortedSet.copyOf(srcs.build()),
docfiles.build(),
javadocArgs.build(),
/* mavenCoords */ Optional.absent());
return javadocJar;
}
@Override
public boolean hasFlavors(ImmutableSet<Flavor> flavors) {
return false;
}
public static class Arg {
public ImmutableSortedSet<BuildTarget> deps;
public String projectTitle;
public Optional<SourcePath> overview;
public Optional<ImmutableSortedSet<SourcePath>> javadocFiles;
public Optional<Path> javadocFilesRoot;
public Optional<ImmutableList<String>> excludePackages;
public Optional<ImmutableList<Pair<String, ImmutableList<String>>>> groups;
}
}