/**
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 * 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 * 
 *  This copyright notice shows up in the generated Java code
 */
package org.eclipse.osbp.utils.constants;

import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Functions.Function0;

@SuppressWarnings("all")
public class GeneratorConstants {
  public final static String GENERATED_CLASSES_DOCUMENTATION = new Function0<String>() {
    public String apply() {
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("<b>This class was auto generated! Leave it unmodified to avoid unpredictable results!</b>");
      return _builder.toString();
    }
  }.apply();
  
  public final static String I18N_RESOURCE_PATH_NAME = "i18n";
  
  private final static String I18N_RESOURCE_FILE_NAME = "I18N";
  
  private final static String I18N_RESOURCE_FILE_EXTENSION = ".properties";
  
  public final static String I18N_RESOURCE_FULL_FILE_NAME = (GeneratorConstants.I18N_RESOURCE_FILE_NAME + GeneratorConstants.I18N_RESOURCE_FILE_EXTENSION);
  
  public final static String I18N_RESOURCE_FULL_PATH_NAME = (((GeneratorConstants.I18N_RESOURCE_PATH_NAME + "/") + GeneratorConstants.I18N_RESOURCE_FILE_NAME) + GeneratorConstants.I18N_RESOURCE_FILE_EXTENSION);
  
  public final static String I18N_RESOURCE_FULL_BUNDLE_NAME = ((GeneratorConstants.I18N_RESOURCE_PATH_NAME + ".") + GeneratorConstants.I18N_RESOURCE_FILE_NAME);
}
