/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.apache.uima.ruta.ide.launching;

public class RutaLaunchConstants {

  public static final String ARG_INPUT_FOLDER = "-inputFolder";

  public static final String ARG_OUTPUT_FOLDER = "-outputFolder";

  public static final String ARG_DESCRIPTOR = "-descriptor";

  public static final String ARG_RECURSIVE = "-inputRecursive";

  public static final String ARG_MODE = "-mode";

  public static final String ARG_VIEW = "-view";

  public static final String ARG_ENCODING = "-encoding";

  public static final String INPUT_FOLDER = "org.apache.uima.ruta.ide.launching.inputFolder";

  public static final String OUTPUT_FOLDER = "org.apache.uima.ruta.ide.launching.outputFolder";

  public static final String RECURSIVE = "org.apache.uima.ruta.ide.launching.recursive";

  public static final String VIEW = "org.apache.uima.ruta.ide.launching.view";

  public static final String ARG_ADD_SDI = "org.apache.uima.ruta.ide.launching.addsdi";

  public static final String ARG_FORMAT = "org.apache.uima.ruta.ide.launching.defaultFormat";

  public static final String ARG_CLASSPATH = "org.apache.uima.ruta.ide.launching.classPath";

}
