platform35/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderManager.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/platform35/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderManager.java Thu Jul 30 11:56:23 2009 -0500
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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.core.internal.resources.mapping;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.core.internal.utils.Policy;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.mapping.IModelProviderDescriptor;
+import org.eclipse.core.resources.mapping.ModelProvider;
+import org.eclipse.core.runtime.*;
+
+public class ModelProviderManager {
+
+ private static Map descriptors;
+ private static ModelProviderManager instance;
+
+ public synchronized static ModelProviderManager getDefault() {
+ if (instance == null) {
+ instance = new ModelProviderManager();
+ }
+ return instance;
+ }
+
+ private void detectCycles() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public IModelProviderDescriptor getDescriptor(String id) {
+ lazyInitialize();
+ return (IModelProviderDescriptor) descriptors.get(id);
+ }
+
+ public IModelProviderDescriptor[] getDescriptors() {
+ lazyInitialize();
+ return (IModelProviderDescriptor[]) descriptors.values().toArray(new IModelProviderDescriptor[descriptors.size()]);
+ }
+
+ public ModelProvider getModelProvider(String modelProviderId) throws CoreException {
+ IModelProviderDescriptor desc = getDescriptor(modelProviderId);
+ if (desc == null)
+ return null;
+ return desc.getModelProvider();
+ }
+
+ protected void lazyInitialize() {
+ if (descriptors != null)
+ return;
+ IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_MODEL_PROVIDERS);
+ IExtension[] extensions = point.getExtensions();
+ descriptors = new HashMap(extensions.length * 2 + 1);
+ for (int i = 0, imax = extensions.length; i < imax; i++) {
+ IModelProviderDescriptor desc = null;
+ try {
+ desc = new ModelProviderDescriptor(extensions[i]);
+ } catch (CoreException e) {
+ Policy.log(e);
+ }
+ if (desc != null)
+ descriptors.put(desc.getId(), desc);
+ }
+ //do cycle detection now so it only has to be done once
+ //cycle detection on a graph subset is a pain
+ detectCycles();
+ }
+
+}