blob: b139f25e37f8c51ad61fc7a3155b976137a7b998 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 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
*******************************************************************************/
package org.eclipse.jst.jsp.core.internal.modelhandler;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.jst.jsp.core.internal.JSPCorePlugin;
import org.eclipse.jst.jsp.core.internal.encoding.JSPDocumentHeadContentDetector;
import org.eclipse.jst.jsp.core.internal.encoding.JSPDocumentLoader;
import org.eclipse.jst.jsp.core.internal.java.IJSPTranslation;
import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapterFactory;
import org.eclipse.jst.jsp.core.internal.java.TagTranslationAdapterFactory;
import org.eclipse.jst.jsp.core.internal.parser.JSPSourceParser;
import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP;
import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts;
import org.eclipse.wst.sse.core.internal.document.IDocumentCharsetDetector;
import org.eclipse.wst.sse.core.internal.document.IDocumentLoader;
import org.eclipse.wst.sse.core.internal.ltk.modelhandler.AbstractModelHandler;
import org.eclipse.wst.sse.core.internal.ltk.parser.BlockMarker;
import org.eclipse.wst.sse.core.internal.provisional.IModelLoader;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
public class ModelHandlerForJSP extends AbstractModelHandler {
/**
* Needs to match what's in plugin registry. In fact, can be overwritten
* at run time with what's in registry! (so should never be 'final')
*/
static String AssociatedContentTypeID = "org.eclipse.jst.jsp.core.jspsource"; //$NON-NLS-1$
/**
* Needs to match what's in plugin registry. In fact, can be overwritten
* at run time with what's in registry! (so should never be 'final')
*/
private static String ModelHandlerID = "org.eclipse.jst.jsp.core.modelhandler"; //$NON-NLS-1$
public ModelHandlerForJSP() {
super();
setId(ModelHandlerID);
setAssociatedContentTypeId(AssociatedContentTypeID);
}
protected void addJSPTagName(JSPSourceParser parser, String tagname) {
BlockMarker bm = new BlockMarker(tagname, null, DOMJSPRegionContexts.JSP_CONTENT, true);
parser.addBlockMarker(bm);
}
public IModelLoader getModelLoader() {
return new JSPModelLoader();
}
public Preferences getPreferences() {
return JSPCorePlugin.getDefault().getPluginPreferences();
}
public IDocumentCharsetDetector getEncodingDetector() {
return new JSPDocumentHeadContentDetector();
}
public IDocumentLoader getDocumentLoader() {
return new JSPDocumentLoader();
}
public static void ensureTranslationAdapterFactory(IStructuredModel sm) {
if (sm.getFactoryRegistry().getFactoryFor(IJSPTranslation.class) == null) {
/*
* Check for tag/tagx files, otherwise add the JSP translation
* factory for better compatibility with other possible subtypes
* of JSP.
*/
IContentType thisContentType = Platform.getContentTypeManager().getContentType(sm.getContentTypeIdentifier());
IContentType tagContentType = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSPTAG);
if (thisContentType.isKindOf(tagContentType)) {
INodeAdapterFactory factory = new TagTranslationAdapterFactory();
sm.getFactoryRegistry().addFactory(factory);
}
else {
INodeAdapterFactory factory = null;
// if (false) {
// IContentType textContentType = Platform.getContentTypeManager().getContentType(IContentTypeManager.CT_TEXT);
// IContentType jspContentType = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSP);
// /*
// * This IAdapterManager call is temporary placeholder code
// * that should not be relied upon in any way!
// */
// if (thisContentType.isKindOf(jspContentType)) {
// IContentType testContentType = thisContentType;
// INodeAdapterFactory holdFactory = null;
// while (!testContentType.equals(textContentType) && holdFactory == null) {
// holdFactory = (INodeAdapterFactory) Platform.getAdapterManager().getAdapter(testContentType.getId(), IJSPTranslation.class.getName());
// testContentType = testContentType.getBaseType();
// }
// }
// }
if (factory == null) {
factory = new JSPTranslationAdapterFactory();
}
sm.getFactoryRegistry().addFactory(factory);
}
}
}
}