ONOS Swagger Plugin

just does swagger now
to build the plugin, you need to download to following:
https://github.com/bocon13/buck/releases/download/v2016.07.29.01-wip/buck.jar

put the buck.jar in tools/build/buck-plugin/lib

Change-Id: Id1b833dd013fbc5581f8e884e755920829c4a17e
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
new file mode 100644
index 0000000..7632ade
--- /dev/null
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.CalculateAbi;
+import com.facebook.buck.jvm.java.DefaultJavaLibrary;
+import com.facebook.buck.jvm.java.JavaBuckConfig;
+import com.facebook.buck.jvm.java.JavaLibraryDescription;
+import com.facebook.buck.jvm.java.JavaOptions;
+import com.facebook.buck.jvm.java.JavacOptions;
+import com.facebook.buck.jvm.java.JavacOptionsAmender;
+import com.facebook.buck.jvm.java.JavacOptionsFactory;
+import com.facebook.buck.model.BuildTarget;
+import com.facebook.buck.model.Flavor;
+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.BuildRules;
+import com.facebook.buck.rules.BuildTargetSourcePath;
+import com.facebook.buck.rules.Description;
+import com.facebook.buck.rules.SourcePathResolver;
+import com.facebook.buck.rules.SourcePaths;
+import com.facebook.buck.rules.TargetGraph;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Iterables;
+
+import java.nio.file.Path;
+
+import static com.facebook.buck.jvm.common.ResourceValidator.validateResources;
+
+/**
+ * Description for the onos_jar rules.
+ *
+ * Currently, this only does Swagger generation.
+ */
+public class OnosJarDescription implements Description<OnosJarDescription.Arg> {
+    public static final BuildRuleType TYPE = BuildRuleType.of("onos_jar");
+    private final JavacOptions defaultJavacOptions;
+    private final JavaOptions defaultJavaOptions;
+
+    public OnosJarDescription(BuckConfig config) {
+        JavaBuckConfig javaConfig = new JavaBuckConfig(config);
+        defaultJavacOptions = javaConfig.getDefaultJavacOptions();
+        defaultJavaOptions = javaConfig.getDefaultJavaOptions();
+    }
+
+    @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 {
+
+
+        SourcePathResolver pathResolver = new SourcePathResolver(resolver);
+        BuildTarget target = params.getBuildTarget();
+
+        // We know that the flavour we're being asked to create is valid, since the check is done when
+        // creating the action graph from the target graph.
+
+        ImmutableSortedSet<Flavor> flavors = target.getFlavors();
+        BuildRuleParams paramsWithMavenFlavor = null;
+
+        JavacOptions javacOptions = JavacOptionsFactory.create(
+                defaultJavacOptions,
+                params,
+                resolver,
+                pathResolver,
+                args
+        );
+
+        BuildTarget abiJarTarget = params.getBuildTarget().withAppendedFlavors(CalculateAbi.FLAVOR);
+
+        ImmutableSortedSet<BuildRule> exportedDeps = resolver.getAllRules(args.exportedDeps.get());
+
+        DefaultJavaLibrary defaultJavaLibrary =
+                resolver.addToIndex(
+                        new OnosJar(
+                                params.appendExtraDeps(
+                                        Iterables.concat(
+                                                BuildRules.getExportedRules(
+                                                        Iterables.concat(
+                                                                params.getDeclaredDeps().get(),
+                                                                exportedDeps,
+                                                                resolver.getAllRules(args.providedDeps.get()))),
+                                                pathResolver.filterBuildRuleInputs(
+                                                        javacOptions.getInputs(pathResolver)))),
+                                pathResolver,
+                                args.srcs.get(),
+                                validateResources(
+                                        pathResolver,
+                                        params.getProjectFilesystem(),
+                                        args.resources.get()),
+                                javacOptions.getGeneratedSourceFolderName(),
+                                args.proguardConfig.transform(
+                                        SourcePaths.toSourcePath(params.getProjectFilesystem())),
+                                args.postprocessClassesCommands.get(), // FIXME this should be forbidden
+                                exportedDeps,
+                                resolver.getAllRules(args.providedDeps.get()),
+                                new BuildTargetSourcePath(abiJarTarget),
+                                javacOptions.trackClassUsage(),
+                                /* additionalClasspathEntries */ ImmutableSet.<Path>of(),
+                                new OnosJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY,
+                                                       args.webContext, args.apiTitle, args.apiVersion,
+                                                       args.apiPackage, args.apiDescription, args.resources),
+                                args.resourcesRoot,
+                                args.mavenCoords,
+                                args.tests.get(),
+                                javacOptions.getClassesToRemoveFromJar(),
+                                args.webContext,
+                                args.apiTitle,
+                                args.apiVersion,
+                                args.apiPackage,
+                                args.apiDescription));
+
+        resolver.addToIndex(
+                CalculateAbi.of(
+                        abiJarTarget,
+                        pathResolver,
+                        params,
+                        new BuildTargetSourcePath(defaultJavaLibrary.getBuildTarget())));
+
+        return defaultJavaLibrary;
+    }
+
+
+    public static class Arg extends JavaLibraryDescription.Arg {
+        public Optional<String> webContext;
+        public Optional<String> apiTitle;
+        public Optional<String> apiVersion;
+        public Optional<String> apiPackage;
+        public Optional<String> apiDescription;
+    }
+}
\ No newline at end of file