Search in sources :

Example 1 with StructuredTextPartitionerForJSP

use of org.eclipse.jst.jsp.core.internal.text.StructuredTextPartitionerForJSP in project webtools.sourceediting by eclipse.

the class JSPModelLoader method reInitializeEmbeddedType.

/**
 * This is "reinitialize" since there should always be at least the
 * default one assigned, before we start checking the stream
 */
private void reInitializeEmbeddedType(IStructuredModel model, EmbeddedTypeHandler oldEmbeddedContentType, EmbeddedTypeHandler newEmbeddedContentType) {
    // check program logic
    // $NON-NLS-1$
    Assert.isNotNull(oldEmbeddedContentType, "Program error: invalid call during model initialization");
    // once we know the embedded content type, we need to set it in the
    // PageDirectiveAdapter ... the order of initialization is
    // critical here, the doc must have been created, but its contents not
    // set yet,
    // and all factories must have been set up also.
    IDOMModel domModel = (IDOMModel) model;
    IStructuredDocument structuredDocument = model.getStructuredDocument();
    IDOMDocument document = domModel.getDocument();
    PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) document.getExistingAdapter(PageDirectiveAdapter.class);
    // ==> // PropagatingAdapter propagatingAdapter = (PropagatingAdapter)
    // ((INodeNotifier)
    // document).getExistingAdapter(PropagatingAdapter.class);
    // ==> // ModelQueryAdapter modelQueryAdapter = (ModelQueryAdapter)
    // ((INodeNotifier)
    // document).getExistingAdapter(ModelQueryAdapter.class);
    oldEmbeddedContentType.uninitializeFactoryRegistry(model.getFactoryRegistry());
    oldEmbeddedContentType.uninitializeParser(structuredDocument.getParser());
    // since 'document' is not recreated in this
    // reinit path, we need to remove all adapters,
    // except for the propagated adapters (including page
    // directive adapter, and model query adapter).
    // to accomplish this, we'll just remove all, then
    // add back with a call to pre-load adapt.
    // let clients decide to unload adapters from document
    // Collection oldAdapters = document.getAdapters();
    // Iterator oldAdaptersIterator = oldAdapters.iterator();
    // while (oldAdaptersIterator.hasNext()) {
    // INodeAdapter oldAdapter = (INodeAdapter)
    // oldAdaptersIterator.next();
    // if (oldAdapter != pageDirectiveAdapter && oldAdapter !=
    // propagatingAdapter && oldAdapter != modelQueryAdapter) {
    // // DO NOT remove directly!
    // // can change contents while in notifity loop!
    // //oldAdaptersIterator.remove();
    // document.removeAdapter(oldAdapter);
    // }
    // }
    // DMW: I believe something like the following is needed,
    // since releases cached adapters
    // if (document instanceof DocumentImpl) {
    // ((DocumentImpl) document).releaseDocumentType();
    // ((DocumentImpl) document).releaseStyleSheets();
    // }
    // remember, embedded type factories are automatically cleared when
    // embededType changed
    pageDirectiveAdapter.setEmbeddedType(newEmbeddedContentType);
    // pageDirectiveAdapter.clearPageWatchers();
    if (newEmbeddedContentType != null) {
        // need to null out or else ModelParserAdapter
        // won't get reinitialized
        ((DOMModelImpl) model).setModelParser(null);
        newEmbeddedContentType.initializeFactoryRegistry(model.getFactoryRegistry());
        newEmbeddedContentType.initializeParser(structuredDocument.getParser());
        // partitioner setup is the responsibility of this loader
        IDocumentPartitioner documentPartitioner = structuredDocument.getDocumentPartitioner();
        // added null/type checks for safety.
        if (documentPartitioner != null && documentPartitioner instanceof StructuredTextPartitionerForJSP) {
            if (newEmbeddedContentType.getFamilyId().equals(ContentTypeIdForXML.ContentTypeID_XML)) {
                ((StructuredTextPartitionerForJSP) documentPartitioner).setEmbeddedPartitioner(new StructuredTextPartitionerForXML());
            } else if (newEmbeddedContentType.getFamilyId().equals(ContentTypeIdForHTML.ContentTypeID_HTML)) {
                ((StructuredTextPartitionerForJSP) documentPartitioner).setEmbeddedPartitioner(new StructuredTextPartitionerForHTML());
            }
        }
    }
    // adding language here, in this convienent central
    // location, but some obvious renaming or refactoring
    // wouldn't hurt, in future.
    // I needed to add this language setting for JSP Fragment support
    // Note: this is the one that counts, since at this point,
    // the model has an ID, so we can look up IFile, etc.
    String language = getLanguage(model);
    if (language != null && language.length() > 0) {
        pageDirectiveAdapter.setLanguage(language);
    }
}
Also used : StructuredTextPartitionerForJSP(org.eclipse.jst.jsp.core.internal.text.StructuredTextPartitionerForJSP) StructuredTextPartitionerForXML(org.eclipse.wst.xml.core.internal.text.rules.StructuredTextPartitionerForXML) IDocumentPartitioner(org.eclipse.jface.text.IDocumentPartitioner) IDOMModel(org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel) DOMModelImpl(org.eclipse.wst.xml.core.internal.document.DOMModelImpl) StructuredTextPartitionerForHTML(org.eclipse.wst.html.core.internal.text.StructuredTextPartitionerForHTML) IStructuredDocument(org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument) IDOMDocument(org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument) PageDirectiveAdapter(org.eclipse.jst.jsp.core.internal.document.PageDirectiveAdapter)

Example 2 with StructuredTextPartitionerForJSP

use of org.eclipse.jst.jsp.core.internal.text.StructuredTextPartitionerForJSP in project webtools.sourceediting by eclipse.

the class PageDirectiveAdapterImpl method setLanguage.

/**
 * This is public access method, used especially from loader, for JSP
 * Fragment support.
 */
public void setLanguage(String newLanguage) {
    this.cachedLanguage = newLanguage;
    IDocumentPartitioner partitioner = ((IDocumentExtension3) model.getStructuredDocument()).getDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING);
    if (partitioner instanceof StructuredTextPartitionerForJSP) {
        ((StructuredTextPartitionerForJSP) partitioner).setLanguage(newLanguage);
    }
}
Also used : StructuredTextPartitionerForJSP(org.eclipse.jst.jsp.core.internal.text.StructuredTextPartitionerForJSP) IDocumentExtension3(org.eclipse.jface.text.IDocumentExtension3) IDocumentPartitioner(org.eclipse.jface.text.IDocumentPartitioner)

Aggregations

IDocumentPartitioner (org.eclipse.jface.text.IDocumentPartitioner)2 StructuredTextPartitionerForJSP (org.eclipse.jst.jsp.core.internal.text.StructuredTextPartitionerForJSP)2 IDocumentExtension3 (org.eclipse.jface.text.IDocumentExtension3)1 PageDirectiveAdapter (org.eclipse.jst.jsp.core.internal.document.PageDirectiveAdapter)1 StructuredTextPartitionerForHTML (org.eclipse.wst.html.core.internal.text.StructuredTextPartitionerForHTML)1 IStructuredDocument (org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument)1 DOMModelImpl (org.eclipse.wst.xml.core.internal.document.DOMModelImpl)1 IDOMDocument (org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument)1 IDOMModel (org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel)1 StructuredTextPartitionerForXML (org.eclipse.wst.xml.core.internal.text.rules.StructuredTextPartitionerForXML)1