blob: 5ea78bc5d871aa1d0be3e97c0c760a9b38a409ed [file] [log] [blame]
//
// 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.
//
= DevFaqNewXMLFileType
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki DevFaqNewXMLFileType
:description: Apache NetBeans wiki DevFaqNewXMLFileType
:toc: left
:toc-title:
:syntax: true
> I want to add some special
> functionality to the initial handling of xml files with a xul extension, but
> then allow users to use the existing NB functionality for editing,
> validation etc.
>
> Did you solve this without patching?
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 link:DevFaqDataLoader.asciidoc[loader] for text/xml mimetype
[start=2]
. The loader:
[source,java]
----
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";
}
}
----
<hr/>
[start=3]
. The data object:
[source,java]
----
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;
}
}
----
<hr/>
[start=4]
. The layer file:
[source,xml]
----
<filesystem>
<folder name="Loaders">
<folder name="application">
<folder name="scxml+xml">
<folder name="Actions">
<file name="org-openide-actions-OpenAction.instance"/>
<attr name="org-openide-actions-OpenAction.instance/org-openide-actions-FileSystemAction.instance" boolvalue="true"/>
<file name="org-openide-actions-FileSystemAction.instance"/>
<attr name="org-openide-actions-FileSystemAction.instance/sep-1.instance" boolvalue="true"/>
<file name="sep-1.instance">
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
</file>
<attr name="sep-1.instance/org-openide-actions-CutAction.instance" boolvalue="true"/>
<file name="org-openide-actions-CutAction.instance"/>
<attr name="org-openide-actions-CutAction.instance/org-openide-actions-CopyAction.instance" boolvalue="true"/>
<file name="org-openide-actions-CopyAction.instance"/>
<attr name="org-openide-actions-CopyAction.instance/sep-2.instance" boolvalue="true"/>
<file name="sep-2.instance">
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
</file>
<attr name="sep-2.instance/org-openide-actions-DeleteAction.instance" boolvalue="true"/>
<file name="org-openide-actions-DeleteAction.instance"/>
<attr name="org-openide-actions-DeleteAction.instance/org-openide-actions-RenameAction.instance" boolvalue="true"/>
<file name="org-openide-actions-RenameAction.instance"/>
<attr name="org-openide-actions-RenameAction.instance/sep-3.instance" boolvalue="true"/>
<file name="sep-3.instance">
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
</file>
<attr name="sep-3.instance/org-openide-actions-SaveAsTemplateAction.instance" boolvalue="true"/>
<file name="org-openide-actions-SaveAsTemplateAction.instance"/>
<attr name="org-openide-actions-SaveAsTemplateAction.instance/sep-4.instance" boolvalue="true"/>
<file name="sep-4.instance">
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
</file>
<attr name="sep-4.instance/org-openide-actions-ToolsAction.instance" boolvalue="true"/>
<file name="org-openide-actions-ToolsAction.instance"/>
<attr name="org-openide-actions-ToolsAction.instance/org-openide-actions-PropertiesAction.instance" boolvalue="true"/>
<file name="org-openide-actions-PropertiesAction.instance"/>
</folder>
</folder>
</folder>
</folder>
<folder name="Services">
<folder name="MIMEResolver">
<file name="ScxmlResolver.xml" url="resources/ScxmlResolver.xml">
<attr name="SystemFileSystem.localizingBundle" stringvalue="com.nuance.tools.xhmi.Bundle"/>
</file>
</folder>
</folder>
<folder name="Templates">
<folder name="Other">
<file name="ScxmlTemplate.scxml" url="resources/ScxmlTemplate.scxml">
<attr name="SystemFileSystem.localizingBundle" stringvalue="com.nuance.tools.xhmi.Bundle"/>
<attr name="template" boolvalue="true"/>
</file>
</folder>
</folder>
----
<hr/>
[start=5]
. the MIME resolver:
[source,xml]
----
<MIME-resolver>
<file>
<ext name="scxml"/>
<resolver mime="application/scxml+xml"/>
</file>
</MIME-resolver>
----
<hr/>
=== Apache Migration Information
The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.
This page was exported from link:http://wiki.netbeans.org/DevFaqNewXMLFileType[http://wiki.netbeans.org/DevFaqNewXMLFileType] ,
that was last modified by NetBeans user Jtulach
on 2010-07-24T19:59:00Z.
*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.