# Generated search expressions template
# From file: org.eclipse.datatools.connectivity.ui.dse_IHelpContextsConnectivityUIDSE.java

# * Copyright (c) 2007 Sybase, Inc.
# * 
# * 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: brianf - initial API and implementation

# For plug-in: org.eclipse.datatools.connectivity.ui.dse

#	 * TPS_helpKey_constants_for_plug-in: org.eclipse.datatools.connectivity.ui.dse


#	 * CONTEXT_ID_CONNECTIVITY_DSE_VIEW =
#	 * Data Source Explorer

CONTEXT_ID_CONNECTIVITY_DSE_VIEW = DATA_SOURCE_EXPLORER_VIEW

#	 * PROFILE_SELECTION_DIALOG Context ID for the Profile Selection Dialog
#	 * 

PROFILE_SELECTION_DIALOG = DATA_SOURCE_EXPLORER_VIEW
