Bug 312475 -  JUnit failures in metadata and pagedesigner tests
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataModelManagerFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataModelManagerFactory.java
index 4eb8ef6..5c8fa84 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataModelManagerFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataModelManagerFactory.java
@@ -11,15 +11,15 @@
 
 package org.eclipse.jst.jsf.common.metadata.internal;
 
-import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 
 /**
  * A factory that will produce {@link IMetaDataModelManager}s
  */
 public interface IMetaDataModelManagerFactory {
 	/**
-	 * @param project
-	 * @return IMetaDataModelManager for the project
+	 * @param projectOrWorkspaceRoot
+	 * @return IMetaDataModelManager for the project, or shared IMetaDataModelManager for the workspace
 	 */
-	public IMetaDataModelManager getInstance(IProject project);
+	public IMetaDataModelManager getInstance(IResource projectOrWorkspaceRoot);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManagerFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManagerFactory.java
index dd0e61b..30059f2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManagerFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManagerFactory.java
@@ -14,6 +14,7 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
@@ -29,7 +30,7 @@
  * Produces {@link IMetaDataModelManager}s
  *
  */
-public final class MetaDataModelManagerFactory extends ResourceSingletonObjectManager<IMetaDataModelManager, IProject> {
+public final class MetaDataModelManagerFactory extends ResourceSingletonObjectManager<IMetaDataModelManager, IResource> {
 
 	private static MetaDataModelManagerFactory 	INSTANCE;
 	
@@ -53,10 +54,10 @@
 	 */
 	public static IMetaDataModelManager getMetaDataModelManagerInstance(final IProject project) {
 		try {
-			return getMetaDataModelManagerFactoryInstance(project).getInstance(project);			
+			return getMetaDataModelManagerFactoryInstance(project).getInstance(project != null ? project : ResourcesPlugin.getWorkspace().getRoot());			
 		} catch (ManagedObjectException e) {
-			if (project.getProject() != null)
-				JSFCommonPlugin.log(e, "Cannot create IMetaDataModelManager for "+project.getProject().getName()+ " (1)"); //$NON-NLS-1$ //$NON-NLS-2$
+			if (project != null)
+				JSFCommonPlugin.log(e, "Cannot create IMetaDataModelManager for "+project.getName()+ " (1)"); //$NON-NLS-1$ //$NON-NLS-2$
 			else
 				JSFCommonPlugin.log(e, "Cannot create workspace shared IMetaDataModelManager (1)"); //$NON-NLS-1$ 
 		}
@@ -89,32 +90,32 @@
 	}
 	
 	@Override
-	protected IMetaDataModelManager createNewInstance(final IProject project) {
+	protected IMetaDataModelManager createNewInstance(final IResource resource) {
 		try {
-			final IMetaDataModelManagerFactory factory = getMetaDataModelManagerFactoryProviderInstances(project);
+			final IMetaDataModelManagerFactory factory = getMetaDataModelManagerFactoryProviderInstances(resource);
 			if (factory != null)
-				return factory.getInstance(project);
+				return factory.getInstance(resource);
 		} catch (Exception e) {
-			if (project != null)
-				JSFCommonPlugin.log(e, "Cannot create IMetaDataModelManager for "+project.getName()+ " (2)"); //$NON-NLS-1$ //$NON-NLS-2$
+			if (resource != null)
+				JSFCommonPlugin.log(e, "Cannot create IMetaDataModelManager for "+resource.getName()+ " (2)"); //$NON-NLS-1$ //$NON-NLS-2$
 			else
 				JSFCommonPlugin.log(e, "Cannot create workspace shared IMetaDataModelManager (2)"); //$NON-NLS-1$ 
 		}			
 		return null;
 	}
 
-	private IMetaDataModelManagerFactory getMetaDataModelManagerFactoryProviderInstances(final IProject project) {
+	private IMetaDataModelManagerFactory getMetaDataModelManagerFactoryProviderInstances(final IResource resource) {
 		final CompositeFactorySelectionStrategyProvider factoryProvider = new CompositeFactorySelectionStrategyProvider();		
-		return factoryProvider != null ? factoryProvider.getFactoryToUse(project) : null;
+		return factoryProvider != null ? factoryProvider.getFactoryToUse(resource) : null;
 	}
 	
 	private class CompositeFactorySelectionStrategyProvider
 	{
-		public IMetaDataModelManagerFactory getFactoryToUse(final IProject project) {
+		public IMetaDataModelManagerFactory getFactoryToUse(final IResource resource) {
 			final MetaDataModelManagerProviderSelectionStrategy providerSelector = new MetaDataModelManagerProviderSelectionStrategy();		
 	        addStrategies(providerSelector);
 	        
-			final IMetaDataModelManagerFactory provider = providerSelector.perform(project);
+			final IMetaDataModelManagerFactory provider = providerSelector.perform(resource);
 	        if (provider != providerSelector.getNoResult())
 	        {
 	            return provider;
@@ -132,7 +133,7 @@
 	
 	private static class MetaDataModelManagerProviderSelectionStrategy
 		extends
-			AbstractTestableExtensibleDefaultProviderSelectionStrategy<IProject, IMetaDataModelManagerFactory> {
+			AbstractTestableExtensibleDefaultProviderSelectionStrategy<IResource, IMetaDataModelManagerFactory> {
 		
 		private static final IMetaDataModelManagerFactory NO_RESULT = null;
 		
@@ -143,7 +144,7 @@
 	}
 	
 	private abstract class AbstractManagerProviderStrategy 
-		implements ISimpleStrategy<IProject, IMetaDataModelManagerFactory> {
+		implements ISimpleStrategy<IResource, IMetaDataModelManagerFactory> {
 		
 		private final IMetaDataModelManagerFactory NO_RESULT = null;
 		public IMetaDataModelManagerFactory getNoResult() {
@@ -151,11 +152,10 @@
 		}
 	}
 	
-
 	private class DefaultManagerProviderStrategy extends
 			AbstractManagerProviderStrategy {
 
-		public IMetaDataModelManagerFactory perform(final IProject input) throws Exception {
+		public IMetaDataModelManagerFactory perform(final IResource input) throws Exception {
 			return new DefaultManagerProvider();
 		}
 
@@ -164,9 +164,9 @@
 	private static class DefaultManagerProvider 
 		implements IMetaDataModelManagerFactory {
 
-		public IMetaDataModelManager getInstance(final IProject project) {
-			if (project != null)
-				return new MetaDataModelManager(project);
+		public IMetaDataModelManager getInstance(final IResource project) {
+			if (project != null && project instanceof IProject)
+				return new MetaDataModelManager((IProject)project);
 			return MetaDataModelManager.getSharedInstance();
 		}
 		
@@ -175,7 +175,7 @@
 	private class ExtensionBasedManagerProviderStrategy 
 		extends AbstractManagerProviderStrategy {
 	
-		public IMetaDataModelManagerFactory perform(final IProject input) throws Exception {
+		public IMetaDataModelManagerFactory perform(final IResource input) throws Exception {
 			return EXT_PT_BASED_FACTORY != null ? EXT_PT_BASED_FACTORY : getNoResult();
 		}
 	}