ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
ここでは、主に、
・メモリ上に、要素をもつ
・イベント発生時の動き
・画面の構成
ということで、現在、「イベント発生時の動き」をやっています。
その機能には、
・印刷
・保存
・読み込み
・カット(切り取り)
・ペースト(貼り込み)
・プロパティ(属性設定・変更)
・表示
・要素の選択
・(要素の)移動
で、機能は「読み込み」だったので、今日は書き出し=保存についてやります。
■仕様(書き出しファイル)
書き出しファイルは、きのうの読み込のファイルとおなじくここにかかれているtest.xmlのような形式です。
■ソースについては・・・
読み込み同様、ソースについては、すでに、ここでかいています。
また、そこで呼び出される、各要素の共通部分の.saveDataに関しては、
ここに書いてあります。
■処理手順
まず、保存イベントがあがると、
1.上書きのときは2へ
ファイルを選ぶ場合、書き出しファイルを決めます。
2.決まったら、ファイルをオープンします
→その処理が上記のソースtest.javaのmain中、
// 書き出し f = new File(outfname); FileOutputStream fo = new FileOutputStream(f); model.save(fo,top); fo.close(); |
の部分です
3.一気に書き出す場合もありますし、処理しながらの場合もあります
今回は、XML形式なので、DOMを作成して、それをOutputStreamに変換します
→この処理がModel.javaのsaveです。
XMLなので、Domを生成し、一番上の親のtopから
3-1の処理をさせています。
3-1.今回の例のように、親子関係がある場合は、
親のデータを書き出し、
→共通部分ItemのsaveDataで
createElementで自分のエレメントを作成するときに
自分の名前を設定して、
setAttributeで自分の属性値を設定します
3-2.子供のデータ部分を取り出し、子供のデータがあれば、
子供を生成して、子供に対し、3-1の処理を行います。
→共通部分ItemのsaveDataの「子供のセット」の部分です
そして、子供のデータを受け取ったら、
appendChildで子供を付けます。
3-3.子供がなければ終わりです。
4.Domが完成したら、DOMSourceを取得し、
OutputStreamのStreamResultも取得して、
Transformerで、DomからOutputStreamに変換します。
→Model.javaの「変換のための元生成」以降の処理ですが、
やっていることに関しては、ここの説明のほうが詳しいです。
ということで、書き出し(=保存)もできました(^^)v
(つーか、できたことにします)