| /******************************************************************************* |
| * Copyright (c) 2006 Sybase, Inc. 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: |
| * Sybase, Inc. - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.pagedesigner.preview; |
| |
| import java.util.List; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IPageVariablesProvider; |
| import org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.IDocumentPageVariableAdapter; |
| import org.eclipse.jst.pagedesigner.parts.DocumentEditPart; |
| import org.eclipse.jst.pagedesigner.parts.NodeEditPart; |
| import org.eclipse.jst.pagedesigner.utils.PreviewUtil; |
| import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil; |
| import org.eclipse.wst.html.core.internal.provisional.contenttype.ContentTypeIdForHTML; |
| import org.eclipse.wst.sse.core.StructuredModelManager; |
| import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; |
| import org.eclipse.wst.xml.core.internal.document.XMLGeneratorImpl; |
| import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; |
| import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; |
| import org.eclipse.wst.xml.core.internal.provisional.document.ISourceGenerator; |
| import org.w3c.dom.Node; |
| |
| /** |
| * @author mengbo |
| * @version 1.5 |
| */ |
| public class PreviewHandlerNew { |
| //private static Logger _log = PDPlugin.getLogger(PreviewHandlerNew.class); |
| |
| /** |
| * @param part |
| * @param result |
| */ |
| public static void generatePreview(DocumentEditPart part, |
| StringBuffer result) { |
| try { |
| IProject prj = StructuredModelUtil.getProjectFor(part.getIDOMNode() |
| .getModel()); |
| PageExpressionContext.initialize(prj); |
| |
| IDOMDocument doc = (IDOMDocument) part.getIDOMNode(); |
| Object obj = doc.getAdapterFor(IDocumentPageVariableAdapter.class); |
| if (obj instanceof IPageVariablesProvider) { |
| ((IPageVariablesProvider) obj).refresh(); |
| PageExpressionContext.getCurrent().pushPageVarProvider( |
| (IPageVariablesProvider) obj); |
| } else { |
| PageExpressionContext.getCurrent().pushPageVarProvider(null); |
| } |
| |
| // IDOMModel previewModel = |
| // (IDOMModel)StructuredModelManager.getModelManager().createNewInstance(doc.getModel()); |
| // IDOMDocument previewDoc = previewModel.getDocument(); |
| |
| // CR400625: creating XML model here instead of HTML model. Since |
| // for HTML model, there are checking enforced |
| // by WTP to make sure the HTML content model is not invalidated. |
| // And sometimes, the converted HTML may not fully |
| // comply with HTML content model. |
| // Use XML instead to workaround the content model validation. |
| |
| // CR403449: But if we use XML, then system can't recogonize special |
| // tag such as "script", "style", they |
| // support <!-- --> in them. |
| // So we are still using HTML model, but in TagConverter, we are |
| // always caling DOMUtil.cloneNodeDeepIgnoreError |
| // to try to skip the errors. |
| // Hopefully in later version of SSE, the famous "br" problem is |
| // fixed, and we won't met error when doing |
| // deep clone. |
| // IStructuredModel sModel = |
| // StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(IContentTypeIdentifier.ContentTypeID_XML); |
| // FIXME: if is not jsp, should use original contentType, if is jsp, |
| // should use the corresponding |
| // content type |
| IStructuredModel sModel = StructuredModelManager.getModelManager() |
| .createUnManagedStructuredModelFor( |
| ContentTypeIdForHTML.ContentTypeID_HTML); |
| |
| IDOMDocument previewDoc = ((IDOMModel) sModel).getDocument(); |
| PreviewConvertContext context = new PreviewConvertContext( |
| previewDoc); |
| |
| ISourceGenerator generator = XMLGeneratorImpl.getInstance(); |
| List subeditparts = part.getChildren(); |
| for (int i = 0, size = subeditparts.size(); i < size; i++) { |
| NodeEditPart subpart = (NodeEditPart) subeditparts.get(i); |
| Node node = context.previewConvert(subpart.getIDOMNode()); |
| |
| PreviewUtil.previewNode(node); |
| |
| if (node != null) { |
| result.append(generator.generateSource(node)); |
| } |
| |
| } |
| sModel.releaseFromEdit(); |
| } finally { |
| PageExpressionContext.reset(); |
| } |
| } |
| |
| } |