ということで先日なんじゃこりゃ!?って言った.instanceという拡張子のものから。
結論からいうとインスタンス作れるらしいよ。
とりあえず今日は時間がないから早速プログラムをば。
昨日作ったメニューの下に1つメニューを追加!!
んで、okazuki.modules.menus.layer.xmlに対して下のような記述を追加した。
<folder name="okazuki"> <file name="okazuki-modules-menus-Person.instance" /> </folder>
fileタグのname属性がポイント!
パッケージ名の区切りをハイフン(-)にして最後に.instance
ちなみにokazuki.modules.menus.Personクラスはこんなん
package okazuki.modules.menus; public class Person { private String name; public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } }
なんのこた〜ないクラスです。
ってことで、このPersonのインスタンスをFileObjectから取得してみよう!!
ここで使うクラスは、まだ未知のDatasystems APIとNodes APIがいる。
Librariesに追加しておこう。
先ほど追加したmenuのクリックしたときの処理を下のようにする。
try { FileObject root = org.openide.filesystems.Repository.getDefault().getDefaultFileSystem().getRoot(); FileObject personFile = root.getFileObject("okazuki/okazuki-modules-menus-Person.instance"); System.out.println(personFile); DataObject dataObj = DataObject.find(personFile); InstanceCookie instanceCookie = dataObj.getLookup().lookup(InstanceCookie.class); if (instanceCookie != null) { Person p = (Person) instanceCookie.instanceCreate(); System.out.println(p); } } catch (Exception ex) { ErrorManager.getDefault().notify(ex); }
FileSystemを取得してルートからokazuki/okazuki-modules-menus-Person.instanceを取得している。
その後、DataObjectに変換してInstanceCookieをlookup!!!
InstanceCookieは、instanceCreateメソッドでインスタンスを作ってくれる。
これを実行すると下のようになった。
MultiFileObject@8ef455[okazuki/okazuki-modules-menus-Person.instance] okazuki.modules.menus.Person@127ff0d
期待通り!
今日は、寝るかぁ…zzz