[bugno]: Updating Navigator Framework. Committed for MDE
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/EMFRootObjectManager.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/EMFRootObjectManager.java
new file mode 100644
index 0000000..f9720e9
--- /dev/null
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/EMFRootObjectManager.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2004 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
+ *******************************************************************************/ 
+package org.eclipse.jst.j2ee.navigator.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jst.j2ee.internal.J2EEEditModel;
+import org.eclipse.jst.j2ee.internal.project.J2EENature;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent;
+import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
+
+/**
+ * <p>
+ * The following class is experimental until fully documented.
+ * </p>
+ */
+public class EMFRootObjectManager implements EditModelListener, IResourceChangeListener, IResourceDeltaVisitor {
+
+	
+
+	private final Map projectEditModels = new HashMap();
+	private final Map projectRootObjects = new HashMap();
+	
+	/**
+	 * 
+	 */
+	public EMFRootObjectManager() {
+		super();
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+	}
+
+	public void dispose() {
+		if (projectEditModels == null)
+			return;
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+		J2EEEditModel editModel = null;
+		Object[] keys = projectEditModels.keySet().toArray();
+		for (int i = 0; i < keys.length; i++) {
+			editModel = (J2EEEditModel) projectEditModels.remove(keys[i]);
+			if (editModel != null) {
+				editModel.removeListener(this);
+				editModel.releaseAccess(this);
+			}
+		}
+	}
+
+	public Object getRootObject(IProject project) {
+		if (project == null || !project.isAccessible())
+			return null;
+
+		Object rootObject = null; 
+		synchronized (projectRootObjects) {
+			rootObject = projectRootObjects.get(project);
+
+			if (rootObject == null || ((EObject) rootObject).eResource() == null) {
+				J2EEEditModel editModel = getEditModelForProject(project);
+				if (editModel != null) {
+					rootObject = editModel.getPrimaryRootObject();
+					projectRootObjects.put(project, rootObject);
+				}
+			}
+		}
+		return rootObject;
+	}
+	
+
+	protected J2EEEditModel getEditModelForProject(IProject project) {
+		if (project == null)
+			return null;
+		J2EEEditModel editModel = null;
+		synchronized (projectEditModels) {
+			editModel = (J2EEEditModel) projectEditModels.get(project);
+			if (editModel == null && project.isAccessible()) {
+				//System.out.println("getEditModelForProject " + project.getName());
+				J2EENature nature = J2EENature.getRegisteredRuntime(project);
+				if (nature != null) {
+					editModel = nature.getJ2EEEditModelForRead(this);
+					if (editModel != null) {
+						editModel.addListener(this);
+						addMapping(project, editModel);
+					}
+				}
+			}
+		}
+		return editModel;
+	}
+	
+	protected void addMapping(IProject project, J2EEEditModel editModel) {
+		projectEditModels.put(project, editModel);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener#editModelChanged(org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent)
+	 */
+	public void editModelChanged(EditModelEvent anEvent) { 
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
+	 */
+	public void resourceChanged(IResourceChangeEvent event) { 
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
+	 */
+	public boolean visit(IResourceDelta delta) throws CoreException { 
+		return false;
+	}
+
+}
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EEContentProvider.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EEContentProvider.java
new file mode 100644
index 0000000..b401973
--- /dev/null
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EEContentProvider.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2004 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
+ *******************************************************************************/
+package org.eclipse.jst.j2ee.navigator.internal;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jst.j2ee.internal.ejb.provider.BeanClassProviderHelper;
+import org.eclipse.jst.j2ee.internal.provider.MethodsProviderDelegate;
+import org.eclipse.wst.common.internal.emfworkbench.integration.DynamicAdapterFactory;
+import org.eclipse.wst.common.navigator.internal.views.CommonViewer;
+
+import com.ibm.wtp.emf.workbench.ProjectUtilities;
+
+/**
+ * <p>
+ * The following class is experimental until fully documented.
+ * </p>
+ */
+public class J2EEContentProvider implements ITreeContentProvider {
+
+	private static final Class IPROJECT_CLASS = IProject.class;
+
+	private final EMFRootObjectManager rootObjectManager;
+
+	private AdapterFactoryContentProvider delegateContentProvider;
+	private MethodsProviderDelegate delegateMethodsProvider;
+
+	private String viewerId = null;
+
+	/**
+	 * 
+	 */
+	public J2EEContentProvider() {
+		rootObjectManager = new EMFRootObjectManager();
+	}
+
+	/**
+	 * 
+	 */
+	public J2EEContentProvider(String aViewerId) {
+		rootObjectManager = new EMFRootObjectManager();
+		updateContentProviders(aViewerId);
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object anInputElement) {
+		return getChildren(anInputElement);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object aParentElement) {
+		IProject project = null;
+		List children = new ArrayList();
+		if (aParentElement instanceof IProject || aParentElement instanceof IJavaProject) {
+			project = (IProject) ((IAdaptable) aParentElement).getAdapter(IPROJECT_CLASS);
+			if (project != null) {
+				Object rootObject = (rootObjectManager != null) ? rootObjectManager.getRootObject(project) : null;
+				if (rootObject != null)
+					children.add(rootObject);
+			}
+		} else if (MethodsProviderDelegate.providesContentFor(aParentElement))
+			return delegateMethodsProvider.getChildren(aParentElement);
+		else /* if (isEMFEditObject(aParentElement)) */{
+			Object[] siblings = delegateContentProvider.getChildren(aParentElement);
+			if (siblings != null)
+				children.addAll(Arrays.asList(siblings));
+		}
+		return children.toArray();
+	}
+
+	public Object getParent(Object object) {
+		if (MethodsProviderDelegate.providesContentFor(object))
+			return delegateMethodsProvider.getParent(object);
+		Object parent = delegateContentProvider.getParent(object);
+		if (parent == null && object instanceof BeanClassProviderHelper)
+			parent = ((BeanClassProviderHelper) object).getEjb();
+		if (parent == null && object instanceof EObject)
+			parent = ProjectUtilities.getProject((EObject) object);
+		return parent;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		delegateContentProvider.dispose();
+		rootObjectManager.dispose();
+		delegateMethodsProvider.dispose();
+	}
+
+	/*
+	 * @see ITreeContentProvider#hasChildren(Object)
+	 */
+	public boolean hasChildren(Object element) {
+		if (MethodsProviderDelegate.providesContentFor(element))
+			return delegateMethodsProvider.hasChildren(element);
+		/* else if (isEMFEditObject(element)) */
+		return delegateContentProvider.hasChildren(element);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
+		String newViewerId = null;
+		if (aViewer instanceof CommonViewer)
+			newViewerId = ((CommonViewer) aViewer).getNavigatorContentService().getViewerId();
+
+		if (newViewerId != null && (viewerId == null || !viewerId.equals(newViewerId)))
+			updateContentProviders(newViewerId);
+
+		delegateContentProvider.inputChanged(aViewer, anOldInput, aNewInput);
+		delegateMethodsProvider.inputChanged(aViewer, anOldInput, aNewInput);
+	}
+
+	/**
+	 * @param viewerId2
+	 */
+	private void updateContentProviders(String aViewerId) {
+
+		/* Dispose of the existing content providers */
+		if (delegateContentProvider != null)
+			delegateContentProvider.dispose();
+		if (delegateMethodsProvider != null)
+			delegateMethodsProvider.dispose();
+
+		/* Create new content providers using the new viewer id */
+		DynamicAdapterFactory adapterFactory = new DynamicAdapterFactory(aViewerId);
+		delegateContentProvider = new AdapterFactoryContentProvider(adapterFactory);
+		delegateMethodsProvider = new MethodsProviderDelegate(adapterFactory);
+
+		/* Remember the viewer id */
+		viewerId = aViewerId;
+
+	}
+
+}
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EEEditActionGroup.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EEEditActionGroup.java
index 1c01854..72d16e1 100644
--- a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EEEditActionGroup.java
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EEEditActionGroup.java
@@ -25,8 +25,6 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jst.common.navigator.internal.actions.NewWizardActionGroup;
-import org.eclipse.jst.common.navigator.internal.actions.WizardActionGroup;
 import org.eclipse.jst.j2ee.application.Application;
 import org.eclipse.jst.j2ee.applicationclient.creation.ApplicationClientNatureRuntime;
 import org.eclipse.jst.j2ee.client.ApplicationClient;
@@ -52,6 +50,8 @@
 import org.eclipse.wst.common.frameworks.internal.AdaptabilityUtility;
 import org.eclipse.wst.common.frameworks.internal.ui.WTPGenericActionIds;
 import org.eclipse.wst.common.frameworks.internal.ui.WTPOptionalOperationAction;
+import org.eclipse.wst.common.navigator.internal.actions.NewWizardActionGroup;
+import org.eclipse.wst.common.navigator.internal.actions.WizardActionGroup;
 import org.eclipse.wst.common.navigator.internal.views.actions.CommonEditActionGroup;
 
 /**
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EELabelProvider.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EELabelProvider.java
new file mode 100644
index 0000000..57bb89b
--- /dev/null
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/J2EELabelProvider.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2004 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
+ *******************************************************************************/
+package org.eclipse.jst.j2ee.navigator.internal;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jst.j2ee.common.util.CommonUtil;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.wst.common.internal.emfworkbench.integration.DynamicAdapterFactory;
+import org.eclipse.wst.common.navigator.internal.views.extensions.ICommonLabelProvider;
+
+import com.ibm.wtp.emf.workbench.ProjectUtilities;
+
+/**
+ * <p>
+ * The following class is experimental until fully documented.
+ * </p>
+ */
+public class J2EELabelProvider implements ICommonLabelProvider {
+
+	private AdapterFactoryLabelProvider delegateLabelProvider;
+
+	/**
+	 * 
+	 */
+	public J2EELabelProvider() {
+		super();
+	}
+
+	/**
+	 * 
+	 */
+	public J2EELabelProvider(String aViewerId) {
+		super();
+		initialize(aViewerId);
+	}
+
+	public void initialize(String aViewerId) {
+		delegateLabelProvider = new AdapterFactoryLabelProvider(new DynamicAdapterFactory(aViewerId));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.wst.common.navigator.internal.views.extensions.ICommonLabelProvider#getDescription(java.lang.Object)
+	 */
+	public String getDescription(Object anElement) {
+		if (anElement instanceof EObject) {
+			EObject eObj = (EObject) anElement;
+			if (CommonUtil.isDeploymentDescriptorRoot(eObj, true /* include ears */)) {
+				IProject parent = ProjectUtilities.getProject(eObj);
+				String path = new Path(eObj.eResource().getURI().toString()).makeRelative().toString();
+				if (parent == null)
+					return path;
+				int startIndex = path.indexOf(parent.getFullPath().toString());
+				return -1 == startIndex ? path : path.substring(startIndex);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @param listener
+	 */
+	public void addListener(ILabelProviderListener listener) {
+		if (delegateLabelProvider != null)
+			delegateLabelProvider.addListener(listener);
+	}
+
+	/**
+	 * 
+	 */
+	public void dispose() {
+		if (delegateLabelProvider != null)
+			delegateLabelProvider.dispose();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.equals(obj);
+		return false;
+	}
+
+	/**
+	 * 
+	 */
+	public void fireLabelProviderChanged() {
+		if (delegateLabelProvider != null)
+			delegateLabelProvider.fireLabelProviderChanged();
+	}
+
+	/**
+	 * @return
+	 */
+	public AdapterFactory getAdapterFactory() {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.getAdapterFactory();
+		return null;
+	}
+
+	/**
+	 * @param object
+	 * @param columnIndex
+	 * @return
+	 */
+	public Image getColumnImage(Object object, int columnIndex) {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.getColumnImage(object, columnIndex);
+		return null;
+	}
+
+	/**
+	 * @param object
+	 * @param columnIndex
+	 * @return
+	 */
+	public String getColumnText(Object object, int columnIndex) {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.getColumnText(object, columnIndex);
+		return null;
+	}
+
+	/**
+	 * @param element
+	 * @return
+	 */
+	public Image getImage(Object element) {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.getImage(element);
+		return null;
+	}
+
+	/**
+	 * @param element
+	 * @return
+	 */
+	public String getText(Object element) {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.getText(element);
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.hashCode();
+		return super.hashCode();
+	}
+
+	/**
+	 * @param object
+	 * @param id
+	 * @return
+	 */
+	public boolean isLabelProperty(Object object, String id) {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.isLabelProperty(object, id);
+		return false;
+	}
+
+	/**
+	 * @param notification
+	 */
+	public void notifyChanged(Notification notification) {
+		if (delegateLabelProvider != null)
+			delegateLabelProvider.notifyChanged(notification);
+	}
+
+	/**
+	 * @param listener
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+		if (delegateLabelProvider != null)
+			delegateLabelProvider.removeListener(listener);
+	}
+
+	/**
+	 * @param adapterFactory
+	 */
+	public void setAdapterFactory(AdapterFactory adapterFactory) {
+		if (delegateLabelProvider != null)
+			delegateLabelProvider.setAdapterFactory(adapterFactory);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		if (delegateLabelProvider != null)
+			return delegateLabelProvider.toString();
+		return super.toString();
+	}
+}
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/AddExternalUtilityJarDropAction.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/AddExternalUtilityJarDropAction.java
index 83b3e14..07b890c 100644
--- a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/AddExternalUtilityJarDropAction.java
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/AddExternalUtilityJarDropAction.java
@@ -16,7 +16,7 @@
 import org.eclipse.swt.dnd.FileTransfer;
 import org.eclipse.swt.dnd.TransferData;
 import org.eclipse.wst.common.frameworks.internal.AdaptabilityUtility;
-import org.eclipse.wst.common.navigator.internal.views.dnd.NavigatorDropAdapter;
+import org.eclipse.wst.common.navigator.internal.views.dnd.CommonNavigatorDropAdapter;
 import org.eclipse.wst.common.navigator.internal.workbench.ResourceDropAction;
 
 /**
@@ -28,10 +28,10 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.ui.workbench.navigator.dnd.ResourceDropAction#validateDrop(org.eclipse.wst.common.navigator.internal.views.navigator.dnd.NavigatorDropAdapter,
+	 * @see org.eclipse.ui.workbench.navigator.dnd.ResourceDropAction#validateDrop(org.eclipse.wst.common.navigator.internal.views.navigator.dnd.CommonNavigatorDropAdapter,
 	 *      java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
 	 */
-	public boolean validateDrop(NavigatorDropAdapter dropAdapter, Object target, int operation, TransferData transferType) {
+	public boolean validateDrop(CommonNavigatorDropAdapter dropAdapter, Object target, int operation, TransferData transferType) {
 		if (FileTransfer.getInstance().isSupportedType(transferType)) {
 			IProject project = (IProject) AdaptabilityUtility.getAdapter(target, IProject.class);
 			try {
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/AddProjectToEarDropAction.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/AddProjectToEarDropAction.java
index 4cee38e..b400dd4 100644
--- a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/AddProjectToEarDropAction.java
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/AddProjectToEarDropAction.java
@@ -8,12 +8,6 @@
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
-/*
- * Created on Jun 9, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
 package org.eclipse.jst.j2ee.navigator.internal.dnd;
 
 import java.lang.reflect.InvocationTargetException;
@@ -33,7 +27,7 @@
 import org.eclipse.wst.common.navigator.internal.views.NavigatorPlugin;
 import org.eclipse.wst.common.navigator.internal.views.dnd.IDropValidator;
 import org.eclipse.wst.common.navigator.internal.views.dnd.NavigatorDropActionDelegate;
-import org.eclipse.wst.common.navigator.internal.views.dnd.NavigatorDropAdapter;
+import org.eclipse.wst.common.navigator.internal.views.dnd.CommonNavigatorDropAdapter;
 
 /**
  * @author jsholl
@@ -45,7 +39,7 @@
 		super();
 	}
 
-	public boolean validateDrop(NavigatorDropAdapter dropAdapter, Object target, int operation, TransferData transferType) {
+	public boolean validateDrop(CommonNavigatorDropAdapter dropAdapter, Object target, int operation, TransferData transferType) {
 		if (LocalSelectionTransfer.getInstance().isSupportedType(transferType) || PluginTransfer.getInstance().isSupportedType(transferType)) {
 			IProject earProject = (IProject) AdaptabilityUtility.getAdapter(target, IProject.class);
 			if (null == earProject || !earProject.isAccessible()) {
@@ -108,7 +102,7 @@
 		return false;
 	}
 
-	public boolean run(NavigatorDropAdapter dropAdapter, Object source, Object target) {
+	public boolean run(CommonNavigatorDropAdapter dropAdapter, Object source, Object target) {
 		return run(source, target);
 	}
 
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/J2EEImportDropAction.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/J2EEImportDropAction.java
index e1afe6a..b21f3d4 100644
--- a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/J2EEImportDropAction.java
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/dnd/J2EEImportDropAction.java
@@ -49,7 +49,7 @@
 import org.eclipse.wst.common.frameworks.internal.ui.WTPWizard;
 import org.eclipse.wst.common.navigator.internal.views.dnd.IDropValidator;
 import org.eclipse.wst.common.navigator.internal.views.dnd.NavigatorDropActionDelegate;
-import org.eclipse.wst.common.navigator.internal.views.dnd.NavigatorDropAdapter;
+import org.eclipse.wst.common.navigator.internal.views.dnd.CommonNavigatorDropAdapter;
 
 /**
  * @author jsholl
@@ -71,7 +71,7 @@
 		return false;
 	}
 
-	public boolean validateDrop(NavigatorDropAdapter dropAdapter, Object target, int operation, TransferData transferType) {
+	public boolean validateDrop(CommonNavigatorDropAdapter dropAdapter, Object target, int operation, TransferData transferType) {
 		if (FileTransfer.getInstance().isSupportedType(transferType)) {
 			String[] sourceNames = (String[]) FileTransfer.getInstance().nativeToJava(transferType);
 			if (sourceNames == null || sourceNames.length != 1) { //only handle one file for now
@@ -179,10 +179,10 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.wst.common.navigator.internal.views.navigator.dnd.NavigatorDropActionDelegate#run(org.eclipse.wst.common.navigator.internal.views.navigator.dnd.NavigatorDropAdapter,
+	 * @see org.eclipse.wst.common.navigator.internal.views.navigator.dnd.NavigatorDropActionDelegate#run(org.eclipse.wst.common.navigator.internal.views.navigator.dnd.CommonNavigatorDropAdapter,
 	 *      java.lang.Object, java.lang.Object)
 	 */
-	public boolean run(NavigatorDropAdapter dropAdapter, Object source, Object target) {
+	public boolean run(CommonNavigatorDropAdapter dropAdapter, Object source, Object target) {
 		TransferData currentTransfer = dropAdapter.getCurrentTransfer();
 		if (FileTransfer.getInstance().isSupportedType(currentTransfer)) {
 			final String[] fileNames = (String[]) source;
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/plugin/J2EENavigatorPlugin.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/plugin/J2EENavigatorPlugin.java
index 1b8fe66..4dc476c 100644
--- a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/plugin/J2EENavigatorPlugin.java
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/internal/plugin/J2EENavigatorPlugin.java
@@ -23,21 +23,14 @@
  */
 public class J2EENavigatorPlugin extends AbstractUIPlugin {
 	//The shared instance.
-	private static J2EENavigatorPlugin plugin;
-	//Resource bundle.
-	private ResourceBundle resourceBundle;
+	private static J2EENavigatorPlugin plugin; 
 
 	/**
 	 * The constructor.
 	 */
 	public J2EENavigatorPlugin(IPluginDescriptor descriptor) {
 		super(descriptor);
-		plugin = this;
-		try {
-			resourceBundle = ResourceBundle.getBundle("org.eclipse.jst.j2ee.internal.internal.internal.ui.navigator.plugin.J2EENavigatorPluginResources"); //$NON-NLS-1$
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
+		plugin = this; 
 	}
 
 	/**
@@ -53,23 +46,4 @@
 	public static IWorkspace getWorkspace() {
 		return ResourcesPlugin.getWorkspace();
 	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle, or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = J2EENavigatorPlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null ? bundle.getString(key) : key);
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}
 }
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/plugin/J2EENavigatorPlugin.java b/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/plugin/J2EENavigatorPlugin.java
deleted file mode 100644
index b418b4c..0000000
--- a/plugins/org.eclipse.jst.j2ee.navigator.ui/j2ee-navigator/org/eclipse/jst/j2ee/navigator/plugin/J2EENavigatorPlugin.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- *******************************************************************************/
-package org.eclipse.jst.j2ee.navigator.plugin;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class J2EENavigatorPlugin extends AbstractUIPlugin {
-	//The shared instance.
-	private static J2EENavigatorPlugin plugin;
-	//Resource bundle.
-	private ResourceBundle resourceBundle;
-
-	/**
-	 * The constructor.
-	 */
-	public J2EENavigatorPlugin(IPluginDescriptor descriptor) {
-		super(descriptor);
-		plugin = this;
-		try {
-			resourceBundle = ResourceBundle.getBundle("org.eclipse.jst.j2ee.internal.ui.navigator.plugin.J2EENavigatorPluginResources"); //$NON-NLS-1$
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static J2EENavigatorPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns the workspace instance.
-	 */
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle, or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = J2EENavigatorPlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null ? bundle.getString(key) : key);
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}
-}
diff --git a/plugins/org.eclipse.jst.j2ee.navigator.ui/plugin.xml b/plugins/org.eclipse.jst.j2ee.navigator.ui/plugin.xml
index 72a86b3..be7e588 100644
--- a/plugins/org.eclipse.jst.j2ee.navigator.ui/plugin.xml
+++ b/plugins/org.eclipse.jst.j2ee.navigator.ui/plugin.xml
@@ -45,7 +45,7 @@
    	
 <!--============================-->
 <!-- J2EE Filters               -->
-<!--============================-->   
+<!--============================  
    <extension
          point="org.eclipse.wst.common.navigator.views.navigatorContent">
       <navigatorContent
@@ -83,17 +83,25 @@
                   </objectState>
                </or>
             </and>
-			<objectClass name="org.eclipse.jst.j2ee.client.ApplicationClient" /> 
-			<objectClass name="org.eclipse.jst.j2ee.jca.Connector" /> 
-			<objectClass name="org.eclipse.jst.j2ee.ejb.EJBJar" /> 
-			<objectClass name="org.eclipse.jst.j2ee.webapplication.WebApp" /> 
-            <objectClass name="org.eclipse.jst.j2ee.ejb.EnterpriseBean" />
-            <objectClass name="org.eclipse.jst.j2ee.internal.provider.J2EEItemProvider" />
-            <objectClass name="org.eclipse.jst.j2ee.internal.ejb.provider.BeanClassProviderHelper" />
             </or>
          </enables>
+         <emfEnablement>
+         	<package uri="org.eclipse.emf.ecore.resource" />
+         	<package uri="common.xmi" />         	
+         	<package uri="application.xmi" />         	         	
+         	<package uri="client.xmi" />         	         	
+         	<package uri="modulemap.xmi" />           	
+         	<package uri="ejb.xmi" />                 	
+         	<package uri="jca.xmi" />                 	
+         	<package uri="webapplication.xmi" />                 	
+         	<package uri="jsp.xmi" />                 	
+         	<package uri="wsdd.xmi" />                 	
+         	<package uri="webservice_client.xmi" />           	         	
+         	<package uri="wscommon.xmi" />  
+         </emfEnablement>
       </navigatorContent>
    </extension>
+   -->  
    <extension
          id="EARGroup"
          point="org.eclipse.wst.common.navigator.workbench.NavigatorGroup">
@@ -396,5 +404,65 @@
          </dropEnablement>
       </dropHandler>
    </extension>
-
+   
+   <!-- Experimental -->
+   <extension
+         point="org.eclipse.wst.common.navigator.views.navigatorContent">
+      <navigatorContent
+            name="Experimental J2EE"
+            priority="5"
+            icon="icons/J2EEPerspective.gif" 
+            contentProvider="org.eclipse.jst.j2ee.navigator.internal.J2EEContentProvider"
+            labelProvider="org.eclipse.jst.j2ee.navigator.internal.J2EELabelProvider"
+            id="org.eclipse.jst.navigator.j2ee.ui.J2EEContent.experimental">
+         <enables>
+         <or>
+            <and>
+               <objectClass
+                     name="org.eclipse.core.resources.IProject">
+               </objectClass>
+               <or>
+                  <objectState
+                        name="projectNature"
+                        value="org.eclipse.jst.j2ee.EARNature">
+                  </objectState>
+                  <objectState
+                        name="projectNature"
+                        value="org.eclipse.jst.j2ee.ejb.EJBNature">
+                  </objectState>
+                  <objectState
+                        name="projectNature"
+                        value="org.eclipse.jst.j2ee.ApplicationClientNature">
+                  </objectState>
+                  <objectState
+                        name="projectNature"
+                        value="org.eclipse.jst.j2ee.web.WebNature">
+                  </objectState>
+                  <objectState
+                        name="projectNature"
+                        value="org.eclipse.jst.j2ee.jca.ConnectorNature">
+                  </objectState>
+               </or>
+            </and>            
+            </or>
+         </enables>
+         
+         <emfEnablement>
+         	<package uri="org.eclipse.emf.ecore.resource" />
+         	<package uri="common.xmi" />         	
+         	<package uri="application.xmi" />         	         	
+         	<package uri="client.xmi" />         	         	
+         	<package uri="modulemap.xmi" />           	
+         	<package uri="ejb.xmi" />                 	
+         	<package uri="jca.xmi" />                 	
+         	<package uri="webapplication.xmi" />                 	
+         	<package uri="jsp.xmi" />                 	
+         	<package uri="wsdd.xmi" />                 	
+         	<package uri="webservice_client.xmi" />           	         	
+         	<package uri="wscommon.xmi" />  
+         </emfEnablement>
+      </navigatorContent>
+   </extension>
 </plugin>
+
+