/*
* Copyright 2013-2017 (c) MuleSoft, Inc.
*
* 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.raml.jaxrs.cli;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.FluentIterable;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.raml.jaxrs.converter.RamlConfiguration;
import org.raml.jaxrs.raml.core.DefaultRamlConfiguration;
import org.raml.jaxrs.raml.core.OneStopShop;
import javax.annotation.Nullable;
import java.lang.annotation.Annotation;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) throws Exception {
Options options = new Options();
options.addOption(Option.builder("a").required().longOpt("applicationDirectory").hasArg().desc("application path").build());
options.addOption(Option.builder("o").required().longOpt("output").hasArg().desc("RAML output file").build());
options.addOption("s", "sourceRoot", true, "JaxRs source root");
options.addOption("t", "translatedAnnotations", true, "translated annotation list (comma separated");
try {
CommandLineParser parser = new DefaultParser();
CommandLine command = parser.parse(options, args);
Path jaxRsResourceFile = Paths.get(command.getOptionValue('a'));
Path ramlOutputFile = Paths.get(command.getOptionValue('o'));
Path jaxRsSourceRoot = null;
if (command.hasOption('s')) {
jaxRsSourceRoot = Paths.get(command.getOptionValue('s'));
}
RamlConfiguration ramlConfiguration =
DefaultRamlConfiguration.forApplication(jaxRsResourceFile.getFileName().toString(),
Collections.<Class<? extends Annotation>>emptySet());
OneStopShop.Builder builder =
OneStopShop.builder().withJaxRsClassesRoot(jaxRsResourceFile)
.withRamlOutputFile(ramlOutputFile).withRamlConfiguration(ramlConfiguration);
if (null != jaxRsSourceRoot) {
builder.withSourceCodeRoot(jaxRsSourceRoot);
}
if (command.hasOption('t')) {
String[] classes = command.getOptionValue('t').split(",");
List<Class<? extends Annotation>> c =
FluentIterable.of(classes).transform(
new Function<String, Class<? extends Annotation>>() {
@Nullable
@Override
public Class<? extends Annotation> apply(@Nullable String input) {
try {
return (Class<? extends Annotation>) Class.forName(input);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException(
"while building translated annotations list",
e);
}
}
}).toList();
builder.withTranslatedAnnotations(c);
}
OneStopShop oneStopShop = builder.build();
oneStopShop.parseJaxRsAndOutputRaml();
} catch (ParseException e) {
HelpFormatter formatter = new HelpFormatter();
System.err.println(e.getMessage());
formatter.printHelp("jaxrstoraml", options, true);
}
}
}