wiki-export/wiki-content/DevFaqNewXMLFileType.xml (217 lines of code) (raw):

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --><mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="0.3" xml:lang="en" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd"> <siteinfo> <sitename>NetBeans Wiki</sitename> <base>http://wiki.netbeans.org/Main_Page</base> <generator>MediaWiki 1.15.1</generator> <case>first-letter</case> <namespaces> <namespace key="-2">Media</namespace> <namespace key="-1">Special</namespace> <namespace key="0"/> <namespace key="1">Talk</namespace> <namespace key="2">User</namespace> <namespace key="3">User talk</namespace> <namespace key="4">NetBeans Wiki</namespace> <namespace key="5">NetBeans Wiki talk</namespace> <namespace key="6">File</namespace> <namespace key="7">File talk</namespace> <namespace key="8">MediaWiki</namespace> <namespace key="9">MediaWiki talk</namespace> <namespace key="10">Template</namespace> <namespace key="11">Template talk</namespace> <namespace key="12">Help</namespace> <namespace key="13">Help talk</namespace> <namespace key="14">Category</namespace> <namespace key="15">Category talk</namespace> </namespaces> </siteinfo> <page> <title>DevFaqNewXMLFileType</title> <id>7413</id> <revision> <id>40167</id> <timestamp>2010-07-24T19:59:00Z</timestamp> <contributor> <username>Jtulach</username> <id>526</id> </contributor> <text xml:space="preserve">__NOTOC__ &gt; I want to add some special&lt;br&gt; &gt; functionality to the initial handling of xml files with a xul extension, but&lt;br&gt; &gt; then allow users to use the existing NB functionality for editing,&lt;br&gt; &gt; validation etc.&lt;br&gt; &gt;&lt;br&gt; &gt; Did you solve this without patching?&lt;br&gt; In 5.0, it can be done without a patch. It does, however, require an impl dependency on xml-core. I'd really like this to be simpler, and a supported API. See below for issues with pre-release 6.0 Anyway, here's how I do it for an xml flavor called SCXML: 1. Register the [[DevFaqDataLoader|loader]] for text/xml mimetype 2. The loader: &lt;source lang="java"&gt; import java.io.IOException; import org.netbeans.modules.xml.core.XMLDataLoader; import org.openide.filesystems.FileObject; import org.openide.loaders.DataObjectExistsException; import org.openide.loaders.MultiDataObject; import org.openide.loaders.UniFileLoader; import org.openide.util.NbBundle; public class ScxmlDataLoader extends UniFileLoader { public static final String REQUIRED_MIME = "application/scxml+xml"; private static final long serialVersionUID = 1L; public ScxmlDataLoader() { super("com.nuance.tools.xhmi.ScxmlDataObject"); } protected String defaultDisplayName() { return NbBundle.getMessage(ScxmlDataLoader.class, "LBL_Scxml_loader_name"); } protected void initialize() { super.initialize(); getExtensions().addMimeType(REQUIRED_MIME); } protected MultiDataObject createMultiObject(FileObject primaryFile) throws DataObjectExistsException, IOException { return new ScxmlDataObject(primaryFile, this); } protected MultiDataObject.Entry createPrimaryEntry (MultiDataObject obj, FileObject primaryFile) { return new XMLDataLoader.XMLFileEntry (obj, primaryFile); //adds smart templating } protected String actionsContext() { return "Loaders/" + REQUIRED_MIME + "/Actions"; } } &lt;/source&gt; ---- 3. The data object: &lt;source lang="java"&gt; import java.io.IOException; import org.netbeans.modules.xml.core.XMLDataObjectLook; import org.netbeans.modules.xml.core.cookies.DataObjectCookieManager; import org.netbeans.modules.xml.core.sync.DataObjectSyncSupport; import org.netbeans.modules.xml.core.sync.Synchronizator; import org.netbeans.modules.xml.core.text.TextEditorSupport; import org.netbeans.spi.xml.cookies.CheckXMLSupport; import org.netbeans.spi.xml.cookies.DataObjectAdapters; import org.netbeans.spi.xml.cookies.ValidateXMLSupport; import org.openide.filesystems.FileObject; import org.openide.loaders.DataObjectExistsException; import org.openide.loaders.MultiDataObject; import org.openide.nodes.CookieSet; import org.openide.nodes.Node; import org.openide.text.DataEditorSupport; import org.xml.sax.InputSource; public class ScxmlDataObject extends MultiDataObject implements XMLDataObjectLook { private transient final DataObjectCookieManager cookieManager; private transient Synchronizator synchronizator; public ScxmlDataObject(FileObject pf, ScxmlDataLoader loader) throws DataObjectExistsException, IOException { super(pf, loader); CookieSet cookies = getCookieSet(); cookieManager = new DataObjectCookieManager (this, cookies); cookies.add((Node.Cookie) DataEditorSupport.create(this, getPrimaryEntry(), cookies)); InputSource is = DataObjectAdapters.inputSource(this); cookies.add(new CheckXMLSupport(is)); cookies.add(new ValidateXMLSupport(is)); // editor support defines MIME type understood by EditorKits registry TextEditorSupport.TextEditorSupportFactory editorFactory = new TextEditorSupport.TextEditorSupportFactory (this, org.netbeans.modules.xml.core.XMLDataObject.MIME_TYPE); editorFactory.registerCookies (cookies); } protected Node createNodeDelegate() { return new ScxmlDataNode(this); } ////////// XMLDataObjectLook interface ///////////////// public DataObjectCookieManager getCookieManager() { return cookieManager; } public synchronized Synchronizator getSyncInterface() { if (synchronizator == null) { synchronizator = new DataObjectSyncSupport (ScxmlDataObject.this); } return synchronizator; } } &lt;/source&gt; ---- 4. The layer file: &lt;source lang="xml"&gt; &lt;filesystem&gt; &lt;folder name="Loaders"&gt; &lt;folder name="application"&gt; &lt;folder name="scxml+xml"&gt; &lt;folder name="Actions"&gt; &lt;file name="org-openide-actions-OpenAction.instance"/&gt; &lt;attr name="org-openide-actions-OpenAction.instance/org-openide-actions-FileSystemAction.instance" boolvalue="true"/&gt; &lt;file name="org-openide-actions-FileSystemAction.instance"/&gt; &lt;attr name="org-openide-actions-FileSystemAction.instance/sep-1.instance" boolvalue="true"/&gt; &lt;file name="sep-1.instance"&gt; &lt;attr name="instanceClass" stringvalue="javax.swing.JSeparator"/&gt; &lt;/file&gt; &lt;attr name="sep-1.instance/org-openide-actions-CutAction.instance" boolvalue="true"/&gt; &lt;file name="org-openide-actions-CutAction.instance"/&gt; &lt;attr name="org-openide-actions-CutAction.instance/org-openide-actions-CopyAction.instance" boolvalue="true"/&gt; &lt;file name="org-openide-actions-CopyAction.instance"/&gt; &lt;attr name="org-openide-actions-CopyAction.instance/sep-2.instance" boolvalue="true"/&gt; &lt;file name="sep-2.instance"&gt; &lt;attr name="instanceClass" stringvalue="javax.swing.JSeparator"/&gt; &lt;/file&gt; &lt;attr name="sep-2.instance/org-openide-actions-DeleteAction.instance" boolvalue="true"/&gt; &lt;file name="org-openide-actions-DeleteAction.instance"/&gt; &lt;attr name="org-openide-actions-DeleteAction.instance/org-openide-actions-RenameAction.instance" boolvalue="true"/&gt; &lt;file name="org-openide-actions-RenameAction.instance"/&gt; &lt;attr name="org-openide-actions-RenameAction.instance/sep-3.instance" boolvalue="true"/&gt; &lt;file name="sep-3.instance"&gt; &lt;attr name="instanceClass" stringvalue="javax.swing.JSeparator"/&gt; &lt;/file&gt; &lt;attr name="sep-3.instance/org-openide-actions-SaveAsTemplateAction.instance" boolvalue="true"/&gt; &lt;file name="org-openide-actions-SaveAsTemplateAction.instance"/&gt; &lt;attr name="org-openide-actions-SaveAsTemplateAction.instance/sep-4.instance" boolvalue="true"/&gt; &lt;file name="sep-4.instance"&gt; &lt;attr name="instanceClass" stringvalue="javax.swing.JSeparator"/&gt; &lt;/file&gt; &lt;attr name="sep-4.instance/org-openide-actions-ToolsAction.instance" boolvalue="true"/&gt; &lt;file name="org-openide-actions-ToolsAction.instance"/&gt; &lt;attr name="org-openide-actions-ToolsAction.instance/org-openide-actions-PropertiesAction.instance" boolvalue="true"/&gt; &lt;file name="org-openide-actions-PropertiesAction.instance"/&gt; &lt;/folder&gt; &lt;/folder&gt; &lt;/folder&gt; &lt;/folder&gt; &lt;folder name="Services"&gt; &lt;folder name="MIMEResolver"&gt; &lt;file name="ScxmlResolver.xml" url="resources/ScxmlResolver.xml"&gt; &lt;attr name="SystemFileSystem.localizingBundle" stringvalue="com.nuance.tools.xhmi.Bundle"/&gt; &lt;/file&gt; &lt;/folder&gt; &lt;/folder&gt; &lt;folder name="Templates"&gt; &lt;folder name="Other"&gt; &lt;file name="ScxmlTemplate.scxml" url="resources/ScxmlTemplate.scxml"&gt; &lt;attr name="SystemFileSystem.localizingBundle" stringvalue="com.nuance.tools.xhmi.Bundle"/&gt; &lt;attr name="template" boolvalue="true"/&gt; &lt;/file&gt; &lt;/folder&gt; &lt;/folder&gt; &lt;/source&gt; ---- 5. the MIME resolver: &lt;source lang="xml"&gt; &lt;MIME-resolver&gt; &lt;file&gt; &lt;ext name="scxml"/&gt; &lt;resolver mime="application/scxml+xml"/&gt; &lt;/file&gt; &lt;/MIME-resolver&gt; &lt;/source&gt; ----</text> </revision> </page> </mediawiki>