diff options
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PreviewHandlerNew.java')
-rw-r--r-- | jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PreviewHandlerNew.java | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PreviewHandlerNew.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PreviewHandlerNew.java new file mode 100644 index 000000000..84a9c4fc7 --- /dev/null +++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PreviewHandlerNew.java @@ -0,0 +1,119 @@ +/******************************************************************************* + * 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.io.IOException; +import java.util.List; + +import org.eclipse.core.resources.IProject; +import org.eclipse.jst.pagedesigner.PDPlugin; +import org.eclipse.jst.pagedesigner.common.logging.Logger; +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.internal.provisional.IStructuredModel; +import org.eclipse.wst.sse.core.internal.provisional.StructuredModelManager; +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); + + public static void generatePreview(DocumentEditPart part, + StringBuffer result) throws IOException { + 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)); + } + + } + // XXX: seemed in WTP0.7, releaseFromEdit for a unmanaged model may + // fail + try { + sModel.releaseFromEdit(); + } catch (Throwable th) { + // "Error in model release:" + // _log.info("PreviewHandlerNew.Error.0", th); //$NON-NLS-1$ + } + return; + } finally { + PageExpressionContext.reset(); + } + } + +} |