/*******************************************************************************
 * <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_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() {
	}
}

