/*
 * Copyright 2000-2010 JetBrains s.r.o.
 *
 * 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 jetbrains.buildServer.eclipse;

import java.util.regex.Pattern;

public interface EclipseConstants {

  String DISPLAY_NAME = "Eclipse PDE project";
  String RUNNER_TYPE = "eclipse";
  String DESCRIPTION = "Eclipse project builder";
  
  String SWTBOT_DISPLAY_NAME = "Eclipse SWTBot testing";
  String SWTBOT_RUNNER_TYPE = "eclipse-swtbot";
  String SWTBOT_DESCRIPTION = "SWTBot is an open-source Java based UI/functional testing tool for testing SWT and Eclipse based applications.";

  String ECLIPSE_HOME_ENV_NAME = "ECLIPSE_HOME";
  String ECLIPSE_HOME_PROP_NAME = "teamcity.eclipse.home";
  /**
   * Launcher's and builder's  
   */
  Pattern ECLIPSE_EQUINOX_LAUNCHER_JAR_PATTERN = Pattern.compile("org\\.eclipse\\.equinox\\.launcher_(.*)\\.jar");
  Pattern ECLIPSE_PDE_BUILDER_FOLDER_PATTEN = Pattern.compile("org\\.eclipse\\.pde\\.build_(.*)");
  String ECLIPSE_PDE_BUILDER_SCRIPT_PATH = "scripts/build.xml";  

  /**
   * UI settings
   */
  String SETTINGS_ECLIPSE_BASE = "eclipse.base.parameter";

  String SETTINGS_RELATIVE_PATH_TO_PROJECT = "eclipse.path.to.project";
  String SETTINGS_ARTIFACTS_OUTPUT_PATH = "eclipse.artifacts.output.path";
  String SETTINGS_ARTIFACTS_OUTPUT_ZIP = "eclipse.artifacts.output.zip";  

  String SETTINGS_TYPE_PARAMETER = "eclipse.type.parameter";
  String SETTINGS_TYPE_ID_PARAMETER = "eclipse.type.id.parameter";
  
  String SETTINGS_OPTIONS_CONTEXT_QUALIFIER = "eclipse.context.qualifier";
  String SETTINGS_OPTIONS_INCLUDE_DEBUG_INFO = "javacDebugInfo";
  
  String SETTINGS_TESTS_OUTPUT_PATH = "eclipse.tests.output.path";
  String SETTINGS_TESTS_WORKSPACE_PATH = "eclipse.tests.workspace.path";
  String SETTINGS_TESTS_CLASS_NAME = "eclipse.tests.class.name";  

  /**
   * properties from template build.properties file must be overridden
   */
  /**
   * type of building element: plugin, feature, site, product...
   */
  String PDE_BUILD_PROP_TOPLEVEL_ELEMENT_ID = "topLevelElementId";
  /**
   * The directory into which the build elements are fetched and where the build
   * takes place.
   */
  String PDE_BUILD_PROP_WORKING_FOLDER = "buildDirectory";
  /**
   * Where an Eclipse located in @see
   * {@link EclipseConstants#SETTINGS_ECLIPSE_BASE} as corresponding TC UI
   * setting
   */
  String PDE_BUILD_PROP_BASE_LOCATION = "baseLocation";
  /**
   * The value to be used for the qualifier of a plugin or feature when you want to override the value computed by pde.
   */
  String PDE_BUILD_PROP_CONTEXT_QUALIFIER = "forceContextQualifier";
  /**
   * Enable / disable the generation of a suffix for the features that use .qualifier. 
   */
  String PDE_BUILD_PROP_GENERATE_FETURE_SUFFIX = "generateFeatureVersionSuffix";
  /**
   * Whether or not to include debug info in the output jars
   */
  String PDE_BUILD_PROP_INCLUDE_DEBUG_INFO = "javacDebugInfo";
  /**
   * Extra arguments for the compiler. These are specific to the java compiler
   * being used.
   */
  String PDE_BUILD_PROP_COMPILER_ARG = "compilerArg";
  /**
   * Default value for the version of the source code. This value is used when
   * compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment
   * or set javacSource in build.properties
   */
  String PDE_BUILD_PROP_JAVAC_SOURCE = "javacSource";
  /**
   * Default value for the version of the byte code targeted. This value is used
   * when compiling plug-ins that do not set the
   * Bundle-RequiredExecutionEnvironment or set javacTarget in build.properties.
   */
  String PDE_BUILD_PROP_JAVAC_TARGET = "javacTarget";

  /**
   * PDE builder settings
   */
  String PDE_CONFIG_DIR_PATH_NAME = "builder";
  String PDE_P2_GENERATE_METADATA = "generate.p2.metadata";
  String PDE_P2_METADATA_REPO = "p2.metadata.repo";
  String PDE_P2_ARTIFACT_REPO = "p2.artifact.repo";
  String PDE_P2_ARTIFACT_REPO_NAME = "p2.artifact.repo.name";
  String PDE_P2_METADATA_REPO_NAME = "p2.metadata.repo.name";
  String PDE_P2_PUBLISH_ARTIFACTS = "p2.publish.artifacts";
  String PDE_P2_CATEGORY_SITE = "p2.category.site";
  String PDE_P2_APPEND = "p2.append";
  
  /**
   * Signing settings
   */
  String PDE_SIGN_JARS = "signJars"; //  #signJars=false
  String PDE_SIGN_ALIAS = "sign.alias"; //  #sign.alias=<alias>
  String PDE_SIGN_KEYSTORE = "sign.keystore"; //  #sign.keystore=<keystore location>
  String PDE_SIGN_STOREPASS = "sign.storepass"; //  #sign.storepass=<keystore password>
  String PDE_SIGN_KEYPASS = "sign.keypass"; //  #sign.keypass=<key password>  
  
  /**
   * Eclipse project's natures
   */
  String ECLIPSE_PROJECT_JAVA_NATURE = "org.eclipse.jdt.core.javanature";
  String ECLIPSE_PROJECT_PLUGIN_NATURE = "org.eclipse.pde.PluginNature";
  String ECLIPSE_PROJECT_FEATURE_NATURE = "org.eclipse.pde.FeatureNature";
  String ECLIPSE_PROJECT_SITE_NATURE = "org.eclipse.pde.UpdateSiteNature";
  String ECLIPSE_PROJECT_PRODUCT_NATURE = "???";
  
  /**
   * Eclipse project's build type(target)
   */
  String ECLIPSE_BUILD_TYPE_JAVA = "java";
  String ECLIPSE_BUILD_TYPE_PLUGIN = "plugin";
  String ECLIPSE_BUILD_TYPE_FEATURE = "feature";
  String ECLIPSE_BUILD_TYPE_SITE = "site";
  String ECLIPSE_BUILD_TYPE_PRODUCT = "product";
  
}
