/**
 *                                                                            
 * 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

class GeneratorConstants {
	public final static val GENERATED_CLASSES_DOCUMENTATION ='''<b>This class was auto generated! Leave it unmodified to avoid unpredictable results!</b>'''

	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 = I18N_RESOURCE_FILE_NAME+I18N_RESOURCE_FILE_EXTENSION;
	public final static String I18N_RESOURCE_FULL_PATH_NAME = I18N_RESOURCE_PATH_NAME+"/"+I18N_RESOURCE_FILE_NAME+I18N_RESOURCE_FILE_EXTENSION;
	public final static String I18N_RESOURCE_FULL_BUNDLE_NAME = I18N_RESOURCE_PATH_NAME+"."+I18N_RESOURCE_FILE_NAME;
	
}
