OSDN Git Service

パッケージ移動
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd / binio / PmdExporterExt2.java
1 /*
2  * model exporter for pmd-file(Ext2)
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.pmd.binio;
9
10 import java.io.IOException;
11 import java.io.OutputStream;
12 import jp.sfjp.mikutoga.bin.export.IllegalTextExportException;
13 import jp.sfjp.mikutoga.pmd.IllegalPmdDataException;
14 import jp.sfjp.mikutoga.pmd.PmdLimits;
15 import jp.sfjp.mikutoga.pmd.model.PmdModel;
16 import jp.sfjp.mikutoga.pmd.model.ToonMap;
17
18 /**
19  * PMDファイルのエクスポーター(拡張2:任意のトゥーンファイル名対応)。
20  * <p>
21  * 物理演算対応以降のPMDファイルフォーマットを
22  * 使いたくない場合はこのエクスポーターを用いて出力せよ。
23  */
24 public class PmdExporterExt2 extends PmdExporterExt1{
25
26     /**
27      * コンストラクタ。
28      * @param stream 出力ストリーム
29      * @throws NullPointerException 引数がnull
30      */
31     public PmdExporterExt2(OutputStream stream)
32             throws NullPointerException{
33         super(stream);
34         return;
35     }
36
37     /**
38      * {@inheritDoc}
39      * @param model {@inheritDoc}
40      * @throws IOException {@inheritDoc}
41      * @throws IllegalPmdDataException {@inheritDoc}
42      */
43     @Override
44     public void dumpPmdModel(PmdModel model)
45             throws IOException, IllegalPmdDataException{
46         super.dumpPmdModel(model);
47
48         try{
49             dumpToonMap(model);
50         }catch(IllegalTextExportException e){
51             throw new IllegalPmdDataException(e);
52         }
53
54         return;
55     }
56
57     /**
58      * 独自トゥーンファイルテーブルを出力する。
59      * @param model モデルデータ
60      * @throws IOException 出力エラー
61      * @throws IllegalTextExportException トゥーンファイル名が長すぎる
62      */
63     private void dumpToonMap(PmdModel model)
64             throws IOException, IllegalTextExportException{
65         ToonMap map = model.getToonMap();
66
67         for(int idx = 0; idx < PmdLimits.TOON_FIXEDNUM; idx++){
68             String toonName = map.getIndexedToon(idx);
69             if(toonName == null) toonName = "";
70             dumpText(toonName, PmdLimits.MAXBYTES_TOONFILENAME);
71         }
72
73         flush();
74
75         return;
76     }
77
78 }