FileSystemAPIその2 - かずきのBlog@Hatenaの続きです。
.shadowの拡張子のあるファイルのお話し。
本によるとシンボリックファイルと同じだよ!ってことみたい。
attrでoriginalFile属性を使ってオリジナルファイルが何かを示してあげるだけ。
サンプル!!
前回作ったPersonクラスの太郎さんを返すものに対して.shadowファイルを作ってみる。
layer.xmlはこんな感じ。
<folder name="okazuki"> <!-- 前回からあったやつ --> <file name="okazuki-modules-menus-Person.instance"/> <file name="myPerson.instance"> <attr name="instanceClass" stringvalue="okazuki.modules.menus.Person"/> <attr name="instanceCreate" methodvalue="okazuki.modules.menus.Person.createFromFileObject"/> <attr name="name" stringvalue="太郎"/> </file> <!-- 今回付けたしたやつ --> <file name="shadowPerson.shadow"> <attr name="originalFile" stringvalue="okazuki/myPerson.instance" /> </file> </folder>
んで、ShaodwSampleActionっていうアクションを付け足してメニューに出るようにした。
中のプログラムは、前回とほとんど同じ。
違うところといえば、myPerson.instanceではなくてshadowPerson.shadowを使ってるくらい。
あぁ。後DialogAPIを使ってみた!
とりあえず、使い方は〜〜Descriptorを作ってDialogDisplayer.getDefault().〜〜〜(descriptor)みたいな感じで使える。
package okazuki.modules.menus; import org.openide.DialogDisplayer; import org.openide.ErrorManager; import org.openide.NotifyDescriptor; import org.openide.cookies.InstanceCookie; import org.openide.filesystems.FileObject; import org.openide.filesystems.Repository; import org.openide.loaders.DataObject; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; public final class ShadowSampleAction extends CallableSystemAction { public void performAction() { try { FileObject root = Repository.getDefault().getDefaultFileSystem().getRoot(); FileObject fo = root.getFileObject("okazuki/shadowPerson.shadow"); DataObject dataObject = DataObject.find(fo); InstanceCookie ic = dataObject.getCookie(InstanceCookie.class); Person person = (Person) ic.instanceCreate(); NotifyDescriptor desc = new NotifyDescriptor.Message( "名前は" + person.getName() + "ですよ", NotifyDescriptor.INFORMATION_MESSAGE); DialogDisplayer.getDefault().notify(desc); } catch (Exception ex) { ErrorManager.getDefault().notify(ex); } } public String getName() { return NbBundle.getMessage(ShadowSampleAction.class, "CTL_ShadowSampleAction"); } protected void initialize() { super.initialize(); // see org.openide.util.actions.SystemAction.iconResource() javadoc for more details putValue("noIconInMenu", Boolean.TRUE); } public HelpCtx getHelpCtx() { return HelpCtx.DEFAULT_HELP; } protected boolean asynchronous() { return false; } }
実行すると、「私は太郎ですよ」と表示されたダイアログが出ます。