如何注册netbeans自定义DataLoader

时间:2017-08-14 18:29:30

标签: java xml netbeans annotations netbeans-plugins

您好我已经创建了一个自定义MultiFileLoader,并且想知道在创建Netbeans插件时如何将其注册到DataLoaderPool

https://alvinalexander.com/java/jwarehouse/netbeans-src/java/src/org/netbeans/modules/java/JavaDataLoader.java.shtml
http://netbeans-org.1045718.n5.nabble.com/MultiFileLoader-being-called-multiple-times-for-same-file-td3026758.html

我不知道是否有办法使用@Annotation执行此操作,或者我是否必须将其添加到Netbeans Layers.xml

1 个答案:

答案 0 :(得分:0)

根据网络上的参考资料,没有注释。 正确的方法是:

  1. 使用MANIFEST / services进行注册(请参阅DataLoader FAQ
  2. 使用layer.xml(请参阅INTViewer plugin site
  3. 文档没有提供很多细节。 下面是更详细的解释:

    Manifest方法

    易于实施但效率低下。为Netbeans遇到的任何FileObject调用DataLoader方法。这意味着磁盘上的任何文件,也包括虚拟文件系统中的任何文件,如图层文件系统。

    如何

    1. 在项目的src目录中的目录META-INF / services中创建一个名为org.openide.loaders.DataLoader
    2. 的文件
    3. 在其中写入DataLoader的限定类名。
    4. Layer.xml方法

      图层方法要复杂得多,但功能也要强大得多。通过依赖mime类型,您可以将更多功能绑定到特定的DataObject,如自定义操作,编辑器......

      图层xml中所需的元素是:

      • 注册特定的MimeResolver :识别文件并为其指定Mime类型。
      • Loaders文件系统中的条目:指示Netbeans在遇到具有特定Mime类型的文件时使用自定义DataLoader。

      实施例

      • 假设我们使用mime类型text / brain + xml定义一个xml文件格式,其名称空间为 http://foo.bar.brain
      • 自定义数据加载器名为foo.bar.brain.BrainDataLoader
      • 自定义Data对象名为foo.bar.brain.BrainDataObject
      • 您的xml文件将以

        之类的标记开头
        <brain xmlns="http://foo.bar.brain" name="sample brain 1"/>
        

      foo.bar.brain.BrainDataObject文件将以以下注释开始:

          @Messages({
              "LBL_Brain_LOADER=Files of Brain"
          })
          @MIMEResolver.NamespaceRegistration(
              displayName = "#LBL_Brain_LOADER",
              mimeType = "text/brain+xml",
              elementNS = {"http://foo.bar.brain"}
          )
      

      您的layer.xml文件将如下所示(仅显示相关部分):

      <filesystem>        
          <folder name="Loaders">
              <folder name="text">
                  <folder name="brain+xml">
                      <folder name="Factories">
                          <file name="foo-bar-brain-BrainDataLoader.instance">
                          </file>
                      </folder>
                  </folder>
              </folder>
          </folder>        
      </filesystem>