diff options
Diffstat (limited to 'bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/ModelHandlerRegistry.java')
-rw-r--r-- | bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/ModelHandlerRegistry.java | 295 |
1 files changed, 0 insertions, 295 deletions
diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/ModelHandlerRegistry.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/ModelHandlerRegistry.java deleted file mode 100644 index af83dedc8c..0000000000 --- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/modelhandler/ModelHandlerRegistry.java +++ /dev/null @@ -1,295 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 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 - * Jens Lukowski/Innoopract - initial renaming/restructuring - * - *******************************************************************************/ -package org.eclipse.wst.sse.core.internal.modelhandler; - -import java.io.IOException; -import java.io.InputStream; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.content.IContentDescription; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.wst.sse.core.internal.Logger; -import org.eclipse.wst.sse.core.internal.encoding.CodedIO; -import org.eclipse.wst.sse.core.internal.ltk.modelhandler.IModelHandler; -import org.eclipse.wst.sse.core.internal.util.Utilities; - - -public class ModelHandlerRegistry { - private static ModelHandlerRegistry instance = null; - static final String INTERNAL_DEFAULT_EXTENSION = "org.eclipse.wst.xml.core.internal.modelhandler"; //$NON-NLS-1$ - - public synchronized static ModelHandlerRegistry getInstance() { - if (instance == null) { - instance = new ModelHandlerRegistry(); - } - return instance; - } - - private IModelHandler defaultHandler = null; - private ModelHandlerRegistryReader reader = new ModelHandlerRegistryReader(); - - private ModelHandlerRegistry() { - super(); - reader = new ModelHandlerRegistryReader().readRegistry(); - } - - /** - * Finds the default model handler. Note: we still go through the registry - * to be sure to get the existing instance, but then we do remember it, so - * subsequent requests will be faster. The first time through, we do check - * the whole list, to be sure there is only one. - * - */ - final public IModelHandler getDefault() { - if (defaultHandler == null) { - IConfigurationElement[] elements = reader.elements; - for (int i = 0; i < elements.length; i++) { - boolean ofInterest = reader.isElementDefault(elements[i]); - if (ofInterest) { - /* - * If, here within the search loop we've already found one - * defaultHandler, then something is wrong! - */ - if (defaultHandler == null) { - defaultHandler = reader.getInstance(elements[i]); - } - else { - String errorString = "Program or configuration error. More than one default content handler found"; //$NON-NLS-1$ - Logger.log(Logger.ERROR, errorString); - throw new IllegalStateException(errorString); - } - } - } - } - if (defaultHandler == null) { - String errorString = "Program or configuration error. No default content type handler found."; //$NON-NLS-1$ - Logger.log(Logger.ERROR, errorString); - throw new IllegalStateException(errorString); - } - return defaultHandler; - } - - /** - * Finds a ModelHandler based on literal extension id. It's basically a - * "first found first returned". No specific order is guaranteed and the - * uniqueness of IDs is not considered. - * - * @param extensionId - * @return the given extension, or null - */ - private IModelHandler getHandlerExtension(String extensionId) { - IModelHandler found = null; - IConfigurationElement[] elements = reader.elements; - if (elements != null) { - for (int i = 0; i < elements.length; i++) { - String currentId = reader.getId(elements[i]); - if (extensionId.equals(currentId)) { - IModelHandler item = reader.getInstance(elements[i]); - found = item; - } - } - } - else if (Logger.DEBUG){ - Logger.log(Logger.WARNING, "There were no Model Handler found in registry"); //$NON-NLS-1$ - } - return found; - } - - /** - * Finds the registered IModelHandler for a given named file's content - * type. - * - * @param file - * @return The IModelHandler registered for the content type of the given - * file. If an exact match is not found, the most-specific match - * according to IContentType.isKindOf() will be returned. If none - * are found, either a default or null will be returned. - * @throws CoreException - */ - public IModelHandler getHandlerFor(IFile file) throws CoreException { - IModelHandler modelHandler = null; - IContentDescription contentDescription = null; - IContentType contentType = null; - boolean accessible = file.isAccessible(); - if (accessible) { - /* Try the optimized method first as the description may be cached */ - contentDescription = file.getContentDescription(); - if (contentDescription != null) { - // use the provided description - contentType = contentDescription.getContentType(); - } - else { - /* use the more thorough discovery method to get a description */ - InputStream contents = null; - try { - contents = file.getContents(true); - contentDescription = Platform.getContentTypeManager().getDescriptionFor(contents, file.getName(), IContentDescription.ALL); - if (contentDescription != null) { - contentType = contentDescription.getContentType(); - } - } - catch (IOException e) { - // nothing further can be done, but will log for debugging - Logger.logException(e); - } - finally { - if (contents != null) { - try { - contents.close(); - } - catch (IOException e1) { - // nothing can be done - } - } - } - } - } - - /* - * If we couldn't get the content type from a description, try basing - * it on just the filename - */ - if (contentType == null) { - contentType = Platform.getContentTypeManager().findContentTypeFor(file.getName()); - } - - if (contentType != null) { - modelHandler = getHandlerForContentType(contentType); - } - else { - // hard coding for null content type - modelHandler = getHandlerExtension(INTERNAL_DEFAULT_EXTENSION); //$NON-NLS-1$ - } - - return modelHandler; - } - - - /** - * Finds the registered IModelHandler for a given named InputStream. - * - * @param inputName - * @param inputStream - * @return The IModelHandler registered for the content type of the given - * input. If an exact match is not found, the most-specific match - * according to IContentType.isKindOf() will be returned. If none - * are found, either a default or null will be returned. - * @throws IOException - */ - public IModelHandler getHandlerFor(String inputName, InputStream inputStream) throws IOException { - InputStream iStream = Utilities.getMarkSupportedStream(inputStream); - IModelHandler modelHandler = null; - IContentType contentType = null; - if (inputStream != null) { - try { - iStream.mark(CodedIO.MAX_MARK_SIZE); - contentType = Platform.getContentTypeManager().findContentTypeFor(Utilities.getLimitedStream(iStream), inputName); - } - finally { - if (iStream != null && iStream.markSupported()) { - iStream.reset(); - } - } - - } - if (contentType == null) { - contentType = Platform.getContentTypeManager().findContentTypeFor(inputName); - } - // if all else failed, try to detect solely on contents; done last for - // performance reasons - if (contentType == null) { - contentType = Platform.getContentTypeManager().findContentTypeFor(Utilities.getLimitedStream(iStream), null); - } - modelHandler = getHandlerForContentType(contentType); - return modelHandler; - } - - /** - * Finds the registered IModelHandler for a given IContentType. - * - * @param contentType - * @return The IModelHandler registered for the given content type. If an - * exact match is not found, the most-specific match according to - * IContentType.isKindOf() will be returned. If none are found, - * either a default or null will be returned. - */ - private IModelHandler getHandlerForContentType(IContentType contentType) { - IModelHandler handler = null; - if (contentType != null) { - IConfigurationElement exactContentTypeElement = null; - IConfigurationElement kindOfContentTypeElement = null; - int kindOfContentTypeDepth = 0; - IConfigurationElement[] elements = reader.elements; - if (elements != null) { - for (int i = 0; i < elements.length && exactContentTypeElement == null; i++) { - String currentId = reader.getAssociatedContentTypeId(elements[i]); - IContentType associatedContentType = Platform.getContentTypeManager().getContentType(currentId); - if (contentType.equals(associatedContentType)) { - exactContentTypeElement = elements[i]; - } - else if (contentType.isKindOf(associatedContentType)) { - /* - * Update the kindOfElement variable only if this - * element's content type is "deeper" (depth test - * ensures the first content type is remembered) - */ - IContentType testContentType = associatedContentType; - int testDepth = 0; - while (testContentType != null) { - testDepth++; - testContentType = testContentType.getBaseType(); - } - if (testDepth > kindOfContentTypeDepth) { - kindOfContentTypeElement = elements[i]; - kindOfContentTypeDepth = testDepth; - } - } - } - } - else if (Logger.DEBUG){ - Logger.log(Logger.WARNING, "There were no Model Handler found in registry"); //$NON-NLS-1$ - } - if (exactContentTypeElement != null) { - handler = reader.getInstance(exactContentTypeElement); - } - else if (kindOfContentTypeElement != null) { - handler = reader.getInstance(kindOfContentTypeElement); - } - } - - if (handler == null) { - // temp hard coding for null content type arguments - handler = getHandlerExtension(INTERNAL_DEFAULT_EXTENSION); //$NON-NLS-1$ - } - return handler; - } - - /** - * Finds the registered IModelHandler for a given content type ID. No - * specific order is guaranteed and the uniqueness of IDs is not - * considered. - * - * @param contentType - * @return The IModelHandler registered for the given content type ID. If - * an exact match is not found, the most-specific match according - * to IContentType.isKindOf() will be returned. If none are found, - * either a default or null will be returned. - */ - public IModelHandler getHandlerForContentTypeId(String contentTypeId) { - IContentType contentType = Platform.getContentTypeManager().getContentType(contentTypeId); - return getHandlerForContentType(contentType); - } -} |