# ==============================================================================
#*+------------------------------------------------------------------------+
#*| Copyright (c) 2005  IBM Corporation and others.                        |
#*| 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:                                                          |
#*|    IBM Corporation - initial API and implementation                    |
#*+------------------------------------------------------------------------+
# ==============================================================================
# ==============================================================================
# Common UI Services - Translation Instruction: section to be translated
# ==============================================================================
Plugin.name = GMF Common UI DND Services
Plugin.providerName = Eclipse Modeling Project


# ===============================================================================
# Extension Points - Translation Instruction : section to be translated
# ===============================================================================
extPoint.transferAdapterProviders =  GMF Transfer Adapter Providers
extPoint.dragDropListenerProviders = GMF Drag And Drop Listener Providers
ext.transferAdapterProviders = GMF Common Transfer Adapters
