content: package com.antfortune.freeline.databinding;
  
  import org.apache.commons.cli.*;
  
  import java.io.File;
  import java.util.Arrays;
  import java.util.List;
  
  /**
   * Created by huangyong on 16/10/21.
   */
  public class CliMain {
  
      private static final String ARG_PACKAGE = "package";
      private static final String ARG_INPUT = "input";
      private static final String ARG_OUTPUT = "output";
      private static final String ARG_CLASSES = "classes";
      private static final String ARG_LAYOUT_INFO = "layout-info";
      private static final String ARG_LIBRARY = "library";
      private static final String ARG_VERSION = "version";
      private static final String ARG_SDK = "sdk";
      private static final String ARG_CHANGED = "changed-files";
  
      public static void main(String[] args) {
          Options options = new Options();
          options.addOption(Option.builder("p").desc("original package name")
                  .longOpt(ARG_PACKAGE)
                  .hasArg()
                  .required()
                  .build());
          options.addOption(Option.builder("i").desc("input resources directory path")
                  .longOpt(ARG_INPUT)
                  .hasArg()
                  .required()
                  .build());
          options.addOption(Option.builder("o").desc("output resources directory path")
                  .longOpt(ARG_OUTPUT)
                  .hasArg()
                  .required()
                  .build());
          options.addOption(Option.builder("d").desc("output layout info directory path")
                  .longOpt(ARG_LAYOUT_INFO)
                  .hasArg()
                  .required()
                  .build());
          options.addOption(Option.builder("c").desc("classes output directory path")
                  .longOpt(ARG_CLASSES)
                  .hasArg()
                  .required()
                  .build());
          options.addOption(Option.builder("l").desc("whether the module is library or not")
                  .longOpt(ARG_LIBRARY)
                  .hasArg()
                  .required()
                  .build());
          options.addOption(Option.builder("v").desc("minSdkVersion")
                  .longOpt(ARG_VERSION)
                  .hasArg()
                  .required()
                  .build());
          options.addOption(Option.builder("s").desc("Android sdk directory path")
                  .longOpt(ARG_SDK)
                  .hasArg()
                  .required()
                  .build());
          options.addOption(Option.builder("a").desc("changed file list, separated by `:`")
                  .longOpt(ARG_CHANGED)
                  .hasArg()
                  .build());
  
          CommandLine commandLine;
          String packageName;
          String inputDirPath;
          String outputDirPath;
          String layoutInfoDirPath;
          String classOutputDirPath;
          String sdkDirectoryPath;
          String changedFilesList;
          boolean isLibrary;
          int minSdkVersion;
  
          try {
              commandLine = new DefaultParser().parse(options, args);
  
              packageName = commandLine.getOptionValue(ARG_PACKAGE);
              inputDirPath = commandLine.getOptionValue(ARG_INPUT);
              outputDirPath = commandLine.getOptionValue(ARG_OUTPUT);
              layoutInfoDirPath = commandLine.getOptionValue(ARG_LAYOUT_INFO);
              classOutputDirPath = commandLine.getOptionValue(ARG_CLASSES);
              sdkDirectoryPath = commandLine.getOptionValue(ARG_SDK);
              changedFilesList = commandLine.getOptionValue(ARG_CHANGED);
              isLibrary = Boolean.parseBoolean(commandLine.getOptionValue(ARG_LIBRARY));
              minSdkVersion = Integer.parseInt(commandLine.getOptionValue(ARG_VERSION));
          } catch (ParseException e) {
              System.err.println("Parse arguments error: " + e.getMessage() + "\n");
              printHelpMessage(options);
              return;
          }
  
          DataBindingHelper.init(packageName, minSdkVersion, classOutputDirPath, isLibrary);
  
          try {
              File inputDirectory = new File(inputDirPath);
              File outputDirectory = new File(outputDirPath);
              File layoutInfoDirectory = new File(layoutInfoDirPath);
              File sdkDirectory = new File(sdkDirectoryPath);
              boolean isIncremental = changedFilesList != null && !"".equals(changedFilesList);
              List<String> filesList = null;
              if (isIncremental) {
                  filesList = Arrays.asList(changedFilesList.split(File.pathSeparator));
              }
  
              ProcessLayouts.run(isIncremental, inputDirectory, outputDirectory, layoutInfoDirectory, filesList);
              ExportDataBindingInfo.run(sdkDirectory, layoutInfoDirectory);
          } catch (Exception e) {
              System.err.println("process databinding error: " + e.getMessage() + "\n");
              e.printStackTrace();
              System.exit(1);
          }
      }
  
      private static void printHelpMessage(Options optionsContainer) {
          String header = "\nUse databinding-cli to process the layout files without gradle.\n";
          String footer = "\nFreeline DataBidning CLI 1.0.2, Please report issues at https://github.com/alibaba/freeline/issues\n";
          HelpFormatter formatter = new HelpFormatter();
          formatter.printHelp("java -jar databinding-cli.jar", header, optionsContainer, footer, true);
      }
  
  }
  