/*******************************************************************************
 * <copyright>
 *
 * Copyright (c) 2005, 2010 SAP AG.
 * 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:
 *    Petya Sabeva - initial API, implementation and documentation
 *
 * </copyright>
 *
 *******************************************************************************/
package org.eclipse.jpt.jpadiagrameditor.ui.internal.i18n;

import org.eclipse.osgi.util.NLS;

public class JPAEditorMessages extends NLS {
	private static final String BUNDLE_NAME = "org.eclipse.jpt.jpadiagrameditor.ui.internal.i18n.messages"; //$NON-NLS-1$
	
	public static String AddJPAEntityFeature_basicAttributesShapes;

	public static String AddJPAEntityFeature_primaryKeysShape;

	public static String AddJPAEntityFeature_relationAttributesShapes;

	public static String ClickAddAttributeButtonFeature_createAttributeButtonDescription;
	public static String ClickAddAttributeButtonFeature_createAttributeButtonLabel;
	
	public static String ClickAddElementCollectionButtonFeature_CreateElementCollectionAttributeFeatureDescription;

	public static String ClickAddElementCollectionButtonFeature_CreateElementCollectionAttributeFeatureName;

	public static String ClickRemoveAttributeButtonFeature_createAttributeButtonDescription;
	public static String ClickRemoveAttributeButtonFeature_createAttributeButtonlabel;
	public static String ClickRemoveAttributeButtonFeature_deleteAttributeQuestion;
	
	public static String CreateDiagramJob_createDiagramJobName;
	public static String CreateDiagramJob_getJPADiagramMonitorTaskName;
	
	public static String CreateEmbeddableFeature_EmbeddableFeatureDescription;

	public static String CreateEmbeddableFeature_EmbeddableFeatureName;

	public static String CreateIsARelationFeature_CreateIsARelationFeatureDescription;

	public static String CreateIsARelationFeature_CreateIsARelationFeatureName;

	public static String CreateIsARelationFeature_description;
	public static String CreateIsARelationFeature_name;
	
	public static String CreateJPAEntityFeature_createEntityErrorMsg;
	public static String CreateJPAEntityFeature_createEntityErrorMsgTitle;
	public static String CreateJPAEntityFeature_createEntityErrorStatusMsg;
	public static String CreateJPAEntityFeature_jpaEntityFeatureDescription;
	public static String CreateJPAEntityFeature_jpaEntityFeatureName;

	public static String CreateJPAEntityFromMappedSuperclassFeature_createInheritedEntityFeatureName;
	public static String CreateMappedSuperclassFeature_createMappedSuperclassFeatureDescription;
	public static String CreateMappedSuperclassFeature_createMappedSuperclassFeatureName;
	
	public static String CreateManyToManyBiDirRelationFeature_manyToManyBiDirFeatureName;
	public static String CreateManyToManyBiDirRelationFeature_manyToManyUniDirFeatureDescription;
	
	public static String CreateManyToManyUniDirRelationFeature_manyToManyUniDirFeatureDescription;
	public static String CreateManyToManyUniDirRelationFeature_manyToManyUniDirFeatureName;
	
	public static String CreateManyToOneBiDirRelationFeature_manyToOneBiDirFeatureDescription;
	public static String CreateManyToOneBiDirRelationFeature_manyToOneBiDirFeatureName;
	
	public static String CreateManyToOneUniDirRelationFeature_manyToOneUniDirFeatureDescription;
	public static String CreateManyToOneUniDirRelationFeature_manyToOneUniDirFeatureName;
	
	public static String CreateOneToManyUniDirRelationFeature_oneToManyUniDirFeatureDescription;
	public static String CreateOneToManyUniDirRelationFeature_oneToManyUniDirFeatureName;
	
	public static String CreateOneToOneBiDirRelationFeature_oneToOneBiDirFeatureDescription;
	public static String CreateOneToOneBiDirRelationFeature_oneToOneBiDirFeatureName;
	
	public static String CreateOneToOneUniDirRelationFeature_oneToOneUniDirFeatureDescription;
	public static String CreateOneToOneUniDirRelationFeature_oneToOneUniDirFeatureName;
	
	public static String DeleteFeature_deleteConfirm;
	
	public static String DeleteJPAEntityFeature_deleteJPAEntityQuestion;
	public static String DeleteJPAEntityFeature_deleteJPAEntitiesQuestion;
	
	public static String DeleteRelationFeature_deleteRelationQuestion;
	
	public static String DirectEditAttributeFeature_attributeExists;

	public static String DirectEditAttributeFeature_classNameMsg;
	public static String DirectEditJPAEntityFeature_bracesNotAllowedMsg;

	public static String DirectEditJPAEntityFeature_duplicateEntityName;
	public static String DirectEditAttributeFeature_lineBreaksNotAllowedMsg;
	public static String DirectEditAttributeFeature_spacesNotAllowedMsg;
	
	public static String DirectEditJPAEntityFeature_classNameMsg;
	public static String DirectEditJPAEntityFeature_lineBreaksNotAllowedMsg;
	public static String DirectEditJPAEntityFeature_scpacesNotAllowedMsg;
	public static String DirectEditJPAEntityFeature_invalidSymbolsMsg;

	public static String DiscardAndRemoveAllEntitiesFeature_ContextMenuOperationDescription;
	
	public static String JpaArtifactFactory_CanNotCheckReturnType;

	public static String JPADiagramEditor_openDiagramErrorMSG;

	public static String JPADiagramEditor_waitingForMoin;
	
	public static String JPADiagramPropertyPage_errSavePropsMsgTitle;
	public static String JPADiagramPropertyPage_errSavePropsMsgText;

	public static String JPAEditorPreferencesPage_pageDescription;
	public static String JPAEditorPreferencesPage_DefaultCollectionTypeSectionDescription;

	public static String JPAEditorPreferencesPage_DefaultCollectionTypeSectionTittle;

	public static String JPAEditorPreferencesPage_DefaultPackageMsg;
	public static String JPAEditorPreferencesPage_DefaultTableNamePrefixMsg;
	public static String JPAEditorPreferencesPage_DefaultTableNameLabel;
	public static String JPAEditorPreferencesPage_DefaultPackageToUse;
	public static String JPAEditorPreferencesPage_invalidPackage;
	public static String JPAEditorPreferencesPage_invalidTableNamePrefix;
	public static String JPAEditorPreferencesPage_directEditAffectsClass;
	public static String JPAEditorPreferencesPage_directEditAffectsClassTooltip;	
	public static String JPAEditorPreferencesPage_entityAccessTypeButtonGroupTooltip;
	public static String JPAEditorPreferencesPage_entityAccessTypeButtonGroupLabel;
	public static String JPAEditorPreferencesPage_entityFieldBasedAccessButtonLabel;
	public static String JPAEditorPreferencesPage_entityPropertyBasedAccessButtonLabel;
	public static String JPAEditorPreferencesPage_defaultFolderControlTooltip;
	public static String JPAEditorPreferencesPage_defaultFolderControlLabel;
	public static String JPAEditorPreferencesPage_invalidFolder;
	public static String JPAEditorPreferencesPage_emptyFolder;
	public static String JPAEditorPreferencesPage_oneToManyOldStyle;
	public static String JPAEditorPreferencesPage_oneToManyOldStyleTooltip;
	
	public static String JPAEditorPropertyPage_oneToManyOldStyle;
	public static String JPAEditorPropertyPage_oneToManyOldStyleTooltip;

	public static String JPAEditorToolBehaviorProvider_collapseAttrGroupMenuItem;

	public static String JPAEditorToolBehaviorProvider_collapseAttrGroupMenuItemDescr;
	public static String JPAEditorToolBehaviorProvider_collapseCompartToolTip;

	public static String JPAEditorToolBehaviorProvider_collapseEntityMenuItem;
	public static String JPAEditorToolBehaviorProvider_collapseEntityMenuItemDescr;
	public static String JPAEditorToolBehaviorProvider_collapseAllEntitiesMenuItem;
	public static String JPAEditorToolBehaviorProvider_collapseAllEntitiesMenuItemDescr;

	public static String JPAEditorToolBehaviorProvider_createAttributeButtonDescription;
	public static String JPAEditorToolBehaviorProvider_createAttributeButtonlabel;
	public static String JPAEditorToolBehaviorProvider_deleteAttributeButtonDescription;
	public static String JPAEditorToolBehaviorProvider_deleteAttributeButtonlabel;
	public static String JPAEditorToolBehaviorProvider_deleteEntityFromModelButtonDescription;
	public static String JPAEditorToolBehaviorProvider_deleteEntityFromModelButtonLabel;

	public static String JPAEditorToolBehaviorProvider_discardChangesMenuItem;

	public static String JPAEditorToolBehaviorProvider_discardChangesMenuItemDescr;
	public static String JPAEditorToolBehaviorProvider_removeEntityFromDiagramButtonDescription;
	public static String JPAEditorToolBehaviorProvider_removeEntityFromDiagramButtonLabel;
	public static String JPAEditorToolBehaviorProvider_saveButtonText;
	public static String JPAEditorToolBehaviorProvider_saveButtonDescription;

	public static String JPAEditorToolBehaviorProvider_saveMenuItem;

	public static String JPAEditorToolBehaviorProvider_saveMenuItemDescr;
	public static String JPAEditorToolBehaviorProvider_restoreButtonText;
	public static String JPAEditorToolBehaviorProvider_restoreButtonDescription;
	public static String JPAEditorToolBehaviorProvider_removeAndSaveButtonText;
	public static String JPAEditorToolBehaviorProvider_removeAndSaveButtonDescription;
	public static String JPAEditorToolBehaviorProvider_showAllTheEntities;
	public static String JPAEditorToolBehaviorProvider_showAllTheEntitiesDesc;
	public static String JPAEditorToolBehaviorProvider_refactorSubMenu;
	public static String JPAEditorToolBehaviorProvider_renameEntityClass;
	public static String JPAEditorToolBehaviorProvider_moveEntityClass;	
	public static String JPAEditorToolBehaviorProvider_openJPADetailsView; 
	public static String JPAEditorToolBehaviorProvider_openJPADetailsViewDesc;	
	public static String JPAEditorToolBehaviorProvider_openMiniatureView; 
	public static String JPAEditorToolBehaviorProvider_openMiniatureViewDesc;

	public static String JPAEditorToolBehaviorProvider_CompositionPaletteName;

	public static String JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonLabel;
	public static String JPAEditorToolBehaviorProvider_CreateElementCollectionAttributeButtonDescription;
	public static String JPAEditorToolBehaviorProvider_expandAttrMenuItem;

	public static String JPAEditorToolBehaviorProvider_expandAttrMenuItemDescr;
	public static String JPAEditorToolBehaviorProvider_expandCompartToolTip;

	public static String JPAEditorToolBehaviorProvider_expandEntityMenuItem;
	public static String JPAEditorToolBehaviorProvider_expandEntitymenuItemDescr;
	
	public static String JPAEditorToolBehaviorProvider_expandAllEntitiesMenuItem;
	public static String JPAEditorToolBehaviorProvider_expandAllEntitiesMenuItemDescr;

	public static String JPAEditorToolBehaviorProvider_InheritanceCompartmentTitle;	

	public static String JPAEditorToolBehaviorProvider_refactorAttributeType; 
	public static String JPAEditorToolBehaviorProvider_refactorAttributeTypeDesc;
	public static String JPAEditorToolBehaviorProvider_removeAllEntitiesMenu;
	public static String JPAEditorToolBehaviorProvider_removeAndSaveAllEntitiesAction;
	public static String JPAEditorToolBehaviorProvider_removeAndDiscardAllEntitiesAction;
	public static String JPAEditorToolBehaviorProvider_removeAndSaveAllEntitiesConfirmation;
	public static String JPAEditorToolBehaviorProvider_removeAndDiscardAllEntitiesConfirmation;	
	
	public static String JPAEditorDiagramTypeProvider_cantMakeDiagramWritableTitle;
	public static String JPAEditorDiagramTypeProvider_cantMakeDiagramWritableMsg;
	public static String JPAEditorDiagramTypeProvider_JPADiagramReadOnlyTitle;
	public static String JPAEditorDiagramTypeProvider_JPADiagramReadOnlyMsg;
	public static String JPAEditorDiagramTypeProvider_JPADiagramReadOnlyHasToAddMsg;

	public static String OpenJpaDiagramActionDelegate_openJPADiagramErrorMsgTitle;
	public static String OpenJpaDiagramActionDelegate_openJPADiagramErrorMsg;
	public static String OpenJpaDiagramActionDelegate_jpaSupportWarningTitle;
	public static String OpenJpaDiagramActionDelegate_jpaSupportWarningMsg;
	public static String OpenJpaDiagramActionDelegate_noPersistenceUnitTitle;
	public static String OpenJpaDiagramActionDelegate_noPersistenceUnitMsg; 

	
	public static String SaveAndRemoveAllEntitiesFeature_ContextMenuOperationDescription;

	public static String SelectTypeDialog_chooseAttributeTypeDialogText;
	public static String SelectTypeDialog_browseBtnTxt;
	public static String SelectTypeDialog_browseBtnDesc;
	public static String SelectTypeDialog_typeLabel;
	public static String SelectTypeDialog_chooseAttributeTypeDialogWindowTitle;
	public static String SelectTypeDialog_chooseAttributeTypeDialogTitle;
	public static String SelectTypeDialog_invalidTypeMsgTitle;
	public static String SelectTypeDialog_invalidTypeMsgText;
	public static String SelectTypeDialog_emptyTypeErrorText;

	
	public static String JPAEditorUtil_fullnameTooltipText;	
	public static String JPAEditorUtil_typeTooltipText;
	public static String JPAEditorUtil_applyChangesJobName;
	public static String JPAEditorUtil_inheritTypeTooltipText;

	
	public static String PaletteCompartment_Connections;
	public static String PaletteCompartment_Objects;
	
	public static String JPASolver_closeWarningMsg;
	public static String JPASolver_closeEditors;
	
	public static String RefactorAttributeTypeFeature_ContextMenuOperationDescription;
	
	public static String RemoveJPAEntityFeature_discardWarningMsg;
	
	public static String RenameEntityFeature_ContextMenuOperationDescription;
	 
	public static String BTN_OK;
	public static String BTN_CANCEL;	
	
	public static String MoveEntityFeature_ContextMenuOperationDescription; 
	
	public static String EmbedCollectionOfObjectsFeature_ElementCollectionFeatureDescription;

	public static String EmbedCollectionOfObjectsFeature_ElementCollectionFeatureName;

	public static String EmbedSingleObjectFeature_EmbeddedFeatureDescription;

	public static String EmbedSingleObjectFeature_EmbeddedFeatureName;

	public static String EntitiesCoordinatesXML_CannotCloseFileStreamErrorMSG;

	public static String EntitiesCoordinatesXML_CannotCreateDOMFileErrorMSG;

	public static String EntitiesCoordinatesXML_CannotFindFileErrorMSG;

	public static String EntitiesCoordinatesXML_CannotObtainProjectErrorMSG;

	public static String EntitiesCoordinatesXML_CannotParseFileErrorMSG;

	public static String EntitiesCoordinatesXML_CannotReadFileErrorMSG;

	public static String EntitiesCoordinatesXML_CannotRefrfreshFile;

	public static String ModelIntegrationUtil_CannotSetFileContentErrorMSG;

	static {
		// initialize resource bundle
		NLS.initializeMessages(BUNDLE_NAME, JPAEditorMessages.class);
	}

	private JPAEditorMessages() {
	}
}

